> ## Documentation Index
> Fetch the complete documentation index at: https://docs.p2p.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Staking Request

> Set up nodes for staking using P2P infrastructure.



## OpenAPI

````yaml POST /api/v1/eth/staking/direct/nodes-request/create
openapi: 3.0.0
info:
  title: Staking API
  description: API used for staking
  version: 1.0.0
  contact: {}
servers:
  - url: https://api.p2p.org/api
security:
  - bearer: []
tags:
  - name: Aptos
    description: Aptos staking operations (stake, unstake, withdraw, claim).
  - name: Celestia
    description: Celestia staking operations (stake, unstake, redelegate, claim).
  - name: Cosmos
    description: Cosmos Hub staking operations (stake, unstake, redelegate, claim).
  - name: EigenLayer
    description: EigenLayer restaking operations.
  - name: Ethereum
    description: Ethereum staking operations (direct, SSV, pooled).
  - name: Hyperliquid
    description: Hyperliquid staking operations.
  - name: Monad
    description: Monad staking operations (delegate, undelegate, withdraw).
  - name: P2P SSV
    description: P2P-managed SSV validator operations (deposit, claim, withdraw).
  - name: Polkadot
    description: Polkadot staking and nomination pool operations.
  - name: Polygon
    description: Polygon staking operations.
  - name: Pooled Staking
    description: Pooled staking vault operations (deposit, unstake, withdraw).
  - name: Sei
    description: Sei staking operations (stake, unstake, redelegate, claim).
  - name: Solana
    description: Solana staking operations (stake, split, merge, deactivate, withdraw).
  - name: SSV
    description: SSV network validator operations.
  - name: Story
    description: Story network staking operations.
  - name: Sui
    description: Sui staking operations.
  - name: TON
    description: TON staking operations (single nominator, whales pool).
  - name: TRON
    description: TRON staking operations (freeze, delegate, vote, withdraw).
  - name: Unified
    description: Unified multi-chain staking interface.
paths:
  /api/v1/eth/staking/direct/nodes-request/create:
    post:
      tags:
        - Ethereum
      summary: Create Staking Request
      description: Set up nodes for staking using P2P infrastructure.
      operationId: eth-nodes-request-create
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EthereumCreateNodesRequest'
      responses:
        '201':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/SuccessResponse'
                  - type: object
                    properties:
                      result:
                        type: boolean
                        example: true
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ExceptionResponse'
                  - type: object
                    properties:
                      error:
                        oneOf:
                          - $ref: '#/components/schemas/CommonValidationException'
                          - $ref: >-
                              #/components/schemas/EthereumNodesRequestIdAlreadyExistException
                          - $ref: >-
                              #/components/schemas/EthereumCannotGetPodAddressException
                          - $ref: >-
                              #/components/schemas/EthereumWrongValidatorSizeException
                          - $ref: >-
                              #/components/schemas/EthereumValidatorSizeHasToBeDefaultException
              examples:
                ValidationException:
                  value:
                    error:
                      code: 100101
                      message: >-
                        The data provided is not valid. Please check the request
                        parameters and try again.
                      name: ValidationException
                      type: client
                    result: null
                NodesRequestIdAlreadyExistException:
                  value:
                    error:
                      code: 103129
                      message: >-
                        The nodes set-up request could not be performed because
                        the node ID specified already exists.
                      name: NodesRequestIdAlreadyExistException
                      type: client
                    result: null
                CannotGetPodAddressException:
                  value:
                    error:
                      code: 103136
                      message: >-
                        The transaction could not be created because the
                        withdrawal address 'undefined' provided is invalid. For
                        the restaking flow, the withdrawal address corresponds
                        to the EigenPod address set by default or explicitly.
                        Please check the request parameters.
                      name: CannotGetPodAddressException
                      type: client
                    result: null
                WrongValidatorSizeException:
                  value:
                    error:
                      code: 103150
                      message: >-
                        The transaction could not be created because the
                        effective balance amount of validators provided is
                        invalid. Please check the request parameters.
                      name: WrongValidatorSizeException
                      type: client
                    result: null
                ValidatorSizeHasToBeDefaultException:
                  value:
                    error:
                      code: 103149
                      message: >-
                        The effective balance amount of validators provided has
                        to be equal to 32 ETH. Please check the request
                        parameters.
                      name: ValidatorSizeHasToBeDefaultException
                      type: client
                    result: null
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ExceptionResponse'
                  - type: object
                    properties:
                      error:
                        oneOf:
                          - $ref: '#/components/schemas/AuthNoTokenException'
                          - $ref: '#/components/schemas/AuthWrongTokenException'
              examples:
                NoTokenException:
                  value:
                    error:
                      code: 101111
                      message: >-
                        No Bearer token has been provided. To obtain an
                        authentication token, follow the instructions at
                        https://docs.p2p.org/docs/authentication.
                      name: NoTokenException
                      type: authentication
                    result: null
                WrongTokenException:
                  value:
                    error:
                      code: 101109
                      message: >-
                        An invalid Bearer token has been provided. Please
                        specify the correct authentication token.
                      name: WrongTokenException
                      type: authentication
                    result: null
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/ExceptionResponse'
                  - type: object
                    properties:
                      error:
                        oneOf:
                          - $ref: >-
                              #/components/schemas/EthereumNodesRequestCreateException
                          - $ref: '#/components/schemas/AuthTokenGuardException'
              examples:
                NodesRequestCreateException:
                  value:
                    error:
                      code: 103124
                      message: >-
                        The nodes set-up request could not be created because
                        the internal server error occurred.
                      name: NodesRequestCreateException
                      type: server
                    result: null
                TokenGuardException:
                  value:
                    error:
                      code: 101110
                      message: >-
                        The request could not be performed because the server
                        authorization error occurred.
                      name: TokenGuardException
                      type: server
                    result: null
      security:
        - bearer: []
components:
  schemas:
    EthereumCreateNodesRequest:
      type: object
      properties:
        id:
          type: string
          format: uuid
          example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
          description: >-
            Arbitrary UUID. You can later use that UUID to check the status of
            the set-up operation.
        type:
          type: string
          enum:
            - REGULAR
            - RESTAKING
            - MANAGED_SSV
          description: Type of the node request.
          example: REGULAR
        validatorsCount:
          type: number
          format: double
          description: 'Number of validators: each validator stakes from 32 to 2048 ETH.'
          default: 1
          minimum: 1
          maximum: 3125
          example: 1
        amountPerValidator:
          type: string
          description: Amount of tokens in Gwei to stake per validator.
          example: '32000000000'
        withdrawalCredentialsType:
          type: string
          description: Withdrawal credentials type.
          example: '0x02'
          enum:
            - '0x01'
            - '0x02'
        withdrawalAddress:
          type: string
          description: Withdrawal address for the validators.
          example: '0x338EF19fA2eC0fc4d1277B1307a613fA1FBbc0cb'
          pattern: ^0x[a-fA-F0-9]{40}$
        eigenPodOwnerAddress:
          type: string
          description: EigenPod owner address.
          example: '0x338EF19fA2eC0fc4d1277B1307a613fA1FBbc0cb'
          pattern: ^0x[a-fA-F0-9]{40}$
        controllerAddress:
          type: string
          description: Controller address for the validators.
          example: '0x338EF19fA2eC0fc4d1277B1307a613fA1FBbc0cb'
          pattern: ^0x[a-fA-F0-9]{40}$
        feeRecipientAddress:
          type: string
          description: Fee recipient address.
          example: '0x53da3c92fCCEb0CFE1764f65DDfF1564A2b15585'
          pattern: ^0x[a-fA-F0-9]{40}$
        nodesOptions:
          description: Configuration options for the requested validator nodes.
          allOf:
            - $ref: '#/components/schemas/EthereumNodesOptionsRequest'
      required:
        - id
        - validatorsCount
        - nodesOptions
    SuccessResponse:
      type: object
      properties:
        error:
          type: object
          nullable: true
          default: null
          description: Error object. Always null on successful responses.
        result:
          type: object
          description: Response payload containing the requested data.
      description: Standard API success response envelope wrapping the result payload.
      required:
        - error
        - result
    ExceptionResponse:
      type: object
      properties:
        error:
          type: object
          description: Error object containing exception details. Null on success.
        result:
          type: object
          nullable: true
          default: null
          description: Result payload. Always null on error responses.
        requestId:
          type: string
          description: >-
            Identifier of the request (the `x-request-id` header). Quote this
            value to correlate the response with server logs.
          example: 90c16e9e-6e99-4651-a033-60290356df2f
        timestamp:
          type: string
          format: date-time
          description: ISO 8601 timestamp of when the error response was generated.
          example: '2026-05-20T22:29:03.126Z'
      description: Standard API error response envelope wrapping the exception details.
      required:
        - error
        - result
        - timestamp
    CommonValidationException:
      type: object
      properties:
        type:
          type: string
          default: client
          example: client
          description: Exception category.
        code:
          type: integer
          format: int32
          default: 100101
          example: 100101
          description: Numeric error code identifying the exception type.
        message:
          type: string
          default: >-
            The data provided is not valid. Please check the request parameters
            and try again.
          example: >-
            The data provided is not valid. Please check the request parameters
            and try again.
          description: Human-readable error message describing what went wrong.
        errors:
          description: Validation error details when applicable.
          type: array
          items:
            $ref: '#/components/schemas/ValidationErrorResponse'
        name:
          type: string
          default: ValidationException
          example: ValidationException
          description: Exception class name for runtime error identification.
      required:
        - type
        - code
        - message
        - errors
        - name
    EthereumNodesRequestIdAlreadyExistException:
      type: object
      properties:
        type:
          type: string
          default: client
          example: client
          description: Exception category.
        code:
          type: integer
          format: int32
          default: 103129
          example: 103129
          description: Numeric error code identifying the exception type.
        message:
          type: string
          default: >-
            The nodes set-up request could not be performed because the node ID
            specified already exists.
          example: >-
            The nodes set-up request could not be performed because the node ID
            specified already exists.
          description: Human-readable error message describing what went wrong.
        name:
          type: string
          default: NodesRequestIdAlreadyExistException
          example: NodesRequestIdAlreadyExistException
          description: Exception class name for runtime error identification.
      required:
        - type
        - code
        - message
        - name
    EthereumCannotGetPodAddressException:
      type: object
      properties:
        type:
          type: string
          default: client
          example: client
          description: Exception category.
        code:
          type: integer
          format: int32
          default: 103136
          example: 103136
          description: Numeric error code identifying the exception type.
        message:
          type: string
          default: >-
            The transaction could not be created because the withdrawal address
            '%s' provided is invalid. For the restaking flow, the withdrawal
            address corresponds to the EigenPod address set by default or
            explicitly. Please check the request parameters.
          example: >-
            The transaction could not be created because the withdrawal address
            '%s' provided is invalid. For the restaking flow, the withdrawal
            address corresponds to the EigenPod address set by default or
            explicitly. Please check the request parameters.
          description: Human-readable error message describing what went wrong.
        name:
          type: string
          default: CannotGetPodAddressException
          example: CannotGetPodAddressException
          description: Exception class name for runtime error identification.
      required:
        - type
        - code
        - message
        - name
    EthereumWrongValidatorSizeException:
      type: object
      properties:
        type:
          type: string
          default: client
          example: client
          description: Exception category.
        code:
          type: integer
          format: int32
          default: 103150
          example: 103150
          description: Numeric error code identifying the exception type.
        message:
          type: string
          default: >-
            The transaction could not be created because the effective balance
            amount of validators provided is invalid. Please check the request
            parameters.
          example: >-
            The transaction could not be created because the effective balance
            amount of validators provided is invalid. Please check the request
            parameters.
          description: Human-readable error message describing what went wrong.
        name:
          type: string
          default: WrongValidatorSizeException
          example: WrongValidatorSizeException
          description: Exception class name for runtime error identification.
      required:
        - type
        - code
        - message
        - name
    EthereumValidatorSizeHasToBeDefaultException:
      type: object
      properties:
        type:
          type: string
          default: client
          example: client
          description: Exception category.
        code:
          type: integer
          format: int32
          default: 103149
          example: 103149
          description: Numeric error code identifying the exception type.
        message:
          type: string
          default: >-
            The effective balance amount of validators provided has to be equal
            to 32 ETH. Please check the request parameters.
          example: >-
            The effective balance amount of validators provided has to be equal
            to 32 ETH. Please check the request parameters.
          description: Human-readable error message describing what went wrong.
        name:
          type: string
          default: ValidatorSizeHasToBeDefaultException
          example: ValidatorSizeHasToBeDefaultException
          description: Exception class name for runtime error identification.
      required:
        - type
        - code
        - message
        - name
    AuthNoTokenException:
      type: object
      properties:
        type:
          type: string
          default: authentication
          example: authentication
          description: Exception category.
        code:
          type: integer
          format: int32
          default: 101111
          example: 101111
          description: Numeric error code identifying the exception type.
        message:
          type: string
          default: >-
            No Bearer token has been provided. To obtain an authentication
            token, follow the instructions at
            https://docs.p2p.org/docs/authentication.
          example: >-
            No Bearer token has been provided. To obtain an authentication
            token, follow the instructions at
            https://docs.p2p.org/docs/authentication.
          description: Human-readable error message describing what went wrong.
        name:
          type: string
          default: NoTokenException
          example: NoTokenException
          description: Exception class name for runtime error identification.
      required:
        - type
        - code
        - message
        - name
    AuthWrongTokenException:
      type: object
      properties:
        type:
          type: string
          default: authentication
          example: authentication
          description: Exception category.
        code:
          type: integer
          format: int32
          default: 101109
          example: 101109
          description: Numeric error code identifying the exception type.
        message:
          type: string
          default: >-
            An invalid Bearer token has been provided. Please specify the
            correct authentication token.
          example: >-
            An invalid Bearer token has been provided. Please specify the
            correct authentication token.
          description: Human-readable error message describing what went wrong.
        name:
          type: string
          default: WrongTokenException
          example: WrongTokenException
          description: Exception class name for runtime error identification.
      required:
        - type
        - code
        - message
        - name
    EthereumNodesRequestCreateException:
      type: object
      properties:
        type:
          type: string
          default: server
          example: server
          description: Exception category.
        code:
          type: integer
          format: int32
          default: 103124
          example: 103124
          description: Numeric error code identifying the exception type.
        message:
          type: string
          default: >-
            The nodes set-up request could not be created because the internal
            server error occurred.
          example: >-
            The nodes set-up request could not be created because the internal
            server error occurred.
          description: Human-readable error message describing what went wrong.
        name:
          type: string
          default: NodesRequestCreateException
          example: NodesRequestCreateException
          description: Exception class name for runtime error identification.
      required:
        - type
        - code
        - message
        - name
    AuthTokenGuardException:
      type: object
      properties:
        type:
          type: string
          default: server
          example: server
          description: Exception category.
        code:
          type: integer
          format: int32
          default: 101110
          example: 101110
          description: Numeric error code identifying the exception type.
        message:
          type: string
          default: >-
            The request could not be performed because the server authorization
            error occurred.
          example: >-
            The request could not be performed because the server authorization
            error occurred.
          description: Human-readable error message describing what went wrong.
        name:
          type: string
          default: TokenGuardException
          example: TokenGuardException
          description: Exception class name for runtime error identification.
      required:
        - type
        - code
        - message
        - name
    EthereumNodesOptionsRequest:
      type: object
      properties:
        location:
          type: string
          enum:
            - any
          example: any
          description: Nodes location. Currently, only `any` is supported.
          default: any
        relaysSet:
          type: string
          description: MEV Relay selection.
          example: null
      required:
        - location
    ValidationErrorResponse:
      type: object
      properties:
        property:
          type: string
          description: Name of the property that failed validation.
        constraints:
          type: object
          additionalProperties:
            type: string
          description: Validation constraint details describing what was expected.
      required:
        - property
        - constraints
  responses:
    TooManyRequests:
      description: >-
        Too Many Requests — the client exceeded its rate limit. The response
        advertises when to retry and the active quota via headers.
      headers:
        Retry-After:
          description: Number of seconds to wait before retrying the request.
          schema:
            type: integer
            example: 60
        RateLimit-Limit:
          description: >-
            The request quota (maximum number of requests) for the most
            restrictive applicable window.
          schema:
            type: integer
            example: 120
        RateLimit-Reset:
          description: >-
            Number of seconds until the rate-limit window resets and requests
            are accepted again.
          schema:
            type: integer
            example: 60
        RateLimit-Policy:
          description: >-
            The active rate-limit policy as `<limit>;w=<window-seconds>`,
            comma-separated when multiple windows apply.
          schema:
            type: string
            example: 120;w=60
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: object
                properties:
                  code:
                    type: integer
                  name:
                    type: string
                    example: ThrottlerException
                  message:
                    type: string
                    example: ThrottlerException
                  errors:
                    type: array
                    nullable: true
                    items:
                      type: object
              result:
                type: object
                nullable: true
                example: null
              requestId:
                type: string
                description: >-
                  Identifier of the request (the `x-request-id` header). Quote
                  this value to correlate the response with server logs.
                example: 90c16e9e-6e99-4651-a033-60290356df2f
              timestamp:
                type: string
                format: date-time
                description: ISO 8601 timestamp of when the error response was generated.
                example: '2026-05-20T22:29:03.126Z'
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: JWT
      type: http

````

## Related topics

- [Create Staking Request](/reference/solana-staking-stake.md)
