# Home

Secure and Scalable Staking Solutions Streamlined staking services enabled through a unified API with customizable parameters, client diversity, and geographic distribution.

Want to start investing with us, please go to&#x20;

{% embed url="<https://www.galaxy.com/staking/>" %}


# Authentication and Authorization

The following section describes the mechanism enforced for authentication and authorization for REST API invocations, enabling clients to securely connect with the Galaxy staking API.<br>


# API Key

The API key will be generated when the client is registered with the Galaxy platform and securely communicated with the client. This should be specified with the X-API-KEY HTTP header when invoking endpoints.<br>


# Authorization Token

The steps for deriving the JWT authorization token are given below,\ <br>

* The client must generate an RSA4096 key pair and share the public key with the Galaxy.
* Create a JSON object with the following parameters,
* uri:- request URI
* nonce:- unique request ID
* iat:- request generated timestamp in UTC
* exp:- expiration timestamp of request in UTC (must be less than iat+ 30sec)
* sub:- API key shared by Galaxy
* bodyHash:- SHA256 hash of the request body if applicable.
* Sign the above JSON object with the RSA256 algorithm using the RSA4096 private key generated in the first step to create the JWT token.
* JWT tokens can be created by directly encoding and assembling the token's components (header, payload, and signature) or by using third-party libraries that automate the process, including encoding. Both approaches produce a Base64 encoded token.
* The generated JWT token should be sent as the bearer token via the Authorization HTTP header.

When clients invoke the endpoints, the Lambda Authorizer attached to the API Gateway verifies the authorization token and responds with an HTTP 403 if the verification fails. The following checks will be performed, and the respective error message will be returned if the check fails.\ <br>

* Missing Token: An authorization token was not provided.

  ```
  {
      "message": "The authorization token was not provided"
  }
  ```
* Malformed Token: An authorization token with an invalid format was provided.

  ```
  {
      "message": "The authorization token was malformed"
  }
  ```
* Expired Token: The expired authorization token is presented in the header.

  ```
  {
      "message": "The authorization token has expired"
  }
  ```
* Invalid Signature Presented: The signature in the authorization token was invalid.

  ```
  {
      "message": "The signature in the authorization token was invalid"
  }
  ```
* Exceeded Maximum Duration: Expiry timestamp in the authorization token is greater than 30 seconds from issued at timestamp.

  ```
  {
      "message": "The expiration timestamp of the authorization token in UTC must be less than 30 seconds from the issued-at time"
  }
  ```
* Client’s Public Key Not Found: The public key of the client was not found.

  ```
  {
      "message": "The public key of the client was not found"
  }
  ```
* Token Issued for Future Timestamp: The authorization token was issued for a future timestamp.

  ```
  {
      "message": "The authorization token was issued for future timestamp"
  }
  ```
* Invalid API Key: Invalid API key was provided.

  ```
  {
      "message": "Invalid API key was provided"
  }
  ```
* Internal Verification Error: An error occurred when verifying the authorization token.

  ```
  {
      "message": "Unable to verify the authorization token due to an internal processing error"
  }
  ```
* Missing Parameters: The authorization token must contain uri, nonce, iat, exp, and sub.

  ```
  {
      "message": "Missing parameters in the authorization token, must contain uri, nonce, iat, exp and sub"
  }
  ```
* Invalid Request URI: The API path did not match the request URI specified in the authorization token.

  ```
  {
      "message": "API path has not matched with the request URI specified in the Authorization token"
  }
  ```
* Payload Hash Mismatch: The payload hash encoded in the authorization token did not match the API payload. This issue applies to POST/PUT APIs only.

  ```
  {
      "message": "Payload hash in the authorization token has not matched with the API payload"
  }
  ```


# Client Request Identifier

The "client\_req\_id" parameter in the request payload serves as a unique identifier for each request. In the event that the client's connection with the Staking API Gateway is interrupted, the client is expected to capture the disconnection event and re-invoke the endpoint with the same payload. Upon receiving such a request, the platform checks for the presence of the client\_req\_id and takes the following actions:

* **Ongoing Processing**: If the client\_req\_id exists and is associated with an active client session, but the request is still being processed, the response will be returned once processing is complete. Any new request with the same client\_req\_id will receive an HTTP 400 response with the message: "Request is currently being processed."
* **Processing Complete, Response Not Dispatched**: If the client\_req\_id exists and the request was successfully processed, but the response was not dispatched (possibly due to a dropped client session), the new request will receive the undispatched response with an HTTP 200 status.
* **Request Already Served**: If the client\_req\_id exists but the response was already returned, the client will receive an HTTP 400 response with the message: "Duplicate client request; the request has already been served."
* **New Request**: If the client\_req\_id does not exist in the platform, the request will be treated as new, processed, and responded accordingly.


# Validator Statuses

| Status             | Description                                                                                                                                               |
| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| STAKING\_INITIATED | A staking request has been successfully received by the platform.                                                                                         |
| REJECTED           | The staking request has been rejected by the Staking Engine. All validators created as part of that staking request will receive this status.             |
| PENDING\_DEPOSIT   | Once the staking request is successfully processed and validators are commissioned, clients are expected to deposit their assets to the relevant address. |
| DEPOSITED          | The validator has entered the Pending Deposit Queue and has met the minimum balance requirement for activation (32 ETH).                                  |
| DEPOSIT\_FAILED    | The validator has not been funded within the pre-defined time period.                                                                                     |
| PENDING\_QUEUED    | The validator has been successfully funded and added to the activation queue.                                                                             |
| ACTIVE             | The validator is active and earning rewards.                                                                                                              |
| SLASHING           | The validator is online but has been identified as malicious and incurred penalties, and scheduled to exit.                                               |
| SLASHED            | The validator has been kicked out of the network after reaching the exit epoch due to slashing.                                                           |
| EXIT\_INITIATED    | An exit request has been successfully received by the platform.                                                                                           |
| EXITING            | The validator is online and currently exiting the network.                                                                                                |
| EXITED             | The validator has been removed from the network.                                                                                                          |
| WITHDRAWABLE       | The validator has reached the withdrawable epoch after a successful exit.                                                                                 |
| WITHDRAWN          | The funds have been returned to the withdrawal address provided for the validator.                                                                        |


# Ethereum

## Provision Validators

> The staking endpoint must be invoked by the client to facilitate the staking action. When a request to provision more than 100 validators is received, it will be split into batches, each containing a maximum of 100 validators, and then processed. A total of 1,000 validators can be provisioned per request, across 10 batches.&#x20;

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"StakingRequest":{"title":"Staking Request","type":"object","required":["client_req_id","network","validator_count","withdrawal_address"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the staking request generated by the client."},"network":{"type":"string","description":"The network on which validators should be created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"withdrawal_credentials_type":{"enum":["0x01","0x02"],"description":"The withdrawal credential type of the validator(s) to be created. Supported values are;\r\n- 0x01 (Default)\r\n- 0x02","default":"0x01"},"amounts_unit":{"description":"The unit in which the staking amount is specified for withdrawal_credential_type = 0x02 validators in the amounts field. Supported values are:\r\n- ETH\r\n- GWEI\r\n\r\nConditionally required if the withdrawal_credential_type = 0x02.","enum":["ETH","GWEI"]},"amounts":{"type":"array","description":"The Ethereum amounts to be staked, specified in either ETH or GWEI. This is required if the withdrawal credentials type is 0x02. \r\n\r\n- When specified in ETH, up to 9 decimal places are supported.\r\n- When specified in GWEI, only whole numbers are supported.\r\n- Any additional decimal places will be ignored.","items":{"type":"integer","format":"int32"}},"validator_count":{"type":"integer","description":"The number of validators required. A maximum of 1000 validators are supported","format":"int32"},"withdrawal_address":{"type":"string","description":"The ETH account (wallet) used for the withdrawal credentials of the validators. This is the address that will receive consensus rewards and unstaked ETH after exiting."},"fee_recipient_address":{"type":"string","description":"The ETH account (wallet) that will receive the execution layer rewards. If not provided, this will be defaulted to the withdrawal address."},"region":{"type":"string","description":"The geographic region where the validator will be created. Supported values are;\r\n- US\r\n- EU (Default)\r\n- KR","default":"EU","enum":["US","EU","KR"]},"account":{"type":"string","description":"The account name registered on the platform that is associated with the client's customer. If not provided, requests will be assigned to a default account.\n"}}},"StakingResponse":{"title":"Staking Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the staking request addressed by this response message."},"staking_ref_id":{"type":"string","description":"A unique reference ID generated by the staking infrastructure for the staking request."},"network":{"type":"string","description":"The network on which validators should be created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"withdrawal_credentials_type":{"enum":["0x01","0x02"],"description":"The withdrawal credential type of the validator(s) that will be created. Applicable values are;\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"The specified address to which funds will be withdrawn, as mentioned in the staking request."},"fee_recipient_address":{"type":"string","description":"The fee recipient address that receives Execution Layer fees, as mentioned in the staking request."},"region":{"type":"string","description":"The geographic region where the validator will be created. Supported values are;\r\n- US\r\n- EU\r\n- KR","enum":["US","EU","KR"]},"provisioned_at":{"type":"string","description":"The date and time when the validator was provisioned by the staking infrastructure."},"data":{"type":"array","description":"A block that contains validator batches. Each batch includes details of 100 validators and the associated funding transaction.","items":{"$ref":"#/components/schemas/BatchData"}}}},"BatchData":{"title":"Staking Response Batch","type":"object","properties":{"batch_id":{"type":"integer","description":"Identifier of the validator batch.","format":"int32","enum":[1,2,3,4,5,6,7,8,9,10]},"deposit_data":{"type":"array","description":"An array of validator details in this batch.","items":{"$ref":"#/components/schemas/DepositData"}},"deposit_transaction":{"$ref":"#/components/schemas/DepositTransaction"}},"description":"A block that contains validator batches. Each batch includes details of 250 validators and the associated funding transaction."},"DepositData":{"title":"Staking Response Batch Deposit Data","type":"object","description":"An array of validator details in this batch.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"amount":{"type":"number","description":"The amount of ETH in GWEI required to be deposited.","format":"double"},"withdrawal_credentials":{"type":"string","description":"Withdrawal credentials for the validator funds to be withdrawn upon exit."},"signature":{"type":"string","description":"A “proof of possession” which signs over pubkey, withdrawal_credentials, and amount using the validator private key."},"deposit_data_root":{"type":"string","description":"Merkle root hash of the deposit data."},"deposit_message_root":{"type":"string","description":"Merkle root hash of the deposit message."},"fork_version":{"type":"string","description":"The genesis fork version."},"deposit_cli_version":{"type":"string","description":"Staking deposit cli version."}}},"DepositTransaction":{"title":"Staking Response Batch Deposit Transaction","type":"object","description":"The JSON object that contains the funding transaction details of all validators belonging to this batch.","properties":{"deposit_amount_wei":{"type":"string","description":"The total amount of ETH to be staked for the batch in WEI."},"deposit_address":{"type":"string","description":"Batch deposit contract address."},"contract_call_data":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract. "}}},"StakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/ErrorMessage"}}}},"ErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerStakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}},"description":""},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}}}},"paths":{"/v1/ethereum/validators":{"post":{"tags":["Ethereum"],"summary":"Provision Validators","description":"The staking endpoint must be invoked by the client to facilitate the staking action. When a request to provision more than 100 validators is received, it will be split into batches, each containing a maximum of 100 validators, and then processed. A total of 1,000 validators can be provisioned per request, across 10 batches. ","operationId":"validators","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakingRequest"}}},"required":true},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakingResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakingErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerStakingErrorListResponse"}}}}}}}}}
```

## Exit Validators

> The exit endpoint enables clients to initiate validator withdrawals by broadcasting voluntary exit messages to the beacon chain. It can be enabled in three ways.&#x20;> \
> \- \*\*Validator Public Keys\*\*: Exit from the network using the specified validator public addresses.> \
> \- \*\*Validator Indexes\*\*: Exit from the network using the specified validator indexes.&#x20;> \
> \- \*\*Withdrawal Address with Validator Count\*\*: Exit from the network using the specified withdrawal address and validator count. Only type 0x01 validators can be exited using this method.> \\
>
> \
> Each request type can handle exiting only up to 250 validators at once.&#x20;

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ValidatorExitRequest":{"title":"Validator Exit Request","type":"object","required":["client_req_id","network","type"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier generated and sent by the client for the exit request. Refer Client Request Identifier for further details."},"network":{"type":"string","description":"The network on which validators were created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"type":{"type":"integer","description":"Indicates the type of attribute used to identify the validators to exit. The possible values are,\n- 1 (pubkey)\n- 2 (validator_index)\n- 3 (withdrawal_address)","format":"int32","enum":[1,2,3]},"pubkeys":{"type":"array","items":{"type":"string","description":"List of validator public keys to be exited. \nThis is required if the exit type is 1. \nA maximum of 250 public keys can be specified."}},"validator_indexes":{"type":"array","items":{"type":"integer","description":"The list of validator indexes to be exited. \nRequired if exit type is 2. \nA maximum of 250 validator indexes can be specified.","format":"int32"}},"withdrawal_address":{"type":"string","description":"The withdrawal address of the validators that should be exited.\nRequired if exit type is 3"},"validator_count":{"type":"integer","description":"Required if exit type is 3. \nThe Max count should be 250.","format":"int32"}}},"ValidatorExitResponse":{"title":"Validator Exit Response","type":"object","properties":{"client_req_id":{"type":"string","description":"Unique identifier specified in the request."},"network":{"type":"string","description":"Network specified in the request. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"data":{"type":"array","description":"An array which contains the details of the validators to be exited.","items":{"$ref":"#/components/schemas/ValidatorExitData"}}}},"ValidatorExitData":{"title":"Validator Exit Data","type":"object","description":"An array which contains the details of the validators to be exited.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","description":"Index of the corresponding validator.","format":"int32"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator. "},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]}}},"StakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/ErrorMessage"}}}},"ErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerStakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}},"description":""},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}}}},"paths":{"/v1/ethereum/validators/exit":{"post":{"tags":["Ethereum"],"summary":"Exit Validators","description":"The exit endpoint enables clients to initiate validator withdrawals by broadcasting voluntary exit messages to the beacon chain. It can be enabled in three ways. \r\n- **Validator Public Keys**: Exit from the network using the specified validator public addresses.\r\n- **Validator Indexes**: Exit from the network using the specified validator indexes. \r\n- **Withdrawal Address with Validator Count**: Exit from the network using the specified withdrawal address and validator count. Only type 0x01 validators can be exited using this method.\r\n\r\nEach request type can handle exiting only up to 250 validators at once. ","operationId":"exit","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorExitRequest"}}},"required":true},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorExitResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakingErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerStakingErrorListResponse"}}}}}}}}}
```

## Derive Pre-Signed Exit Message

> The pre-signed exit endpoint enables clients to request pre-signed exit messages for validators. When clients decide to exit their validators, the pre-signed exit message can be independently broadcasted to the consensus node. The validators must be in an active state for at-least 256 epochs in order to derive the encrypted pre-signed exit message.\<br/>\<br/> Before calling this endpoint, the client must create an RSA4096 key pair.This is a separate key pair from the one used for JWT signature generation.The client needs to share the public key from this new key pair with the platform. The platform will use this public key to encrypt the pre-signed exit message with the RSA\_OAEP\_SHA\_256 algorithm.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ValidatorExitRequest":{"title":"Validator Exit Request","type":"object","required":["client_req_id","network","type"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier generated and sent by the client for the exit request. Refer Client Request Identifier for further details."},"network":{"type":"string","description":"The network on which validators were created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"type":{"type":"integer","description":"Indicates the type of attribute used to identify the validators to exit. The possible values are,\n- 1 (pubkey)\n- 2 (validator_index)\n- 3 (withdrawal_address)","format":"int32","enum":[1,2,3]},"pubkeys":{"type":"array","items":{"type":"string","description":"List of validator public keys to be exited. \nThis is required if the exit type is 1. \nA maximum of 250 public keys can be specified."}},"validator_indexes":{"type":"array","items":{"type":"integer","description":"The list of validator indexes to be exited. \nRequired if exit type is 2. \nA maximum of 250 validator indexes can be specified.","format":"int32"}},"withdrawal_address":{"type":"string","description":"The withdrawal address of the validators that should be exited.\nRequired if exit type is 3"},"validator_count":{"type":"integer","description":"Required if exit type is 3. \nThe Max count should be 250.","format":"int32"}}},"ValidatorPreSignedExitResponse":{"title":"Validator Pre-signed Exit Response","type":"object","properties":{"network":{"type":"string","description":"Network specified in the request.","enum":["mainnet","hoodi"]},"data":{"type":"array","description":"An array which contains the details of the validators to be exited.","items":{"$ref":"#/components/schemas/PreSignedExitDBO"}}}},"PreSignedExitDBO":{"title":"Validator Pre-signed Exit Data","type":"object","description":"An array which contains the details of the validators to be exited.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","description":"Index of the corresponding validator.","format":"int32"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator."},"encrypted_exit_message":{"type":"string","description":"The encrypted pre-signed exit message.The client can decrypt this message using their private key."},"fork_version":{"type":"string","description":"The genesis fork version used when generating the pre-signed exit message."},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]}}},"StakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/ErrorMessage"}}}},"ErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerStakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}},"description":""},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}}}},"paths":{"/v1/ethereum/validators/exit/pre-signed":{"post":{"tags":["Ethereum"],"summary":"Derive Pre-Signed Exit Message","description":"The pre-signed exit endpoint enables clients to request pre-signed exit messages for validators. When clients decide to exit their validators, the pre-signed exit message can be independently broadcasted to the consensus node. The validators must be in an active state for at-least 256 epochs in order to derive the encrypted pre-signed exit message.<br/><br/> Before calling this endpoint, the client must create an RSA4096 key pair.This is a separate key pair from the one used for JWT signature generation.The client needs to share the public key from this new key pair with the platform. The platform will use this public key to encrypt the pre-signed exit message with the RSA_OAEP_SHA_256 algorithm.","operationId":"pre-signed","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorExitRequest"}}},"required":true},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorPreSignedExitResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakingErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerStakingErrorListResponse"}}}}}}}}}
```

## Get All Validators or by Staking Reference ID

> The get all validators endpoint returns the details of the validators provisioned for the given client for the specified network in a paginated manner. This endpoint can also be used to return the details of the validators belonging to the given client for the specified network and staking reference ID. All timestamp fields in the response are provided in UTC timezone.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ValidatorsInfoResponse":{"title":"Validator Info Response","type":"object","properties":{"network":{"type":"string","description":"Network specified in the request.","enum":["mainnet","hoodi"]},"page":{"type":"integer","description":"The current page number sent in the request.","format":"int32"},"total":{"type":"integer","description":"Total number of validators provisioned for the given client and the network.","format":"int32"},"data":{"type":"array","description":"An array that contains the details about validators.","items":{"$ref":"#/components/schemas/ValidatorInfoData"}}}},"ValidatorInfoData":{"title":"Validator Info Data","type":"object","description":"An array that contains the details about validators.","properties":{"last_monitored_epoch":{"type":"integer","description":"The most recent epoch successfully monitored for the validator, regardless of whether a validator record was persisted. Not applicable from staking initiation until the validator becomes active unless an epoch record exists for the last monitored epoch. Epoch records are created only when there is a balance, status, or reward update for that epoch.","format":"int32"},"epoch":{"type":"integer","description":"The specific blockchain epoch to which the returned validator details correspond.","format":"int32"},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"pubkey":{"type":"string","description":"Public key of the validator."},"region":{"type":"string","description":"The geographic region where the validator will be created.","enum":["US","EU","KR"]},"validator_index":{"type":"integer","description":"Validator index.","format":"int32"},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator. "},"fee_recipient_address":{"type":"string","description":"The fee recipient address belongs to the validator."},"estimated_activation_at":{"type":"string","description":"Estimate of when the validator will become active and start earning rewards. This will be populated since the validator is transitioned to DEPOSITED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"estimated_exit_at":{"type":"string","description":"Estimate of when the validator will exit and stop earning rewards. This will be populated since the validator is transitioned to EXIT_INITIATED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"estimated_withdrawal_at":{"type":"string","description":"Estimate of when the validator’s principal will become withdrawable. This will be populated since the validator is transitioned to EXITED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"balance_in_wei":{"type":"string","description":"Actual balance of the validator in WEI."},"balance_in_eth":{"type":"number","description":"Actual balance of the validator in ETH.","format":"double"},"status_history":{"type":"array","items":{"$ref":"#/components/schemas/StatusHistoryData"}},"voluntary_exit":{"$ref":"#/components/schemas/VoluntaryExitData"},"presigned_exit":{"$ref":"#/components/schemas/PresignedExitData"},"staking_request_info":{"$ref":"#/components/schemas/StakingRequestInfo"}}},"StatusHistoryData":{"title":"Status History Data","type":"object","properties":{"status":{"type":"string","description":"Status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"transitioned_at":{"type":"string","description":"The date and time the validator transitioned into the given status. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"An array that contains the state transition of the validator. "},"VoluntaryExitData":{"title":"Voluntary Exit Data","type":"object","properties":{"request_id":{"type":"string","description":"Unique request id sent by the client when requesting the voluntary exit."},"requested_at":{"type":"string","description":"The date and time the exit request was received. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"submitted_at":{"type":"string","description":"The date and time the validator’s exit message was broadcasted to the beacon node. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains on demand exit related information if the validator has initiated the voluntary exit. Otherwise, it will be null."},"PresignedExitData":{"title":"Pre-signed Exit Data","type":"object","properties":{"fork_version":{"type":"string","description":"The genesis fork version used when generating the pre-signed exit message."},"encrypted_exit_message":{"type":"string","description":"The encrypted pre-signed exit message. The client can decrypt this message using their private key."}},"description":"This JSON object will be populated if the include_presigned_exit query parameter is set to “true” and the validator is in active status for at-least 256 epochs. Otherwise, it will be set to null."},"StakingRequestInfo":{"title":"Staking Request Data","type":"object","properties":{"staking_ref_id":{"type":"string","description":"A unique reference ID generated by the staking infrastructure for the staking request."},"provisioned_at":{"type":"string","description":"The date and time when the validator was provisioned by the staking infrastructure. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains the staking request id and validators provisioned date and time. This should be set to ‘null’ for externally provisioned validators."},"ValidatorErrorListResponse":{"title":"Validator Error Response","type":"object","properties":{"error":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorErrorMessage"}}}},"ValidatorErrorMessage":{"title":"Validator Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerInfoErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"message":{"type":"string","description":"The description related to the error being reported."}}}}},"paths":{"/v1/ethereum/{network}/validators":{"get":{"tags":["Ethereum"],"summary":"Get All Validators or by Staking Reference ID","description":"The get all validators endpoint returns the details of the validators provisioned for the given client for the specified network in a paginated manner. This endpoint can also be used to return the details of the validators belonging to the given client for the specified network and staking reference ID. All timestamp fields in the response are provided in UTC timezone.","operationId":"get-validators","parameters":[{"name":"network","in":"path","description":"Applicable values are mainnet and hoodi","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","description":"The current page number requested by the client, if not specified, should be defaulted to 1.","required":false,"schema":{"type":"string"}},{"name":"size","in":"query","description":"The number of entries per page, if not presented in the request, should be defaulted to the maximum value of 250.","required":false,"schema":{"type":"string"}},{"name":"staking_ref_id","in":"query","description":"The staking reference ID returned for the staking request.","required":false,"schema":{"type":"string"}},{"name":"include_presigned_exit","in":"query","description":"This indicates whether the pre-signed exit message to be included in the response or not. It’s a boolean parameter, defaulted to \"false\".","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorsInfoResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerInfoErrorMessage"}}}}}}}}}
```

## Get a Single Validator

> The get single validator endpoint returns the validator information for the specified validator’s public key. All timestamp fields in the response are provided in UTC timezone.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ValidatorInfoResponse":{"title":"Validator Info","type":"object","properties":{"network":{"type":"string","description":"The network on which validators were created.","enum":["mainnet","hoodi"]},"last_monitored_epoch":{"type":"integer","description":"The most recent epoch successfully monitored for the validator, regardless of whether a validator record was persisted. Not applicable from staking initiation until the validator becomes active unless an epoch record exists for the last monitored epoch. Epoch records are created only when there is a balance, status, or reward update for that epoch.","format":"int32"},"epoch":{"type":"integer","description":"The specific blockchain epoch to which the returned validator details correspond.","format":"int32"},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"pubkey":{"type":"string","description":"Public key of the validator."},"region":{"type":"string","description":"The geographic region where the validator will be created.","enum":["US","EU","KR"]},"validator_index":{"type":"integer","description":"Validator index.","format":"int32"},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator. "},"fee_recipient_address":{"type":"string","description":"The fee recipient address belongs to the validator."},"estimated_activation_at":{"type":"string","description":"Estimate of when the validator will become active and start earning rewards. This will be populated since the validator is transitioned to DEPOSITED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"estimated_exit_at":{"type":"string","description":"Estimate of when the validator will exit and stop earning rewards. This will be populated since the validator is transitioned to EXIT_INITIATED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"estimated_withdrawal_at":{"type":"string","description":"Estimate of when the validator’s principal will become withdrawable. This will be populated since the validator is transitioned to EXITED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"balance_in_wei":{"type":"string","description":"Actual balance of the validator in WEI."},"balance_in_eth":{"type":"number","description":"Actual balance of the validator in ETH.","format":"double"},"status_history":{"type":"array","items":{"$ref":"#/components/schemas/StatusHistoryData"}},"voluntary_exit":{"$ref":"#/components/schemas/VoluntaryExitData"},"presigned_exit":{"$ref":"#/components/schemas/PresignedExitData"},"staking_request_info":{"$ref":"#/components/schemas/StakingRequestInfo"}}},"StatusHistoryData":{"title":"Status History Data","type":"object","properties":{"status":{"type":"string","description":"Status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"transitioned_at":{"type":"string","description":"The date and time the validator transitioned into the given status. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"An array that contains the state transition of the validator. "},"VoluntaryExitData":{"title":"Voluntary Exit Data","type":"object","properties":{"request_id":{"type":"string","description":"Unique request id sent by the client when requesting the voluntary exit."},"requested_at":{"type":"string","description":"The date and time the exit request was received. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"submitted_at":{"type":"string","description":"The date and time the validator’s exit message was broadcasted to the beacon node. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains on demand exit related information if the validator has initiated the voluntary exit. Otherwise, it will be null."},"PresignedExitData":{"title":"Pre-signed Exit Data","type":"object","properties":{"fork_version":{"type":"string","description":"The genesis fork version used when generating the pre-signed exit message."},"encrypted_exit_message":{"type":"string","description":"The encrypted pre-signed exit message. The client can decrypt this message using their private key."}},"description":"This JSON object will be populated if the include_presigned_exit query parameter is set to “true” and the validator is in active status for at-least 256 epochs. Otherwise, it will be set to null."},"StakingRequestInfo":{"title":"Staking Request Data","type":"object","properties":{"staking_ref_id":{"type":"string","description":"A unique reference ID generated by the staking infrastructure for the staking request."},"provisioned_at":{"type":"string","description":"The date and time when the validator was provisioned by the staking infrastructure. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains the staking request id and validators provisioned date and time. This should be set to ‘null’ for externally provisioned validators."},"ValidatorErrorListResponse":{"title":"Validator Error Response","type":"object","properties":{"error":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorErrorMessage"}}}},"ValidatorErrorMessage":{"title":"Validator Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerInfoErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"message":{"type":"string","description":"The description related to the error being reported."}}}}},"paths":{"/v1/ethereum/{network}/validators/{pubkey}":{"get":{"tags":["Ethereum"],"summary":"Get a Single Validator","description":"The get single validator endpoint returns the validator information for the specified validator’s public key. All timestamp fields in the response are provided in UTC timezone.","operationId":"get-validator","parameters":[{"name":"network","in":"path","description":"Applicable values are mainnet and hoodi.","required":true,"schema":{"type":"string"}},{"name":"pubkey","in":"path","description":"The public key of the validator","required":true,"schema":{"type":"string"}},{"name":"include_presigned_exit","in":"query","description":"This indicates whether the pre-signed exit message to be included in the response or not. It’s a boolean parameter, defaulted to “false”.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorInfoResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerInfoErrorMessage"}}}}}}}}}
```

## Get Validators Summary

> This endpoint returns the summary of the validator count by status belonging to the staking partner associated with the given API Key.&#x20;

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ValidatorsSummaryResponse":{"title":"Validator Summary Response","type":"object","properties":{"network":{"type":"string","description":"Network specified in the request.","enum":["mainnet","hoodi"]},"total":{"type":"integer","description":"Total number of validators provisioned for the given client and the network.","format":"int64"},"data":{"type":"array","description":"An array that contains validators summary.","items":{"$ref":"#/components/schemas/SummaryData"}}}},"SummaryData":{"title":"Summary Data","type":"object","properties":{"status":{"type":"string","description":"Status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"count":{"type":"integer","description":"The number of validators in the corresponding status. ","format":"int64"}},"description":"An array that contains validators summary."},"ValidatorErrorListResponse":{"title":"Validator Error Response","type":"object","properties":{"error":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorErrorMessage"}}}},"ValidatorErrorMessage":{"title":"Validator Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerInfoErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"message":{"type":"string","description":"The description related to the error being reported."}}}}},"paths":{"/v1/ethereum/{network}/validators/summary":{"get":{"tags":["Ethereum"],"summary":"Get Validators Summary","description":"This endpoint returns the summary of the validator count by status belonging to the staking partner associated with the given API Key. ","operationId":"validators-summary","parameters":[{"name":"network","in":"path","description":"Applicable values are mainnet and hoodi.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorsSummaryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerInfoErrorMessage"}}}}}}}}}
```

## Withdrawals

> The withdrawals endpoint returns a history of withdrawals (partial and full) from the consensus layer to the execution layer.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"EthEpochLevelInfoRequest":{"title":"Rewards Request","type":"object","required":["network","start","end","rollup_type"],"properties":{"network":{"type":"string","description":"The network on which validators should be created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"start":{"type":"string","description":"It specifies the start epoch if the type is 1, or the start date in the \"YYYY-MM-DD\" format (UTC timezone) if the type is 2"},"end":{"type":"string","description":"It specifies the end epoch if the type is 1, or the end date in the \"YYYY-MM-DD\" format (UTC timezone) if the type is 2"},"rollup_type":{"type":"string","description":"Denotes how the requested rewards range is specified. Applicable values are:\r\n-1 (epoch)\r\n- 2 (date)","enum":["1","2"]},"pubkeys":{"type":"array","items":{"type":"string","description":"List of validator public keys to fetch the rewards breakdown. A maximum of 50 entries are allowed."}},"cl_rewards_breakdown":{"type":"boolean","default":false,"description":"Denotes whether the response should include a detailed consensus-layer (CL) rewards and penalties breakdown. The applicable values are: \r\n- true\r\n- false (Default)"}}},"EthEpochLevelInfoResponseWithWithdrawalSlotInfo":{"title":"Withdrawals","type":"object","properties":{"network":{"type":"string","description":"Network specified in the request. ","enum":["mainnet","hoodi"]},"start":{"type":"string","description":"Start epoch or start date specified in the request. "},"end":{"type":"string","description":"End epoch or end date specified in the request."},"page":{"type":"integer","description":"The current page number sent in the request","format":"int32"},"total":{"type":"integer","description":"The total number of records resulted for the input criteria.","format":"int32"},"data":{"type":"array","description":"An array that contains the breakdown.","items":{"$ref":"#/components/schemas/WithdrawalSlotInfoType1"}}}},"WithdrawalSlotInfoType1":{"title":"Withdrawals","type":"object","description":"An array that contains the breakdown.","properties":{"timestamp":{"type":"string","description":"The timestamp corresponds to the withdrawal epoch. This should be in the format of “YYYY-MM-DD HH:mm:ss” in UTC."},"slot":{"type":"integer","description":"The consensus layer slot at which withdrawal occurred.","format":"int32"},"block":{"type":"integer","description":"The execution layer block number at which withdrawal occurred.","format":"int64"},"epoch":{"type":"integer","description":"The epoch at which the withdrawal was executed. Applicable only if the rollup_type is 1.","format":"int32"},"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"string","description":"The index of the validator."},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"The withdrawal address of the validator."},"withdrawal_amount_eth":{"type":"number","description":"The withdrawn amount in ETH.","format":"double"},"withdrawal_amount_wei":{"type":"string","description":"The withdrawn amount in WEI."},"is_full_withdrawal":{"type":"boolean","description":"This parameter indicates whether the validator’s balance was fully withdrawn or not."}}},"ValidatorErrorListResponse":{"title":"Validator Error Response","type":"object","properties":{"error":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorErrorMessage"}}}},"ValidatorErrorMessage":{"title":"Validator Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerInfoErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"message":{"type":"string","description":"The description related to the error being reported."}}}}},"paths":{"/v1/ethereum/validators/withdrawals":{"post":{"tags":["Ethereum"],"summary":"Withdrawals","description":"The withdrawals endpoint returns a history of withdrawals (partial and full) from the consensus layer to the execution layer.","operationId":"withdrawals","parameters":[{"name":"page","in":"query","description":"The current page number requested by the client, if not specified, should be defaulted to 1.","required":false,"schema":{"type":"string"}},{"name":"size","in":"query","description":"The number of entries per page, if not presented in the request, should be defaulted to the maximum value of 250.","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EthEpochLevelInfoRequest"}}},"required":true},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EthEpochLevelInfoResponseWithWithdrawalSlotInfo"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerInfoErrorMessage"}}}}}}}}}
```

## Rewards

> The rewards endpoint returns accrued rewards on the execution and consensus layers. Rewards can be queried using either an epoch range or a date range, with results returned at the corresponding epoch level. This endpoint returns rewards for validators created via the Provision Validators endpoint as well as validators registered for monitoring. Positive values represent rewards, while negative values represent penalties.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"EthEpochLevelInfoRequest":{"title":"Rewards Request","type":"object","required":["network","start","end","rollup_type"],"properties":{"network":{"type":"string","description":"The network on which validators should be created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"start":{"type":"string","description":"It specifies the start epoch if the type is 1, or the start date in the \"YYYY-MM-DD\" format (UTC timezone) if the type is 2"},"end":{"type":"string","description":"It specifies the end epoch if the type is 1, or the end date in the \"YYYY-MM-DD\" format (UTC timezone) if the type is 2"},"rollup_type":{"type":"string","description":"Denotes how the requested rewards range is specified. Applicable values are:\r\n-1 (epoch)\r\n- 2 (date)","enum":["1","2"]},"pubkeys":{"type":"array","items":{"type":"string","description":"List of validator public keys to fetch the rewards breakdown. A maximum of 50 entries are allowed."}},"cl_rewards_breakdown":{"type":"boolean","default":false,"description":"Denotes whether the response should include a detailed consensus-layer (CL) rewards and penalties breakdown. The applicable values are: \r\n- true\r\n- false (Default)"}}},"EthEpochLevelInfoResponseWithValidatorData":{"title":"Validator Rewards","type":"object","properties":{"network":{"type":"string","description":"Network specified in the request. ","enum":["mainnet","hoodi"]},"start":{"type":"string","description":"Start epoch or start date specified in the request. "},"end":{"type":"string","description":"End epoch or end date specified in the request."},"page":{"type":"integer","description":"The current page number sent in the request","format":"int32"},"total":{"type":"integer","description":"The total number of records resulted for the input criteria.","format":"int32"},"data":{"type":"array","description":"An array that contains the breakdown.","items":{"$ref":"#/components/schemas/ValidatorAddressWiseData"}}}},"ValidatorAddressWiseData":{"title":"Validator Rewards","type":"object","description":"An array that contains the breakdown.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"string","description":"Validator index."},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"total_eth":{"type":"number","description":"Total rewards the validator earned since inception in ETH. If the MEV information is not available for a certain epoch, that epoch's exact reward value will not be included in this value. The reward value will be updated once the MEV information becomes available.","format":"double"},"total_wei":{"type":"string","description":"Total rewards the validator earned since inception in WEI. If the MEV information is not available for a certain epoch, that epoch's exact reward value will not be included in this value. The reward value will be updated once the MEV information becomes available."},"accumulated_rewards":{"type":"array","description":"An array that contains accumulated consensus and execution layer rewards for the given validator and the query criteria. For Execution Layer Rewards, if the MEV information is not available for a certain epoch within the queried range, that epoch’s exact reward value will not be included in this value. The reward value will be updated once the MEV information becomes available.","items":{"$ref":"#/components/schemas/AccumulatedEthRewardsData"}},"rewards_breakdown":{"type":"array","items":{"$ref":"#/components/schemas/RewardsBreakdown"}}}},"AccumulatedEthRewardsData":{"oneOf":[{"$ref":"#/components/schemas/ConsensusAccumulatedReward"},{"$ref":"#/components/schemas/ExecutionAccumulatedReward"}],"discriminator":{"propertyName":"type"}},"ConsensusAccumulatedReward":{"type":"object","properties":{"type":{"type":"string","enum":["CONSENSUS"]},"accumulated_eth":{"type":"number","format":"double","description":"Accumulated consensus rewards in ETH between the start and the end specified in the request."},"accumulated_wei":{"type":"string","description":"Accumulated consensus rewards in WEI between the start and the end specified in the request."}}},"ExecutionAccumulatedReward":{"type":"object","properties":{"type":{"type":"string","enum":["EXECUTION"]},"accumulated_eth":{"type":"number","format":"double","description":"Accumulated execution rewards in ETH between the start and the end specified in the request."},"accumulated_wei":{"type":"string","description":"Accumulated execution rewards in WEI between the start and the end specified in the request."}}},"RewardsBreakdown":{"title":"RewardsBreakdown","type":"object","description":"An array that contains breakdown of rewards depending on the “rollup_type” parameter specified in the request.","properties":{"epoch":{"type":"integer","description":"The epoch corresponds to the rewards. This is applicable only if the rollup_type is 1. ","format":"int32"},"actual_balance_in_wei":{"type":"string","description":"Actual balance of the validator in the corresponding epoch, in WEI."},"actual_balance_in_eth":{"type":"number","description":"Actual balance of the validator in the corresponding epoch, in ETH.","format":"double"},"balance_in_wei":{"type":"string","description":"Effective balance of the validator in the corresponding epoch, in WEI."},"balance_in_eth":{"type":"number","description":"Effective balance of the validator in the corresponding epoch, in ETH.","format":"double"},"timestamp":{"type":"string","description":"The timestamp corresponding to the epoch at which the rewards were given. "},"rewards":{"type":"array","items":{"$ref":"#/components/schemas/RewardsInfo"}}}},"RewardsInfo":{"description":"An array that contains consensus and execution layer rewards for the given epoch.","oneOf":[{"$ref":"#/components/schemas/ConsensusReward"},{"$ref":"#/components/schemas/ExecutionReward"}]},"ConsensusReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["CONSENSUS"]},"rewards_eth":{"type":"number","format":"double","description":"Consensus layer rewards accumulated during the period in ETH."},"rewards_wei":{"type":"string","description":"Consensus layer rewards accumulated during the period in WEI."},"attestation_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from attestation duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"attestation_rewards_wei":{"type":"string","description":"Total rewards earned from attestation duties during the period, expressed in WEI. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from block proposal duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_wei":{"type":"string","description":"Total rewards earned from block proposal duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from sync committee duties during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_wei":{"type":"string","description":"Total rewards earned from sync committee duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_eth":{"type":"number","format":"double","description":"Initial slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_wei":{"type":"string","description":"Initial slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_eth":{"type":"number","format":"double","description":"Correlation slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_wei":{"type":"string","description":"Correlation slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."}}},"ExecutionReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["EXECUTION"]},"rewards_eth":{"type":"number","format":"double","description":"Execution layer rewards accumulated during the period in ETH. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"rewards_wei":{"type":"string","description":"Execution layer rewards accumulated during the period in WEI. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"is_mev":{"type":"boolean","description":"When the MEV boost was used for the block proposal, this should be set to true; otherwise it will be false. This field will also be set to ‘false’ if the MEV information is not yet available. In a scenario like this, the rewards_eth and rewards_wei values will be set to null. The values will be updated once the MEV information becomes available."},"mev_relay":{"type":"string","description":"The name of the MEV boost service. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"recipient":{"type":"string","description":"The recipient address of the execution rewards. This field will be set to null if the MEV information has not yet been received from the relay. The value will be updated once the MEV information becomes available."},"mev_builder":{"type":"string","description":"The public key of the MEV builder that sent the execution rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"slot":{"type":"integer","description":"The slot number of the proposal made by the validator.","format":"int32"},"block":{"type":"integer","description":"The execution layer block number of the proposal made by the validator.","format":"int64"},"tx_hash":{"type":"string","description":"The hash of the transaction used to send the MEV rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true}}},"ValidatorErrorListResponse":{"title":"Validator Error Response","type":"object","properties":{"error":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorErrorMessage"}}}},"ValidatorErrorMessage":{"title":"Validator Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerInfoErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"message":{"type":"string","description":"The description related to the error being reported."}}}}},"paths":{"/v1/ethereum/validators/rewards":{"post":{"tags":["Ethereum"],"summary":"Rewards","description":"The rewards endpoint returns accrued rewards on the execution and consensus layers. Rewards can be queried using either an epoch range or a date range, with results returned at the corresponding epoch level. This endpoint returns rewards for validators created via the Provision Validators endpoint as well as validators registered for monitoring. Positive values represent rewards, while negative values represent penalties.","operationId":"rewards","parameters":[{"name":"page","in":"query","description":"The current page number requested by the client, if not specified, should be defaulted to 1.","required":false,"schema":{"type":"string"}},{"name":"size","in":"query","description":"The number of entries per page, if not presented in the request, should be defaulted to the maximum value of 250.","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EthEpochLevelInfoRequest"}}},"required":true},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EthEpochLevelInfoResponseWithValidatorData"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerInfoErrorMessage"}}}}}}}}}
```

## Consolidate Validators

> The consolidate endpoint enables clients to perform the following actions:> \
> \- Convert withdrawal credential type 0x01 validators to the 0x02 type.&#x20;> \
> \- Consolidate a type 0x01 or 0x02 validator with a type 0x02 validator by adding the balance of the former to the latter while exiting the former.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ConsolidateResponse":{"title":"Consolidate Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The unique identifier specified in the request."},"network":{"description":"Network to which the source and destination validators belong to. ","enum":["mainnet","hoodi"]},"destination_pubkey":{"type":"string","description":"The validator that will hold the merged balance. If the request was a conversion, this will be kept empty."},"consolidation_contract_address":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract."},"data":{"type":"array","items":{"$ref":"#/components/schemas/ConsolidateResponseData"}},"created_at":{"type":"string","description":"The time at which the request was received by the platform. Time will be shown in the “YYYY-MM-DD HH:mm:ss” format."}}},"ConsolidateResponseData":{"title":"Consolidate Response Data","type":"object","properties":{"source_pubkey":{"type":"string","description":"Source public key."},"contract_call_data":{"type":"string","description":"The unsigned transaction payload relevant for the source public key."},"signer":{"type":"array","minItems":1,"maxItems":1,"description":"Withdrawal address of the source public key.","items":{"type":"string"}}}},"StakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/ErrorMessage"}}}},"ErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerStakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}},"description":""},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}},"ConsolidateRequest":{"title":"Consolidate Request","type":"object","required":["client_req_id","network","source_pubkeys"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the staking request generated by the client."},"network":{"description":"The network to which the source and destination validators belong to. Supported values are:\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"source_pubkeys":{"type":"array","minItems":1,"maxItems":50,"uniqueItems":true,"description":"The type 0x01 validators to be converted to type 0x02 or type 0x01 and 0x02 validators to be merged with the destination_pubkey. \r\n\r\nA maximum of 50 validators are supported.","items":{"type":"string"}},"destination_pubkey":{"type":"string","description":"The validator that will hold the merged balance. Must be a 0x02 type validator."}}}}},"paths":{"/v1/ethereum/validators/consolidate":{"post":{"summary":"Consolidate Validators","tags":["Ethereum"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsolidateResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakingErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerStakingErrorListResponse"}}}}},"operationId":"consolidate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsolidateRequest"}}}},"description":"The consolidate endpoint enables clients to perform the following actions:\r\n- Convert withdrawal credential type 0x01 validators to the 0x02 type. \r\n- Consolidate a type 0x01 or 0x02 validator with a type 0x02 validator by adding the balance of the former to the latter while exiting the former."}}}}
```

## Exit Validators via the Execution Layer

> The execution-layer triggerable exit endpoint enables clients to initiate validator exits directly via the validator’s withdrawal address. This functionality is applicable to both withdrawal credential type 0x01 and 0x02 validators.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ELExitResponse":{"title":"EL Exit Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The unique identifier specified in the request."},"network":{"description":"Network to which the validators belong to. ","enum":["mainnet","hoodi"]},"exit_contract_address":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract."},"data":{"type":"array","items":{"$ref":"#/components/schemas/ELExitResponseData"}},"created_at":{"type":"string","description":"The time at which the request was received by the platform. Time will be shown in the “YYYY-MM-DD HH:mm:ss” format."}}},"ELExitResponseData":{"title":"EL Exit Response Data","type":"object","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","format":"int32","description":"Index of the validator."},"contract_call_data":{"type":"string","description":"The unsigned transaction payload associated with the exit."},"signer":{"type":"array","minItems":1,"maxItems":1,"description":"Withdrawal address of the validator public key.","items":{"type":"string"}}}},"StakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/ErrorMessage"}}}},"ErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerStakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}},"description":""},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}},"ELExitRequest":{"title":"EL Exit Request","type":"object","required":["client_req_id","network","type"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the execution layer triggerable exit request provided by the client."},"network":{"enum":["mainnet","hoodi"],"description":"Network to which the validators belongs to. Supported values are:\r\n- mainnet\r\n- hoodi"},"type":{"enum":[1,2],"description":"Indicates the type of attribute used to identify the validators to exit. The possible values are:\r\n- 1 (pubkey)\r\n- 2 (validator_index)"},"pubkeys":{"type":"array","minItems":1,"maxItems":100,"uniqueItems":true,"description":"List of validator public keys to be exited. \r\n\r\nThis is required if the exit type is 1. \r\n\r\nA maximum of 100 public keys can be specified.","items":{"type":"string"}},"validator_indexes":{"type":"array","minItems":1,"maxItems":100,"uniqueItems":true,"description":"List of validator indexes to be exited. \r\n\r\nThis is required if the exit type is 2.\r\n\r\nA maximum of 100 validator indexes can be specified.","items":{"type":"integer","format":"int32"}}}}}},"paths":{"/v1/ethereum/validators/el-triggerable-exit":{"post":{"summary":"Exit Validators via the Execution Layer","tags":["Ethereum"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ELExitResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakingErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerStakingErrorListResponse"}}}}},"operationId":"el-triggerable-exit","description":"The execution-layer triggerable exit endpoint enables clients to initiate validator exits directly via the validator’s withdrawal address. This functionality is applicable to both withdrawal credential type 0x01 and 0x02 validators.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ELExitRequest"}}}}}}}}
```

## Partially Withdraw Validator Balances via the Execution Layer

> For validators with withdrawal credential type 0x01, any balance in excess of 32 ETH is automatically swept to the validator’s withdrawal address by the protocol. In contrast, 0x02 validators do not support automatic sweeping. Instead, clients can initiate partial withdrawals via the API.> \\
>
> \
> The partial withdrawal amount is computed as the lesser of:> \
> \- the user-specified withdrawal amount, and> \
> \- (current balance − 32 ETH − pending withdrawals)> \\
>
> \
> This ensures that the maximum amount that can be withdrawn from a 0x02 validator is limited to the validator's effective balance in excess of 32 ETH, excluding any amounts already pending withdrawal.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ELWithdrawalResponse":{"title":"EL Withdrawal Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The unique identifier specified in the request."},"network":{"description":"Network to which the validators belong to. ","enum":["mainnet","hoodi"]},"withdrawal_contract_address":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract."},"data":{"type":"array","items":{"$ref":"#/components/schemas/ELWithdrawalResponseData"}},"created_at":{"type":"string","description":"The time at which the request was received by the platform. Time will be shown in the “YYYY-MM-DD HH:mm:ss” format."}}},"ELWithdrawalResponseData":{"title":"EL Withdrawal Response Data","type":"object","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","format":"int32","description":"Index of the validator."},"amount":{"type":"number","format":"float","description":"Amount to be withdrawn."},"contract_call_data":{"type":"string","description":"The unsigned transaction payload associated with the partial withdrawal."},"signer":{"type":"array","minItems":1,"maxItems":1,"description":"Withdrawal address of the validator public key.","items":{"type":"string"}}}},"StakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/ErrorMessage"}}}},"ErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerStakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}},"description":""},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}},"ELWithdrawalRequest":{"title":"EL Withdrawal Request","type":"object","required":["client_req_id","network","type","data"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the execution layer triggerable withdrawal request provided by the client."},"network":{"enum":["mainnet","hoodi"],"description":"Network to which the validators belongs to. Supported values are:\r\n- mainnet\r\n- hoodi"},"type":{"enum":[1,2],"description":"Indicates the type of attribute used to identify the validators that need partial withdrawals. The possible values are:\r\n- 1 (pubkey)\r\n- 2 (validator_index)"},"data":{"type":"array","items":{"$ref":"#/components/schemas/ELWithdrawalRequestData"}}}},"ELWithdrawalRequestData":{"title":"EL Withdrawal Request Data","type":"object","required":["amount"],"properties":{"pubkey":{"type":"string","description":"Validator public key that needs a partial withdrawal. \r\n\r\nThis is required if the partial withdrawal type is 1. "},"validator_index":{"type":"integer","description":"Validator index that needs a partial withdrawal. \r\n\r\nThis is required if the partial withdrawal type is 2."},"amount":{"type":"number","format":"float","description":"Withdrawal amount corresponding to the given validator."}}}}},"paths":{"/v1/ethereum/validators/el-triggerable-withdrawal":{"post":{"summary":"Partially Withdraw Validator Balances via the Execution Layer","tags":["Ethereum"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ELWithdrawalResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakingErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerStakingErrorListResponse"}}}}},"operationId":"el-triggerable-withdrawal","description":"For validators with withdrawal credential type 0x01, any balance in excess of 32 ETH is automatically swept to the validator’s withdrawal address by the protocol. In contrast, 0x02 validators do not support automatic sweeping. Instead, clients can initiate partial withdrawals via the API.\r\n\r\nThe partial withdrawal amount is computed as the lesser of:\r\n- the user-specified withdrawal amount, and\r\n- (current balance − 32 ETH − pending withdrawals)\r\n\r\nThis ensures that the maximum amount that can be withdrawn from a 0x02 validator is limited to the validator's effective balance in excess of 32 ETH, excluding any amounts already pending withdrawal.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ELWithdrawalRequest"}}}}}}}}
```

## Top Up Validators

> The top-up endpoint allows staking partners to add additional ETH to existing validators with withdrawal credential type 0x01 or 0x02. At this point Galaxy does not support batch top ups.> \
> \- \*\*0x01 validators:\*\* The valid top up amount must be between 1 ETH and the amount required to reach a total balance of 32 ETH.> \
> \- \*\*0x02 validators:\*\* The valid top up amount must be between 1 ETH and the amount required to reach a total balance of 2048 ETH.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"TopUpResponse":{"title":"Top Up Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The unique identifier specified in the request."},"network":{"type":"string","description":"Network to which the validators belong to. ","enum":["mainnet","hoodi"]},"data":{"type":"array","description":"A block that contains validator batches. Each batch includes details of 100 validators and the associated funding transaction.","items":{"$ref":"#/components/schemas/TopUpResponseBatchData"}}}},"TopUpResponseBatchData":{"title":"Top Up Response Batch Data","type":"object","properties":{"batch_id":{"description":"Identifier of the validator batch. Possible values are 1 - 10. ","enum":[1,2,3,4,5,6,7,8,9,10]},"deposit_data":{"type":"array","description":"An array of validator details in this batch. ","items":{"$ref":"#/components/schemas/TopUpResponseDepositData"}},"deposit_transaction":{"type":"array","items":{"$ref":"#/components/schemas/TopUpResponseTransactionData"}}}},"TopUpResponseDepositData":{"title":"Top Up Response Deposit Data","type":"object","description":"An array of validator details in this batch.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"amount":{"type":"number","description":"The amount of ETH in GWEI required to be deposited.","format":"double"},"withdrawal_credentials":{"type":"string","description":"Withdrawal credentials for the validator funds to be withdrawn upon exit."},"signature":{"type":"string","description":"A “proof of possession” which signs over pubkey, withdrawal_credentials, and amount using the validator private key."},"deposit_data_root":{"type":"string","description":"Merkle root hash of the deposit data."},"deposit_message_root":{"type":"string","description":"Merkle root hash of the deposit message."},"fork_version":{"type":"string","description":"The genesis fork version."},"deposit_cli_version":{"type":"string","description":"Staking deposit cli version."}}},"TopUpResponseTransactionData":{"title":"Top Up Response Transaction Data","type":"object","description":"The JSON object that contains the funding transaction details of all validators belonging to this batch.","properties":{"deposit_amount_wei":{"type":"string","description":"Total amount of ETH to be topped up for the received top up request, in wei."},"deposit_address":{"type":"string","description":"Batch deposit contract address."},"contract_call_data":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract. "}}},"StakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/ErrorMessage"}}}},"ErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerStakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}},"description":""},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}},"TopUpRequest":{"title":"Top Up Request","type":"object","required":["client_req_id","network","data"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the execution layer triggerable withdrawal request provided by the client."},"network":{"enum":["mainnet","hoodi"],"description":"Network to which the validators belongs to. Supported values are:\r\n- mainnet\r\n- hoodi"},"data":{"type":"array","items":{"$ref":"#/components/schemas/TopUpRequestData"}}}},"TopUpRequestData":{"title":"Top Up Request Data","type":"object","required":["pubkey","deposit_amount"],"properties":{"pubkey":{"type":"string","description":"Validator that needs to be topped up. "},"deposit_amount":{"type":"number","format":"float","description":"The ETH amount that must be topped up. "}}}}},"paths":{"/v1/ethereum/validators/topup":{"post":{"summary":"Top Up Validators","tags":["Ethereum"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopUpResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakingErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerStakingErrorListResponse"}}}}},"operationId":"topup","description":"The top-up endpoint allows staking partners to add additional ETH to existing validators with withdrawal credential type 0x01 or 0x02. At this point Galaxy does not support batch top ups.\r\n- **0x01 validators:** The valid top up amount must be between 1 ETH and the amount required to reach a total balance of 32 ETH.\r\n- **0x02 validators:** The valid top up amount must be between 1 ETH and the amount required to reach a total balance of 2048 ETH.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopUpRequest"}}}}}}}}
```

## Get Fees

> The get fees endpoint allows clients to retrieve the current fee applicable to the following actions on existing validators:> \
> \- Consolidation or conversion> \
> \- Execution-layer triggerable exits or partial withdrawals> \\
>
> \
> Fees are dynamic and vary based on the number of pending requests in the corresponding processing queue. It is recommended to call this endpoint before submitting a request to ensure awareness of the applicable fee.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"FeeResponse":{"title":"FeeResponse","type":"object","properties":{"network":{"description":"Network to which the validators belong to.","enum":["mainnet","hoodi"]},"operation_type":{"description":"Indicates the type of operation for which the user is requesting fees.\r\n- validator_consolidation_or_conversion\r\n- el_triggerable_exit_or_withdrawal","enum":["validator_consolidation_or_conversion","el_triggerable_exit_or_withdrawal"]},"fee_in_ETH":{"type":"number","description":"The applicable fee in ETH. ","format":"float"},"fee_in_WEI":{"type":"string","description":"The applicable fee in WEI. "},"retrieved_at":{"type":"string","description":"The time at which the fee was retrieved by the platform. Time will be shown in the “YYYY-MM-DD HH:mm:ss” format."}}},"ValidatorErrorListResponse":{"title":"Validator Error Response","type":"object","properties":{"error":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorErrorMessage"}}}},"ValidatorErrorMessage":{"title":"Validator Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerInfoErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"message":{"type":"string","description":"The description related to the error being reported."}}},"FeeRequest":{"title":"Fee Request","type":"object","required":["network","operation_type"],"properties":{"network":{"description":"Network to which the validators belongs to. Supported values are:\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"operation_type":{"enum":[1,2],"description":"Indicates the type of operation for which the user is requesting fees.\r\n- 1 (validator_consolidation_or_conversion)\r\n- 2 (el_triggerable_exit_or_withdrawal)"}}}}},"paths":{"/v1/ethereum/validators/fee":{"post":{"summary":"Get Fees","tags":["Ethereum"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeeResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerInfoErrorMessage"}}}}},"operationId":"fee","description":"The get fees endpoint allows clients to retrieve the current fee applicable to the following actions on existing validators:\r\n- Consolidation or conversion\r\n- Execution-layer triggerable exits or partial withdrawals\r\n\r\nFees are dynamic and vary based on the number of pending requests in the corresponding processing queue. It is recommended to call this endpoint before submitting a request to ensure awareness of the applicable fee.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeeRequest"}}}}}}}}
```

## Get Deposit Data

> The deposit data endpoint facilitates the retrieval of the Provision Validators endpoint’s response, which contains the deposit data, using the Client Request ID of the original request.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"DepositDataResponse":{"title":"Staking Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the original Provision Validators request for which the response is returned."},"staking_ref_id":{"type":"string","description":"A unique reference ID generated by the staking infrastructure for the staking request."},"network":{"type":"string","description":"The network on which validators should be created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"withdrawal_credentials_type":{"enum":["0x01","0x02"],"description":"The withdrawal credential type of the validator(s) that will be created. Applicable values are;\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"The specified address to which funds will be withdrawn, as mentioned in the staking request."},"fee_recipient_address":{"type":"string","description":"The fee recipient address that receives Execution Layer fees, as mentioned in the staking request."},"region":{"type":"string","description":"The geographic region where the validator will be created. Supported values are;\r\n- US\r\n- EU\r\n- KR","enum":["US","EU","KR"]},"provisioned_at":{"type":"string","description":"The date and time when the validator was provisioned by the staking infrastructure."},"data":{"type":"array","description":"A block that contains validator batches. Each batch includes details of 100 validators and the associated funding transaction.","items":{"$ref":"#/components/schemas/BatchData"}}}},"BatchData":{"title":"Staking Response Batch","type":"object","properties":{"batch_id":{"type":"integer","description":"Identifier of the validator batch.","format":"int32","enum":[1,2,3,4,5,6,7,8,9,10]},"deposit_data":{"type":"array","description":"An array of validator details in this batch.","items":{"$ref":"#/components/schemas/DepositData"}},"deposit_transaction":{"$ref":"#/components/schemas/DepositTransaction"}},"description":"A block that contains validator batches. Each batch includes details of 250 validators and the associated funding transaction."},"DepositData":{"title":"Staking Response Batch Deposit Data","type":"object","description":"An array of validator details in this batch.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"amount":{"type":"number","description":"The amount of ETH in GWEI required to be deposited.","format":"double"},"withdrawal_credentials":{"type":"string","description":"Withdrawal credentials for the validator funds to be withdrawn upon exit."},"signature":{"type":"string","description":"A “proof of possession” which signs over pubkey, withdrawal_credentials, and amount using the validator private key."},"deposit_data_root":{"type":"string","description":"Merkle root hash of the deposit data."},"deposit_message_root":{"type":"string","description":"Merkle root hash of the deposit message."},"fork_version":{"type":"string","description":"The genesis fork version."},"deposit_cli_version":{"type":"string","description":"Staking deposit cli version."}}},"DepositTransaction":{"title":"Staking Response Batch Deposit Transaction","type":"object","description":"The JSON object that contains the funding transaction details of all validators belonging to this batch.","properties":{"deposit_amount_wei":{"type":"string","description":"The total amount of ETH to be staked for the batch in WEI."},"deposit_address":{"type":"string","description":"Batch deposit contract address."},"contract_call_data":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract. "}}},"DepositDataErrorResponse":{"title":"DepositDataErrorResponse","type":"object","required":["client_req_id","errors"],"properties":{"client_req_id":{"type":"string","description":"Client Request ID that the Staking Partner provided."},"errors":{"type":"array","items":{"$ref":"#/components/schemas/DepositDataErrorMessage"}}}},"DepositDataErrorMessage":{"title":"DepositDataErrorMessage","type":"object","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerStakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}},"description":""},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}}}},"paths":{"/v1/ethereum/validators/deposit-data":{"get":{"summary":"Get Deposit Data","tags":["Ethereum"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepositDataResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepositDataErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerStakingErrorListResponse"}}}}},"operationId":"deposit-data","description":"The deposit data endpoint facilitates the retrieval of the Provision Validators endpoint’s response, which contains the deposit data, using the Client Request ID of the original request.","parameters":[{"schema":{"type":"string"},"in":"query","name":"client_req_id","description":"The Client Request ID applicable to the Provision Validators request for which deposit data is required."}]}}}}
```

## Update Fee Recipient Address

> The update fee recipient address endpoint allows clients to update their validators’ fee recipient address and direct execution-layer rewards to a new wallet.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"UpdateFeeRecipientResponse":{"title":"UpdateFeeRecipientResponse","type":"object","properties":{"client_req_id":{"type":"string","description":"The unique identifier specified in the request."},"network":{"type":"string","description":"Network to which the validators belong to."},"data":{"type":"array","items":{"$ref":"#/components/schemas/UpdateFeeRecipientResponseData"}}}},"UpdateFeeRecipientResponseData":{"title":"UpdateFeeRecipientData","type":"object","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"number","description":"Index of the validator."},"fee_recipient_address":{"type":"string","description":"The updated fee recipient address."}}},"StakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/ErrorMessage"}}}},"ErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerStakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}},"description":""},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}},"UpdateFeeRecipientRequest":{"title":"UpdateFeeRecipientRequest","type":"object","required":["client_req_id","network","type","data"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the request provided by the client."},"network":{"type":"string","description":"Network to which the validators belong to.\r\n\r\nPossible values:\r\n- mainnet\r\n- hoodi"},"type":{"type":"integer","description":"Indicates the type of attribute used to identify the validators that need address changes. The possible values are,\r\n- 1 (pubkeys)\r\n\r\n2 (validator_index)"},"data":{"type":"array","items":{"$ref":"#/components/schemas/UpdateFeeRecipientData"}}}},"UpdateFeeRecipientData":{"title":"UpdateFeeRecipientData","type":"object","required":["fee_recipient_address"],"properties":{"pubkey":{"type":"string","description":"Validator public key that needs an address change. \r\n\r\nWill only be required if type = 1.\r\n\r\nAny value provided in this field when type = 2, will be ignored."},"validator_index":{"type":"number","description":"Validator index that needs an address change. \r\n\r\nWill only be required if type = 2.\r\n\r\nAny value provided in this field when type = 1, will be ignored."},"fee_recipient_address":{"type":"string","description":"The new fee recipient address corresponding to the given validator."}}}}},"paths":{"/v1/ethereum/validators/update-fee-recipient":{"post":{"summary":"Update Fee Recipient Address","tags":["Ethereum"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFeeRecipientResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakingErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerStakingErrorListResponse"}}}}},"operationId":"update-fee-recipient","description":"The update fee recipient address endpoint allows clients to update their validators’ fee recipient address and direct execution-layer rewards to a new wallet.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFeeRecipientRequest"}}}}}}}}
```

## Validator Monitoring

> Clients can invoke this endpoint to monitor existing validators by retrieving and tracking validator addresses on the platform. A request with a list of validator addresses enables the creation of corresponding positions on the platform for monitoring.> \\
>
> \
> If an onboarded validator has a long history to catch up on, it will take some time for the validator to become up to date with the current epoch, status, balances, and rewards. When performing any staking actions on such validators, this must be taken into account.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ValidatorMonitoringResponse":{"title":"ValidatorMonitoringResponse","type":"object","properties":{"validator_monitoring_reference_id":{"type":"string","description":"A system-generated unique identifier for the API request. This identifier is recorded in the ‘Link ID’ field of all positions created through the API request."}}},"ValidatorErrorListResponse":{"title":"Validator Error Response","type":"object","properties":{"error":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorErrorMessage"}}}},"ValidatorErrorMessage":{"title":"Validator Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerInfoErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"message":{"type":"string","description":"The description related to the error being reported."}}},"ValidatorMonitoringRequest":{"title":"ValidatorMonitoringRequest","type":"object","required":["network","data"],"properties":{"network":{"type":"string","description":"Network to which the validators belongs to. Supported values are:\r\n- mainnet\r\n- hoodi"},"data":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorMonitoringRequestData"}}}},"ValidatorMonitoringRequestData":{"title":"ValidatorMonitoringRequestData","type":"object","required":["pubkey"],"properties":{"pubkey":{"type":"string","description":"The public key of the validator that will be monitored on the platform."},"account":{"type":"string","description":"The account name registered on the platform that is associated with the Staking Partner. If not provided, requests will be assigned to the default account."}}}}},"paths":{"/v1/ethereum/validators/monitoring":{"post":{"summary":"Validator Monitoring","tags":["Ethereum"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorMonitoringResponse"}}},"headers":{"header-0":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerInfoErrorMessage"}}}}},"operationId":"monitoring","description":"Clients can invoke this endpoint to monitor existing validators by retrieving and tracking validator addresses on the platform. A request with a list of validator addresses enables the creation of corresponding positions on the platform for monitoring.\r\n\r\nIf an onboarded validator has a long history to catch up on, it will take some time for the validator to become up to date with the current epoch, status, balances, and rewards. When performing any staking actions on such validators, this must be taken into account.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorMonitoringRequest"}}}}}}}}
```


# Models

## The StakingRequest object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"StakingRequest":{"title":"Staking Request","type":"object","required":["client_req_id","network","validator_count","withdrawal_address"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the staking request generated by the client."},"network":{"type":"string","description":"The network on which validators should be created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"withdrawal_credentials_type":{"enum":["0x01","0x02"],"description":"The withdrawal credential type of the validator(s) to be created. Supported values are;\r\n- 0x01 (Default)\r\n- 0x02","default":"0x01"},"amounts_unit":{"description":"The unit in which the staking amount is specified for withdrawal_credential_type = 0x02 validators in the amounts field. Supported values are:\r\n- ETH\r\n- GWEI\r\n\r\nConditionally required if the withdrawal_credential_type = 0x02.","enum":["ETH","GWEI"]},"amounts":{"type":"array","description":"The Ethereum amounts to be staked, specified in either ETH or GWEI. This is required if the withdrawal credentials type is 0x02. \r\n\r\n- When specified in ETH, up to 9 decimal places are supported.\r\n- When specified in GWEI, only whole numbers are supported.\r\n- Any additional decimal places will be ignored.","items":{"type":"integer","format":"int32"}},"validator_count":{"type":"integer","description":"The number of validators required. A maximum of 1000 validators are supported","format":"int32"},"withdrawal_address":{"type":"string","description":"The ETH account (wallet) used for the withdrawal credentials of the validators. This is the address that will receive consensus rewards and unstaked ETH after exiting."},"fee_recipient_address":{"type":"string","description":"The ETH account (wallet) that will receive the execution layer rewards. If not provided, this will be defaulted to the withdrawal address."},"region":{"type":"string","description":"The geographic region where the validator will be created. Supported values are;\r\n- US\r\n- EU (Default)\r\n- KR","default":"EU","enum":["US","EU","KR"]},"account":{"type":"string","description":"The account name registered on the platform that is associated with the client's customer. If not provided, requests will be assigned to a default account.\n"}}}}}}
```

## The ErrorMessage object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}}}}}
```

## The ValidatorErrorMessage object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorErrorMessage":{"title":"Validator Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}}}}}
```

## The StakingErrorListResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"StakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/ErrorMessage"}}}},"ErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}}}}}
```

## The InternalServerErrorMessage object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}}}}}
```

## The InternalServerInfoErrorMessage object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"InternalServerInfoErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"message":{"type":"string","description":"The description related to the error being reported."}}}}}}
```

## The InternalServerStakingErrorListResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"InternalServerStakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}},"description":""},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}}}}}
```

## The BatchData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"BatchData":{"title":"Staking Response Batch","type":"object","properties":{"batch_id":{"type":"integer","description":"Identifier of the validator batch.","format":"int32","enum":[1,2,3,4,5,6,7,8,9,10]},"deposit_data":{"type":"array","description":"An array of validator details in this batch.","items":{"$ref":"#/components/schemas/DepositData"}},"deposit_transaction":{"$ref":"#/components/schemas/DepositTransaction"}},"description":"A block that contains validator batches. Each batch includes details of 250 validators and the associated funding transaction."},"DepositData":{"title":"Staking Response Batch Deposit Data","type":"object","description":"An array of validator details in this batch.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"amount":{"type":"number","description":"The amount of ETH in GWEI required to be deposited.","format":"double"},"withdrawal_credentials":{"type":"string","description":"Withdrawal credentials for the validator funds to be withdrawn upon exit."},"signature":{"type":"string","description":"A “proof of possession” which signs over pubkey, withdrawal_credentials, and amount using the validator private key."},"deposit_data_root":{"type":"string","description":"Merkle root hash of the deposit data."},"deposit_message_root":{"type":"string","description":"Merkle root hash of the deposit message."},"fork_version":{"type":"string","description":"The genesis fork version."},"deposit_cli_version":{"type":"string","description":"Staking deposit cli version."}}},"DepositTransaction":{"title":"Staking Response Batch Deposit Transaction","type":"object","description":"The JSON object that contains the funding transaction details of all validators belonging to this batch.","properties":{"deposit_amount_wei":{"type":"string","description":"The total amount of ETH to be staked for the batch in WEI."},"deposit_address":{"type":"string","description":"Batch deposit contract address."},"contract_call_data":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract. "}}}}}}
```

## The DepositData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"DepositData":{"title":"Staking Response Batch Deposit Data","type":"object","description":"An array of validator details in this batch.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"amount":{"type":"number","description":"The amount of ETH in GWEI required to be deposited.","format":"double"},"withdrawal_credentials":{"type":"string","description":"Withdrawal credentials for the validator funds to be withdrawn upon exit."},"signature":{"type":"string","description":"A “proof of possession” which signs over pubkey, withdrawal_credentials, and amount using the validator private key."},"deposit_data_root":{"type":"string","description":"Merkle root hash of the deposit data."},"deposit_message_root":{"type":"string","description":"Merkle root hash of the deposit message."},"fork_version":{"type":"string","description":"The genesis fork version."},"deposit_cli_version":{"type":"string","description":"Staking deposit cli version."}}}}}}
```

## The DepositTransaction object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"DepositTransaction":{"title":"Staking Response Batch Deposit Transaction","type":"object","description":"The JSON object that contains the funding transaction details of all validators belonging to this batch.","properties":{"deposit_amount_wei":{"type":"string","description":"The total amount of ETH to be staked for the batch in WEI."},"deposit_address":{"type":"string","description":"Batch deposit contract address."},"contract_call_data":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract. "}}}}}}
```

## The StakingResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"StakingResponse":{"title":"Staking Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the staking request addressed by this response message."},"staking_ref_id":{"type":"string","description":"A unique reference ID generated by the staking infrastructure for the staking request."},"network":{"type":"string","description":"The network on which validators should be created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"withdrawal_credentials_type":{"enum":["0x01","0x02"],"description":"The withdrawal credential type of the validator(s) that will be created. Applicable values are;\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"The specified address to which funds will be withdrawn, as mentioned in the staking request."},"fee_recipient_address":{"type":"string","description":"The fee recipient address that receives Execution Layer fees, as mentioned in the staking request."},"region":{"type":"string","description":"The geographic region where the validator will be created. Supported values are;\r\n- US\r\n- EU\r\n- KR","enum":["US","EU","KR"]},"provisioned_at":{"type":"string","description":"The date and time when the validator was provisioned by the staking infrastructure."},"data":{"type":"array","description":"A block that contains validator batches. Each batch includes details of 100 validators and the associated funding transaction.","items":{"$ref":"#/components/schemas/BatchData"}}}},"BatchData":{"title":"Staking Response Batch","type":"object","properties":{"batch_id":{"type":"integer","description":"Identifier of the validator batch.","format":"int32","enum":[1,2,3,4,5,6,7,8,9,10]},"deposit_data":{"type":"array","description":"An array of validator details in this batch.","items":{"$ref":"#/components/schemas/DepositData"}},"deposit_transaction":{"$ref":"#/components/schemas/DepositTransaction"}},"description":"A block that contains validator batches. Each batch includes details of 250 validators and the associated funding transaction."},"DepositData":{"title":"Staking Response Batch Deposit Data","type":"object","description":"An array of validator details in this batch.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"amount":{"type":"number","description":"The amount of ETH in GWEI required to be deposited.","format":"double"},"withdrawal_credentials":{"type":"string","description":"Withdrawal credentials for the validator funds to be withdrawn upon exit."},"signature":{"type":"string","description":"A “proof of possession” which signs over pubkey, withdrawal_credentials, and amount using the validator private key."},"deposit_data_root":{"type":"string","description":"Merkle root hash of the deposit data."},"deposit_message_root":{"type":"string","description":"Merkle root hash of the deposit message."},"fork_version":{"type":"string","description":"The genesis fork version."},"deposit_cli_version":{"type":"string","description":"Staking deposit cli version."}}},"DepositTransaction":{"title":"Staking Response Batch Deposit Transaction","type":"object","description":"The JSON object that contains the funding transaction details of all validators belonging to this batch.","properties":{"deposit_amount_wei":{"type":"string","description":"The total amount of ETH to be staked for the batch in WEI."},"deposit_address":{"type":"string","description":"Batch deposit contract address."},"contract_call_data":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract. "}}}}}}
```

## The EthEpochLevelInfoRequest object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"EthEpochLevelInfoRequest":{"title":"Rewards Request","type":"object","required":["network","start","end","rollup_type"],"properties":{"network":{"type":"string","description":"The network on which validators should be created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"start":{"type":"string","description":"It specifies the start epoch if the type is 1, or the start date in the \"YYYY-MM-DD\" format (UTC timezone) if the type is 2"},"end":{"type":"string","description":"It specifies the end epoch if the type is 1, or the end date in the \"YYYY-MM-DD\" format (UTC timezone) if the type is 2"},"rollup_type":{"type":"string","description":"Denotes how the requested rewards range is specified. Applicable values are:\r\n-1 (epoch)\r\n- 2 (date)","enum":["1","2"]},"pubkeys":{"type":"array","items":{"type":"string","description":"List of validator public keys to fetch the rewards breakdown. A maximum of 50 entries are allowed."}},"cl_rewards_breakdown":{"type":"boolean","default":false,"description":"Denotes whether the response should include a detailed consensus-layer (CL) rewards and penalties breakdown. The applicable values are: \r\n- true\r\n- false (Default)"}}}}}}
```

## The ValidatorErrorListResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorErrorListResponse":{"title":"Validator Error Response","type":"object","properties":{"error":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorErrorMessage"}}}},"ValidatorErrorMessage":{"title":"Validator Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}}}}}
```

## The InternalServerValidatorErrorListResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"InternalServerValidatorErrorListResponse":{"title":"Validator Error Response","type":"object","properties":{"error":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}}}}}
```

## The EthEpochLevelInfoResponseWithWithdrawalSlotInfo object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"EthEpochLevelInfoResponseWithWithdrawalSlotInfo":{"title":"Withdrawals","type":"object","properties":{"network":{"type":"string","description":"Network specified in the request. ","enum":["mainnet","hoodi"]},"start":{"type":"string","description":"Start epoch or start date specified in the request. "},"end":{"type":"string","description":"End epoch or end date specified in the request."},"page":{"type":"integer","description":"The current page number sent in the request","format":"int32"},"total":{"type":"integer","description":"The total number of records resulted for the input criteria.","format":"int32"},"data":{"type":"array","description":"An array that contains the breakdown.","items":{"$ref":"#/components/schemas/WithdrawalSlotInfoType1"}}}},"WithdrawalSlotInfoType1":{"title":"Withdrawals","type":"object","description":"An array that contains the breakdown.","properties":{"timestamp":{"type":"string","description":"The timestamp corresponds to the withdrawal epoch. This should be in the format of “YYYY-MM-DD HH:mm:ss” in UTC."},"slot":{"type":"integer","description":"The consensus layer slot at which withdrawal occurred.","format":"int32"},"block":{"type":"integer","description":"The execution layer block number at which withdrawal occurred.","format":"int64"},"epoch":{"type":"integer","description":"The epoch at which the withdrawal was executed. Applicable only if the rollup_type is 1.","format":"int32"},"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"string","description":"The index of the validator."},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"The withdrawal address of the validator."},"withdrawal_amount_eth":{"type":"number","description":"The withdrawn amount in ETH.","format":"double"},"withdrawal_amount_wei":{"type":"string","description":"The withdrawn amount in WEI."},"is_full_withdrawal":{"type":"boolean","description":"This parameter indicates whether the validator’s balance was fully withdrawn or not."}}}}}}
```

## The WithdrawalSlotInfoType1 object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"WithdrawalSlotInfoType1":{"title":"Withdrawals","type":"object","description":"An array that contains the breakdown.","properties":{"timestamp":{"type":"string","description":"The timestamp corresponds to the withdrawal epoch. This should be in the format of “YYYY-MM-DD HH:mm:ss” in UTC."},"slot":{"type":"integer","description":"The consensus layer slot at which withdrawal occurred.","format":"int32"},"block":{"type":"integer","description":"The execution layer block number at which withdrawal occurred.","format":"int64"},"epoch":{"type":"integer","description":"The epoch at which the withdrawal was executed. Applicable only if the rollup_type is 1.","format":"int32"},"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"string","description":"The index of the validator."},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"The withdrawal address of the validator."},"withdrawal_amount_eth":{"type":"number","description":"The withdrawn amount in ETH.","format":"double"},"withdrawal_amount_wei":{"type":"string","description":"The withdrawn amount in WEI."},"is_full_withdrawal":{"type":"boolean","description":"This parameter indicates whether the validator’s balance was fully withdrawn or not."}}}}}}
```

## The EthEpochLevelInfoResponseWithValidatorData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"EthEpochLevelInfoResponseWithValidatorData":{"title":"Validator Rewards","type":"object","properties":{"network":{"type":"string","description":"Network specified in the request. ","enum":["mainnet","hoodi"]},"start":{"type":"string","description":"Start epoch or start date specified in the request. "},"end":{"type":"string","description":"End epoch or end date specified in the request."},"page":{"type":"integer","description":"The current page number sent in the request","format":"int32"},"total":{"type":"integer","description":"The total number of records resulted for the input criteria.","format":"int32"},"data":{"type":"array","description":"An array that contains the breakdown.","items":{"$ref":"#/components/schemas/ValidatorAddressWiseData"}}}},"ValidatorAddressWiseData":{"title":"Validator Rewards","type":"object","description":"An array that contains the breakdown.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"string","description":"Validator index."},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"total_eth":{"type":"number","description":"Total rewards the validator earned since inception in ETH. If the MEV information is not available for a certain epoch, that epoch's exact reward value will not be included in this value. The reward value will be updated once the MEV information becomes available.","format":"double"},"total_wei":{"type":"string","description":"Total rewards the validator earned since inception in WEI. If the MEV information is not available for a certain epoch, that epoch's exact reward value will not be included in this value. The reward value will be updated once the MEV information becomes available."},"accumulated_rewards":{"type":"array","description":"An array that contains accumulated consensus and execution layer rewards for the given validator and the query criteria. For Execution Layer Rewards, if the MEV information is not available for a certain epoch within the queried range, that epoch’s exact reward value will not be included in this value. The reward value will be updated once the MEV information becomes available.","items":{"$ref":"#/components/schemas/AccumulatedEthRewardsData"}},"rewards_breakdown":{"type":"array","items":{"$ref":"#/components/schemas/RewardsBreakdown"}}}},"AccumulatedEthRewardsData":{"oneOf":[{"$ref":"#/components/schemas/ConsensusAccumulatedReward"},{"$ref":"#/components/schemas/ExecutionAccumulatedReward"}],"discriminator":{"propertyName":"type"}},"ConsensusAccumulatedReward":{"type":"object","properties":{"type":{"type":"string","enum":["CONSENSUS"]},"accumulated_eth":{"type":"number","format":"double","description":"Accumulated consensus rewards in ETH between the start and the end specified in the request."},"accumulated_wei":{"type":"string","description":"Accumulated consensus rewards in WEI between the start and the end specified in the request."}}},"ExecutionAccumulatedReward":{"type":"object","properties":{"type":{"type":"string","enum":["EXECUTION"]},"accumulated_eth":{"type":"number","format":"double","description":"Accumulated execution rewards in ETH between the start and the end specified in the request."},"accumulated_wei":{"type":"string","description":"Accumulated execution rewards in WEI between the start and the end specified in the request."}}},"RewardsBreakdown":{"title":"RewardsBreakdown","type":"object","description":"An array that contains breakdown of rewards depending on the “rollup_type” parameter specified in the request.","properties":{"epoch":{"type":"integer","description":"The epoch corresponds to the rewards. This is applicable only if the rollup_type is 1. ","format":"int32"},"actual_balance_in_wei":{"type":"string","description":"Actual balance of the validator in the corresponding epoch, in WEI."},"actual_balance_in_eth":{"type":"number","description":"Actual balance of the validator in the corresponding epoch, in ETH.","format":"double"},"balance_in_wei":{"type":"string","description":"Effective balance of the validator in the corresponding epoch, in WEI."},"balance_in_eth":{"type":"number","description":"Effective balance of the validator in the corresponding epoch, in ETH.","format":"double"},"timestamp":{"type":"string","description":"The timestamp corresponding to the epoch at which the rewards were given. "},"rewards":{"type":"array","items":{"$ref":"#/components/schemas/RewardsInfo"}}}},"RewardsInfo":{"description":"An array that contains consensus and execution layer rewards for the given epoch.","oneOf":[{"$ref":"#/components/schemas/ConsensusReward"},{"$ref":"#/components/schemas/ExecutionReward"}]},"ConsensusReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["CONSENSUS"]},"rewards_eth":{"type":"number","format":"double","description":"Consensus layer rewards accumulated during the period in ETH."},"rewards_wei":{"type":"string","description":"Consensus layer rewards accumulated during the period in WEI."},"attestation_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from attestation duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"attestation_rewards_wei":{"type":"string","description":"Total rewards earned from attestation duties during the period, expressed in WEI. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from block proposal duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_wei":{"type":"string","description":"Total rewards earned from block proposal duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from sync committee duties during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_wei":{"type":"string","description":"Total rewards earned from sync committee duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_eth":{"type":"number","format":"double","description":"Initial slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_wei":{"type":"string","description":"Initial slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_eth":{"type":"number","format":"double","description":"Correlation slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_wei":{"type":"string","description":"Correlation slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."}}},"ExecutionReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["EXECUTION"]},"rewards_eth":{"type":"number","format":"double","description":"Execution layer rewards accumulated during the period in ETH. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"rewards_wei":{"type":"string","description":"Execution layer rewards accumulated during the period in WEI. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"is_mev":{"type":"boolean","description":"When the MEV boost was used for the block proposal, this should be set to true; otherwise it will be false. This field will also be set to ‘false’ if the MEV information is not yet available. In a scenario like this, the rewards_eth and rewards_wei values will be set to null. The values will be updated once the MEV information becomes available."},"mev_relay":{"type":"string","description":"The name of the MEV boost service. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"recipient":{"type":"string","description":"The recipient address of the execution rewards. This field will be set to null if the MEV information has not yet been received from the relay. The value will be updated once the MEV information becomes available."},"mev_builder":{"type":"string","description":"The public key of the MEV builder that sent the execution rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"slot":{"type":"integer","description":"The slot number of the proposal made by the validator.","format":"int32"},"block":{"type":"integer","description":"The execution layer block number of the proposal made by the validator.","format":"int64"},"tx_hash":{"type":"string","description":"The hash of the transaction used to send the MEV rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true}}}}}}
```

## The ValidatorAddressWiseData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorAddressWiseData":{"title":"Validator Rewards","type":"object","description":"An array that contains the breakdown.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"string","description":"Validator index."},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"total_eth":{"type":"number","description":"Total rewards the validator earned since inception in ETH. If the MEV information is not available for a certain epoch, that epoch's exact reward value will not be included in this value. The reward value will be updated once the MEV information becomes available.","format":"double"},"total_wei":{"type":"string","description":"Total rewards the validator earned since inception in WEI. If the MEV information is not available for a certain epoch, that epoch's exact reward value will not be included in this value. The reward value will be updated once the MEV information becomes available."},"accumulated_rewards":{"type":"array","description":"An array that contains accumulated consensus and execution layer rewards for the given validator and the query criteria. For Execution Layer Rewards, if the MEV information is not available for a certain epoch within the queried range, that epoch’s exact reward value will not be included in this value. The reward value will be updated once the MEV information becomes available.","items":{"$ref":"#/components/schemas/AccumulatedEthRewardsData"}},"rewards_breakdown":{"type":"array","items":{"$ref":"#/components/schemas/RewardsBreakdown"}}}},"AccumulatedEthRewardsData":{"oneOf":[{"$ref":"#/components/schemas/ConsensusAccumulatedReward"},{"$ref":"#/components/schemas/ExecutionAccumulatedReward"}],"discriminator":{"propertyName":"type"}},"ConsensusAccumulatedReward":{"type":"object","properties":{"type":{"type":"string","enum":["CONSENSUS"]},"accumulated_eth":{"type":"number","format":"double","description":"Accumulated consensus rewards in ETH between the start and the end specified in the request."},"accumulated_wei":{"type":"string","description":"Accumulated consensus rewards in WEI between the start and the end specified in the request."}}},"ExecutionAccumulatedReward":{"type":"object","properties":{"type":{"type":"string","enum":["EXECUTION"]},"accumulated_eth":{"type":"number","format":"double","description":"Accumulated execution rewards in ETH between the start and the end specified in the request."},"accumulated_wei":{"type":"string","description":"Accumulated execution rewards in WEI between the start and the end specified in the request."}}},"RewardsBreakdown":{"title":"RewardsBreakdown","type":"object","description":"An array that contains breakdown of rewards depending on the “rollup_type” parameter specified in the request.","properties":{"epoch":{"type":"integer","description":"The epoch corresponds to the rewards. This is applicable only if the rollup_type is 1. ","format":"int32"},"actual_balance_in_wei":{"type":"string","description":"Actual balance of the validator in the corresponding epoch, in WEI."},"actual_balance_in_eth":{"type":"number","description":"Actual balance of the validator in the corresponding epoch, in ETH.","format":"double"},"balance_in_wei":{"type":"string","description":"Effective balance of the validator in the corresponding epoch, in WEI."},"balance_in_eth":{"type":"number","description":"Effective balance of the validator in the corresponding epoch, in ETH.","format":"double"},"timestamp":{"type":"string","description":"The timestamp corresponding to the epoch at which the rewards were given. "},"rewards":{"type":"array","items":{"$ref":"#/components/schemas/RewardsInfo"}}}},"RewardsInfo":{"description":"An array that contains consensus and execution layer rewards for the given epoch.","oneOf":[{"$ref":"#/components/schemas/ConsensusReward"},{"$ref":"#/components/schemas/ExecutionReward"}]},"ConsensusReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["CONSENSUS"]},"rewards_eth":{"type":"number","format":"double","description":"Consensus layer rewards accumulated during the period in ETH."},"rewards_wei":{"type":"string","description":"Consensus layer rewards accumulated during the period in WEI."},"attestation_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from attestation duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"attestation_rewards_wei":{"type":"string","description":"Total rewards earned from attestation duties during the period, expressed in WEI. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from block proposal duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_wei":{"type":"string","description":"Total rewards earned from block proposal duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from sync committee duties during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_wei":{"type":"string","description":"Total rewards earned from sync committee duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_eth":{"type":"number","format":"double","description":"Initial slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_wei":{"type":"string","description":"Initial slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_eth":{"type":"number","format":"double","description":"Correlation slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_wei":{"type":"string","description":"Correlation slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."}}},"ExecutionReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["EXECUTION"]},"rewards_eth":{"type":"number","format":"double","description":"Execution layer rewards accumulated during the period in ETH. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"rewards_wei":{"type":"string","description":"Execution layer rewards accumulated during the period in WEI. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"is_mev":{"type":"boolean","description":"When the MEV boost was used for the block proposal, this should be set to true; otherwise it will be false. This field will also be set to ‘false’ if the MEV information is not yet available. In a scenario like this, the rewards_eth and rewards_wei values will be set to null. The values will be updated once the MEV information becomes available."},"mev_relay":{"type":"string","description":"The name of the MEV boost service. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"recipient":{"type":"string","description":"The recipient address of the execution rewards. This field will be set to null if the MEV information has not yet been received from the relay. The value will be updated once the MEV information becomes available."},"mev_builder":{"type":"string","description":"The public key of the MEV builder that sent the execution rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"slot":{"type":"integer","description":"The slot number of the proposal made by the validator.","format":"int32"},"block":{"type":"integer","description":"The execution layer block number of the proposal made by the validator.","format":"int64"},"tx_hash":{"type":"string","description":"The hash of the transaction used to send the MEV rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true}}}}}}
```

## The AccumulatedEthRewardsData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"AccumulatedEthRewardsData":{"oneOf":[{"$ref":"#/components/schemas/ConsensusAccumulatedReward"},{"$ref":"#/components/schemas/ExecutionAccumulatedReward"}],"discriminator":{"propertyName":"type"}},"ConsensusAccumulatedReward":{"type":"object","properties":{"type":{"type":"string","enum":["CONSENSUS"]},"accumulated_eth":{"type":"number","format":"double","description":"Accumulated consensus rewards in ETH between the start and the end specified in the request."},"accumulated_wei":{"type":"string","description":"Accumulated consensus rewards in WEI between the start and the end specified in the request."}}},"ExecutionAccumulatedReward":{"type":"object","properties":{"type":{"type":"string","enum":["EXECUTION"]},"accumulated_eth":{"type":"number","format":"double","description":"Accumulated execution rewards in ETH between the start and the end specified in the request."},"accumulated_wei":{"type":"string","description":"Accumulated execution rewards in WEI between the start and the end specified in the request."}}}}}}
```

## The ConsensusAccumulatedReward object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ConsensusAccumulatedReward":{"type":"object","properties":{"type":{"type":"string","enum":["CONSENSUS"]},"accumulated_eth":{"type":"number","format":"double","description":"Accumulated consensus rewards in ETH between the start and the end specified in the request."},"accumulated_wei":{"type":"string","description":"Accumulated consensus rewards in WEI between the start and the end specified in the request."}}}}}}
```

## The ExecutionAccumulatedReward object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ExecutionAccumulatedReward":{"type":"object","properties":{"type":{"type":"string","enum":["EXECUTION"]},"accumulated_eth":{"type":"number","format":"double","description":"Accumulated execution rewards in ETH between the start and the end specified in the request."},"accumulated_wei":{"type":"string","description":"Accumulated execution rewards in WEI between the start and the end specified in the request."}}}}}}
```

## The RewardsBreakdown object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"RewardsBreakdown":{"title":"RewardsBreakdown","type":"object","description":"An array that contains breakdown of rewards depending on the “rollup_type” parameter specified in the request.","properties":{"epoch":{"type":"integer","description":"The epoch corresponds to the rewards. This is applicable only if the rollup_type is 1. ","format":"int32"},"actual_balance_in_wei":{"type":"string","description":"Actual balance of the validator in the corresponding epoch, in WEI."},"actual_balance_in_eth":{"type":"number","description":"Actual balance of the validator in the corresponding epoch, in ETH.","format":"double"},"balance_in_wei":{"type":"string","description":"Effective balance of the validator in the corresponding epoch, in WEI."},"balance_in_eth":{"type":"number","description":"Effective balance of the validator in the corresponding epoch, in ETH.","format":"double"},"timestamp":{"type":"string","description":"The timestamp corresponding to the epoch at which the rewards were given. "},"rewards":{"type":"array","items":{"$ref":"#/components/schemas/RewardsInfo"}}}},"RewardsInfo":{"description":"An array that contains consensus and execution layer rewards for the given epoch.","oneOf":[{"$ref":"#/components/schemas/ConsensusReward"},{"$ref":"#/components/schemas/ExecutionReward"}]},"ConsensusReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["CONSENSUS"]},"rewards_eth":{"type":"number","format":"double","description":"Consensus layer rewards accumulated during the period in ETH."},"rewards_wei":{"type":"string","description":"Consensus layer rewards accumulated during the period in WEI."},"attestation_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from attestation duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"attestation_rewards_wei":{"type":"string","description":"Total rewards earned from attestation duties during the period, expressed in WEI. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from block proposal duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_wei":{"type":"string","description":"Total rewards earned from block proposal duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from sync committee duties during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_wei":{"type":"string","description":"Total rewards earned from sync committee duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_eth":{"type":"number","format":"double","description":"Initial slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_wei":{"type":"string","description":"Initial slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_eth":{"type":"number","format":"double","description":"Correlation slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_wei":{"type":"string","description":"Correlation slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."}}},"ExecutionReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["EXECUTION"]},"rewards_eth":{"type":"number","format":"double","description":"Execution layer rewards accumulated during the period in ETH. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"rewards_wei":{"type":"string","description":"Execution layer rewards accumulated during the period in WEI. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"is_mev":{"type":"boolean","description":"When the MEV boost was used for the block proposal, this should be set to true; otherwise it will be false. This field will also be set to ‘false’ if the MEV information is not yet available. In a scenario like this, the rewards_eth and rewards_wei values will be set to null. The values will be updated once the MEV information becomes available."},"mev_relay":{"type":"string","description":"The name of the MEV boost service. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"recipient":{"type":"string","description":"The recipient address of the execution rewards. This field will be set to null if the MEV information has not yet been received from the relay. The value will be updated once the MEV information becomes available."},"mev_builder":{"type":"string","description":"The public key of the MEV builder that sent the execution rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"slot":{"type":"integer","description":"The slot number of the proposal made by the validator.","format":"int32"},"block":{"type":"integer","description":"The execution layer block number of the proposal made by the validator.","format":"int64"},"tx_hash":{"type":"string","description":"The hash of the transaction used to send the MEV rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true}}}}}}
```

## The RewardsInfo object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"RewardsInfo":{"description":"An array that contains consensus and execution layer rewards for the given epoch.","oneOf":[{"$ref":"#/components/schemas/ConsensusReward"},{"$ref":"#/components/schemas/ExecutionReward"}]},"ConsensusReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["CONSENSUS"]},"rewards_eth":{"type":"number","format":"double","description":"Consensus layer rewards accumulated during the period in ETH."},"rewards_wei":{"type":"string","description":"Consensus layer rewards accumulated during the period in WEI."},"attestation_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from attestation duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"attestation_rewards_wei":{"type":"string","description":"Total rewards earned from attestation duties during the period, expressed in WEI. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from block proposal duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_wei":{"type":"string","description":"Total rewards earned from block proposal duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from sync committee duties during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_wei":{"type":"string","description":"Total rewards earned from sync committee duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_eth":{"type":"number","format":"double","description":"Initial slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_wei":{"type":"string","description":"Initial slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_eth":{"type":"number","format":"double","description":"Correlation slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_wei":{"type":"string","description":"Correlation slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."}}},"ExecutionReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["EXECUTION"]},"rewards_eth":{"type":"number","format":"double","description":"Execution layer rewards accumulated during the period in ETH. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"rewards_wei":{"type":"string","description":"Execution layer rewards accumulated during the period in WEI. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"is_mev":{"type":"boolean","description":"When the MEV boost was used for the block proposal, this should be set to true; otherwise it will be false. This field will also be set to ‘false’ if the MEV information is not yet available. In a scenario like this, the rewards_eth and rewards_wei values will be set to null. The values will be updated once the MEV information becomes available."},"mev_relay":{"type":"string","description":"The name of the MEV boost service. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"recipient":{"type":"string","description":"The recipient address of the execution rewards. This field will be set to null if the MEV information has not yet been received from the relay. The value will be updated once the MEV information becomes available."},"mev_builder":{"type":"string","description":"The public key of the MEV builder that sent the execution rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"slot":{"type":"integer","description":"The slot number of the proposal made by the validator.","format":"int32"},"block":{"type":"integer","description":"The execution layer block number of the proposal made by the validator.","format":"int64"},"tx_hash":{"type":"string","description":"The hash of the transaction used to send the MEV rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true}}}}}}
```

## The ConsensusReward object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ConsensusReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["CONSENSUS"]},"rewards_eth":{"type":"number","format":"double","description":"Consensus layer rewards accumulated during the period in ETH."},"rewards_wei":{"type":"string","description":"Consensus layer rewards accumulated during the period in WEI."},"attestation_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from attestation duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"attestation_rewards_wei":{"type":"string","description":"Total rewards earned from attestation duties during the period, expressed in WEI. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from block proposal duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_wei":{"type":"string","description":"Total rewards earned from block proposal duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from sync committee duties during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_wei":{"type":"string","description":"Total rewards earned from sync committee duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_eth":{"type":"number","format":"double","description":"Initial slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_wei":{"type":"string","description":"Initial slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_eth":{"type":"number","format":"double","description":"Correlation slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_wei":{"type":"string","description":"Correlation slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."}}}}}}
```

## The ExecutionReward object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ExecutionReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["EXECUTION"]},"rewards_eth":{"type":"number","format":"double","description":"Execution layer rewards accumulated during the period in ETH. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"rewards_wei":{"type":"string","description":"Execution layer rewards accumulated during the period in WEI. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"is_mev":{"type":"boolean","description":"When the MEV boost was used for the block proposal, this should be set to true; otherwise it will be false. This field will also be set to ‘false’ if the MEV information is not yet available. In a scenario like this, the rewards_eth and rewards_wei values will be set to null. The values will be updated once the MEV information becomes available."},"mev_relay":{"type":"string","description":"The name of the MEV boost service. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"recipient":{"type":"string","description":"The recipient address of the execution rewards. This field will be set to null if the MEV information has not yet been received from the relay. The value will be updated once the MEV information becomes available."},"mev_builder":{"type":"string","description":"The public key of the MEV builder that sent the execution rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"slot":{"type":"integer","description":"The slot number of the proposal made by the validator.","format":"int32"},"block":{"type":"integer","description":"The execution layer block number of the proposal made by the validator.","format":"int64"},"tx_hash":{"type":"string","description":"The hash of the transaction used to send the MEV rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true}}}}}}
```

## The ValidatorExitRequest object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorExitRequest":{"title":"Validator Exit Request","type":"object","required":["client_req_id","network","type"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier generated and sent by the client for the exit request. Refer Client Request Identifier for further details."},"network":{"type":"string","description":"The network on which validators were created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"type":{"type":"integer","description":"Indicates the type of attribute used to identify the validators to exit. The possible values are,\n- 1 (pubkey)\n- 2 (validator_index)\n- 3 (withdrawal_address)","format":"int32","enum":[1,2,3]},"pubkeys":{"type":"array","items":{"type":"string","description":"List of validator public keys to be exited. \nThis is required if the exit type is 1. \nA maximum of 250 public keys can be specified."}},"validator_indexes":{"type":"array","items":{"type":"integer","description":"The list of validator indexes to be exited. \nRequired if exit type is 2. \nA maximum of 250 validator indexes can be specified.","format":"int32"}},"withdrawal_address":{"type":"string","description":"The withdrawal address of the validators that should be exited.\nRequired if exit type is 3"},"validator_count":{"type":"integer","description":"Required if exit type is 3. \nThe Max count should be 250.","format":"int32"}}}}}}
```

## The ValidatorExitData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorExitData":{"title":"Validator Exit Data","type":"object","description":"An array which contains the details of the validators to be exited.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","description":"Index of the corresponding validator.","format":"int32"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator. "},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]}}}}}}
```

## The ValidatorExitResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorExitResponse":{"title":"Validator Exit Response","type":"object","properties":{"client_req_id":{"type":"string","description":"Unique identifier specified in the request."},"network":{"type":"string","description":"Network specified in the request. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"data":{"type":"array","description":"An array which contains the details of the validators to be exited.","items":{"$ref":"#/components/schemas/ValidatorExitData"}}}},"ValidatorExitData":{"title":"Validator Exit Data","type":"object","description":"An array which contains the details of the validators to be exited.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","description":"Index of the corresponding validator.","format":"int32"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator. "},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]}}}}}}
```

## The PreSignedExitDBO object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"PreSignedExitDBO":{"title":"Validator Pre-signed Exit Data","type":"object","description":"An array which contains the details of the validators to be exited.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","description":"Index of the corresponding validator.","format":"int32"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator."},"encrypted_exit_message":{"type":"string","description":"The encrypted pre-signed exit message.The client can decrypt this message using their private key."},"fork_version":{"type":"string","description":"The genesis fork version used when generating the pre-signed exit message."},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]}}}}}}
```

## The ValidatorPreSignedExitResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorPreSignedExitResponse":{"title":"Validator Pre-signed Exit Response","type":"object","properties":{"network":{"type":"string","description":"Network specified in the request.","enum":["mainnet","hoodi"]},"data":{"type":"array","description":"An array which contains the details of the validators to be exited.","items":{"$ref":"#/components/schemas/PreSignedExitDBO"}}}},"PreSignedExitDBO":{"title":"Validator Pre-signed Exit Data","type":"object","description":"An array which contains the details of the validators to be exited.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","description":"Index of the corresponding validator.","format":"int32"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator."},"encrypted_exit_message":{"type":"string","description":"The encrypted pre-signed exit message.The client can decrypt this message using their private key."},"fork_version":{"type":"string","description":"The genesis fork version used when generating the pre-signed exit message."},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]}}}}}}
```

## The PresignedExitData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"PresignedExitData":{"title":"Pre-signed Exit Data","type":"object","properties":{"fork_version":{"type":"string","description":"The genesis fork version used when generating the pre-signed exit message."},"encrypted_exit_message":{"type":"string","description":"The encrypted pre-signed exit message. The client can decrypt this message using their private key."}},"description":"This JSON object will be populated if the include_presigned_exit query parameter is set to “true” and the validator is in active status for at-least 256 epochs. Otherwise, it will be set to null."}}}}
```

## The StatusHistoryData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"StatusHistoryData":{"title":"Status History Data","type":"object","properties":{"status":{"type":"string","description":"Status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"transitioned_at":{"type":"string","description":"The date and time the validator transitioned into the given status. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"An array that contains the state transition of the validator. "}}}}
```

## The StakingRequestInfo object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"StakingRequestInfo":{"title":"Staking Request Data","type":"object","properties":{"staking_ref_id":{"type":"string","description":"A unique reference ID generated by the staking infrastructure for the staking request."},"provisioned_at":{"type":"string","description":"The date and time when the validator was provisioned by the staking infrastructure. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains the staking request id and validators provisioned date and time. This should be set to ‘null’ for externally provisioned validators."}}}}
```

## The ValidatorInfoData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorInfoData":{"title":"Validator Info Data","type":"object","description":"An array that contains the details about validators.","properties":{"last_monitored_epoch":{"type":"integer","description":"The most recent epoch successfully monitored for the validator, regardless of whether a validator record was persisted. Not applicable from staking initiation until the validator becomes active unless an epoch record exists for the last monitored epoch. Epoch records are created only when there is a balance, status, or reward update for that epoch.","format":"int32"},"epoch":{"type":"integer","description":"The specific blockchain epoch to which the returned validator details correspond.","format":"int32"},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"pubkey":{"type":"string","description":"Public key of the validator."},"region":{"type":"string","description":"The geographic region where the validator will be created.","enum":["US","EU","KR"]},"validator_index":{"type":"integer","description":"Validator index.","format":"int32"},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator. "},"fee_recipient_address":{"type":"string","description":"The fee recipient address belongs to the validator."},"estimated_activation_at":{"type":"string","description":"Estimate of when the validator will become active and start earning rewards. This will be populated since the validator is transitioned to DEPOSITED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"estimated_exit_at":{"type":"string","description":"Estimate of when the validator will exit and stop earning rewards. This will be populated since the validator is transitioned to EXIT_INITIATED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"estimated_withdrawal_at":{"type":"string","description":"Estimate of when the validator’s principal will become withdrawable. This will be populated since the validator is transitioned to EXITED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"balance_in_wei":{"type":"string","description":"Actual balance of the validator in WEI."},"balance_in_eth":{"type":"number","description":"Actual balance of the validator in ETH.","format":"double"},"status_history":{"type":"array","items":{"$ref":"#/components/schemas/StatusHistoryData"}},"voluntary_exit":{"$ref":"#/components/schemas/VoluntaryExitData"},"presigned_exit":{"$ref":"#/components/schemas/PresignedExitData"},"staking_request_info":{"$ref":"#/components/schemas/StakingRequestInfo"}}},"StatusHistoryData":{"title":"Status History Data","type":"object","properties":{"status":{"type":"string","description":"Status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"transitioned_at":{"type":"string","description":"The date and time the validator transitioned into the given status. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"An array that contains the state transition of the validator. "},"VoluntaryExitData":{"title":"Voluntary Exit Data","type":"object","properties":{"request_id":{"type":"string","description":"Unique request id sent by the client when requesting the voluntary exit."},"requested_at":{"type":"string","description":"The date and time the exit request was received. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"submitted_at":{"type":"string","description":"The date and time the validator’s exit message was broadcasted to the beacon node. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains on demand exit related information if the validator has initiated the voluntary exit. Otherwise, it will be null."},"PresignedExitData":{"title":"Pre-signed Exit Data","type":"object","properties":{"fork_version":{"type":"string","description":"The genesis fork version used when generating the pre-signed exit message."},"encrypted_exit_message":{"type":"string","description":"The encrypted pre-signed exit message. The client can decrypt this message using their private key."}},"description":"This JSON object will be populated if the include_presigned_exit query parameter is set to “true” and the validator is in active status for at-least 256 epochs. Otherwise, it will be set to null."},"StakingRequestInfo":{"title":"Staking Request Data","type":"object","properties":{"staking_ref_id":{"type":"string","description":"A unique reference ID generated by the staking infrastructure for the staking request."},"provisioned_at":{"type":"string","description":"The date and time when the validator was provisioned by the staking infrastructure. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains the staking request id and validators provisioned date and time. This should be set to ‘null’ for externally provisioned validators."}}}}
```

## The ValidatorsInfoResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorsInfoResponse":{"title":"Validator Info Response","type":"object","properties":{"network":{"type":"string","description":"Network specified in the request.","enum":["mainnet","hoodi"]},"page":{"type":"integer","description":"The current page number sent in the request.","format":"int32"},"total":{"type":"integer","description":"Total number of validators provisioned for the given client and the network.","format":"int32"},"data":{"type":"array","description":"An array that contains the details about validators.","items":{"$ref":"#/components/schemas/ValidatorInfoData"}}}},"ValidatorInfoData":{"title":"Validator Info Data","type":"object","description":"An array that contains the details about validators.","properties":{"last_monitored_epoch":{"type":"integer","description":"The most recent epoch successfully monitored for the validator, regardless of whether a validator record was persisted. Not applicable from staking initiation until the validator becomes active unless an epoch record exists for the last monitored epoch. Epoch records are created only when there is a balance, status, or reward update for that epoch.","format":"int32"},"epoch":{"type":"integer","description":"The specific blockchain epoch to which the returned validator details correspond.","format":"int32"},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"pubkey":{"type":"string","description":"Public key of the validator."},"region":{"type":"string","description":"The geographic region where the validator will be created.","enum":["US","EU","KR"]},"validator_index":{"type":"integer","description":"Validator index.","format":"int32"},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator. "},"fee_recipient_address":{"type":"string","description":"The fee recipient address belongs to the validator."},"estimated_activation_at":{"type":"string","description":"Estimate of when the validator will become active and start earning rewards. This will be populated since the validator is transitioned to DEPOSITED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"estimated_exit_at":{"type":"string","description":"Estimate of when the validator will exit and stop earning rewards. This will be populated since the validator is transitioned to EXIT_INITIATED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"estimated_withdrawal_at":{"type":"string","description":"Estimate of when the validator’s principal will become withdrawable. This will be populated since the validator is transitioned to EXITED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"balance_in_wei":{"type":"string","description":"Actual balance of the validator in WEI."},"balance_in_eth":{"type":"number","description":"Actual balance of the validator in ETH.","format":"double"},"status_history":{"type":"array","items":{"$ref":"#/components/schemas/StatusHistoryData"}},"voluntary_exit":{"$ref":"#/components/schemas/VoluntaryExitData"},"presigned_exit":{"$ref":"#/components/schemas/PresignedExitData"},"staking_request_info":{"$ref":"#/components/schemas/StakingRequestInfo"}}},"StatusHistoryData":{"title":"Status History Data","type":"object","properties":{"status":{"type":"string","description":"Status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"transitioned_at":{"type":"string","description":"The date and time the validator transitioned into the given status. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"An array that contains the state transition of the validator. "},"VoluntaryExitData":{"title":"Voluntary Exit Data","type":"object","properties":{"request_id":{"type":"string","description":"Unique request id sent by the client when requesting the voluntary exit."},"requested_at":{"type":"string","description":"The date and time the exit request was received. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"submitted_at":{"type":"string","description":"The date and time the validator’s exit message was broadcasted to the beacon node. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains on demand exit related information if the validator has initiated the voluntary exit. Otherwise, it will be null."},"PresignedExitData":{"title":"Pre-signed Exit Data","type":"object","properties":{"fork_version":{"type":"string","description":"The genesis fork version used when generating the pre-signed exit message."},"encrypted_exit_message":{"type":"string","description":"The encrypted pre-signed exit message. The client can decrypt this message using their private key."}},"description":"This JSON object will be populated if the include_presigned_exit query parameter is set to “true” and the validator is in active status for at-least 256 epochs. Otherwise, it will be set to null."},"StakingRequestInfo":{"title":"Staking Request Data","type":"object","properties":{"staking_ref_id":{"type":"string","description":"A unique reference ID generated by the staking infrastructure for the staking request."},"provisioned_at":{"type":"string","description":"The date and time when the validator was provisioned by the staking infrastructure. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains the staking request id and validators provisioned date and time. This should be set to ‘null’ for externally provisioned validators."}}}}
```

## The VoluntaryExitData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"VoluntaryExitData":{"title":"Voluntary Exit Data","type":"object","properties":{"request_id":{"type":"string","description":"Unique request id sent by the client when requesting the voluntary exit."},"requested_at":{"type":"string","description":"The date and time the exit request was received. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"submitted_at":{"type":"string","description":"The date and time the validator’s exit message was broadcasted to the beacon node. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains on demand exit related information if the validator has initiated the voluntary exit. Otherwise, it will be null."}}}}
```

## The ValidatorInfoResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorInfoResponse":{"title":"Validator Info","type":"object","properties":{"network":{"type":"string","description":"The network on which validators were created.","enum":["mainnet","hoodi"]},"last_monitored_epoch":{"type":"integer","description":"The most recent epoch successfully monitored for the validator, regardless of whether a validator record was persisted. Not applicable from staking initiation until the validator becomes active unless an epoch record exists for the last monitored epoch. Epoch records are created only when there is a balance, status, or reward update for that epoch.","format":"int32"},"epoch":{"type":"integer","description":"The specific blockchain epoch to which the returned validator details correspond.","format":"int32"},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"pubkey":{"type":"string","description":"Public key of the validator."},"region":{"type":"string","description":"The geographic region where the validator will be created.","enum":["US","EU","KR"]},"validator_index":{"type":"integer","description":"Validator index.","format":"int32"},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator. "},"fee_recipient_address":{"type":"string","description":"The fee recipient address belongs to the validator."},"estimated_activation_at":{"type":"string","description":"Estimate of when the validator will become active and start earning rewards. This will be populated since the validator is transitioned to DEPOSITED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"estimated_exit_at":{"type":"string","description":"Estimate of when the validator will exit and stop earning rewards. This will be populated since the validator is transitioned to EXIT_INITIATED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"estimated_withdrawal_at":{"type":"string","description":"Estimate of when the validator’s principal will become withdrawable. This will be populated since the validator is transitioned to EXITED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"balance_in_wei":{"type":"string","description":"Actual balance of the validator in WEI."},"balance_in_eth":{"type":"number","description":"Actual balance of the validator in ETH.","format":"double"},"status_history":{"type":"array","items":{"$ref":"#/components/schemas/StatusHistoryData"}},"voluntary_exit":{"$ref":"#/components/schemas/VoluntaryExitData"},"presigned_exit":{"$ref":"#/components/schemas/PresignedExitData"},"staking_request_info":{"$ref":"#/components/schemas/StakingRequestInfo"}}},"StatusHistoryData":{"title":"Status History Data","type":"object","properties":{"status":{"type":"string","description":"Status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"transitioned_at":{"type":"string","description":"The date and time the validator transitioned into the given status. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"An array that contains the state transition of the validator. "},"VoluntaryExitData":{"title":"Voluntary Exit Data","type":"object","properties":{"request_id":{"type":"string","description":"Unique request id sent by the client when requesting the voluntary exit."},"requested_at":{"type":"string","description":"The date and time the exit request was received. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"submitted_at":{"type":"string","description":"The date and time the validator’s exit message was broadcasted to the beacon node. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains on demand exit related information if the validator has initiated the voluntary exit. Otherwise, it will be null."},"PresignedExitData":{"title":"Pre-signed Exit Data","type":"object","properties":{"fork_version":{"type":"string","description":"The genesis fork version used when generating the pre-signed exit message."},"encrypted_exit_message":{"type":"string","description":"The encrypted pre-signed exit message. The client can decrypt this message using their private key."}},"description":"This JSON object will be populated if the include_presigned_exit query parameter is set to “true” and the validator is in active status for at-least 256 epochs. Otherwise, it will be set to null."},"StakingRequestInfo":{"title":"Staking Request Data","type":"object","properties":{"staking_ref_id":{"type":"string","description":"A unique reference ID generated by the staking infrastructure for the staking request."},"provisioned_at":{"type":"string","description":"The date and time when the validator was provisioned by the staking infrastructure. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains the staking request id and validators provisioned date and time. This should be set to ‘null’ for externally provisioned validators."}}}}
```

## The SummaryData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"SummaryData":{"title":"Summary Data","type":"object","properties":{"status":{"type":"string","description":"Status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"count":{"type":"integer","description":"The number of validators in the corresponding status. ","format":"int64"}},"description":"An array that contains validators summary."}}}}
```

## The ValidatorsSummaryResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorsSummaryResponse":{"title":"Validator Summary Response","type":"object","properties":{"network":{"type":"string","description":"Network specified in the request.","enum":["mainnet","hoodi"]},"total":{"type":"integer","description":"Total number of validators provisioned for the given client and the network.","format":"int64"},"data":{"type":"array","description":"An array that contains validators summary.","items":{"$ref":"#/components/schemas/SummaryData"}}}},"SummaryData":{"title":"Summary Data","type":"object","properties":{"status":{"type":"string","description":"Status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"count":{"type":"integer","description":"The number of validators in the corresponding status. ","format":"int64"}},"description":"An array that contains validators summary."}}}}
```

## The ConsolidateRequest object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ConsolidateRequest":{"title":"Consolidate Request","type":"object","required":["client_req_id","network","source_pubkeys"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the staking request generated by the client."},"network":{"description":"The network to which the source and destination validators belong to. Supported values are:\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"source_pubkeys":{"type":"array","minItems":1,"maxItems":50,"uniqueItems":true,"description":"The type 0x01 validators to be converted to type 0x02 or type 0x01 and 0x02 validators to be merged with the destination_pubkey. \r\n\r\nA maximum of 50 validators are supported.","items":{"type":"string"}},"destination_pubkey":{"type":"string","description":"The validator that will hold the merged balance. Must be a 0x02 type validator."}}}}}}
```

## The ConsolidateResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ConsolidateResponse":{"title":"Consolidate Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The unique identifier specified in the request."},"network":{"description":"Network to which the source and destination validators belong to. ","enum":["mainnet","hoodi"]},"destination_pubkey":{"type":"string","description":"The validator that will hold the merged balance. If the request was a conversion, this will be kept empty."},"consolidation_contract_address":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract."},"data":{"type":"array","items":{"$ref":"#/components/schemas/ConsolidateResponseData"}},"created_at":{"type":"string","description":"The time at which the request was received by the platform. Time will be shown in the “YYYY-MM-DD HH:mm:ss” format."}}},"ConsolidateResponseData":{"title":"Consolidate Response Data","type":"object","properties":{"source_pubkey":{"type":"string","description":"Source public key."},"contract_call_data":{"type":"string","description":"The unsigned transaction payload relevant for the source public key."},"signer":{"type":"array","minItems":1,"maxItems":1,"description":"Withdrawal address of the source public key.","items":{"type":"string"}}}}}}}
```

## The ConsolidateResponseData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ConsolidateResponseData":{"title":"Consolidate Response Data","type":"object","properties":{"source_pubkey":{"type":"string","description":"Source public key."},"contract_call_data":{"type":"string","description":"The unsigned transaction payload relevant for the source public key."},"signer":{"type":"array","minItems":1,"maxItems":1,"description":"Withdrawal address of the source public key.","items":{"type":"string"}}}}}}}
```

## The ELExitRequest object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ELExitRequest":{"title":"EL Exit Request","type":"object","required":["client_req_id","network","type"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the execution layer triggerable exit request provided by the client."},"network":{"enum":["mainnet","hoodi"],"description":"Network to which the validators belongs to. Supported values are:\r\n- mainnet\r\n- hoodi"},"type":{"enum":[1,2],"description":"Indicates the type of attribute used to identify the validators to exit. The possible values are:\r\n- 1 (pubkey)\r\n- 2 (validator_index)"},"pubkeys":{"type":"array","minItems":1,"maxItems":100,"uniqueItems":true,"description":"List of validator public keys to be exited. \r\n\r\nThis is required if the exit type is 1. \r\n\r\nA maximum of 100 public keys can be specified.","items":{"type":"string"}},"validator_indexes":{"type":"array","minItems":1,"maxItems":100,"uniqueItems":true,"description":"List of validator indexes to be exited. \r\n\r\nThis is required if the exit type is 2.\r\n\r\nA maximum of 100 validator indexes can be specified.","items":{"type":"integer","format":"int32"}}}}}}}
```

## The ELExitResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ELExitResponse":{"title":"EL Exit Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The unique identifier specified in the request."},"network":{"description":"Network to which the validators belong to. ","enum":["mainnet","hoodi"]},"exit_contract_address":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract."},"data":{"type":"array","items":{"$ref":"#/components/schemas/ELExitResponseData"}},"created_at":{"type":"string","description":"The time at which the request was received by the platform. Time will be shown in the “YYYY-MM-DD HH:mm:ss” format."}}},"ELExitResponseData":{"title":"EL Exit Response Data","type":"object","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","format":"int32","description":"Index of the validator."},"contract_call_data":{"type":"string","description":"The unsigned transaction payload associated with the exit."},"signer":{"type":"array","minItems":1,"maxItems":1,"description":"Withdrawal address of the validator public key.","items":{"type":"string"}}}}}}}
```

## The ELExitResponseData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ELExitResponseData":{"title":"EL Exit Response Data","type":"object","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","format":"int32","description":"Index of the validator."},"contract_call_data":{"type":"string","description":"The unsigned transaction payload associated with the exit."},"signer":{"type":"array","minItems":1,"maxItems":1,"description":"Withdrawal address of the validator public key.","items":{"type":"string"}}}}}}}
```

## The ELWithdrawalRequest object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ELWithdrawalRequest":{"title":"EL Withdrawal Request","type":"object","required":["client_req_id","network","type","data"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the execution layer triggerable withdrawal request provided by the client."},"network":{"enum":["mainnet","hoodi"],"description":"Network to which the validators belongs to. Supported values are:\r\n- mainnet\r\n- hoodi"},"type":{"enum":[1,2],"description":"Indicates the type of attribute used to identify the validators that need partial withdrawals. The possible values are:\r\n- 1 (pubkey)\r\n- 2 (validator_index)"},"data":{"type":"array","items":{"$ref":"#/components/schemas/ELWithdrawalRequestData"}}}},"ELWithdrawalRequestData":{"title":"EL Withdrawal Request Data","type":"object","required":["amount"],"properties":{"pubkey":{"type":"string","description":"Validator public key that needs a partial withdrawal. \r\n\r\nThis is required if the partial withdrawal type is 1. "},"validator_index":{"type":"integer","description":"Validator index that needs a partial withdrawal. \r\n\r\nThis is required if the partial withdrawal type is 2."},"amount":{"type":"number","format":"float","description":"Withdrawal amount corresponding to the given validator."}}}}}}
```

## The ELWithdrawalRequestData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ELWithdrawalRequestData":{"title":"EL Withdrawal Request Data","type":"object","required":["amount"],"properties":{"pubkey":{"type":"string","description":"Validator public key that needs a partial withdrawal. \r\n\r\nThis is required if the partial withdrawal type is 1. "},"validator_index":{"type":"integer","description":"Validator index that needs a partial withdrawal. \r\n\r\nThis is required if the partial withdrawal type is 2."},"amount":{"type":"number","format":"float","description":"Withdrawal amount corresponding to the given validator."}}}}}}
```

## The ELWithdrawalResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ELWithdrawalResponse":{"title":"EL Withdrawal Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The unique identifier specified in the request."},"network":{"description":"Network to which the validators belong to. ","enum":["mainnet","hoodi"]},"withdrawal_contract_address":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract."},"data":{"type":"array","items":{"$ref":"#/components/schemas/ELWithdrawalResponseData"}},"created_at":{"type":"string","description":"The time at which the request was received by the platform. Time will be shown in the “YYYY-MM-DD HH:mm:ss” format."}}},"ELWithdrawalResponseData":{"title":"EL Withdrawal Response Data","type":"object","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","format":"int32","description":"Index of the validator."},"amount":{"type":"number","format":"float","description":"Amount to be withdrawn."},"contract_call_data":{"type":"string","description":"The unsigned transaction payload associated with the partial withdrawal."},"signer":{"type":"array","minItems":1,"maxItems":1,"description":"Withdrawal address of the validator public key.","items":{"type":"string"}}}}}}}
```

## The ELWithdrawalResponseData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ELWithdrawalResponseData":{"title":"EL Withdrawal Response Data","type":"object","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","format":"int32","description":"Index of the validator."},"amount":{"type":"number","format":"float","description":"Amount to be withdrawn."},"contract_call_data":{"type":"string","description":"The unsigned transaction payload associated with the partial withdrawal."},"signer":{"type":"array","minItems":1,"maxItems":1,"description":"Withdrawal address of the validator public key.","items":{"type":"string"}}}}}}}
```

## The TopUpRequest object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"TopUpRequest":{"title":"Top Up Request","type":"object","required":["client_req_id","network","data"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the execution layer triggerable withdrawal request provided by the client."},"network":{"enum":["mainnet","hoodi"],"description":"Network to which the validators belongs to. Supported values are:\r\n- mainnet\r\n- hoodi"},"data":{"type":"array","items":{"$ref":"#/components/schemas/TopUpRequestData"}}}},"TopUpRequestData":{"title":"Top Up Request Data","type":"object","required":["pubkey","deposit_amount"],"properties":{"pubkey":{"type":"string","description":"Validator that needs to be topped up. "},"deposit_amount":{"type":"number","format":"float","description":"The ETH amount that must be topped up. "}}}}}}
```

## The TopUpRequestData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"TopUpRequestData":{"title":"Top Up Request Data","type":"object","required":["pubkey","deposit_amount"],"properties":{"pubkey":{"type":"string","description":"Validator that needs to be topped up. "},"deposit_amount":{"type":"number","format":"float","description":"The ETH amount that must be topped up. "}}}}}}
```

## The TopUpResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"TopUpResponse":{"title":"Top Up Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The unique identifier specified in the request."},"network":{"type":"string","description":"Network to which the validators belong to. ","enum":["mainnet","hoodi"]},"data":{"type":"array","description":"A block that contains validator batches. Each batch includes details of 100 validators and the associated funding transaction.","items":{"$ref":"#/components/schemas/TopUpResponseBatchData"}}}},"TopUpResponseBatchData":{"title":"Top Up Response Batch Data","type":"object","properties":{"batch_id":{"description":"Identifier of the validator batch. Possible values are 1 - 10. ","enum":[1,2,3,4,5,6,7,8,9,10]},"deposit_data":{"type":"array","description":"An array of validator details in this batch. ","items":{"$ref":"#/components/schemas/TopUpResponseDepositData"}},"deposit_transaction":{"type":"array","items":{"$ref":"#/components/schemas/TopUpResponseTransactionData"}}}},"TopUpResponseDepositData":{"title":"Top Up Response Deposit Data","type":"object","description":"An array of validator details in this batch.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"amount":{"type":"number","description":"The amount of ETH in GWEI required to be deposited.","format":"double"},"withdrawal_credentials":{"type":"string","description":"Withdrawal credentials for the validator funds to be withdrawn upon exit."},"signature":{"type":"string","description":"A “proof of possession” which signs over pubkey, withdrawal_credentials, and amount using the validator private key."},"deposit_data_root":{"type":"string","description":"Merkle root hash of the deposit data."},"deposit_message_root":{"type":"string","description":"Merkle root hash of the deposit message."},"fork_version":{"type":"string","description":"The genesis fork version."},"deposit_cli_version":{"type":"string","description":"Staking deposit cli version."}}},"TopUpResponseTransactionData":{"title":"Top Up Response Transaction Data","type":"object","description":"The JSON object that contains the funding transaction details of all validators belonging to this batch.","properties":{"deposit_amount_wei":{"type":"string","description":"Total amount of ETH to be topped up for the received top up request, in wei."},"deposit_address":{"type":"string","description":"Batch deposit contract address."},"contract_call_data":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract. "}}}}}}
```

## The TopUpResponseBatchData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"TopUpResponseBatchData":{"title":"Top Up Response Batch Data","type":"object","properties":{"batch_id":{"description":"Identifier of the validator batch. Possible values are 1 - 10. ","enum":[1,2,3,4,5,6,7,8,9,10]},"deposit_data":{"type":"array","description":"An array of validator details in this batch. ","items":{"$ref":"#/components/schemas/TopUpResponseDepositData"}},"deposit_transaction":{"type":"array","items":{"$ref":"#/components/schemas/TopUpResponseTransactionData"}}}},"TopUpResponseDepositData":{"title":"Top Up Response Deposit Data","type":"object","description":"An array of validator details in this batch.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"amount":{"type":"number","description":"The amount of ETH in GWEI required to be deposited.","format":"double"},"withdrawal_credentials":{"type":"string","description":"Withdrawal credentials for the validator funds to be withdrawn upon exit."},"signature":{"type":"string","description":"A “proof of possession” which signs over pubkey, withdrawal_credentials, and amount using the validator private key."},"deposit_data_root":{"type":"string","description":"Merkle root hash of the deposit data."},"deposit_message_root":{"type":"string","description":"Merkle root hash of the deposit message."},"fork_version":{"type":"string","description":"The genesis fork version."},"deposit_cli_version":{"type":"string","description":"Staking deposit cli version."}}},"TopUpResponseTransactionData":{"title":"Top Up Response Transaction Data","type":"object","description":"The JSON object that contains the funding transaction details of all validators belonging to this batch.","properties":{"deposit_amount_wei":{"type":"string","description":"Total amount of ETH to be topped up for the received top up request, in wei."},"deposit_address":{"type":"string","description":"Batch deposit contract address."},"contract_call_data":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract. "}}}}}}
```

## The TopUpResponseDepositData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"TopUpResponseDepositData":{"title":"Top Up Response Deposit Data","type":"object","description":"An array of validator details in this batch.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"amount":{"type":"number","description":"The amount of ETH in GWEI required to be deposited.","format":"double"},"withdrawal_credentials":{"type":"string","description":"Withdrawal credentials for the validator funds to be withdrawn upon exit."},"signature":{"type":"string","description":"A “proof of possession” which signs over pubkey, withdrawal_credentials, and amount using the validator private key."},"deposit_data_root":{"type":"string","description":"Merkle root hash of the deposit data."},"deposit_message_root":{"type":"string","description":"Merkle root hash of the deposit message."},"fork_version":{"type":"string","description":"The genesis fork version."},"deposit_cli_version":{"type":"string","description":"Staking deposit cli version."}}}}}}
```

## The TopUpResponseTransactionData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"TopUpResponseTransactionData":{"title":"Top Up Response Transaction Data","type":"object","description":"The JSON object that contains the funding transaction details of all validators belonging to this batch.","properties":{"deposit_amount_wei":{"type":"string","description":"Total amount of ETH to be topped up for the received top up request, in wei."},"deposit_address":{"type":"string","description":"Batch deposit contract address."},"contract_call_data":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract. "}}}}}}
```

## The FeeRequest object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"FeeRequest":{"title":"Fee Request","type":"object","required":["network","operation_type"],"properties":{"network":{"description":"Network to which the validators belongs to. Supported values are:\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"operation_type":{"enum":[1,2],"description":"Indicates the type of operation for which the user is requesting fees.\r\n- 1 (validator_consolidation_or_conversion)\r\n- 2 (el_triggerable_exit_or_withdrawal)"}}}}}}
```

## The FeeResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"FeeResponse":{"title":"FeeResponse","type":"object","properties":{"network":{"description":"Network to which the validators belong to.","enum":["mainnet","hoodi"]},"operation_type":{"description":"Indicates the type of operation for which the user is requesting fees.\r\n- validator_consolidation_or_conversion\r\n- el_triggerable_exit_or_withdrawal","enum":["validator_consolidation_or_conversion","el_triggerable_exit_or_withdrawal"]},"fee_in_ETH":{"type":"number","description":"The applicable fee in ETH. ","format":"float"},"fee_in_WEI":{"type":"string","description":"The applicable fee in WEI. "},"retrieved_at":{"type":"string","description":"The time at which the fee was retrieved by the platform. Time will be shown in the “YYYY-MM-DD HH:mm:ss” format."}}}}}}
```

## The DepositDataResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"DepositDataResponse":{"title":"Staking Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the original Provision Validators request for which the response is returned."},"staking_ref_id":{"type":"string","description":"A unique reference ID generated by the staking infrastructure for the staking request."},"network":{"type":"string","description":"The network on which validators should be created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"withdrawal_credentials_type":{"enum":["0x01","0x02"],"description":"The withdrawal credential type of the validator(s) that will be created. Applicable values are;\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"The specified address to which funds will be withdrawn, as mentioned in the staking request."},"fee_recipient_address":{"type":"string","description":"The fee recipient address that receives Execution Layer fees, as mentioned in the staking request."},"region":{"type":"string","description":"The geographic region where the validator will be created. Supported values are;\r\n- US\r\n- EU\r\n- KR","enum":["US","EU","KR"]},"provisioned_at":{"type":"string","description":"The date and time when the validator was provisioned by the staking infrastructure."},"data":{"type":"array","description":"A block that contains validator batches. Each batch includes details of 100 validators and the associated funding transaction.","items":{"$ref":"#/components/schemas/BatchData"}}}},"BatchData":{"title":"Staking Response Batch","type":"object","properties":{"batch_id":{"type":"integer","description":"Identifier of the validator batch.","format":"int32","enum":[1,2,3,4,5,6,7,8,9,10]},"deposit_data":{"type":"array","description":"An array of validator details in this batch.","items":{"$ref":"#/components/schemas/DepositData"}},"deposit_transaction":{"$ref":"#/components/schemas/DepositTransaction"}},"description":"A block that contains validator batches. Each batch includes details of 250 validators and the associated funding transaction."},"DepositData":{"title":"Staking Response Batch Deposit Data","type":"object","description":"An array of validator details in this batch.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"amount":{"type":"number","description":"The amount of ETH in GWEI required to be deposited.","format":"double"},"withdrawal_credentials":{"type":"string","description":"Withdrawal credentials for the validator funds to be withdrawn upon exit."},"signature":{"type":"string","description":"A “proof of possession” which signs over pubkey, withdrawal_credentials, and amount using the validator private key."},"deposit_data_root":{"type":"string","description":"Merkle root hash of the deposit data."},"deposit_message_root":{"type":"string","description":"Merkle root hash of the deposit message."},"fork_version":{"type":"string","description":"The genesis fork version."},"deposit_cli_version":{"type":"string","description":"Staking deposit cli version."}}},"DepositTransaction":{"title":"Staking Response Batch Deposit Transaction","type":"object","description":"The JSON object that contains the funding transaction details of all validators belonging to this batch.","properties":{"deposit_amount_wei":{"type":"string","description":"The total amount of ETH to be staked for the batch in WEI."},"deposit_address":{"type":"string","description":"Batch deposit contract address."},"contract_call_data":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract. "}}}}}}
```

## The DepositDataErrorResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"DepositDataErrorResponse":{"title":"DepositDataErrorResponse","type":"object","required":["client_req_id","errors"],"properties":{"client_req_id":{"type":"string","description":"Client Request ID that the Staking Partner provided."},"errors":{"type":"array","items":{"$ref":"#/components/schemas/DepositDataErrorMessage"}}}},"DepositDataErrorMessage":{"title":"DepositDataErrorMessage","type":"object","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}}}}}
```

## The DepositDataErrorMessage object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"DepositDataErrorMessage":{"title":"DepositDataErrorMessage","type":"object","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}}}}}
```

## The UpdateFeeRecipientRequest object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"UpdateFeeRecipientRequest":{"title":"UpdateFeeRecipientRequest","type":"object","required":["client_req_id","network","type","data"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the request provided by the client."},"network":{"type":"string","description":"Network to which the validators belong to.\r\n\r\nPossible values:\r\n- mainnet\r\n- hoodi"},"type":{"type":"integer","description":"Indicates the type of attribute used to identify the validators that need address changes. The possible values are,\r\n- 1 (pubkeys)\r\n\r\n2 (validator_index)"},"data":{"type":"array","items":{"$ref":"#/components/schemas/UpdateFeeRecipientData"}}}},"UpdateFeeRecipientData":{"title":"UpdateFeeRecipientData","type":"object","required":["fee_recipient_address"],"properties":{"pubkey":{"type":"string","description":"Validator public key that needs an address change. \r\n\r\nWill only be required if type = 1.\r\n\r\nAny value provided in this field when type = 2, will be ignored."},"validator_index":{"type":"number","description":"Validator index that needs an address change. \r\n\r\nWill only be required if type = 2.\r\n\r\nAny value provided in this field when type = 1, will be ignored."},"fee_recipient_address":{"type":"string","description":"The new fee recipient address corresponding to the given validator."}}}}}}
```

## The UpdateFeeRecipientData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"UpdateFeeRecipientData":{"title":"UpdateFeeRecipientData","type":"object","required":["fee_recipient_address"],"properties":{"pubkey":{"type":"string","description":"Validator public key that needs an address change. \r\n\r\nWill only be required if type = 1.\r\n\r\nAny value provided in this field when type = 2, will be ignored."},"validator_index":{"type":"number","description":"Validator index that needs an address change. \r\n\r\nWill only be required if type = 2.\r\n\r\nAny value provided in this field when type = 1, will be ignored."},"fee_recipient_address":{"type":"string","description":"The new fee recipient address corresponding to the given validator."}}}}}}
```

## The UpdateFeeRecipientResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"UpdateFeeRecipientResponse":{"title":"UpdateFeeRecipientResponse","type":"object","properties":{"client_req_id":{"type":"string","description":"The unique identifier specified in the request."},"network":{"type":"string","description":"Network to which the validators belong to."},"data":{"type":"array","items":{"$ref":"#/components/schemas/UpdateFeeRecipientResponseData"}}}},"UpdateFeeRecipientResponseData":{"title":"UpdateFeeRecipientData","type":"object","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"number","description":"Index of the validator."},"fee_recipient_address":{"type":"string","description":"The updated fee recipient address."}}}}}}
```

## The UpdateFeeRecipientResponseData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"UpdateFeeRecipientResponseData":{"title":"UpdateFeeRecipientData","type":"object","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"number","description":"Index of the validator."},"fee_recipient_address":{"type":"string","description":"The updated fee recipient address."}}}}}}
```

## The ValidatorMonitoringRequest object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorMonitoringRequest":{"title":"ValidatorMonitoringRequest","type":"object","required":["network","data"],"properties":{"network":{"type":"string","description":"Network to which the validators belongs to. Supported values are:\r\n- mainnet\r\n- hoodi"},"data":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorMonitoringRequestData"}}}},"ValidatorMonitoringRequestData":{"title":"ValidatorMonitoringRequestData","type":"object","required":["pubkey"],"properties":{"pubkey":{"type":"string","description":"The public key of the validator that will be monitored on the platform."},"account":{"type":"string","description":"The account name registered on the platform that is associated with the Staking Partner. If not provided, requests will be assigned to the default account."}}}}}}
```

## The ValidatorMonitoringRequestData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorMonitoringRequestData":{"title":"ValidatorMonitoringRequestData","type":"object","required":["pubkey"],"properties":{"pubkey":{"type":"string","description":"The public key of the validator that will be monitored on the platform."},"account":{"type":"string","description":"The account name registered on the platform that is associated with the Staking Partner. If not provided, requests will be assigned to the default account."}}}}}}
```

## The ValidatorMonitoringResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorMonitoringResponse":{"title":"ValidatorMonitoringResponse","type":"object","properties":{"validator_monitoring_reference_id":{"type":"string","description":"A system-generated unique identifier for the API request. This identifier is recorded in the ‘Link ID’ field of all positions created through the API request."}}}}}}
```


# Solana

The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500.

## Stake Account Creation

> This endpoint allows clients to initiate staking by creating and funding a new stake account on the Solana blockchain.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/stake-account":{"post":{"summary":"Stake Account Creation","description":"This endpoint allows clients to initiate staking by creating and funding a new stake account on the Solana blockchain.","tags":["Solana"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["network","funding_pubkey","amount"],"properties":{"network":{"type":"string","description":"The network on which the stake account should be created. Supported values;\r\n-mainnet\r\n-testnet\r\n-devnet","enum":["mainnet","testnet","devnet"]},"participant":{"type":"string","description":"The participant name registered on the staking platform that corresponds to the client's customer. \r\nIf not provided requests will be assigned to a default participant connected to the API key."},"account":{"type":"string","description":"The account name registered on the staking platform that corresponds to the client's customer. \r\nIf not provided requests will be assigned to a default account linked to the participant."},"funding_pubkey":{"type":"string","description":"The Solana account address that will be funding the stake account."},"amount":{"type":"number","description":"The amount of SOL that should be sent to the stake account. The minimum stake amount is 0.01 SOL."},"stake_authority_pubkey":{"type":"string","description":"The Solana account address that should sign all stake account related actions (Delegation, Undelegation, Split and Merge). If not provided will default to the \"funding_pubkey\"."},"withdraw_authority_pubkey":{"type":"string","description":"The Solana account address that should sign withdrawal transactions. If not provided will default to the \"funding_pubkey\"."}}}}}},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"type":"object","properties":{"stake_account_pubkey":{"type":"string","description":"The public key of the newly created stake account."},"unsigned_tx":{"type":"string","description":"The Hexadecimal encoded serialized unsigned transaction which should be signed by the relevant parties specified in the signers field."},"signers":{"type":"array","description":"The funding account that has to sign the transaction.","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time","description":"The time at which the request was received by the staking platform.\r\nTimes will be shown in the \"YYYY-MM-DD HH:mm:ss\" format."}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Delegation

> This end point supports the delegation of stake accounts under a selected validator. Clients can delegate stake accounts that are currently onboarded onto the staking platform as well as stake accounts that do not have a corresponding position on the staking platform i.e. stake accounts created elsewhere.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/delegate":{"post":{"summary":"Delegation","description":"This end point supports the delegation of stake accounts under a selected validator. Clients can delegate stake accounts that are currently onboarded onto the staking platform as well as stake accounts that do not have a corresponding position on the staking platform i.e. stake accounts created elsewhere.","tags":["Solana"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["stake_account_pubkey","validator_pubkey"],"properties":{"stake_account_pubkey":{"type":"string","description":"The stake account that should be delegated."},"validator_pubkey":{"type":"string","description":"The validator address under which the stake account should be delegated."},"fee_payer":{"type":"string","description":"The Solana account address that should pay the fees related to the transaction. If not provided fees should be paid by the Stake Authority of the stake account."},"participant":{"type":"string","description":"The participant name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position will be created under a default participant."},"account":{"type":"string","description":"The account name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position will be created under a default account."}}}}}},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"type":"object","properties":{"stake_account_pubkey":{"type":"string","description":"The stake account that was sent in the delegation request."},"validator_pubkey":{"type":"string","description":"The validator address that was sent in the delegation request."},"unsigned_tx":{"type":"string","description":"The Hexadecimal encoded serialized unsigned transaction which should be signed by the relevant parties specified in the signers field."},"signers":{"type":"array","description":"An array of the Solana account addresses that should sign the transaction. A delegation request should be signed by the Stake Authority of the stake account and the \"fee_payer\" (If applicable).","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time","description":"The time at which the request was received by the staking platform. Times will be shown in the \"YYYY-MM-DD HH:mm:ss\" format."}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Undelegation

> Clients can use the undelegation endpoint to undelegate an existing delegation. This endpoint allows clients to undelegate stake accounts that are currently onboarded onto the staking platform as well as stake accounts that do not have a corresponding position on the staking platform&#x20;

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/undelegate":{"post":{"summary":"Undelegation","description":"Clients can use the undelegation endpoint to undelegate an existing delegation. This endpoint allows clients to undelegate stake accounts that are currently onboarded onto the staking platform as well as stake accounts that do not have a corresponding position on the staking platform ","tags":["Solana"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["stake_account_pubkey"],"properties":{"stake_account_pubkey":{"type":"string","description":"The stake account that should be undelegated."},"fee_payer":{"type":"string","description":"TThe Solana account address that should pay the fees related to the transaction. If not provided fees should be paid by the Stake Authority of the stake account."},"participant":{"type":"string","description":"The participant name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position will be created under a default participant."},"account":{"type":"string","description":"The account name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position will be created under a default account."}}}}}},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"type":"object","properties":{"stake_account_pubkey":{"type":"string","description":"The stake account that was sent in the undelegation request."},"unsigned_tx":{"type":"string","description":"The Hexadecimal encoded serialized unsigned transaction which should be signed by the relevant parties specified in the signers field."},"signers":{"type":"array","description":"An array of the Solana account addresses that should sign the transaction. An undelegation request should be signed by the Stake Authority of the stake account and the \"fee_payer\" (If applicable).","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time","description":"The time at which the request was received by the staking platform. Times will be shown in the \"YYYY-MM-DD HH:mm:ss\" format."}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Withdrawals

> Clients can use this endpoint to withdraw undelegated SOL from both onboarded stake accounts and those without a corresponding position on the staking platform. Withdrawals can be made from a stake account to a Solana account (wallet) or between stake accounts.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/withdraw":{"post":{"summary":"Withdrawals","description":"Clients can use this endpoint to withdraw undelegated SOL from both onboarded stake accounts and those without a corresponding position on the staking platform. Withdrawals can be made from a stake account to a Solana account (wallet) or between stake accounts.","tags":["Solana"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["stake_account_pubkey","amount"],"properties":{"stake_account_pubkey":{"type":"string","description":"The stake account from which SOL should be withdrawn."},"recipient_pubkey":{"type":"string","description":"The stake account or Solana account (wallet) to which the withdrawn SOL will be transferred. If not provided the withdrawal will be done to the funding account of the stake account."},"amount":{"type":"number","description":"The amount of SOL that should be withdrawn. The amount should be sent without trailing zeros."},"fee_payer":{"type":"string","description":"The Solana account address that should pay the fees related to the transaction. If not provided fees should be paid by the Withdraw Authority of the stake account."},"participant":{"type":"string","description":"The participant name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position will be created under a default participant."},"account":{"type":"string","description":"The account name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position will be created under a default account."}}}}}},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"type":"object","properties":{"stake_account_pubkey":{"type":"string","description":"The stake account that was sent in the withdrawal request."},"recipient_pubkey":{"type":"string","description":"The recipient address that was sent in the withdrawal request."},"amount":{"type":"number","description":"The amount sent in the withdrawal request."},"unsigned_tx":{"type":"string","description":"The Hexadecimal encoded serialized unsigned transaction which should be signed by the relevant parties specified in the signers field."},"signers":{"type":"array","description":"An array of the Solana account addresses that should sign the transaction. A withdrawal request should be signed by the Withdraw Authority of the stake account and the \"fee_payer\" (If applicable).","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time","description":"The time at which the request was received by the staking platform. Times will be shown in the \"YYYY-MM-DD HH:mm:ss\" format."}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Split

> Clients can use this endpoint to split the balance of a stake account into a new stake account. It supports splitting both onboarded stake accounts and those without a corresponding position on the staking platform.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/split":{"post":{"summary":"Split","description":"Clients can use this endpoint to split the balance of a stake account into a new stake account. It supports splitting both onboarded stake accounts and those without a corresponding position on the staking platform.","tags":["Solana"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["stake_account_pubkey","amount"],"properties":{"stake_account_pubkey":{"type":"string","description":"The stake account that should be split."},"amount":{"type":"number","description":"The amount of SOL that should be split from the existing stake account to the newly created stake account."},"fee_payer":{"type":"string","description":"The Solana account address that should pay the fees related to the transaction. If not provided fees should be paid by the Stake Authority of the stake account."},"participant":{"type":"string","description":"The participant name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position will be created under a default participant."},"account":{"type":"string","description":"The account name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position will be created under a default account."}}}}}},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"type":"object","properties":{"source_account_pubkey":{"type":"string","description":"The existing stake account that was sent in the split request"},"destination_account_pubkey":{"type":"string","description":"The newly created stake account to which SOL will be transferred"},"unsigned_tx":{"type":"string","description":"The Hexadecimal encoded serialized unsigned transaction which should be signed by the relevant parties specified in the signers field."},"signers":{"type":"array","description":"An array of the Solana account addresses that should sign the transaction. A split request should be signed by the Stake Authority of the stake account and the \"fee_payer\" (If applicable)","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time","description":"The time at which the request was received by the staking platform. Times will be shown in the \"YYYY-MM-DD HH:mm:ss\" format"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Merge

> The Staking API offers an endpoint to merge two stake accounts that share the same stake and withdrawal authorities into a single stake account. This endpoint allows clients to merge stake accounts that are currently onboarded onto the staking platform as well as merge stake accounts that do not have a corresponding position on the staking platform.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/merge":{"post":{"summary":"Merge","description":"The Staking API offers an endpoint to merge two stake accounts that share the same stake and withdrawal authorities into a single stake account. This endpoint allows clients to merge stake accounts that are currently onboarded onto the staking platform as well as merge stake accounts that do not have a corresponding position on the staking platform.","tags":["Solana"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["source_account_pubkey","destination_account_pubkey"],"properties":{"source_account_pubkey":{"type":"string","description":"The stake account that should be merged into the destination account."},"destination_account_pubkey":{"type":"string","description":"The stake account that the source account will be merged into."},"fee_payer":{"type":"string","description":"The Solana account address that should pay the fees related to the transaction. If not provided fees should be paid by the Stake Authority of the stake account."},"participant":{"type":"string","description":"The participant name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position/s will be created under a default participant."},"account":{"type":"string","description":"The account name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position/s will be created under a default account."}}}}}},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"type":"object","properties":{"source_account_pubkey":{"type":"string","description":"The source stake account that was sent in the merge request."},"destination_account_pubkey":{"type":"string","description":"The destination stake account that was sent in the merge request."},"unsigned_tx":{"type":"string","description":"The Hexadecimal encoded serialized unsigned transaction which should be signed by the relevant parties specified in the signers field."},"signers":{"type":"array","description":"An array of the Solana account addresses that should sign the transaction. A merge request should be signed by the Stake Authority of the stake account and the \"fee_payer\" (If applicable).","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time","description":"The time at which the request was received by the staking platform. Times will be shown in the \"YYYY-MM-DD HH:mm:ss\" format."}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Transfer

> Clients can use this endpoint to transfer SOL from a Solana account (wallet) to a stake account. This endpoint allows clients to transfer SOL to stake accounts that have been onboarded onto the staking platform as well as to stake accounts that do not have a corresponding position on the staking platform.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/transfer":{"post":{"summary":"Transfer","description":"Clients can use this endpoint to transfer SOL from a Solana account (wallet) to a stake account. This endpoint allows clients to transfer SOL to stake accounts that have been onboarded onto the staking platform as well as to stake accounts that do not have a corresponding position on the staking platform.","tags":["Solana"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["source_account_pubkey","destination_account_pubkey","amount"],"properties":{"source_account_pubkey":{"type":"string","description":"The Solana account (wallet) from which SOL will be transferred out of."},"destination_account_pubkey":{"type":"string","description":"The stake account into which SOL will be transferred."},"amount":{"type":"number","description":"The amount of SOL to be transferred to the stake account."},"fee_payer":{"type":"string","description":"The Solana account address that should pay the fees related to the transaction. If not provided fees should be paid by the 'source_account_pubkey'."},"participant":{"type":"string","description":"The participant name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position/s will be created under a default participant."},"account":{"type":"string","description":"The account name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position/s will be created under a default account."}}}}}},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"type":"object","properties":{"from_account_pubkey":{"type":"string","description":"The Solana account (wallet) from which SOL will be transferred."},"to_account_pubkey":{"type":"string","description":"The destination stake account to which SOL will be transferred."},"unsigned_tx":{"type":"string","description":"The Hexadecimal encoded serialized unsigned transaction which should be signed by the relevant parties specified in the signers field."},"signers":{"type":"array","items":{"type":"string"},"description":"An array of the Solana account addresses that should sign the transaction. A transfer request should be signed by the private key of the source account and the \"fee_payer\" (If applicable)."},"created_at":{"type":"string","format":"date-time","description":"The time at which the request was received by the staking platform. Times will be shown in the \"YYYY-MM-DD HH:mm:ss\" format."}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Submit Signed Transactions

> Clients can submit their signed transactions to the staking platform via this endpoint. Upon receiving a signed transaction the staking platform will broadcast it to the Solana blockchain for execution.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/signed-transaction":{"post":{"summary":"Submit Signed Transactions","description":"Clients can submit their signed transactions to the staking platform via this endpoint. Upon receiving a signed transaction the staking platform will broadcast it to the Solana blockchain for execution.","tags":["Solana"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["stake_account_pubkey","action","tx_payload"],"properties":{"stake_account_pubkey":{"type":"string","description":"The address for which the signed transaction is being sent."},"action":{"type":"string","description":"The action for which the payload is applicable. Supported values are;\r\n- stake_account_creation \r\n- delegate \r\n- undelegate\r\n- withdraw\r\n- split\r\n- merge\r\n- transfer","enum":["stake_account_creation","delegate","undelegate","withdraw","split","merge","transfer"]},"tx_payload":{"type":"string","description":"Hexadecimal encoded serialized signed transaction corresponding to the  unsigned transaction created via respective endpoint."},"destination_account_pubkey":{"type":"string","description":"The destination address for which the signed transaction is being sent. \r\nWill be required if the action is one of the following - withdraw, split, merge, transfer."}}}}}},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"type":"object","properties":{"stake_account_pubkey":{"type":"string","description":"The stake account address in the API request."},"destination_account_pubkey":{"type":"string","description":"The destination address in the API request."},"action":{"type":"string","description":"The action sent in the request."},"tx_hash":{"type":"string","description":"The transaction hash for the broadcasted transaction. The transaction hash will be received after the payload is successfully sent to the Solana blockchain."},"tx_status":{"type":"string","description":"The status of the transaction. Supported values are;\r\n- signed_tx_received\r\n- signed_tx_sent\r\n- broadcasted\r\n- confirmed\r\n- rejected","enum":["signed_tx_received","signed_tx_sent","broadcasted","confirmed","rejected"]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Submit Transaction Hash

> Clients can use this endpoint to submit a transaction hash for a payload independently broadcasted to the blockchain. The staking platform verifies the transaction status and updates the corresponding stake account position accordingly.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/transaction":{"post":{"summary":"Submit Transaction Hash","description":"Clients can use this endpoint to submit a transaction hash for a payload independently broadcasted to the blockchain. The staking platform verifies the transaction status and updates the corresponding stake account position accordingly.","tags":["Solana"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["stake_account_pubkey","action","tx_hash"],"properties":{"stake_account_pubkey":{"type":"string","description":"The address for which the transaction hash is being sent."},"action":{"type":"string","description":"The action for which the payload is applicable. Supported values are;\r\n- stake_account_creation \r\n- delegate \r\n- undelegate\r\n- withdraw\r\n- split\r\n- merge\r\n- transfer","enum":["stake_account_creation","delegate","undelegate","withdraw","split","merge","transfer"]},"tx_hash":{"type":"string","description":"The transaction hash which is being submitted to the staking platform."},"destination_account_pubkey":{"type":"string","description":"The destination address for which the signed transaction is being sent. Will be required if the action is one of the following - withdraw, split, merge, transfer."}}}}}},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"type":"object","properties":{"stake_account_pubkey":{"type":"string","description":"The stake account address in the API request."},"destination_account_pubkey":{"type":"string","description":"The destination address in the API request."},"action":{"type":"string","description":"The action sent in the request."},"tx_hash":{"type":"string","description":"The transaction hash sent in the API request."},"tx_status":{"type":"string","description":"The status of the transaction.Supported values are;\r\n- confirmed\r\n- rejected","enum":["confirmed","rejected"]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Rewards

> The rewards endpoint returns  rewards accrued by a stake account. This endpoint accepts the filtering by start and end (can be epoch or date), and delegator address (stake account) public keys. This endpoint returns the rewards since stake account inception, accrued rewards in the specified period and epoch-wise rewards breakdown for the specified period.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"SOLDelegatorRewardsRequest":{"type":"object","required":["network","rollup_type","start","end","stake_accounts"],"properties":{"network":{"type":"string","description":"The network on which validators should be created. Supported values;\r\n- mainnet\r\n- testnet\r\n- devnet","enum":["mainnet","testnet","devnet"]},"rollup_type":{"type":"integer","description":"Denotes the granularity of rewards breakdown. THe applicable values are;\n- 1 (epoch)\n- 2 (date)","enum":[1,2]},"start":{"type":"string","description":"It specifies the start epoch if the type is 1, or the start date in the \"YYYY-MM-DD\" format (UTC timezone) if the type is 2."},"end":{"type":"string","description":"It specifies the end epoch if the type is 1, or the end date in the \"YYYY-MM-DD\" format (UTC timezone) if the type is 2."},"stake_accounts":{"type":"array","description":"List of delegator stake accounts to fetch the rewards breakdown. A maximum of 50 entries are allowed.","items":{"type":"string","description":"List of delegator stake accounts to fetch the rewards breakdown. A maximum of 50 entries are allowed."}}}},"DelegatorRewardsInfoResponse":{"type":"object","properties":{"network":{"type":"string","description":"Network specified in the request.","enum":["mainnet","testnet","devnet"]},"start":{"type":"string","description":"Start epoch or start date specified in the request."},"end":{"type":"string","description":"End epoch or end date specified in the request."},"page":{"type":"integer","description":"The current page number sent in the request.","format":"int32"},"total":{"type":"integer","description":"The total number of records resulted for the input criteria.","format":"int64"},"data":{"type":"array","description":"An array that contains stake account rewards.","items":{"$ref":"#/components/schemas/DelegatorReward"}}},"title":""},"DelegatorReward":{"type":"object","properties":{"stake_account":{"type":"string","description":"The stake_account that received the rewards."},"validator_address":{"type":"string","description":"Address of the validator that distributed the rewards (the validator the delegator is attached to)."},"total_sol":{"type":"number","format":"double","description":"Total rewards the delegator earned from inception in SOL. Values will be displayed up to 9 decimal places\n\nNote: Block rewards will not be available from delegator inception, therefore this field will not consider block rewards. Only inflation rewards and MEV rewards will be considered.\n"},"total_lamports":{"type":"integer","description":"Total rewards the delegator earned from inception in lamports.\n\nNote : Similar to \"total_sol\" this field will not consider block rewards\n"},"apy":{"type":"number","format":"double","description":"The Annualized Percentage Yield of the stake account. This value is calculated considering net inflation and net MEV rewards earned during the last 10 completed epochs."},"block_rewards_apy":{"type":"number","format":"double","description":"The Annualized Percentage Yield on block rewards earned by the stake account. This value is calculated considering net block rewards earned during the last 10 completed epochs."},"total_apy":{"type":"number","format":"double","description":"The total Annualized Percentage Yield on all rewards attributable to the stake account in the last 10 epochs, after commissions and rebates."},"total_accumulated_sol":{"type":"number","format":"double","description":"Total rewards the delegator has earned for the query criteria in SOL. Values will be displayed up to 9 decimal places\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_accumulated_lamports":{"type":"integer","description":"Total rewards the delegator has earned for the query criteria in lamports.\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"accumulated_gross_block_rewards_sol":{"type":"number","format":"double","description":"The total gross block rewards earned by the stake account for the query criteria in SOL.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_gross_block_rewards_lamports":{"type":"integer","description":"The total gross block rewards earned by the stake account for the query criteria in lamports.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_net_block_rewards_sol":{"type":"number","format":"double","description":"The net block rewards earned by the stake account for the query criteria in SOL, net of the staking platform commissions.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_net_block_rewards_lamports":{"type":"integer","description":"The net block rewards earned by the stake account for the query criteria in lamports, net of the staking platform commissions.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_rewards":{"type":"array","description":"Protocol, MEV, and block rewards for the given delegator and query criteria. A new rewards type \"NET_BLOCK\" has been introduced.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will be set to 0.\n","items":{"$ref":"#/components/schemas/AccumulatedReward"}},"rewards_breakdown":{"type":"array","description":"Per-epoch (or period) rewards breakdown.","items":{"$ref":"#/components/schemas/RewardBreakdown"}}},"required":["stake_account","validator_address"]},"AccumulatedReward":{"type":"object","properties":{"accumulated_sol":{"type":"number","format":"double","description":"Accumulated rewards in SOL between the start and end specified in the request. Values will be displayed up to 9 decimal places\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"accumulated_lamports":{"type":"integer","description":"Accumulated rewards in lamports between the start and end specified in the request.\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"type":{"type":"string","description":"Type of rewards.","enum":["PROTOCOL","MEV","BLOCK","NET_BLOCK"]}}},"RewardBreakdown":{"type":"object","description":"Rewards for a given epoch/period.","properties":{"epoch":{"type":"integer","description":"The epoch corresponding to the rewards. This is applicable only if the rollup_type is 1"},"timestamp":{"type":"string","format":"date-time","description":"If the rollup_type is 1, it should specify the timestamp corresponding to the end of the epoch."},"balance":{"type":"number","format":"double","description":"The balance of the account after rewards have been added."},"total_epoch_sol":{"type":"number","format":"double","description":"Total rewards accumulated during the period in SOL. Values will be displayed up to 9 decimal places\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_epoch_lamports":{"type":"integer","description":"Total rewards accumulated during the period in lamports.\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_epoch_gross_block_rewards_sol":{"type":"number","format":"double","description":"The gross block rewards earned by the stake account for the epoch, in SOL."},"total_epoch_gross_block_rewards_lamports":{"type":"integer","description":"The gross block rewards earned by the stake account for the epoch, in lamports."},"total_epoch_net_block_rewards_sol":{"type":"number","format":"double","description":"The net block rewards earned by the stake account for the epoch, in SOL, net of the staking platform commissions."},"total_epoch_net_block_rewards_lamports":{"type":"integer","description":"The net block rewards earned by the stake account for the epoch, in lamports, net of the staking platform commissions."},"rewards":{"type":"array","description":"An array that contains protocol, mev, and block rewards corresponding to the given epoch. A new rewards type \"NET_BLOCK\" has been introduced.","items":{"$ref":"#/components/schemas/RewardItem"}}},"required":["rewards"]},"RewardItem":{"type":"object","properties":{"rewards_sol":{"type":"number","format":"double","description":"Rewards accumulated during the period in SOL. Values will be displayed up to 9 decimal places\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"rewards_lamports":{"type":"integer","description":"Rewards accumulated during the period in lamports.\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"type":{"type":"string","description":"Type of rewards.","enum":["PROTOCOL","MEV","BLOCK","NET_BLOCK"]}}},"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/rewards":{"post":{"tags":["Solana"],"summary":"Rewards","description":"The rewards endpoint returns  rewards accrued by a stake account. This endpoint accepts the filtering by start and end (can be epoch or date), and delegator address (stake account) public keys. This endpoint returns the rewards since stake account inception, accrued rewards in the specified period and epoch-wise rewards breakdown for the specified period.","operationId":"getSOLDelegatorAccruedRewards","parameters":[{"name":"X-API-KEY","in":"header","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","description":"The current page number requested by the client, if not specified, should be defaulted to 1.","required":false,"schema":{"type":"string"}},{"name":"size","in":"query","description":"The number of entries per page, if not presented in the request, should be defaulted to the maximum value of 250.","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SOLDelegatorRewardsRequest"}}},"required":true},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelegatorRewardsInfoResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Retrieve Multiple Delegators

> The endpoint to retrieve a list of delegators returns the details of the stake accounts monitored by a given client that fit the specified filter criteria in a paginated manner. If no filtration criteria is provided, the endpoint will retrieve a list of all the stake accounts applicable to the client. All timestamp fields in the response are in UTC.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"DelegatorInfoListRequest":{"type":"object","required":["network"],"properties":{"network":{"type":"string","description":"The network on which the queried stake accounts have been created . Supported values;\r\n- mainnet\r\n- testnet\r\n- devnet","enum":["mainnet","testnet","devnet"]},"participant":{"type":"string","description":"The participant name registered on the staking platform from which stake accounts need to be retrieved."},"account":{"type":"string","description":"The account name registered on the staking platform from which stake accounts need to be retrieved."},"status":{"type":"array","description":"The status of the stake accounts that need to be retrieved. Results will be returned in the order of the statuses sent in the request. Supported values;\r\n- ACTIVE\r\n- INACTIVE\r\n- ACTIVATING\r\n- DEACTIVATING","items":{"type":"string","enum":["ACTIVE","INACTIVE","ACTIVATING","DEACTIVATING"]}},"stake_accounts":{"type":"array","description":"List of delegator stake accounts to fetch the delegator information. A maximum of 250 entries are allowed.","items":{"type":"string","description":"List of delegator stake accounts to fetch the delegator information. A maximum of 250 entries are allowed."}}}},"DelegatorInfoListResponse":{"type":"object","properties":{"network":{"type":"string","description":"Network specified in the request. Supported values;\r\n- mainnet\r\n- testnet\r\n- devnet","enum":["mainnet","testnet","devnet"]},"page":{"type":"integer","description":"The current page number sent in the request.","format":"int32"},"total":{"type":"integer","description":"Total number of stake accounts being sent in the API response","format":"int64"},"data":{"type":"object","description":"An array that contains the details about stake accounts.","properties":{"stake_account":{"type":"string","description":"\t\nThe public key of the stake account"},"status":{"type":"string","description":"Current status of the delegator"},"balance_in_sol":{"type":"number","description":"The current balance of the stake account in SOL. Values will be displayed up to 9 decimal places","format":"double"},"balance_in_lamports":{"type":"number","description":"The balance in the stake account in Lamports","format":"double"},"validator_info":{"$ref":"#/components/schemas/ValidatorInfo"},"provision_info":{"$ref":"#/components/schemas/ProvisionInfo"}}}}},"ValidatorInfo":{"type":"object","description":"JSON object that represents the validator for which the given stake account is attached to.","properties":{"address":{"type":"string","description":"The public key of the validator"}}},"ProvisionInfo":{"type":"object","description":"JSON object that contains the registration details of the delegator.","properties":{"id":{"type":"string","description":"The reference number issued when successfully onboarding the stake account"},"created_at":{"type":"string","description":"Created date and time in the platform. This should be YYYY-MM-DD HH:mm:ss in UTC."}}},"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators":{"post":{"tags":["Solana"],"summary":"Retrieve Multiple Delegators","description":"The endpoint to retrieve a list of delegators returns the details of the stake accounts monitored by a given client that fit the specified filter criteria in a paginated manner. If no filtration criteria is provided, the endpoint will retrieve a list of all the stake accounts applicable to the client. All timestamp fields in the response are in UTC.","operationId":"getMultipleDelegators","parameters":[{"name":"X-API-KEY","in":"header","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","description":"The current page number requested by the client, if not specified, should be defaulted to 1.","required":false,"schema":{"type":"string","default":"1"}},{"name":"size","in":"query","description":"The number of entries per page, if not presented in the request, should be defaulted to the maximum value of 250.","required":false,"schema":{"type":"string","default":"250"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelegatorInfoListRequest"}}},"required":true},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelegatorInfoListResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Get a Single Delegator

> This request will return the information regarding a single delegator which is being monitored by the staking partner

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"DelegatorInfoResponse":{"required":["network"],"type":"object","properties":{"network":{"type":"string","description":"The network on which validators should be created. Supported values.","enum":["mainnet","testnet","devnet"]},"stake_account":{"type":"string","description":"\t\nThe public key of the stake account"},"status":{"type":"string","description":"Current status of the delegator"},"balance_in_lamports":{"type":"number","description":"The balance in the stake account in Lamports","format":"double"},"balance_in_sol":{"type":"number","description":"The balance of the stake account in SOL. Values will be displayed up to 9 decimal places","format":"double"},"validator_info":{"$ref":"#/components/schemas/ValidatorInfo"},"provision_info":{"$ref":"#/components/schemas/ProvisionInfo"}}},"ValidatorInfo":{"type":"object","description":"JSON object that represents the validator for which the given stake account is attached to.","properties":{"address":{"type":"string","description":"The public key of the validator"}}},"ProvisionInfo":{"type":"object","description":"JSON object that contains the registration details of the delegator.","properties":{"id":{"type":"string","description":"The reference number issued when successfully onboarding the stake account"},"created_at":{"type":"string","description":"Created date and time in the platform. This should be YYYY-MM-DD HH:mm:ss in UTC."}}},"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/{network}/delegators/{stake_account}":{"get":{"tags":["Solana"],"summary":"Get a Single Delegator","description":"This request will return the information regarding a single delegator which is being monitored by the staking partner","operationId":"getSingleDelegator","parameters":[{"name":"X-API-KEY","in":"header","required":true,"schema":{"type":"string"}},{"name":"network","in":"path","description":"Applicable values are mainnet, testnet and devnet","required":true,"schema":{"type":"string"}},{"name":"stake_account","in":"path","description":"The public key of the stake account belonging to the delegator.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelegatorInfoResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Validator Information&#x20;

> Clients can use this endpoint to query detailed information about Solana validators with stake accounts under them on the staking platform. <br>

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"SolValidatorInfoResponse":{"type":"object","properties":{"network":{"type":"string","description":"Network specified in the request. Supported values;\r\n- mainnet\r\n- testnet\r\n- devnet","enum":["mainnet","testnet","devnet"]},"apy":{"type":"number","description":"The Annualized Percentage Yield of the validator. This value is calculated only using the stake accounts for the specified validator that have been onboarded onto the staking platform. The calculation considers gross rewards earned across the past 10 epochs.","format":"double"},"block_rewards_apy":{"type":"number","description":"The Annualized Percentage Yield on block rewards earned by the stake accounts under the validator. This value is calculated considering gross block rewards earned across the past 10 epochs.","format":"double"},"total_apy":{"type":"number","description":"The Annualized Percentage Yield on total rewards earned by the stake accounts under the validator. This value is calculated considering gross rewards earned across the past 10 epochs.","format":"double"},"validator_address":{"type":"string","description":"The address of the validator for which information is requested."},"validator_status":{"type":"string","description":"The current status of the validator"},"delegated_balance":{"type":"number","description":"The total balance delegated under the validator in SOL. The total \"net balance\" values of the delegators under the staking platform. Values will be displayed up to 9 decimal places","format":"double"}}},"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/{network}/validators/{validator_address}":{"get":{"tags":["Solana"],"summary":"Validator Information ","description":"Clients can use this endpoint to query detailed information about Solana validators with stake accounts under them on the staking platform.\r\n","operationId":"getValidatorInfo","parameters":[{"name":"X-API-KEY","in":"header","required":true,"schema":{"type":"string"}},{"name":"network","in":"path","description":"Applicable values are mainnet, testnet and devnet","required":true,"schema":{"type":"string","enum":["mainnet","testnet","devnet"]}},{"name":"validator_address","in":"path","description":"The public key of the validator","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolValidatorInfoResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Delegator Monitoring

> Clients can invoke this endpoint to monitor existing delegations by retrieving and tracking delegator addresses (stake accounts) on the staking platform. A request with a list of delegator addresses enables the creation of corresponding positions on the staking platform for monitoring purposes.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ValidatorMonitoringRequest":{"type":"object","required":["network","validator_address","delegators"],"properties":{"network":{"type":"string","description":"Applicable network. Supported values;\r\n- mainnet\r\n- testnet\r\n- devnet","enum":["mainnet","testnet","devnet"]},"validator_address":{"type":"string","description":"The address of the validator under which the stake account is delegating SOL."},"delegators":{"type":"array","description":"A list containing the information of the delegator addresses that will be monitored on the staking platform.","items":{"$ref":"#/components/schemas/Delegators"}}}},"Delegators":{"type":"object","description":"A list containing the information of the delegator addresses that will be monitored on the staking platform.","required":["stake_accounts","participant"],"properties":{"stake_accounts":{"type":"array","description":"A list of the delegator addresses. A maximum of 250 entries are allowed. ","items":{"type":"string","description":"A list of the delegator addresses"}},"participant":{"type":"string","description":"The participant name registered on the staking platform that is associated with the client's customer. "},"account":{"type":"string","description":"The account name registered on the staking platform that is associated with the client's customer. If not provided, requests will be assigned to a default account."}}},"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/monitoring":{"post":{"tags":["Solana"],"summary":"Delegator Monitoring","description":"Clients can invoke this endpoint to monitor existing delegations by retrieving and tracking delegator addresses (stake accounts) on the staking platform. A request with a list of delegator addresses enables the creation of corresponding positions on the staking platform for monitoring purposes.","operationId":"createValidatorMonitoringUpdate","parameters":[{"name":"X-API-KEY","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorMonitoringRequest"}}},"required":true},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"type":"object","properties":{"delegator_monitoring_reference_id":{"type":"string","description":"A system-generated unique identifier for the API request. This identifier is stamped in the 'Link ID' fields of all positions created through the API request."}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```


# Models

## The ErrorMessage object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}}}
```

## The InternalServerErrorMessage object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}}}
```

## The SOLDelegatorRewardsRequest object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"SOLDelegatorRewardsRequest":{"type":"object","required":["network","rollup_type","start","end","stake_accounts"],"properties":{"network":{"type":"string","description":"The network on which validators should be created. Supported values;\r\n- mainnet\r\n- testnet\r\n- devnet","enum":["mainnet","testnet","devnet"]},"rollup_type":{"type":"integer","description":"Denotes the granularity of rewards breakdown. THe applicable values are;\n- 1 (epoch)\n- 2 (date)","enum":[1,2]},"start":{"type":"string","description":"It specifies the start epoch if the type is 1, or the start date in the \"YYYY-MM-DD\" format (UTC timezone) if the type is 2."},"end":{"type":"string","description":"It specifies the end epoch if the type is 1, or the end date in the \"YYYY-MM-DD\" format (UTC timezone) if the type is 2."},"stake_accounts":{"type":"array","description":"List of delegator stake accounts to fetch the rewards breakdown. A maximum of 50 entries are allowed.","items":{"type":"string","description":"List of delegator stake accounts to fetch the rewards breakdown. A maximum of 50 entries are allowed."}}}}}}}
```

## The DelegatorRewardsInfoResponse object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"DelegatorRewardsInfoResponse":{"type":"object","properties":{"network":{"type":"string","description":"Network specified in the request.","enum":["mainnet","testnet","devnet"]},"start":{"type":"string","description":"Start epoch or start date specified in the request."},"end":{"type":"string","description":"End epoch or end date specified in the request."},"page":{"type":"integer","description":"The current page number sent in the request.","format":"int32"},"total":{"type":"integer","description":"The total number of records resulted for the input criteria.","format":"int64"},"data":{"type":"array","description":"An array that contains stake account rewards.","items":{"$ref":"#/components/schemas/DelegatorReward"}}},"title":""},"DelegatorReward":{"type":"object","properties":{"stake_account":{"type":"string","description":"The stake_account that received the rewards."},"validator_address":{"type":"string","description":"Address of the validator that distributed the rewards (the validator the delegator is attached to)."},"total_sol":{"type":"number","format":"double","description":"Total rewards the delegator earned from inception in SOL. Values will be displayed up to 9 decimal places\n\nNote: Block rewards will not be available from delegator inception, therefore this field will not consider block rewards. Only inflation rewards and MEV rewards will be considered.\n"},"total_lamports":{"type":"integer","description":"Total rewards the delegator earned from inception in lamports.\n\nNote : Similar to \"total_sol\" this field will not consider block rewards\n"},"apy":{"type":"number","format":"double","description":"The Annualized Percentage Yield of the stake account. This value is calculated considering net inflation and net MEV rewards earned during the last 10 completed epochs."},"block_rewards_apy":{"type":"number","format":"double","description":"The Annualized Percentage Yield on block rewards earned by the stake account. This value is calculated considering net block rewards earned during the last 10 completed epochs."},"total_apy":{"type":"number","format":"double","description":"The total Annualized Percentage Yield on all rewards attributable to the stake account in the last 10 epochs, after commissions and rebates."},"total_accumulated_sol":{"type":"number","format":"double","description":"Total rewards the delegator has earned for the query criteria in SOL. Values will be displayed up to 9 decimal places\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_accumulated_lamports":{"type":"integer","description":"Total rewards the delegator has earned for the query criteria in lamports.\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"accumulated_gross_block_rewards_sol":{"type":"number","format":"double","description":"The total gross block rewards earned by the stake account for the query criteria in SOL.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_gross_block_rewards_lamports":{"type":"integer","description":"The total gross block rewards earned by the stake account for the query criteria in lamports.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_net_block_rewards_sol":{"type":"number","format":"double","description":"The net block rewards earned by the stake account for the query criteria in SOL, net of the staking platform commissions.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_net_block_rewards_lamports":{"type":"integer","description":"The net block rewards earned by the stake account for the query criteria in lamports, net of the staking platform commissions.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_rewards":{"type":"array","description":"Protocol, MEV, and block rewards for the given delegator and query criteria. A new rewards type \"NET_BLOCK\" has been introduced.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will be set to 0.\n","items":{"$ref":"#/components/schemas/AccumulatedReward"}},"rewards_breakdown":{"type":"array","description":"Per-epoch (or period) rewards breakdown.","items":{"$ref":"#/components/schemas/RewardBreakdown"}}},"required":["stake_account","validator_address"]},"AccumulatedReward":{"type":"object","properties":{"accumulated_sol":{"type":"number","format":"double","description":"Accumulated rewards in SOL between the start and end specified in the request. Values will be displayed up to 9 decimal places\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"accumulated_lamports":{"type":"integer","description":"Accumulated rewards in lamports between the start and end specified in the request.\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"type":{"type":"string","description":"Type of rewards.","enum":["PROTOCOL","MEV","BLOCK","NET_BLOCK"]}}},"RewardBreakdown":{"type":"object","description":"Rewards for a given epoch/period.","properties":{"epoch":{"type":"integer","description":"The epoch corresponding to the rewards. This is applicable only if the rollup_type is 1"},"timestamp":{"type":"string","format":"date-time","description":"If the rollup_type is 1, it should specify the timestamp corresponding to the end of the epoch."},"balance":{"type":"number","format":"double","description":"The balance of the account after rewards have been added."},"total_epoch_sol":{"type":"number","format":"double","description":"Total rewards accumulated during the period in SOL. Values will be displayed up to 9 decimal places\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_epoch_lamports":{"type":"integer","description":"Total rewards accumulated during the period in lamports.\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_epoch_gross_block_rewards_sol":{"type":"number","format":"double","description":"The gross block rewards earned by the stake account for the epoch, in SOL."},"total_epoch_gross_block_rewards_lamports":{"type":"integer","description":"The gross block rewards earned by the stake account for the epoch, in lamports."},"total_epoch_net_block_rewards_sol":{"type":"number","format":"double","description":"The net block rewards earned by the stake account for the epoch, in SOL, net of the staking platform commissions."},"total_epoch_net_block_rewards_lamports":{"type":"integer","description":"The net block rewards earned by the stake account for the epoch, in lamports, net of the staking platform commissions."},"rewards":{"type":"array","description":"An array that contains protocol, mev, and block rewards corresponding to the given epoch. A new rewards type \"NET_BLOCK\" has been introduced.","items":{"$ref":"#/components/schemas/RewardItem"}}},"required":["rewards"]},"RewardItem":{"type":"object","properties":{"rewards_sol":{"type":"number","format":"double","description":"Rewards accumulated during the period in SOL. Values will be displayed up to 9 decimal places\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"rewards_lamports":{"type":"integer","description":"Rewards accumulated during the period in lamports.\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"type":{"type":"string","description":"Type of rewards.","enum":["PROTOCOL","MEV","BLOCK","NET_BLOCK"]}}}}}}
```

## The DelegatorReward object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"DelegatorReward":{"type":"object","properties":{"stake_account":{"type":"string","description":"The stake_account that received the rewards."},"validator_address":{"type":"string","description":"Address of the validator that distributed the rewards (the validator the delegator is attached to)."},"total_sol":{"type":"number","format":"double","description":"Total rewards the delegator earned from inception in SOL. Values will be displayed up to 9 decimal places\n\nNote: Block rewards will not be available from delegator inception, therefore this field will not consider block rewards. Only inflation rewards and MEV rewards will be considered.\n"},"total_lamports":{"type":"integer","description":"Total rewards the delegator earned from inception in lamports.\n\nNote : Similar to \"total_sol\" this field will not consider block rewards\n"},"apy":{"type":"number","format":"double","description":"The Annualized Percentage Yield of the stake account. This value is calculated considering net inflation and net MEV rewards earned during the last 10 completed epochs."},"block_rewards_apy":{"type":"number","format":"double","description":"The Annualized Percentage Yield on block rewards earned by the stake account. This value is calculated considering net block rewards earned during the last 10 completed epochs."},"total_apy":{"type":"number","format":"double","description":"The total Annualized Percentage Yield on all rewards attributable to the stake account in the last 10 epochs, after commissions and rebates."},"total_accumulated_sol":{"type":"number","format":"double","description":"Total rewards the delegator has earned for the query criteria in SOL. Values will be displayed up to 9 decimal places\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_accumulated_lamports":{"type":"integer","description":"Total rewards the delegator has earned for the query criteria in lamports.\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"accumulated_gross_block_rewards_sol":{"type":"number","format":"double","description":"The total gross block rewards earned by the stake account for the query criteria in SOL.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_gross_block_rewards_lamports":{"type":"integer","description":"The total gross block rewards earned by the stake account for the query criteria in lamports.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_net_block_rewards_sol":{"type":"number","format":"double","description":"The net block rewards earned by the stake account for the query criteria in SOL, net of the staking platform commissions.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_net_block_rewards_lamports":{"type":"integer","description":"The net block rewards earned by the stake account for the query criteria in lamports, net of the staking platform commissions.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_rewards":{"type":"array","description":"Protocol, MEV, and block rewards for the given delegator and query criteria. A new rewards type \"NET_BLOCK\" has been introduced.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will be set to 0.\n","items":{"$ref":"#/components/schemas/AccumulatedReward"}},"rewards_breakdown":{"type":"array","description":"Per-epoch (or period) rewards breakdown.","items":{"$ref":"#/components/schemas/RewardBreakdown"}}},"required":["stake_account","validator_address"]},"AccumulatedReward":{"type":"object","properties":{"accumulated_sol":{"type":"number","format":"double","description":"Accumulated rewards in SOL between the start and end specified in the request. Values will be displayed up to 9 decimal places\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"accumulated_lamports":{"type":"integer","description":"Accumulated rewards in lamports between the start and end specified in the request.\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"type":{"type":"string","description":"Type of rewards.","enum":["PROTOCOL","MEV","BLOCK","NET_BLOCK"]}}},"RewardBreakdown":{"type":"object","description":"Rewards for a given epoch/period.","properties":{"epoch":{"type":"integer","description":"The epoch corresponding to the rewards. This is applicable only if the rollup_type is 1"},"timestamp":{"type":"string","format":"date-time","description":"If the rollup_type is 1, it should specify the timestamp corresponding to the end of the epoch."},"balance":{"type":"number","format":"double","description":"The balance of the account after rewards have been added."},"total_epoch_sol":{"type":"number","format":"double","description":"Total rewards accumulated during the period in SOL. Values will be displayed up to 9 decimal places\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_epoch_lamports":{"type":"integer","description":"Total rewards accumulated during the period in lamports.\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_epoch_gross_block_rewards_sol":{"type":"number","format":"double","description":"The gross block rewards earned by the stake account for the epoch, in SOL."},"total_epoch_gross_block_rewards_lamports":{"type":"integer","description":"The gross block rewards earned by the stake account for the epoch, in lamports."},"total_epoch_net_block_rewards_sol":{"type":"number","format":"double","description":"The net block rewards earned by the stake account for the epoch, in SOL, net of the staking platform commissions."},"total_epoch_net_block_rewards_lamports":{"type":"integer","description":"The net block rewards earned by the stake account for the epoch, in lamports, net of the staking platform commissions."},"rewards":{"type":"array","description":"An array that contains protocol, mev, and block rewards corresponding to the given epoch. A new rewards type \"NET_BLOCK\" has been introduced.","items":{"$ref":"#/components/schemas/RewardItem"}}},"required":["rewards"]},"RewardItem":{"type":"object","properties":{"rewards_sol":{"type":"number","format":"double","description":"Rewards accumulated during the period in SOL. Values will be displayed up to 9 decimal places\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"rewards_lamports":{"type":"integer","description":"Rewards accumulated during the period in lamports.\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"type":{"type":"string","description":"Type of rewards.","enum":["PROTOCOL","MEV","BLOCK","NET_BLOCK"]}}}}}}
```

## The AccumulatedReward object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"AccumulatedReward":{"type":"object","properties":{"accumulated_sol":{"type":"number","format":"double","description":"Accumulated rewards in SOL between the start and end specified in the request. Values will be displayed up to 9 decimal places\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"accumulated_lamports":{"type":"integer","description":"Accumulated rewards in lamports between the start and end specified in the request.\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"type":{"type":"string","description":"Type of rewards.","enum":["PROTOCOL","MEV","BLOCK","NET_BLOCK"]}}}}}}
```

## The RewardBreakdown object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"RewardBreakdown":{"type":"object","description":"Rewards for a given epoch/period.","properties":{"epoch":{"type":"integer","description":"The epoch corresponding to the rewards. This is applicable only if the rollup_type is 1"},"timestamp":{"type":"string","format":"date-time","description":"If the rollup_type is 1, it should specify the timestamp corresponding to the end of the epoch."},"balance":{"type":"number","format":"double","description":"The balance of the account after rewards have been added."},"total_epoch_sol":{"type":"number","format":"double","description":"Total rewards accumulated during the period in SOL. Values will be displayed up to 9 decimal places\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_epoch_lamports":{"type":"integer","description":"Total rewards accumulated during the period in lamports.\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_epoch_gross_block_rewards_sol":{"type":"number","format":"double","description":"The gross block rewards earned by the stake account for the epoch, in SOL."},"total_epoch_gross_block_rewards_lamports":{"type":"integer","description":"The gross block rewards earned by the stake account for the epoch, in lamports."},"total_epoch_net_block_rewards_sol":{"type":"number","format":"double","description":"The net block rewards earned by the stake account for the epoch, in SOL, net of the staking platform commissions."},"total_epoch_net_block_rewards_lamports":{"type":"integer","description":"The net block rewards earned by the stake account for the epoch, in lamports, net of the staking platform commissions."},"rewards":{"type":"array","description":"An array that contains protocol, mev, and block rewards corresponding to the given epoch. A new rewards type \"NET_BLOCK\" has been introduced.","items":{"$ref":"#/components/schemas/RewardItem"}}},"required":["rewards"]},"RewardItem":{"type":"object","properties":{"rewards_sol":{"type":"number","format":"double","description":"Rewards accumulated during the period in SOL. Values will be displayed up to 9 decimal places\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"rewards_lamports":{"type":"integer","description":"Rewards accumulated during the period in lamports.\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"type":{"type":"string","description":"Type of rewards.","enum":["PROTOCOL","MEV","BLOCK","NET_BLOCK"]}}}}}}
```

## The RewardItem object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"RewardItem":{"type":"object","properties":{"rewards_sol":{"type":"number","format":"double","description":"Rewards accumulated during the period in SOL. Values will be displayed up to 9 decimal places\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"rewards_lamports":{"type":"integer","description":"Rewards accumulated during the period in lamports.\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"type":{"type":"string","description":"Type of rewards.","enum":["PROTOCOL","MEV","BLOCK","NET_BLOCK"]}}}}}}
```

## The DelegatorInfoListRequest object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"DelegatorInfoListRequest":{"type":"object","required":["network"],"properties":{"network":{"type":"string","description":"The network on which the queried stake accounts have been created . Supported values;\r\n- mainnet\r\n- testnet\r\n- devnet","enum":["mainnet","testnet","devnet"]},"participant":{"type":"string","description":"The participant name registered on the staking platform from which stake accounts need to be retrieved."},"account":{"type":"string","description":"The account name registered on the staking platform from which stake accounts need to be retrieved."},"status":{"type":"array","description":"The status of the stake accounts that need to be retrieved. Results will be returned in the order of the statuses sent in the request. Supported values;\r\n- ACTIVE\r\n- INACTIVE\r\n- ACTIVATING\r\n- DEACTIVATING","items":{"type":"string","enum":["ACTIVE","INACTIVE","ACTIVATING","DEACTIVATING"]}},"stake_accounts":{"type":"array","description":"List of delegator stake accounts to fetch the delegator information. A maximum of 250 entries are allowed.","items":{"type":"string","description":"List of delegator stake accounts to fetch the delegator information. A maximum of 250 entries are allowed."}}}}}}}
```

## The DelegatorInfoListResponse object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"DelegatorInfoListResponse":{"type":"object","properties":{"network":{"type":"string","description":"Network specified in the request. Supported values;\r\n- mainnet\r\n- testnet\r\n- devnet","enum":["mainnet","testnet","devnet"]},"page":{"type":"integer","description":"The current page number sent in the request.","format":"int32"},"total":{"type":"integer","description":"Total number of stake accounts being sent in the API response","format":"int64"},"data":{"type":"object","description":"An array that contains the details about stake accounts.","properties":{"stake_account":{"type":"string","description":"\t\nThe public key of the stake account"},"status":{"type":"string","description":"Current status of the delegator"},"balance_in_sol":{"type":"number","description":"The current balance of the stake account in SOL. Values will be displayed up to 9 decimal places","format":"double"},"balance_in_lamports":{"type":"number","description":"The balance in the stake account in Lamports","format":"double"},"validator_info":{"$ref":"#/components/schemas/ValidatorInfo"},"provision_info":{"$ref":"#/components/schemas/ProvisionInfo"}}}}},"ValidatorInfo":{"type":"object","description":"JSON object that represents the validator for which the given stake account is attached to.","properties":{"address":{"type":"string","description":"The public key of the validator"}}},"ProvisionInfo":{"type":"object","description":"JSON object that contains the registration details of the delegator.","properties":{"id":{"type":"string","description":"The reference number issued when successfully onboarding the stake account"},"created_at":{"type":"string","description":"Created date and time in the platform. This should be YYYY-MM-DD HH:mm:ss in UTC."}}}}}}
```

## The DelegatorInfoResponse object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"DelegatorInfoResponse":{"required":["network"],"type":"object","properties":{"network":{"type":"string","description":"The network on which validators should be created. Supported values.","enum":["mainnet","testnet","devnet"]},"stake_account":{"type":"string","description":"\t\nThe public key of the stake account"},"status":{"type":"string","description":"Current status of the delegator"},"balance_in_lamports":{"type":"number","description":"The balance in the stake account in Lamports","format":"double"},"balance_in_sol":{"type":"number","description":"The balance of the stake account in SOL. Values will be displayed up to 9 decimal places","format":"double"},"validator_info":{"$ref":"#/components/schemas/ValidatorInfo"},"provision_info":{"$ref":"#/components/schemas/ProvisionInfo"}}},"ValidatorInfo":{"type":"object","description":"JSON object that represents the validator for which the given stake account is attached to.","properties":{"address":{"type":"string","description":"The public key of the validator"}}},"ProvisionInfo":{"type":"object","description":"JSON object that contains the registration details of the delegator.","properties":{"id":{"type":"string","description":"The reference number issued when successfully onboarding the stake account"},"created_at":{"type":"string","description":"Created date and time in the platform. This should be YYYY-MM-DD HH:mm:ss in UTC."}}}}}}
```

## The ProvisionInfo object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"ProvisionInfo":{"type":"object","description":"JSON object that contains the registration details of the delegator.","properties":{"id":{"type":"string","description":"The reference number issued when successfully onboarding the stake account"},"created_at":{"type":"string","description":"Created date and time in the platform. This should be YYYY-MM-DD HH:mm:ss in UTC."}}}}}}
```

## The ValidatorInfo object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorInfo":{"type":"object","description":"JSON object that represents the validator for which the given stake account is attached to.","properties":{"address":{"type":"string","description":"The public key of the validator"}}}}}}
```

## The SolValidatorInfoResponse object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"SolValidatorInfoResponse":{"type":"object","properties":{"network":{"type":"string","description":"Network specified in the request. Supported values;\r\n- mainnet\r\n- testnet\r\n- devnet","enum":["mainnet","testnet","devnet"]},"apy":{"type":"number","description":"The Annualized Percentage Yield of the validator. This value is calculated only using the stake accounts for the specified validator that have been onboarded onto the staking platform. The calculation considers gross rewards earned across the past 10 epochs.","format":"double"},"block_rewards_apy":{"type":"number","description":"The Annualized Percentage Yield on block rewards earned by the stake accounts under the validator. This value is calculated considering gross block rewards earned across the past 10 epochs.","format":"double"},"total_apy":{"type":"number","description":"The Annualized Percentage Yield on total rewards earned by the stake accounts under the validator. This value is calculated considering gross rewards earned across the past 10 epochs.","format":"double"},"validator_address":{"type":"string","description":"The address of the validator for which information is requested."},"validator_status":{"type":"string","description":"The current status of the validator"},"delegated_balance":{"type":"number","description":"The total balance delegated under the validator in SOL. The total \"net balance\" values of the delegators under the staking platform. Values will be displayed up to 9 decimal places","format":"double"}}}}}}
```

## The ValidatorMonitoringRequest object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorMonitoringRequest":{"type":"object","required":["network","validator_address","delegators"],"properties":{"network":{"type":"string","description":"Applicable network. Supported values;\r\n- mainnet\r\n- testnet\r\n- devnet","enum":["mainnet","testnet","devnet"]},"validator_address":{"type":"string","description":"The address of the validator under which the stake account is delegating SOL."},"delegators":{"type":"array","description":"A list containing the information of the delegator addresses that will be monitored on the staking platform.","items":{"$ref":"#/components/schemas/Delegators"}}}},"Delegators":{"type":"object","description":"A list containing the information of the delegator addresses that will be monitored on the staking platform.","required":["stake_accounts","participant"],"properties":{"stake_accounts":{"type":"array","description":"A list of the delegator addresses. A maximum of 250 entries are allowed. ","items":{"type":"string","description":"A list of the delegator addresses"}},"participant":{"type":"string","description":"The participant name registered on the staking platform that is associated with the client's customer. "},"account":{"type":"string","description":"The account name registered on the staking platform that is associated with the client's customer. If not provided, requests will be assigned to a default account."}}}}}}
```

## The Delegators object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"Delegators":{"type":"object","description":"A list containing the information of the delegator addresses that will be monitored on the staking platform.","required":["stake_accounts","participant"],"properties":{"stake_accounts":{"type":"array","description":"A list of the delegator addresses. A maximum of 250 entries are allowed. ","items":{"type":"string","description":"A list of the delegator addresses"}},"participant":{"type":"string","description":"The participant name registered on the staking platform that is associated with the client's customer. "},"account":{"type":"string","description":"The account name registered on the staking platform that is associated with the client's customer. If not provided, requests will be assigned to a default account."}}}}}}
```


# Home

Secure and Scalable Staking Solutions Streamlined staking services enabled through a unified API with customizable parameters, client diversity, and geographic distribution.

Want to start investing with us, please go to&#x20;

{% embed url="<https://www.galaxy.com/staking/>" %}


# Authentication and Authorization

The following section describes the mechanism enforced for authentication and authorization for REST API invocations, enabling clients to securely connect with the Galaxy staking API.<br>


# API Key

The API key will be generated when the client is registered with the Galaxy platform and securely communicated with the client. This should be specified with the X-API-KEY HTTP header when invoking endpoints.<br>


# Authorization Token

The steps for deriving the JWT authorization token are given below,\ <br>

* The client must generate an RSA4096 key pair and share the public key with the Galaxy.
* Create a JSON object with the following parameters,
* uri:- request URI
* nonce:- unique request ID
* iat:- request generated timestamp in UTC
* exp:- expiration timestamp of request in UTC (must be less than iat+ 30sec)
* sub:- API key shared by Galaxy
* bodyHash:- SHA256 hash of the request body if applicable.
* Sign the above JSON object with the RSA256 algorithm using the RSA4096 private key generated in the first step to create the JWT token.
* JWT tokens can be created by directly encoding and assembling the token's components (header, payload, and signature) or by using third-party libraries that automate the process, including encoding. Both approaches produce a Base64 encoded token.
* The generated JWT token should be sent as the bearer token via the Authorization HTTP header.

When clients invoke the endpoints, the Lambda Authorizer attached to the API Gateway verifies the authorization token and responds with an HTTP 403 if the verification fails. The following checks will be performed, and the respective error message will be returned if the check fails.\ <br>

* Missing Token: An authorization token was not provided.

  ```
  {
      "message": "The authorization token was not provided"
  }
  ```
* Malformed Token: An authorization token with an invalid format was provided.

  ```
  {
      "message": "The authorization token was malformed"
  }
  ```
* Expired Token: The expired authorization token is presented in the header.

  ```
  {
      "message": "The authorization token has expired"
  }
  ```
* Invalid Signature Presented: The signature in the authorization token was invalid.

  ```
  {
      "message": "The signature in the authorization token was invalid"
  }
  ```
* Exceeded Maximum Duration: Expiry timestamp in the authorization token is greater than 30 seconds from issued at timestamp.

  ```
  {
      "message": "The expiration timestamp of the authorization token in UTC must be less than 30 seconds from the issued-at time"
  }
  ```
* Client’s Public Key Not Found: The public key of the client was not found.

  ```
  {
      "message": "The public key of the client was not found"
  }
  ```
* Token Issued for Future Timestamp: The authorization token was issued for a future timestamp.

  ```
  {
      "message": "The authorization token was issued for future timestamp"
  }
  ```
* Invalid API Key: Invalid API key was provided.

  ```
  {
      "message": "Invalid API key was provided"
  }
  ```
* Internal Verification Error: An error occurred when verifying the authorization token.

  ```
  {
      "message": "Unable to verify the authorization token due to an internal processing error"
  }
  ```
* Missing Parameters: The authorization token must contain uri, nonce, iat, exp, and sub.

  ```
  {
      "message": "Missing parameters in the authorization token, must contain uri, nonce, iat, exp and sub"
  }
  ```
* Invalid Request URI: The API path did not match the request URI specified in the authorization token.

  ```
  {
      "message": "API path has not matched with the request URI specified in the Authorization token"
  }
  ```
* Payload Hash Mismatch: The payload hash encoded in the authorization token did not match the API payload. This issue applies to POST/PUT APIs only.

  ```
  {
      "message": "Payload hash in the authorization token has not matched with the API payload"
  }
  ```


# Client Request Identifier

The "client\_req\_id" parameter in the request payload serves as a unique identifier for each request. In the event that the client's connection with the Staking API Gateway is interrupted, the client is expected to capture the disconnection event and re-invoke the endpoint with the same payload. Upon receiving such a request, the platform checks for the presence of the client\_req\_id and takes the following actions:

* **Ongoing Processing**: If the client\_req\_id exists and is associated with an active client session, but the request is still being processed, the response will be returned once processing is complete. Any new request with the same client\_req\_id will receive an HTTP 400 response with the message: "Request is currently being processed."
* **Processing Complete, Response Not Dispatched**: If the client\_req\_id exists and the request was successfully processed, but the response was not dispatched (possibly due to a dropped client session), the new request will receive the undispatched response with an HTTP 200 status.
* **Request Already Served**: If the client\_req\_id exists but the response was already returned, the client will receive an HTTP 400 response with the message: "Duplicate client request; the request has already been served."
* **New Request**: If the client\_req\_id does not exist in the platform, the request will be treated as new, processed, and responded accordingly.


# Validator Statuses

| Status             | Description                                                                                                                                               |
| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| STAKING\_INITIATED | A staking request has been successfully received by the platform.                                                                                         |
| REJECTED           | The staking request has been rejected by the Staking Engine. All validators created as part of that staking request will receive this status.             |
| PENDING\_DEPOSIT   | Once the staking request is successfully processed and validators are commissioned, clients are expected to deposit their assets to the relevant address. |
| DEPOSITED          | The validator has entered the Pending Deposit Queue and has met the minimum balance requirement for activation (32 ETH).                                  |
| DEPOSIT\_FAILED    | The validator has not been funded within the pre-defined time period.                                                                                     |
| PENDING\_QUEUED    | The validator has been successfully funded and added to the activation queue.                                                                             |
| ACTIVE             | The validator is active and earning rewards.                                                                                                              |
| SLASHING           | The validator is online but has been identified as malicious and incurred penalties, and scheduled to exit.                                               |
| SLASHED            | The validator has been kicked out of the network after reaching the exit epoch due to slashing.                                                           |
| EXIT\_INITIATED    | An exit request has been successfully received by the platform.                                                                                           |
| EXITING            | The validator is online and currently exiting the network.                                                                                                |
| EXITED             | The validator has been removed from the network.                                                                                                          |
| WITHDRAWABLE       | The validator has reached the withdrawable epoch after a successful exit.                                                                                 |
| WITHDRAWN          | The funds have been returned to the withdrawal address provided for the validator.                                                                        |


# Ethereum

## Provision Validators

> The staking endpoint must be invoked by the client to facilitate the staking action. When a request to provision more than 100 validators is received, it will be split into batches, each containing a maximum of 100 validators, and then processed. A total of 1,000 validators can be provisioned per request, across 10 batches.&#x20;

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"StakingRequest":{"title":"Staking Request","type":"object","required":["client_req_id","network","validator_count","withdrawal_address"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the staking request generated by the client."},"network":{"type":"string","description":"The network on which validators should be created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"withdrawal_credentials_type":{"enum":["0x01","0x02"],"description":"The withdrawal credential type of the validator(s) to be created. Supported values are;\r\n- 0x01 (Default)\r\n- 0x02","default":"0x01"},"amounts_unit":{"description":"The unit in which the staking amount is specified for withdrawal_credential_type = 0x02 validators in the amounts field. Supported values are:\r\n- ETH\r\n- GWEI\r\n\r\nConditionally required if the withdrawal_credential_type = 0x02.","enum":["ETH","GWEI"]},"amounts":{"type":"array","description":"The Ethereum amounts to be staked, specified in either ETH or GWEI. This is required if the withdrawal credentials type is 0x02. \r\n\r\n- When specified in ETH, up to 9 decimal places are supported.\r\n- When specified in GWEI, only whole numbers are supported.\r\n- Any additional decimal places will be ignored.","items":{"type":"integer","format":"int32"}},"validator_count":{"type":"integer","description":"The number of validators required. A maximum of 1000 validators are supported","format":"int32"},"withdrawal_address":{"type":"string","description":"The ETH account (wallet) used for the withdrawal credentials of the validators. This is the address that will receive consensus rewards and unstaked ETH after exiting."},"fee_recipient_address":{"type":"string","description":"The ETH account (wallet) that will receive the execution layer rewards. If not provided, this will be defaulted to the withdrawal address."},"region":{"type":"string","description":"The geographic region where the validator will be created. Supported values are;\r\n- US\r\n- EU (Default)\r\n- KR","default":"EU","enum":["US","EU","KR"]},"account":{"type":"string","description":"The account name registered on the platform that is associated with the client's customer. If not provided, requests will be assigned to a default account.\n"}}},"StakingResponse":{"title":"Staking Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the staking request addressed by this response message."},"staking_ref_id":{"type":"string","description":"A unique reference ID generated by the staking infrastructure for the staking request."},"network":{"type":"string","description":"The network on which validators should be created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"withdrawal_credentials_type":{"enum":["0x01","0x02"],"description":"The withdrawal credential type of the validator(s) that will be created. Applicable values are;\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"The specified address to which funds will be withdrawn, as mentioned in the staking request."},"fee_recipient_address":{"type":"string","description":"The fee recipient address that receives Execution Layer fees, as mentioned in the staking request."},"region":{"type":"string","description":"The geographic region where the validator will be created. Supported values are;\r\n- US\r\n- EU\r\n- KR","enum":["US","EU","KR"]},"provisioned_at":{"type":"string","description":"The date and time when the validator was provisioned by the staking infrastructure."},"data":{"type":"array","description":"A block that contains validator batches. Each batch includes details of 100 validators and the associated funding transaction.","items":{"$ref":"#/components/schemas/BatchData"}}}},"BatchData":{"title":"Staking Response Batch","type":"object","properties":{"batch_id":{"type":"integer","description":"Identifier of the validator batch.","format":"int32","enum":[1,2,3,4,5,6,7,8,9,10]},"deposit_data":{"type":"array","description":"An array of validator details in this batch.","items":{"$ref":"#/components/schemas/DepositData"}},"deposit_transaction":{"$ref":"#/components/schemas/DepositTransaction"}},"description":"A block that contains validator batches. Each batch includes details of 250 validators and the associated funding transaction."},"DepositData":{"title":"Staking Response Batch Deposit Data","type":"object","description":"An array of validator details in this batch.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"amount":{"type":"number","description":"The amount of ETH in GWEI required to be deposited.","format":"double"},"withdrawal_credentials":{"type":"string","description":"Withdrawal credentials for the validator funds to be withdrawn upon exit."},"signature":{"type":"string","description":"A “proof of possession” which signs over pubkey, withdrawal_credentials, and amount using the validator private key."},"deposit_data_root":{"type":"string","description":"Merkle root hash of the deposit data."},"deposit_message_root":{"type":"string","description":"Merkle root hash of the deposit message."},"fork_version":{"type":"string","description":"The genesis fork version."},"deposit_cli_version":{"type":"string","description":"Staking deposit cli version."}}},"DepositTransaction":{"title":"Staking Response Batch Deposit Transaction","type":"object","description":"The JSON object that contains the funding transaction details of all validators belonging to this batch.","properties":{"deposit_amount_wei":{"type":"string","description":"The total amount of ETH to be staked for the batch in WEI."},"deposit_address":{"type":"string","description":"Batch deposit contract address."},"contract_call_data":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract. "}}},"StakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/ErrorMessage"}}}},"ErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerStakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}},"description":""},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}}}},"paths":{"/v1/ethereum/validators":{"post":{"tags":["Ethereum"],"summary":"Provision Validators","description":"The staking endpoint must be invoked by the client to facilitate the staking action. When a request to provision more than 100 validators is received, it will be split into batches, each containing a maximum of 100 validators, and then processed. A total of 1,000 validators can be provisioned per request, across 10 batches. ","operationId":"validators","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakingRequest"}}},"required":true},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakingResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakingErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerStakingErrorListResponse"}}}}}}}}}
```

## Exit Validators

> The exit endpoint enables clients to initiate validator withdrawals by broadcasting voluntary exit messages to the beacon chain. It can be enabled in three ways.&#x20;> \
> \- \*\*Validator Public Keys\*\*: Exit from the network using the specified validator public addresses.> \
> \- \*\*Validator Indexes\*\*: Exit from the network using the specified validator indexes.&#x20;> \
> \- \*\*Withdrawal Address with Validator Count\*\*: Exit from the network using the specified withdrawal address and validator count. Only type 0x01 validators can be exited using this method.> \\
>
> \
> Each request type can handle exiting only up to 250 validators at once.&#x20;

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ValidatorExitRequest":{"title":"Validator Exit Request","type":"object","required":["client_req_id","network","type"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier generated and sent by the client for the exit request. Refer Client Request Identifier for further details."},"network":{"type":"string","description":"The network on which validators were created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"type":{"type":"integer","description":"Indicates the type of attribute used to identify the validators to exit. The possible values are,\n- 1 (pubkey)\n- 2 (validator_index)\n- 3 (withdrawal_address)","format":"int32","enum":[1,2,3]},"pubkeys":{"type":"array","items":{"type":"string","description":"List of validator public keys to be exited. \nThis is required if the exit type is 1. \nA maximum of 250 public keys can be specified."}},"validator_indexes":{"type":"array","items":{"type":"integer","description":"The list of validator indexes to be exited. \nRequired if exit type is 2. \nA maximum of 250 validator indexes can be specified.","format":"int32"}},"withdrawal_address":{"type":"string","description":"The withdrawal address of the validators that should be exited.\nRequired if exit type is 3"},"validator_count":{"type":"integer","description":"Required if exit type is 3. \nThe Max count should be 250.","format":"int32"}}},"ValidatorExitResponse":{"title":"Validator Exit Response","type":"object","properties":{"client_req_id":{"type":"string","description":"Unique identifier specified in the request."},"network":{"type":"string","description":"Network specified in the request. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"data":{"type":"array","description":"An array which contains the details of the validators to be exited.","items":{"$ref":"#/components/schemas/ValidatorExitData"}}}},"ValidatorExitData":{"title":"Validator Exit Data","type":"object","description":"An array which contains the details of the validators to be exited.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","description":"Index of the corresponding validator.","format":"int32"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator. "},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]}}},"StakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/ErrorMessage"}}}},"ErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerStakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}},"description":""},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}}}},"paths":{"/v1/ethereum/validators/exit":{"post":{"tags":["Ethereum"],"summary":"Exit Validators","description":"The exit endpoint enables clients to initiate validator withdrawals by broadcasting voluntary exit messages to the beacon chain. It can be enabled in three ways. \r\n- **Validator Public Keys**: Exit from the network using the specified validator public addresses.\r\n- **Validator Indexes**: Exit from the network using the specified validator indexes. \r\n- **Withdrawal Address with Validator Count**: Exit from the network using the specified withdrawal address and validator count. Only type 0x01 validators can be exited using this method.\r\n\r\nEach request type can handle exiting only up to 250 validators at once. ","operationId":"exit","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorExitRequest"}}},"required":true},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorExitResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakingErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerStakingErrorListResponse"}}}}}}}}}
```

## Derive Pre-Signed Exit Message

> The pre-signed exit endpoint enables clients to request pre-signed exit messages for validators. When clients decide to exit their validators, the pre-signed exit message can be independently broadcasted to the consensus node. The validators must be in an active state for at-least 256 epochs in order to derive the encrypted pre-signed exit message.\<br/>\<br/> Before calling this endpoint, the client must create an RSA4096 key pair.This is a separate key pair from the one used for JWT signature generation.The client needs to share the public key from this new key pair with the platform. The platform will use this public key to encrypt the pre-signed exit message with the RSA\_OAEP\_SHA\_256 algorithm.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ValidatorExitRequest":{"title":"Validator Exit Request","type":"object","required":["client_req_id","network","type"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier generated and sent by the client for the exit request. Refer Client Request Identifier for further details."},"network":{"type":"string","description":"The network on which validators were created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"type":{"type":"integer","description":"Indicates the type of attribute used to identify the validators to exit. The possible values are,\n- 1 (pubkey)\n- 2 (validator_index)\n- 3 (withdrawal_address)","format":"int32","enum":[1,2,3]},"pubkeys":{"type":"array","items":{"type":"string","description":"List of validator public keys to be exited. \nThis is required if the exit type is 1. \nA maximum of 250 public keys can be specified."}},"validator_indexes":{"type":"array","items":{"type":"integer","description":"The list of validator indexes to be exited. \nRequired if exit type is 2. \nA maximum of 250 validator indexes can be specified.","format":"int32"}},"withdrawal_address":{"type":"string","description":"The withdrawal address of the validators that should be exited.\nRequired if exit type is 3"},"validator_count":{"type":"integer","description":"Required if exit type is 3. \nThe Max count should be 250.","format":"int32"}}},"ValidatorPreSignedExitResponse":{"title":"Validator Pre-signed Exit Response","type":"object","properties":{"network":{"type":"string","description":"Network specified in the request.","enum":["mainnet","hoodi"]},"data":{"type":"array","description":"An array which contains the details of the validators to be exited.","items":{"$ref":"#/components/schemas/PreSignedExitDBO"}}}},"PreSignedExitDBO":{"title":"Validator Pre-signed Exit Data","type":"object","description":"An array which contains the details of the validators to be exited.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","description":"Index of the corresponding validator.","format":"int32"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator."},"encrypted_exit_message":{"type":"string","description":"The encrypted pre-signed exit message.The client can decrypt this message using their private key."},"fork_version":{"type":"string","description":"The genesis fork version used when generating the pre-signed exit message."},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]}}},"StakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/ErrorMessage"}}}},"ErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerStakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}},"description":""},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}}}},"paths":{"/v1/ethereum/validators/exit/pre-signed":{"post":{"tags":["Ethereum"],"summary":"Derive Pre-Signed Exit Message","description":"The pre-signed exit endpoint enables clients to request pre-signed exit messages for validators. When clients decide to exit their validators, the pre-signed exit message can be independently broadcasted to the consensus node. The validators must be in an active state for at-least 256 epochs in order to derive the encrypted pre-signed exit message.<br/><br/> Before calling this endpoint, the client must create an RSA4096 key pair.This is a separate key pair from the one used for JWT signature generation.The client needs to share the public key from this new key pair with the platform. The platform will use this public key to encrypt the pre-signed exit message with the RSA_OAEP_SHA_256 algorithm.","operationId":"pre-signed","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorExitRequest"}}},"required":true},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorPreSignedExitResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakingErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerStakingErrorListResponse"}}}}}}}}}
```

## Get All Validators or by Staking Reference ID

> The get all validators endpoint returns the details of the validators provisioned for the given client for the specified network in a paginated manner. This endpoint can also be used to return the details of the validators belonging to the given client for the specified network and staking reference ID. All timestamp fields in the response are provided in UTC timezone.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ValidatorsInfoResponse":{"title":"Validator Info Response","type":"object","properties":{"network":{"type":"string","description":"Network specified in the request.","enum":["mainnet","hoodi"]},"page":{"type":"integer","description":"The current page number sent in the request.","format":"int32"},"total":{"type":"integer","description":"Total number of validators provisioned for the given client and the network.","format":"int32"},"data":{"type":"array","description":"An array that contains the details about validators.","items":{"$ref":"#/components/schemas/ValidatorInfoData"}}}},"ValidatorInfoData":{"title":"Validator Info Data","type":"object","description":"An array that contains the details about validators.","properties":{"last_monitored_epoch":{"type":"integer","description":"The most recent epoch successfully monitored for the validator, regardless of whether a validator record was persisted. Not applicable from staking initiation until the validator becomes active unless an epoch record exists for the last monitored epoch. Epoch records are created only when there is a balance, status, or reward update for that epoch.","format":"int32"},"epoch":{"type":"integer","description":"The specific blockchain epoch to which the returned validator details correspond.","format":"int32"},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"pubkey":{"type":"string","description":"Public key of the validator."},"region":{"type":"string","description":"The geographic region where the validator will be created.","enum":["US","EU","KR"]},"validator_index":{"type":"integer","description":"Validator index.","format":"int32"},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator. "},"fee_recipient_address":{"type":"string","description":"The fee recipient address belongs to the validator."},"estimated_activation_at":{"type":"string","description":"Estimate of when the validator will become active and start earning rewards. This will be populated since the validator is transitioned to DEPOSITED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"estimated_exit_at":{"type":"string","description":"Estimate of when the validator will exit and stop earning rewards. This will be populated since the validator is transitioned to EXIT_INITIATED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"estimated_withdrawal_at":{"type":"string","description":"Estimate of when the validator’s principal will become withdrawable. This will be populated since the validator is transitioned to EXITED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"balance_in_wei":{"type":"string","description":"Actual balance of the validator in WEI."},"balance_in_eth":{"type":"number","description":"Actual balance of the validator in ETH.","format":"double"},"status_history":{"type":"array","items":{"$ref":"#/components/schemas/StatusHistoryData"}},"voluntary_exit":{"$ref":"#/components/schemas/VoluntaryExitData"},"presigned_exit":{"$ref":"#/components/schemas/PresignedExitData"},"staking_request_info":{"$ref":"#/components/schemas/StakingRequestInfo"}}},"StatusHistoryData":{"title":"Status History Data","type":"object","properties":{"status":{"type":"string","description":"Status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"transitioned_at":{"type":"string","description":"The date and time the validator transitioned into the given status. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"An array that contains the state transition of the validator. "},"VoluntaryExitData":{"title":"Voluntary Exit Data","type":"object","properties":{"request_id":{"type":"string","description":"Unique request id sent by the client when requesting the voluntary exit."},"requested_at":{"type":"string","description":"The date and time the exit request was received. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"submitted_at":{"type":"string","description":"The date and time the validator’s exit message was broadcasted to the beacon node. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains on demand exit related information if the validator has initiated the voluntary exit. Otherwise, it will be null."},"PresignedExitData":{"title":"Pre-signed Exit Data","type":"object","properties":{"fork_version":{"type":"string","description":"The genesis fork version used when generating the pre-signed exit message."},"encrypted_exit_message":{"type":"string","description":"The encrypted pre-signed exit message. The client can decrypt this message using their private key."}},"description":"This JSON object will be populated if the include_presigned_exit query parameter is set to “true” and the validator is in active status for at-least 256 epochs. Otherwise, it will be set to null."},"StakingRequestInfo":{"title":"Staking Request Data","type":"object","properties":{"staking_ref_id":{"type":"string","description":"A unique reference ID generated by the staking infrastructure for the staking request."},"provisioned_at":{"type":"string","description":"The date and time when the validator was provisioned by the staking infrastructure. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains the staking request id and validators provisioned date and time. This should be set to ‘null’ for externally provisioned validators."},"ValidatorErrorListResponse":{"title":"Validator Error Response","type":"object","properties":{"error":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorErrorMessage"}}}},"ValidatorErrorMessage":{"title":"Validator Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerInfoErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"message":{"type":"string","description":"The description related to the error being reported."}}}}},"paths":{"/v1/ethereum/{network}/validators":{"get":{"tags":["Ethereum"],"summary":"Get All Validators or by Staking Reference ID","description":"The get all validators endpoint returns the details of the validators provisioned for the given client for the specified network in a paginated manner. This endpoint can also be used to return the details of the validators belonging to the given client for the specified network and staking reference ID. All timestamp fields in the response are provided in UTC timezone.","operationId":"get-validators","parameters":[{"name":"network","in":"path","description":"Applicable values are mainnet and hoodi","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","description":"The current page number requested by the client, if not specified, should be defaulted to 1.","required":false,"schema":{"type":"string"}},{"name":"size","in":"query","description":"The number of entries per page, if not presented in the request, should be defaulted to the maximum value of 250.","required":false,"schema":{"type":"string"}},{"name":"staking_ref_id","in":"query","description":"The staking reference ID returned for the staking request.","required":false,"schema":{"type":"string"}},{"name":"include_presigned_exit","in":"query","description":"This indicates whether the pre-signed exit message to be included in the response or not. It’s a boolean parameter, defaulted to \"false\".","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorsInfoResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerInfoErrorMessage"}}}}}}}}}
```

## Get a Single Validator

> The get single validator endpoint returns the validator information for the specified validator’s public key. All timestamp fields in the response are provided in UTC timezone.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ValidatorInfoResponse":{"title":"Validator Info","type":"object","properties":{"network":{"type":"string","description":"The network on which validators were created.","enum":["mainnet","hoodi"]},"last_monitored_epoch":{"type":"integer","description":"The most recent epoch successfully monitored for the validator, regardless of whether a validator record was persisted. Not applicable from staking initiation until the validator becomes active unless an epoch record exists for the last monitored epoch. Epoch records are created only when there is a balance, status, or reward update for that epoch.","format":"int32"},"epoch":{"type":"integer","description":"The specific blockchain epoch to which the returned validator details correspond.","format":"int32"},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"pubkey":{"type":"string","description":"Public key of the validator."},"region":{"type":"string","description":"The geographic region where the validator will be created.","enum":["US","EU","KR"]},"validator_index":{"type":"integer","description":"Validator index.","format":"int32"},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator. "},"fee_recipient_address":{"type":"string","description":"The fee recipient address belongs to the validator."},"estimated_activation_at":{"type":"string","description":"Estimate of when the validator will become active and start earning rewards. This will be populated since the validator is transitioned to DEPOSITED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"estimated_exit_at":{"type":"string","description":"Estimate of when the validator will exit and stop earning rewards. This will be populated since the validator is transitioned to EXIT_INITIATED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"estimated_withdrawal_at":{"type":"string","description":"Estimate of when the validator’s principal will become withdrawable. This will be populated since the validator is transitioned to EXITED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"balance_in_wei":{"type":"string","description":"Actual balance of the validator in WEI."},"balance_in_eth":{"type":"number","description":"Actual balance of the validator in ETH.","format":"double"},"status_history":{"type":"array","items":{"$ref":"#/components/schemas/StatusHistoryData"}},"voluntary_exit":{"$ref":"#/components/schemas/VoluntaryExitData"},"presigned_exit":{"$ref":"#/components/schemas/PresignedExitData"},"staking_request_info":{"$ref":"#/components/schemas/StakingRequestInfo"}}},"StatusHistoryData":{"title":"Status History Data","type":"object","properties":{"status":{"type":"string","description":"Status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"transitioned_at":{"type":"string","description":"The date and time the validator transitioned into the given status. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"An array that contains the state transition of the validator. "},"VoluntaryExitData":{"title":"Voluntary Exit Data","type":"object","properties":{"request_id":{"type":"string","description":"Unique request id sent by the client when requesting the voluntary exit."},"requested_at":{"type":"string","description":"The date and time the exit request was received. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"submitted_at":{"type":"string","description":"The date and time the validator’s exit message was broadcasted to the beacon node. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains on demand exit related information if the validator has initiated the voluntary exit. Otherwise, it will be null."},"PresignedExitData":{"title":"Pre-signed Exit Data","type":"object","properties":{"fork_version":{"type":"string","description":"The genesis fork version used when generating the pre-signed exit message."},"encrypted_exit_message":{"type":"string","description":"The encrypted pre-signed exit message. The client can decrypt this message using their private key."}},"description":"This JSON object will be populated if the include_presigned_exit query parameter is set to “true” and the validator is in active status for at-least 256 epochs. Otherwise, it will be set to null."},"StakingRequestInfo":{"title":"Staking Request Data","type":"object","properties":{"staking_ref_id":{"type":"string","description":"A unique reference ID generated by the staking infrastructure for the staking request."},"provisioned_at":{"type":"string","description":"The date and time when the validator was provisioned by the staking infrastructure. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains the staking request id and validators provisioned date and time. This should be set to ‘null’ for externally provisioned validators."},"ValidatorErrorListResponse":{"title":"Validator Error Response","type":"object","properties":{"error":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorErrorMessage"}}}},"ValidatorErrorMessage":{"title":"Validator Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerInfoErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"message":{"type":"string","description":"The description related to the error being reported."}}}}},"paths":{"/v1/ethereum/{network}/validators/{pubkey}":{"get":{"tags":["Ethereum"],"summary":"Get a Single Validator","description":"The get single validator endpoint returns the validator information for the specified validator’s public key. All timestamp fields in the response are provided in UTC timezone.","operationId":"get-validator","parameters":[{"name":"network","in":"path","description":"Applicable values are mainnet and hoodi.","required":true,"schema":{"type":"string"}},{"name":"pubkey","in":"path","description":"The public key of the validator","required":true,"schema":{"type":"string"}},{"name":"include_presigned_exit","in":"query","description":"This indicates whether the pre-signed exit message to be included in the response or not. It’s a boolean parameter, defaulted to “false”.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorInfoResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerInfoErrorMessage"}}}}}}}}}
```

## Get Validators Summary

> This endpoint returns the summary of the validator count by status belonging to the staking partner associated with the given API Key.&#x20;

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ValidatorsSummaryResponse":{"title":"Validator Summary Response","type":"object","properties":{"network":{"type":"string","description":"Network specified in the request.","enum":["mainnet","hoodi"]},"total":{"type":"integer","description":"Total number of validators provisioned for the given client and the network.","format":"int64"},"data":{"type":"array","description":"An array that contains validators summary.","items":{"$ref":"#/components/schemas/SummaryData"}}}},"SummaryData":{"title":"Summary Data","type":"object","properties":{"status":{"type":"string","description":"Status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"count":{"type":"integer","description":"The number of validators in the corresponding status. ","format":"int64"}},"description":"An array that contains validators summary."},"ValidatorErrorListResponse":{"title":"Validator Error Response","type":"object","properties":{"error":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorErrorMessage"}}}},"ValidatorErrorMessage":{"title":"Validator Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerInfoErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"message":{"type":"string","description":"The description related to the error being reported."}}}}},"paths":{"/v1/ethereum/{network}/validators/summary":{"get":{"tags":["Ethereum"],"summary":"Get Validators Summary","description":"This endpoint returns the summary of the validator count by status belonging to the staking partner associated with the given API Key. ","operationId":"validators-summary","parameters":[{"name":"network","in":"path","description":"Applicable values are mainnet and hoodi.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorsSummaryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerInfoErrorMessage"}}}}}}}}}
```

## Withdrawals

> The withdrawals endpoint returns a history of withdrawals (partial and full) from the consensus layer to the execution layer.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"EthEpochLevelInfoRequest":{"title":"Rewards Request","type":"object","required":["network","start","end","rollup_type"],"properties":{"network":{"type":"string","description":"The network on which validators should be created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"start":{"type":"string","description":"It specifies the start epoch if the type is 1, or the start date in the \"YYYY-MM-DD\" format (UTC timezone) if the type is 2"},"end":{"type":"string","description":"It specifies the end epoch if the type is 1, or the end date in the \"YYYY-MM-DD\" format (UTC timezone) if the type is 2"},"rollup_type":{"type":"string","description":"Denotes how the requested rewards range is specified. Applicable values are:\r\n-1 (epoch)\r\n- 2 (date)","enum":["1","2"]},"pubkeys":{"type":"array","items":{"type":"string","description":"List of validator public keys to fetch the rewards breakdown. A maximum of 50 entries are allowed."}},"cl_rewards_breakdown":{"type":"boolean","default":false,"description":"Denotes whether the response should include a detailed consensus-layer (CL) rewards and penalties breakdown. The applicable values are: \r\n- true\r\n- false (Default)"}}},"EthEpochLevelInfoResponseWithWithdrawalSlotInfo":{"title":"Withdrawals","type":"object","properties":{"network":{"type":"string","description":"Network specified in the request. ","enum":["mainnet","hoodi"]},"start":{"type":"string","description":"Start epoch or start date specified in the request. "},"end":{"type":"string","description":"End epoch or end date specified in the request."},"page":{"type":"integer","description":"The current page number sent in the request","format":"int32"},"total":{"type":"integer","description":"The total number of records resulted for the input criteria.","format":"int32"},"data":{"type":"array","description":"An array that contains the breakdown.","items":{"$ref":"#/components/schemas/WithdrawalSlotInfoType1"}}}},"WithdrawalSlotInfoType1":{"title":"Withdrawals","type":"object","description":"An array that contains the breakdown.","properties":{"timestamp":{"type":"string","description":"The timestamp corresponds to the withdrawal epoch. This should be in the format of “YYYY-MM-DD HH:mm:ss” in UTC."},"slot":{"type":"integer","description":"The consensus layer slot at which withdrawal occurred.","format":"int32"},"block":{"type":"integer","description":"The execution layer block number at which withdrawal occurred.","format":"int64"},"epoch":{"type":"integer","description":"The epoch at which the withdrawal was executed. Applicable only if the rollup_type is 1.","format":"int32"},"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"string","description":"The index of the validator."},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"The withdrawal address of the validator."},"withdrawal_amount_eth":{"type":"number","description":"The withdrawn amount in ETH.","format":"double"},"withdrawal_amount_wei":{"type":"string","description":"The withdrawn amount in WEI."},"is_full_withdrawal":{"type":"boolean","description":"This parameter indicates whether the validator’s balance was fully withdrawn or not."}}},"ValidatorErrorListResponse":{"title":"Validator Error Response","type":"object","properties":{"error":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorErrorMessage"}}}},"ValidatorErrorMessage":{"title":"Validator Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerInfoErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"message":{"type":"string","description":"The description related to the error being reported."}}}}},"paths":{"/v1/ethereum/validators/withdrawals":{"post":{"tags":["Ethereum"],"summary":"Withdrawals","description":"The withdrawals endpoint returns a history of withdrawals (partial and full) from the consensus layer to the execution layer.","operationId":"withdrawals","parameters":[{"name":"page","in":"query","description":"The current page number requested by the client, if not specified, should be defaulted to 1.","required":false,"schema":{"type":"string"}},{"name":"size","in":"query","description":"The number of entries per page, if not presented in the request, should be defaulted to the maximum value of 250.","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EthEpochLevelInfoRequest"}}},"required":true},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EthEpochLevelInfoResponseWithWithdrawalSlotInfo"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerInfoErrorMessage"}}}}}}}}}
```

## Rewards

> The rewards endpoint returns accrued rewards on the execution and consensus layers. Rewards can be queried using either an epoch range or a date range, with results returned at the corresponding epoch level. This endpoint returns rewards for validators created via the Provision Validators endpoint as well as validators registered for monitoring. Positive values represent rewards, while negative values represent penalties.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"EthEpochLevelInfoRequest":{"title":"Rewards Request","type":"object","required":["network","start","end","rollup_type"],"properties":{"network":{"type":"string","description":"The network on which validators should be created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"start":{"type":"string","description":"It specifies the start epoch if the type is 1, or the start date in the \"YYYY-MM-DD\" format (UTC timezone) if the type is 2"},"end":{"type":"string","description":"It specifies the end epoch if the type is 1, or the end date in the \"YYYY-MM-DD\" format (UTC timezone) if the type is 2"},"rollup_type":{"type":"string","description":"Denotes how the requested rewards range is specified. Applicable values are:\r\n-1 (epoch)\r\n- 2 (date)","enum":["1","2"]},"pubkeys":{"type":"array","items":{"type":"string","description":"List of validator public keys to fetch the rewards breakdown. A maximum of 50 entries are allowed."}},"cl_rewards_breakdown":{"type":"boolean","default":false,"description":"Denotes whether the response should include a detailed consensus-layer (CL) rewards and penalties breakdown. The applicable values are: \r\n- true\r\n- false (Default)"}}},"EthEpochLevelInfoResponseWithValidatorData":{"title":"Validator Rewards","type":"object","properties":{"network":{"type":"string","description":"Network specified in the request. ","enum":["mainnet","hoodi"]},"start":{"type":"string","description":"Start epoch or start date specified in the request. "},"end":{"type":"string","description":"End epoch or end date specified in the request."},"page":{"type":"integer","description":"The current page number sent in the request","format":"int32"},"total":{"type":"integer","description":"The total number of records resulted for the input criteria.","format":"int32"},"data":{"type":"array","description":"An array that contains the breakdown.","items":{"$ref":"#/components/schemas/ValidatorAddressWiseData"}}}},"ValidatorAddressWiseData":{"title":"Validator Rewards","type":"object","description":"An array that contains the breakdown.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"string","description":"Validator index."},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"total_eth":{"type":"number","description":"Total rewards the validator earned since inception in ETH. If the MEV information is not available for a certain epoch, that epoch's exact reward value will not be included in this value. The reward value will be updated once the MEV information becomes available.","format":"double"},"total_wei":{"type":"string","description":"Total rewards the validator earned since inception in WEI. If the MEV information is not available for a certain epoch, that epoch's exact reward value will not be included in this value. The reward value will be updated once the MEV information becomes available."},"accumulated_rewards":{"type":"array","description":"An array that contains accumulated consensus and execution layer rewards for the given validator and the query criteria. For Execution Layer Rewards, if the MEV information is not available for a certain epoch within the queried range, that epoch’s exact reward value will not be included in this value. The reward value will be updated once the MEV information becomes available.","items":{"$ref":"#/components/schemas/AccumulatedEthRewardsData"}},"rewards_breakdown":{"type":"array","items":{"$ref":"#/components/schemas/RewardsBreakdown"}}}},"AccumulatedEthRewardsData":{"oneOf":[{"$ref":"#/components/schemas/ConsensusAccumulatedReward"},{"$ref":"#/components/schemas/ExecutionAccumulatedReward"}],"discriminator":{"propertyName":"type"}},"ConsensusAccumulatedReward":{"type":"object","properties":{"type":{"type":"string","enum":["CONSENSUS"]},"accumulated_eth":{"type":"number","format":"double","description":"Accumulated consensus rewards in ETH between the start and the end specified in the request."},"accumulated_wei":{"type":"string","description":"Accumulated consensus rewards in WEI between the start and the end specified in the request."}}},"ExecutionAccumulatedReward":{"type":"object","properties":{"type":{"type":"string","enum":["EXECUTION"]},"accumulated_eth":{"type":"number","format":"double","description":"Accumulated execution rewards in ETH between the start and the end specified in the request."},"accumulated_wei":{"type":"string","description":"Accumulated execution rewards in WEI between the start and the end specified in the request."}}},"RewardsBreakdown":{"title":"RewardsBreakdown","type":"object","description":"An array that contains breakdown of rewards depending on the “rollup_type” parameter specified in the request.","properties":{"epoch":{"type":"integer","description":"The epoch corresponds to the rewards. This is applicable only if the rollup_type is 1. ","format":"int32"},"actual_balance_in_wei":{"type":"string","description":"Actual balance of the validator in the corresponding epoch, in WEI."},"actual_balance_in_eth":{"type":"number","description":"Actual balance of the validator in the corresponding epoch, in ETH.","format":"double"},"balance_in_wei":{"type":"string","description":"Effective balance of the validator in the corresponding epoch, in WEI."},"balance_in_eth":{"type":"number","description":"Effective balance of the validator in the corresponding epoch, in ETH.","format":"double"},"timestamp":{"type":"string","description":"The timestamp corresponding to the epoch at which the rewards were given. "},"rewards":{"type":"array","items":{"$ref":"#/components/schemas/RewardsInfo"}}}},"RewardsInfo":{"description":"An array that contains consensus and execution layer rewards for the given epoch.","oneOf":[{"$ref":"#/components/schemas/ConsensusReward"},{"$ref":"#/components/schemas/ExecutionReward"}]},"ConsensusReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["CONSENSUS"]},"rewards_eth":{"type":"number","format":"double","description":"Consensus layer rewards accumulated during the period in ETH."},"rewards_wei":{"type":"string","description":"Consensus layer rewards accumulated during the period in WEI."},"attestation_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from attestation duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"attestation_rewards_wei":{"type":"string","description":"Total rewards earned from attestation duties during the period, expressed in WEI. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from block proposal duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_wei":{"type":"string","description":"Total rewards earned from block proposal duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from sync committee duties during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_wei":{"type":"string","description":"Total rewards earned from sync committee duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_eth":{"type":"number","format":"double","description":"Initial slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_wei":{"type":"string","description":"Initial slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_eth":{"type":"number","format":"double","description":"Correlation slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_wei":{"type":"string","description":"Correlation slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."}}},"ExecutionReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["EXECUTION"]},"rewards_eth":{"type":"number","format":"double","description":"Execution layer rewards accumulated during the period in ETH. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"rewards_wei":{"type":"string","description":"Execution layer rewards accumulated during the period in WEI. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"is_mev":{"type":"boolean","description":"When the MEV boost was used for the block proposal, this should be set to true; otherwise it will be false. This field will also be set to ‘false’ if the MEV information is not yet available. In a scenario like this, the rewards_eth and rewards_wei values will be set to null. The values will be updated once the MEV information becomes available."},"mev_relay":{"type":"string","description":"The name of the MEV boost service. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"recipient":{"type":"string","description":"The recipient address of the execution rewards. This field will be set to null if the MEV information has not yet been received from the relay. The value will be updated once the MEV information becomes available."},"mev_builder":{"type":"string","description":"The public key of the MEV builder that sent the execution rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"slot":{"type":"integer","description":"The slot number of the proposal made by the validator.","format":"int32"},"block":{"type":"integer","description":"The execution layer block number of the proposal made by the validator.","format":"int64"},"tx_hash":{"type":"string","description":"The hash of the transaction used to send the MEV rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true}}},"ValidatorErrorListResponse":{"title":"Validator Error Response","type":"object","properties":{"error":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorErrorMessage"}}}},"ValidatorErrorMessage":{"title":"Validator Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerInfoErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"message":{"type":"string","description":"The description related to the error being reported."}}}}},"paths":{"/v1/ethereum/validators/rewards":{"post":{"tags":["Ethereum"],"summary":"Rewards","description":"The rewards endpoint returns accrued rewards on the execution and consensus layers. Rewards can be queried using either an epoch range or a date range, with results returned at the corresponding epoch level. This endpoint returns rewards for validators created via the Provision Validators endpoint as well as validators registered for monitoring. Positive values represent rewards, while negative values represent penalties.","operationId":"rewards","parameters":[{"name":"page","in":"query","description":"The current page number requested by the client, if not specified, should be defaulted to 1.","required":false,"schema":{"type":"string"}},{"name":"size","in":"query","description":"The number of entries per page, if not presented in the request, should be defaulted to the maximum value of 250.","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EthEpochLevelInfoRequest"}}},"required":true},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EthEpochLevelInfoResponseWithValidatorData"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerInfoErrorMessage"}}}}}}}}}
```

## Consolidate Validators

> The consolidate endpoint enables clients to perform the following actions:> \
> \- Convert withdrawal credential type 0x01 validators to the 0x02 type.&#x20;> \
> \- Consolidate a type 0x01 or 0x02 validator with a type 0x02 validator by adding the balance of the former to the latter while exiting the former.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ConsolidateResponse":{"title":"Consolidate Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The unique identifier specified in the request."},"network":{"description":"Network to which the source and destination validators belong to. ","enum":["mainnet","hoodi"]},"destination_pubkey":{"type":"string","description":"The validator that will hold the merged balance. If the request was a conversion, this will be kept empty."},"consolidation_contract_address":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract."},"data":{"type":"array","items":{"$ref":"#/components/schemas/ConsolidateResponseData"}},"created_at":{"type":"string","description":"The time at which the request was received by the platform. Time will be shown in the “YYYY-MM-DD HH:mm:ss” format."}}},"ConsolidateResponseData":{"title":"Consolidate Response Data","type":"object","properties":{"source_pubkey":{"type":"string","description":"Source public key."},"contract_call_data":{"type":"string","description":"The unsigned transaction payload relevant for the source public key."},"signer":{"type":"array","minItems":1,"maxItems":1,"description":"Withdrawal address of the source public key.","items":{"type":"string"}}}},"StakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/ErrorMessage"}}}},"ErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerStakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}},"description":""},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}},"ConsolidateRequest":{"title":"Consolidate Request","type":"object","required":["client_req_id","network","source_pubkeys"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the staking request generated by the client."},"network":{"description":"The network to which the source and destination validators belong to. Supported values are:\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"source_pubkeys":{"type":"array","minItems":1,"maxItems":50,"uniqueItems":true,"description":"The type 0x01 validators to be converted to type 0x02 or type 0x01 and 0x02 validators to be merged with the destination_pubkey. \r\n\r\nA maximum of 50 validators are supported.","items":{"type":"string"}},"destination_pubkey":{"type":"string","description":"The validator that will hold the merged balance. Must be a 0x02 type validator."}}}}},"paths":{"/v1/ethereum/validators/consolidate":{"post":{"summary":"Consolidate Validators","tags":["Ethereum"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsolidateResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakingErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerStakingErrorListResponse"}}}}},"operationId":"consolidate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsolidateRequest"}}}},"description":"The consolidate endpoint enables clients to perform the following actions:\r\n- Convert withdrawal credential type 0x01 validators to the 0x02 type. \r\n- Consolidate a type 0x01 or 0x02 validator with a type 0x02 validator by adding the balance of the former to the latter while exiting the former."}}}}
```

## Exit Validators via the Execution Layer

> The execution-layer triggerable exit endpoint enables clients to initiate validator exits directly via the validator’s withdrawal address. This functionality is applicable to both withdrawal credential type 0x01 and 0x02 validators.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ELExitResponse":{"title":"EL Exit Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The unique identifier specified in the request."},"network":{"description":"Network to which the validators belong to. ","enum":["mainnet","hoodi"]},"exit_contract_address":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract."},"data":{"type":"array","items":{"$ref":"#/components/schemas/ELExitResponseData"}},"created_at":{"type":"string","description":"The time at which the request was received by the platform. Time will be shown in the “YYYY-MM-DD HH:mm:ss” format."}}},"ELExitResponseData":{"title":"EL Exit Response Data","type":"object","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","format":"int32","description":"Index of the validator."},"contract_call_data":{"type":"string","description":"The unsigned transaction payload associated with the exit."},"signer":{"type":"array","minItems":1,"maxItems":1,"description":"Withdrawal address of the validator public key.","items":{"type":"string"}}}},"StakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/ErrorMessage"}}}},"ErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerStakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}},"description":""},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}},"ELExitRequest":{"title":"EL Exit Request","type":"object","required":["client_req_id","network","type"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the execution layer triggerable exit request provided by the client."},"network":{"enum":["mainnet","hoodi"],"description":"Network to which the validators belongs to. Supported values are:\r\n- mainnet\r\n- hoodi"},"type":{"enum":[1,2],"description":"Indicates the type of attribute used to identify the validators to exit. The possible values are:\r\n- 1 (pubkey)\r\n- 2 (validator_index)"},"pubkeys":{"type":"array","minItems":1,"maxItems":100,"uniqueItems":true,"description":"List of validator public keys to be exited. \r\n\r\nThis is required if the exit type is 1. \r\n\r\nA maximum of 100 public keys can be specified.","items":{"type":"string"}},"validator_indexes":{"type":"array","minItems":1,"maxItems":100,"uniqueItems":true,"description":"List of validator indexes to be exited. \r\n\r\nThis is required if the exit type is 2.\r\n\r\nA maximum of 100 validator indexes can be specified.","items":{"type":"integer","format":"int32"}}}}}},"paths":{"/v1/ethereum/validators/el-triggerable-exit":{"post":{"summary":"Exit Validators via the Execution Layer","tags":["Ethereum"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ELExitResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakingErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerStakingErrorListResponse"}}}}},"operationId":"el-triggerable-exit","description":"The execution-layer triggerable exit endpoint enables clients to initiate validator exits directly via the validator’s withdrawal address. This functionality is applicable to both withdrawal credential type 0x01 and 0x02 validators.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ELExitRequest"}}}}}}}}
```

## Partially Withdraw Validator Balances via the Execution Layer

> For validators with withdrawal credential type 0x01, any balance in excess of 32 ETH is automatically swept to the validator’s withdrawal address by the protocol. In contrast, 0x02 validators do not support automatic sweeping. Instead, clients can initiate partial withdrawals via the API.> \\
>
> \
> The partial withdrawal amount is computed as the lesser of:> \
> \- the user-specified withdrawal amount, and> \
> \- (current balance − 32 ETH − pending withdrawals)> \\
>
> \
> This ensures that the maximum amount that can be withdrawn from a 0x02 validator is limited to the validator's effective balance in excess of 32 ETH, excluding any amounts already pending withdrawal.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ELWithdrawalResponse":{"title":"EL Withdrawal Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The unique identifier specified in the request."},"network":{"description":"Network to which the validators belong to. ","enum":["mainnet","hoodi"]},"withdrawal_contract_address":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract."},"data":{"type":"array","items":{"$ref":"#/components/schemas/ELWithdrawalResponseData"}},"created_at":{"type":"string","description":"The time at which the request was received by the platform. Time will be shown in the “YYYY-MM-DD HH:mm:ss” format."}}},"ELWithdrawalResponseData":{"title":"EL Withdrawal Response Data","type":"object","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","format":"int32","description":"Index of the validator."},"amount":{"type":"number","format":"float","description":"Amount to be withdrawn."},"contract_call_data":{"type":"string","description":"The unsigned transaction payload associated with the partial withdrawal."},"signer":{"type":"array","minItems":1,"maxItems":1,"description":"Withdrawal address of the validator public key.","items":{"type":"string"}}}},"StakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/ErrorMessage"}}}},"ErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerStakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}},"description":""},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}},"ELWithdrawalRequest":{"title":"EL Withdrawal Request","type":"object","required":["client_req_id","network","type","data"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the execution layer triggerable withdrawal request provided by the client."},"network":{"enum":["mainnet","hoodi"],"description":"Network to which the validators belongs to. Supported values are:\r\n- mainnet\r\n- hoodi"},"type":{"enum":[1,2],"description":"Indicates the type of attribute used to identify the validators that need partial withdrawals. The possible values are:\r\n- 1 (pubkey)\r\n- 2 (validator_index)"},"data":{"type":"array","items":{"$ref":"#/components/schemas/ELWithdrawalRequestData"}}}},"ELWithdrawalRequestData":{"title":"EL Withdrawal Request Data","type":"object","required":["amount"],"properties":{"pubkey":{"type":"string","description":"Validator public key that needs a partial withdrawal. \r\n\r\nThis is required if the partial withdrawal type is 1. "},"validator_index":{"type":"integer","description":"Validator index that needs a partial withdrawal. \r\n\r\nThis is required if the partial withdrawal type is 2."},"amount":{"type":"number","format":"float","description":"Withdrawal amount corresponding to the given validator."}}}}},"paths":{"/v1/ethereum/validators/el-triggerable-withdrawal":{"post":{"summary":"Partially Withdraw Validator Balances via the Execution Layer","tags":["Ethereum"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ELWithdrawalResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakingErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerStakingErrorListResponse"}}}}},"operationId":"el-triggerable-withdrawal","description":"For validators with withdrawal credential type 0x01, any balance in excess of 32 ETH is automatically swept to the validator’s withdrawal address by the protocol. In contrast, 0x02 validators do not support automatic sweeping. Instead, clients can initiate partial withdrawals via the API.\r\n\r\nThe partial withdrawal amount is computed as the lesser of:\r\n- the user-specified withdrawal amount, and\r\n- (current balance − 32 ETH − pending withdrawals)\r\n\r\nThis ensures that the maximum amount that can be withdrawn from a 0x02 validator is limited to the validator's effective balance in excess of 32 ETH, excluding any amounts already pending withdrawal.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ELWithdrawalRequest"}}}}}}}}
```

## Top Up Validators

> The top-up endpoint allows staking partners to add additional ETH to existing validators with withdrawal credential type 0x01 or 0x02. At this point Galaxy does not support batch top ups.> \
> \- \*\*0x01 validators:\*\* The valid top up amount must be between 1 ETH and the amount required to reach a total balance of 32 ETH.> \
> \- \*\*0x02 validators:\*\* The valid top up amount must be between 1 ETH and the amount required to reach a total balance of 2048 ETH.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"TopUpResponse":{"title":"Top Up Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The unique identifier specified in the request."},"network":{"type":"string","description":"Network to which the validators belong to. ","enum":["mainnet","hoodi"]},"data":{"type":"array","description":"A block that contains validator batches. Each batch includes details of 100 validators and the associated funding transaction.","items":{"$ref":"#/components/schemas/TopUpResponseBatchData"}}}},"TopUpResponseBatchData":{"title":"Top Up Response Batch Data","type":"object","properties":{"batch_id":{"description":"Identifier of the validator batch. Possible values are 1 - 10. ","enum":[1,2,3,4,5,6,7,8,9,10]},"deposit_data":{"type":"array","description":"An array of validator details in this batch. ","items":{"$ref":"#/components/schemas/TopUpResponseDepositData"}},"deposit_transaction":{"type":"array","items":{"$ref":"#/components/schemas/TopUpResponseTransactionData"}}}},"TopUpResponseDepositData":{"title":"Top Up Response Deposit Data","type":"object","description":"An array of validator details in this batch.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"amount":{"type":"number","description":"The amount of ETH in GWEI required to be deposited.","format":"double"},"withdrawal_credentials":{"type":"string","description":"Withdrawal credentials for the validator funds to be withdrawn upon exit."},"signature":{"type":"string","description":"A “proof of possession” which signs over pubkey, withdrawal_credentials, and amount using the validator private key."},"deposit_data_root":{"type":"string","description":"Merkle root hash of the deposit data."},"deposit_message_root":{"type":"string","description":"Merkle root hash of the deposit message."},"fork_version":{"type":"string","description":"The genesis fork version."},"deposit_cli_version":{"type":"string","description":"Staking deposit cli version."}}},"TopUpResponseTransactionData":{"title":"Top Up Response Transaction Data","type":"object","description":"The JSON object that contains the funding transaction details of all validators belonging to this batch.","properties":{"deposit_amount_wei":{"type":"string","description":"Total amount of ETH to be topped up for the received top up request, in wei."},"deposit_address":{"type":"string","description":"Batch deposit contract address."},"contract_call_data":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract. "}}},"StakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/ErrorMessage"}}}},"ErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerStakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}},"description":""},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}},"TopUpRequest":{"title":"Top Up Request","type":"object","required":["client_req_id","network","data"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the execution layer triggerable withdrawal request provided by the client."},"network":{"enum":["mainnet","hoodi"],"description":"Network to which the validators belongs to. Supported values are:\r\n- mainnet\r\n- hoodi"},"data":{"type":"array","items":{"$ref":"#/components/schemas/TopUpRequestData"}}}},"TopUpRequestData":{"title":"Top Up Request Data","type":"object","required":["pubkey","deposit_amount"],"properties":{"pubkey":{"type":"string","description":"Validator that needs to be topped up. "},"deposit_amount":{"type":"number","format":"float","description":"The ETH amount that must be topped up. "}}}}},"paths":{"/v1/ethereum/validators/topup":{"post":{"summary":"Top Up Validators","tags":["Ethereum"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopUpResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakingErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerStakingErrorListResponse"}}}}},"operationId":"topup","description":"The top-up endpoint allows staking partners to add additional ETH to existing validators with withdrawal credential type 0x01 or 0x02. At this point Galaxy does not support batch top ups.\r\n- **0x01 validators:** The valid top up amount must be between 1 ETH and the amount required to reach a total balance of 32 ETH.\r\n- **0x02 validators:** The valid top up amount must be between 1 ETH and the amount required to reach a total balance of 2048 ETH.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopUpRequest"}}}}}}}}
```

## Get Fees

> The get fees endpoint allows clients to retrieve the current fee applicable to the following actions on existing validators:> \
> \- Consolidation or conversion> \
> \- Execution-layer triggerable exits or partial withdrawals> \\
>
> \
> Fees are dynamic and vary based on the number of pending requests in the corresponding processing queue. It is recommended to call this endpoint before submitting a request to ensure awareness of the applicable fee.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"FeeResponse":{"title":"FeeResponse","type":"object","properties":{"network":{"description":"Network to which the validators belong to.","enum":["mainnet","hoodi"]},"operation_type":{"description":"Indicates the type of operation for which the user is requesting fees.\r\n- validator_consolidation_or_conversion\r\n- el_triggerable_exit_or_withdrawal","enum":["validator_consolidation_or_conversion","el_triggerable_exit_or_withdrawal"]},"fee_in_ETH":{"type":"number","description":"The applicable fee in ETH. ","format":"float"},"fee_in_WEI":{"type":"string","description":"The applicable fee in WEI. "},"retrieved_at":{"type":"string","description":"The time at which the fee was retrieved by the platform. Time will be shown in the “YYYY-MM-DD HH:mm:ss” format."}}},"ValidatorErrorListResponse":{"title":"Validator Error Response","type":"object","properties":{"error":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorErrorMessage"}}}},"ValidatorErrorMessage":{"title":"Validator Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerInfoErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"message":{"type":"string","description":"The description related to the error being reported."}}},"FeeRequest":{"title":"Fee Request","type":"object","required":["network","operation_type"],"properties":{"network":{"description":"Network to which the validators belongs to. Supported values are:\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"operation_type":{"enum":[1,2],"description":"Indicates the type of operation for which the user is requesting fees.\r\n- 1 (validator_consolidation_or_conversion)\r\n- 2 (el_triggerable_exit_or_withdrawal)"}}}}},"paths":{"/v1/ethereum/validators/fee":{"post":{"summary":"Get Fees","tags":["Ethereum"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeeResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerInfoErrorMessage"}}}}},"operationId":"fee","description":"The get fees endpoint allows clients to retrieve the current fee applicable to the following actions on existing validators:\r\n- Consolidation or conversion\r\n- Execution-layer triggerable exits or partial withdrawals\r\n\r\nFees are dynamic and vary based on the number of pending requests in the corresponding processing queue. It is recommended to call this endpoint before submitting a request to ensure awareness of the applicable fee.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeeRequest"}}}}}}}}
```

## Get Deposit Data

> The deposit data endpoint facilitates the retrieval of the Provision Validators endpoint’s response, which contains the deposit data, using the Client Request ID of the original request.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"DepositDataResponse":{"title":"Staking Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the original Provision Validators request for which the response is returned."},"staking_ref_id":{"type":"string","description":"A unique reference ID generated by the staking infrastructure for the staking request."},"network":{"type":"string","description":"The network on which validators should be created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"withdrawal_credentials_type":{"enum":["0x01","0x02"],"description":"The withdrawal credential type of the validator(s) that will be created. Applicable values are;\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"The specified address to which funds will be withdrawn, as mentioned in the staking request."},"fee_recipient_address":{"type":"string","description":"The fee recipient address that receives Execution Layer fees, as mentioned in the staking request."},"region":{"type":"string","description":"The geographic region where the validator will be created. Supported values are;\r\n- US\r\n- EU\r\n- KR","enum":["US","EU","KR"]},"provisioned_at":{"type":"string","description":"The date and time when the validator was provisioned by the staking infrastructure."},"data":{"type":"array","description":"A block that contains validator batches. Each batch includes details of 100 validators and the associated funding transaction.","items":{"$ref":"#/components/schemas/BatchData"}}}},"BatchData":{"title":"Staking Response Batch","type":"object","properties":{"batch_id":{"type":"integer","description":"Identifier of the validator batch.","format":"int32","enum":[1,2,3,4,5,6,7,8,9,10]},"deposit_data":{"type":"array","description":"An array of validator details in this batch.","items":{"$ref":"#/components/schemas/DepositData"}},"deposit_transaction":{"$ref":"#/components/schemas/DepositTransaction"}},"description":"A block that contains validator batches. Each batch includes details of 250 validators and the associated funding transaction."},"DepositData":{"title":"Staking Response Batch Deposit Data","type":"object","description":"An array of validator details in this batch.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"amount":{"type":"number","description":"The amount of ETH in GWEI required to be deposited.","format":"double"},"withdrawal_credentials":{"type":"string","description":"Withdrawal credentials for the validator funds to be withdrawn upon exit."},"signature":{"type":"string","description":"A “proof of possession” which signs over pubkey, withdrawal_credentials, and amount using the validator private key."},"deposit_data_root":{"type":"string","description":"Merkle root hash of the deposit data."},"deposit_message_root":{"type":"string","description":"Merkle root hash of the deposit message."},"fork_version":{"type":"string","description":"The genesis fork version."},"deposit_cli_version":{"type":"string","description":"Staking deposit cli version."}}},"DepositTransaction":{"title":"Staking Response Batch Deposit Transaction","type":"object","description":"The JSON object that contains the funding transaction details of all validators belonging to this batch.","properties":{"deposit_amount_wei":{"type":"string","description":"The total amount of ETH to be staked for the batch in WEI."},"deposit_address":{"type":"string","description":"Batch deposit contract address."},"contract_call_data":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract. "}}},"DepositDataErrorResponse":{"title":"DepositDataErrorResponse","type":"object","required":["client_req_id","errors"],"properties":{"client_req_id":{"type":"string","description":"Client Request ID that the Staking Partner provided."},"errors":{"type":"array","items":{"$ref":"#/components/schemas/DepositDataErrorMessage"}}}},"DepositDataErrorMessage":{"title":"DepositDataErrorMessage","type":"object","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerStakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}},"description":""},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}}}},"paths":{"/v1/ethereum/validators/deposit-data":{"get":{"summary":"Get Deposit Data","tags":["Ethereum"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepositDataResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepositDataErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerStakingErrorListResponse"}}}}},"operationId":"deposit-data","description":"The deposit data endpoint facilitates the retrieval of the Provision Validators endpoint’s response, which contains the deposit data, using the Client Request ID of the original request.","parameters":[{"schema":{"type":"string"},"in":"query","name":"client_req_id","description":"The Client Request ID applicable to the Provision Validators request for which deposit data is required."}]}}}}
```

## Update Fee Recipient Address

> The update fee recipient address endpoint allows clients to update their validators’ fee recipient address and direct execution-layer rewards to a new wallet.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"UpdateFeeRecipientResponse":{"title":"UpdateFeeRecipientResponse","type":"object","properties":{"client_req_id":{"type":"string","description":"The unique identifier specified in the request."},"network":{"type":"string","description":"Network to which the validators belong to."},"data":{"type":"array","items":{"$ref":"#/components/schemas/UpdateFeeRecipientResponseData"}}}},"UpdateFeeRecipientResponseData":{"title":"UpdateFeeRecipientData","type":"object","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"number","description":"Index of the validator."},"fee_recipient_address":{"type":"string","description":"The updated fee recipient address."}}},"StakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/ErrorMessage"}}}},"ErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerStakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}},"description":""},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}},"UpdateFeeRecipientRequest":{"title":"UpdateFeeRecipientRequest","type":"object","required":["client_req_id","network","type","data"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the request provided by the client."},"network":{"type":"string","description":"Network to which the validators belong to.\r\n\r\nPossible values:\r\n- mainnet\r\n- hoodi"},"type":{"type":"integer","description":"Indicates the type of attribute used to identify the validators that need address changes. The possible values are,\r\n- 1 (pubkeys)\r\n\r\n2 (validator_index)"},"data":{"type":"array","items":{"$ref":"#/components/schemas/UpdateFeeRecipientData"}}}},"UpdateFeeRecipientData":{"title":"UpdateFeeRecipientData","type":"object","required":["fee_recipient_address"],"properties":{"pubkey":{"type":"string","description":"Validator public key that needs an address change. \r\n\r\nWill only be required if type = 1.\r\n\r\nAny value provided in this field when type = 2, will be ignored."},"validator_index":{"type":"number","description":"Validator index that needs an address change. \r\n\r\nWill only be required if type = 2.\r\n\r\nAny value provided in this field when type = 1, will be ignored."},"fee_recipient_address":{"type":"string","description":"The new fee recipient address corresponding to the given validator."}}}}},"paths":{"/v1/ethereum/validators/update-fee-recipient":{"post":{"summary":"Update Fee Recipient Address","tags":["Ethereum"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFeeRecipientResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakingErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerStakingErrorListResponse"}}}}},"operationId":"update-fee-recipient","description":"The update fee recipient address endpoint allows clients to update their validators’ fee recipient address and direct execution-layer rewards to a new wallet.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFeeRecipientRequest"}}}}}}}}
```

## Validator Monitoring

> Clients can invoke this endpoint to monitor existing validators by retrieving and tracking validator addresses on the platform. A request with a list of validator addresses enables the creation of corresponding positions on the platform for monitoring.> \\
>
> \
> If an onboarded validator has a long history to catch up on, it will take some time for the validator to become up to date with the current epoch, status, balances, and rewards. When performing any staking actions on such validators, this must be taken into account.

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"tags":[{"name":"Ethereum"}],"servers":[{"url":"http://localhost","description":"Generated server url"}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ValidatorMonitoringResponse":{"title":"ValidatorMonitoringResponse","type":"object","properties":{"validator_monitoring_reference_id":{"type":"string","description":"A system-generated unique identifier for the API request. This identifier is recorded in the ‘Link ID’ field of all positions created through the API request."}}},"ValidatorErrorListResponse":{"title":"Validator Error Response","type":"object","properties":{"error":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorErrorMessage"}}}},"ValidatorErrorMessage":{"title":"Validator Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}},"InternalServerInfoErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"message":{"type":"string","description":"The description related to the error being reported."}}},"ValidatorMonitoringRequest":{"title":"ValidatorMonitoringRequest","type":"object","required":["network","data"],"properties":{"network":{"type":"string","description":"Network to which the validators belongs to. Supported values are:\r\n- mainnet\r\n- hoodi"},"data":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorMonitoringRequestData"}}}},"ValidatorMonitoringRequestData":{"title":"ValidatorMonitoringRequestData","type":"object","required":["pubkey"],"properties":{"pubkey":{"type":"string","description":"The public key of the validator that will be monitored on the platform."},"account":{"type":"string","description":"The account name registered on the platform that is associated with the Staking Partner. If not provided, requests will be assigned to the default account."}}}}},"paths":{"/v1/ethereum/validators/monitoring":{"post":{"summary":"Validator Monitoring","tags":["Ethereum"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorMonitoringResponse"}}},"headers":{"header-0":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorErrorListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerInfoErrorMessage"}}}}},"operationId":"monitoring","description":"Clients can invoke this endpoint to monitor existing validators by retrieving and tracking validator addresses on the platform. A request with a list of validator addresses enables the creation of corresponding positions on the platform for monitoring.\r\n\r\nIf an onboarded validator has a long history to catch up on, it will take some time for the validator to become up to date with the current epoch, status, balances, and rewards. When performing any staking actions on such validators, this must be taken into account.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorMonitoringRequest"}}}}}}}}
```


# Models

## The StakingRequest object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"StakingRequest":{"title":"Staking Request","type":"object","required":["client_req_id","network","validator_count","withdrawal_address"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the staking request generated by the client."},"network":{"type":"string","description":"The network on which validators should be created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"withdrawal_credentials_type":{"enum":["0x01","0x02"],"description":"The withdrawal credential type of the validator(s) to be created. Supported values are;\r\n- 0x01 (Default)\r\n- 0x02","default":"0x01"},"amounts_unit":{"description":"The unit in which the staking amount is specified for withdrawal_credential_type = 0x02 validators in the amounts field. Supported values are:\r\n- ETH\r\n- GWEI\r\n\r\nConditionally required if the withdrawal_credential_type = 0x02.","enum":["ETH","GWEI"]},"amounts":{"type":"array","description":"The Ethereum amounts to be staked, specified in either ETH or GWEI. This is required if the withdrawal credentials type is 0x02. \r\n\r\n- When specified in ETH, up to 9 decimal places are supported.\r\n- When specified in GWEI, only whole numbers are supported.\r\n- Any additional decimal places will be ignored.","items":{"type":"integer","format":"int32"}},"validator_count":{"type":"integer","description":"The number of validators required. A maximum of 1000 validators are supported","format":"int32"},"withdrawal_address":{"type":"string","description":"The ETH account (wallet) used for the withdrawal credentials of the validators. This is the address that will receive consensus rewards and unstaked ETH after exiting."},"fee_recipient_address":{"type":"string","description":"The ETH account (wallet) that will receive the execution layer rewards. If not provided, this will be defaulted to the withdrawal address."},"region":{"type":"string","description":"The geographic region where the validator will be created. Supported values are;\r\n- US\r\n- EU (Default)\r\n- KR","default":"EU","enum":["US","EU","KR"]},"account":{"type":"string","description":"The account name registered on the platform that is associated with the client's customer. If not provided, requests will be assigned to a default account.\n"}}}}}}
```

## The ErrorMessage object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}}}}}
```

## The ValidatorErrorMessage object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorErrorMessage":{"title":"Validator Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}}}}}
```

## The StakingErrorListResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"StakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/ErrorMessage"}}}},"ErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}}}}}
```

## The InternalServerErrorMessage object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}}}}}
```

## The InternalServerInfoErrorMessage object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"InternalServerInfoErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"message":{"type":"string","description":"The description related to the error being reported."}}}}}}
```

## The InternalServerStakingErrorListResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"InternalServerStakingErrorListResponse":{"title":"Error List","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the request addressed by this response message."},"errors":{"type":"array","description":"An array of errors that resulted from this request.","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}},"description":""},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}}}}}
```

## The BatchData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"BatchData":{"title":"Staking Response Batch","type":"object","properties":{"batch_id":{"type":"integer","description":"Identifier of the validator batch.","format":"int32","enum":[1,2,3,4,5,6,7,8,9,10]},"deposit_data":{"type":"array","description":"An array of validator details in this batch.","items":{"$ref":"#/components/schemas/DepositData"}},"deposit_transaction":{"$ref":"#/components/schemas/DepositTransaction"}},"description":"A block that contains validator batches. Each batch includes details of 250 validators and the associated funding transaction."},"DepositData":{"title":"Staking Response Batch Deposit Data","type":"object","description":"An array of validator details in this batch.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"amount":{"type":"number","description":"The amount of ETH in GWEI required to be deposited.","format":"double"},"withdrawal_credentials":{"type":"string","description":"Withdrawal credentials for the validator funds to be withdrawn upon exit."},"signature":{"type":"string","description":"A “proof of possession” which signs over pubkey, withdrawal_credentials, and amount using the validator private key."},"deposit_data_root":{"type":"string","description":"Merkle root hash of the deposit data."},"deposit_message_root":{"type":"string","description":"Merkle root hash of the deposit message."},"fork_version":{"type":"string","description":"The genesis fork version."},"deposit_cli_version":{"type":"string","description":"Staking deposit cli version."}}},"DepositTransaction":{"title":"Staking Response Batch Deposit Transaction","type":"object","description":"The JSON object that contains the funding transaction details of all validators belonging to this batch.","properties":{"deposit_amount_wei":{"type":"string","description":"The total amount of ETH to be staked for the batch in WEI."},"deposit_address":{"type":"string","description":"Batch deposit contract address."},"contract_call_data":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract. "}}}}}}
```

## The DepositData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"DepositData":{"title":"Staking Response Batch Deposit Data","type":"object","description":"An array of validator details in this batch.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"amount":{"type":"number","description":"The amount of ETH in GWEI required to be deposited.","format":"double"},"withdrawal_credentials":{"type":"string","description":"Withdrawal credentials for the validator funds to be withdrawn upon exit."},"signature":{"type":"string","description":"A “proof of possession” which signs over pubkey, withdrawal_credentials, and amount using the validator private key."},"deposit_data_root":{"type":"string","description":"Merkle root hash of the deposit data."},"deposit_message_root":{"type":"string","description":"Merkle root hash of the deposit message."},"fork_version":{"type":"string","description":"The genesis fork version."},"deposit_cli_version":{"type":"string","description":"Staking deposit cli version."}}}}}}
```

## The DepositTransaction object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"DepositTransaction":{"title":"Staking Response Batch Deposit Transaction","type":"object","description":"The JSON object that contains the funding transaction details of all validators belonging to this batch.","properties":{"deposit_amount_wei":{"type":"string","description":"The total amount of ETH to be staked for the batch in WEI."},"deposit_address":{"type":"string","description":"Batch deposit contract address."},"contract_call_data":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract. "}}}}}}
```

## The StakingResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"StakingResponse":{"title":"Staking Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the staking request addressed by this response message."},"staking_ref_id":{"type":"string","description":"A unique reference ID generated by the staking infrastructure for the staking request."},"network":{"type":"string","description":"The network on which validators should be created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"withdrawal_credentials_type":{"enum":["0x01","0x02"],"description":"The withdrawal credential type of the validator(s) that will be created. Applicable values are;\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"The specified address to which funds will be withdrawn, as mentioned in the staking request."},"fee_recipient_address":{"type":"string","description":"The fee recipient address that receives Execution Layer fees, as mentioned in the staking request."},"region":{"type":"string","description":"The geographic region where the validator will be created. Supported values are;\r\n- US\r\n- EU\r\n- KR","enum":["US","EU","KR"]},"provisioned_at":{"type":"string","description":"The date and time when the validator was provisioned by the staking infrastructure."},"data":{"type":"array","description":"A block that contains validator batches. Each batch includes details of 100 validators and the associated funding transaction.","items":{"$ref":"#/components/schemas/BatchData"}}}},"BatchData":{"title":"Staking Response Batch","type":"object","properties":{"batch_id":{"type":"integer","description":"Identifier of the validator batch.","format":"int32","enum":[1,2,3,4,5,6,7,8,9,10]},"deposit_data":{"type":"array","description":"An array of validator details in this batch.","items":{"$ref":"#/components/schemas/DepositData"}},"deposit_transaction":{"$ref":"#/components/schemas/DepositTransaction"}},"description":"A block that contains validator batches. Each batch includes details of 250 validators and the associated funding transaction."},"DepositData":{"title":"Staking Response Batch Deposit Data","type":"object","description":"An array of validator details in this batch.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"amount":{"type":"number","description":"The amount of ETH in GWEI required to be deposited.","format":"double"},"withdrawal_credentials":{"type":"string","description":"Withdrawal credentials for the validator funds to be withdrawn upon exit."},"signature":{"type":"string","description":"A “proof of possession” which signs over pubkey, withdrawal_credentials, and amount using the validator private key."},"deposit_data_root":{"type":"string","description":"Merkle root hash of the deposit data."},"deposit_message_root":{"type":"string","description":"Merkle root hash of the deposit message."},"fork_version":{"type":"string","description":"The genesis fork version."},"deposit_cli_version":{"type":"string","description":"Staking deposit cli version."}}},"DepositTransaction":{"title":"Staking Response Batch Deposit Transaction","type":"object","description":"The JSON object that contains the funding transaction details of all validators belonging to this batch.","properties":{"deposit_amount_wei":{"type":"string","description":"The total amount of ETH to be staked for the batch in WEI."},"deposit_address":{"type":"string","description":"Batch deposit contract address."},"contract_call_data":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract. "}}}}}}
```

## The EthEpochLevelInfoRequest object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"EthEpochLevelInfoRequest":{"title":"Rewards Request","type":"object","required":["network","start","end","rollup_type"],"properties":{"network":{"type":"string","description":"The network on which validators should be created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"start":{"type":"string","description":"It specifies the start epoch if the type is 1, or the start date in the \"YYYY-MM-DD\" format (UTC timezone) if the type is 2"},"end":{"type":"string","description":"It specifies the end epoch if the type is 1, or the end date in the \"YYYY-MM-DD\" format (UTC timezone) if the type is 2"},"rollup_type":{"type":"string","description":"Denotes how the requested rewards range is specified. Applicable values are:\r\n-1 (epoch)\r\n- 2 (date)","enum":["1","2"]},"pubkeys":{"type":"array","items":{"type":"string","description":"List of validator public keys to fetch the rewards breakdown. A maximum of 50 entries are allowed."}},"cl_rewards_breakdown":{"type":"boolean","default":false,"description":"Denotes whether the response should include a detailed consensus-layer (CL) rewards and penalties breakdown. The applicable values are: \r\n- true\r\n- false (Default)"}}}}}}
```

## The ValidatorErrorListResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorErrorListResponse":{"title":"Validator Error Response","type":"object","properties":{"error":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorErrorMessage"}}}},"ValidatorErrorMessage":{"title":"Validator Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}}}}}
```

## The InternalServerValidatorErrorListResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"InternalServerValidatorErrorListResponse":{"title":"Validator Error Response","type":"object","properties":{"error":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}},"InternalServerErrorMessage":{"title":"Error Message","type":"object","description":"An array of errors that resulted from this request.","required":["message"],"properties":{"code":{"type":"string","description":"Error code"},"message":{"type":"string","description":"The description related to the error being reported."}}}}}}
```

## The EthEpochLevelInfoResponseWithWithdrawalSlotInfo object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"EthEpochLevelInfoResponseWithWithdrawalSlotInfo":{"title":"Withdrawals","type":"object","properties":{"network":{"type":"string","description":"Network specified in the request. ","enum":["mainnet","hoodi"]},"start":{"type":"string","description":"Start epoch or start date specified in the request. "},"end":{"type":"string","description":"End epoch or end date specified in the request."},"page":{"type":"integer","description":"The current page number sent in the request","format":"int32"},"total":{"type":"integer","description":"The total number of records resulted for the input criteria.","format":"int32"},"data":{"type":"array","description":"An array that contains the breakdown.","items":{"$ref":"#/components/schemas/WithdrawalSlotInfoType1"}}}},"WithdrawalSlotInfoType1":{"title":"Withdrawals","type":"object","description":"An array that contains the breakdown.","properties":{"timestamp":{"type":"string","description":"The timestamp corresponds to the withdrawal epoch. This should be in the format of “YYYY-MM-DD HH:mm:ss” in UTC."},"slot":{"type":"integer","description":"The consensus layer slot at which withdrawal occurred.","format":"int32"},"block":{"type":"integer","description":"The execution layer block number at which withdrawal occurred.","format":"int64"},"epoch":{"type":"integer","description":"The epoch at which the withdrawal was executed. Applicable only if the rollup_type is 1.","format":"int32"},"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"string","description":"The index of the validator."},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"The withdrawal address of the validator."},"withdrawal_amount_eth":{"type":"number","description":"The withdrawn amount in ETH.","format":"double"},"withdrawal_amount_wei":{"type":"string","description":"The withdrawn amount in WEI."},"is_full_withdrawal":{"type":"boolean","description":"This parameter indicates whether the validator’s balance was fully withdrawn or not."}}}}}}
```

## The WithdrawalSlotInfoType1 object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"WithdrawalSlotInfoType1":{"title":"Withdrawals","type":"object","description":"An array that contains the breakdown.","properties":{"timestamp":{"type":"string","description":"The timestamp corresponds to the withdrawal epoch. This should be in the format of “YYYY-MM-DD HH:mm:ss” in UTC."},"slot":{"type":"integer","description":"The consensus layer slot at which withdrawal occurred.","format":"int32"},"block":{"type":"integer","description":"The execution layer block number at which withdrawal occurred.","format":"int64"},"epoch":{"type":"integer","description":"The epoch at which the withdrawal was executed. Applicable only if the rollup_type is 1.","format":"int32"},"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"string","description":"The index of the validator."},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"The withdrawal address of the validator."},"withdrawal_amount_eth":{"type":"number","description":"The withdrawn amount in ETH.","format":"double"},"withdrawal_amount_wei":{"type":"string","description":"The withdrawn amount in WEI."},"is_full_withdrawal":{"type":"boolean","description":"This parameter indicates whether the validator’s balance was fully withdrawn or not."}}}}}}
```

## The EthEpochLevelInfoResponseWithValidatorData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"EthEpochLevelInfoResponseWithValidatorData":{"title":"Validator Rewards","type":"object","properties":{"network":{"type":"string","description":"Network specified in the request. ","enum":["mainnet","hoodi"]},"start":{"type":"string","description":"Start epoch or start date specified in the request. "},"end":{"type":"string","description":"End epoch or end date specified in the request."},"page":{"type":"integer","description":"The current page number sent in the request","format":"int32"},"total":{"type":"integer","description":"The total number of records resulted for the input criteria.","format":"int32"},"data":{"type":"array","description":"An array that contains the breakdown.","items":{"$ref":"#/components/schemas/ValidatorAddressWiseData"}}}},"ValidatorAddressWiseData":{"title":"Validator Rewards","type":"object","description":"An array that contains the breakdown.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"string","description":"Validator index."},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"total_eth":{"type":"number","description":"Total rewards the validator earned since inception in ETH. If the MEV information is not available for a certain epoch, that epoch's exact reward value will not be included in this value. The reward value will be updated once the MEV information becomes available.","format":"double"},"total_wei":{"type":"string","description":"Total rewards the validator earned since inception in WEI. If the MEV information is not available for a certain epoch, that epoch's exact reward value will not be included in this value. The reward value will be updated once the MEV information becomes available."},"accumulated_rewards":{"type":"array","description":"An array that contains accumulated consensus and execution layer rewards for the given validator and the query criteria. For Execution Layer Rewards, if the MEV information is not available for a certain epoch within the queried range, that epoch’s exact reward value will not be included in this value. The reward value will be updated once the MEV information becomes available.","items":{"$ref":"#/components/schemas/AccumulatedEthRewardsData"}},"rewards_breakdown":{"type":"array","items":{"$ref":"#/components/schemas/RewardsBreakdown"}}}},"AccumulatedEthRewardsData":{"oneOf":[{"$ref":"#/components/schemas/ConsensusAccumulatedReward"},{"$ref":"#/components/schemas/ExecutionAccumulatedReward"}],"discriminator":{"propertyName":"type"}},"ConsensusAccumulatedReward":{"type":"object","properties":{"type":{"type":"string","enum":["CONSENSUS"]},"accumulated_eth":{"type":"number","format":"double","description":"Accumulated consensus rewards in ETH between the start and the end specified in the request."},"accumulated_wei":{"type":"string","description":"Accumulated consensus rewards in WEI between the start and the end specified in the request."}}},"ExecutionAccumulatedReward":{"type":"object","properties":{"type":{"type":"string","enum":["EXECUTION"]},"accumulated_eth":{"type":"number","format":"double","description":"Accumulated execution rewards in ETH between the start and the end specified in the request."},"accumulated_wei":{"type":"string","description":"Accumulated execution rewards in WEI between the start and the end specified in the request."}}},"RewardsBreakdown":{"title":"RewardsBreakdown","type":"object","description":"An array that contains breakdown of rewards depending on the “rollup_type” parameter specified in the request.","properties":{"epoch":{"type":"integer","description":"The epoch corresponds to the rewards. This is applicable only if the rollup_type is 1. ","format":"int32"},"actual_balance_in_wei":{"type":"string","description":"Actual balance of the validator in the corresponding epoch, in WEI."},"actual_balance_in_eth":{"type":"number","description":"Actual balance of the validator in the corresponding epoch, in ETH.","format":"double"},"balance_in_wei":{"type":"string","description":"Effective balance of the validator in the corresponding epoch, in WEI."},"balance_in_eth":{"type":"number","description":"Effective balance of the validator in the corresponding epoch, in ETH.","format":"double"},"timestamp":{"type":"string","description":"The timestamp corresponding to the epoch at which the rewards were given. "},"rewards":{"type":"array","items":{"$ref":"#/components/schemas/RewardsInfo"}}}},"RewardsInfo":{"description":"An array that contains consensus and execution layer rewards for the given epoch.","oneOf":[{"$ref":"#/components/schemas/ConsensusReward"},{"$ref":"#/components/schemas/ExecutionReward"}]},"ConsensusReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["CONSENSUS"]},"rewards_eth":{"type":"number","format":"double","description":"Consensus layer rewards accumulated during the period in ETH."},"rewards_wei":{"type":"string","description":"Consensus layer rewards accumulated during the period in WEI."},"attestation_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from attestation duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"attestation_rewards_wei":{"type":"string","description":"Total rewards earned from attestation duties during the period, expressed in WEI. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from block proposal duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_wei":{"type":"string","description":"Total rewards earned from block proposal duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from sync committee duties during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_wei":{"type":"string","description":"Total rewards earned from sync committee duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_eth":{"type":"number","format":"double","description":"Initial slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_wei":{"type":"string","description":"Initial slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_eth":{"type":"number","format":"double","description":"Correlation slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_wei":{"type":"string","description":"Correlation slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."}}},"ExecutionReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["EXECUTION"]},"rewards_eth":{"type":"number","format":"double","description":"Execution layer rewards accumulated during the period in ETH. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"rewards_wei":{"type":"string","description":"Execution layer rewards accumulated during the period in WEI. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"is_mev":{"type":"boolean","description":"When the MEV boost was used for the block proposal, this should be set to true; otherwise it will be false. This field will also be set to ‘false’ if the MEV information is not yet available. In a scenario like this, the rewards_eth and rewards_wei values will be set to null. The values will be updated once the MEV information becomes available."},"mev_relay":{"type":"string","description":"The name of the MEV boost service. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"recipient":{"type":"string","description":"The recipient address of the execution rewards. This field will be set to null if the MEV information has not yet been received from the relay. The value will be updated once the MEV information becomes available."},"mev_builder":{"type":"string","description":"The public key of the MEV builder that sent the execution rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"slot":{"type":"integer","description":"The slot number of the proposal made by the validator.","format":"int32"},"block":{"type":"integer","description":"The execution layer block number of the proposal made by the validator.","format":"int64"},"tx_hash":{"type":"string","description":"The hash of the transaction used to send the MEV rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true}}}}}}
```

## The ValidatorAddressWiseData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorAddressWiseData":{"title":"Validator Rewards","type":"object","description":"An array that contains the breakdown.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"string","description":"Validator index."},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"total_eth":{"type":"number","description":"Total rewards the validator earned since inception in ETH. If the MEV information is not available for a certain epoch, that epoch's exact reward value will not be included in this value. The reward value will be updated once the MEV information becomes available.","format":"double"},"total_wei":{"type":"string","description":"Total rewards the validator earned since inception in WEI. If the MEV information is not available for a certain epoch, that epoch's exact reward value will not be included in this value. The reward value will be updated once the MEV information becomes available."},"accumulated_rewards":{"type":"array","description":"An array that contains accumulated consensus and execution layer rewards for the given validator and the query criteria. For Execution Layer Rewards, if the MEV information is not available for a certain epoch within the queried range, that epoch’s exact reward value will not be included in this value. The reward value will be updated once the MEV information becomes available.","items":{"$ref":"#/components/schemas/AccumulatedEthRewardsData"}},"rewards_breakdown":{"type":"array","items":{"$ref":"#/components/schemas/RewardsBreakdown"}}}},"AccumulatedEthRewardsData":{"oneOf":[{"$ref":"#/components/schemas/ConsensusAccumulatedReward"},{"$ref":"#/components/schemas/ExecutionAccumulatedReward"}],"discriminator":{"propertyName":"type"}},"ConsensusAccumulatedReward":{"type":"object","properties":{"type":{"type":"string","enum":["CONSENSUS"]},"accumulated_eth":{"type":"number","format":"double","description":"Accumulated consensus rewards in ETH between the start and the end specified in the request."},"accumulated_wei":{"type":"string","description":"Accumulated consensus rewards in WEI between the start and the end specified in the request."}}},"ExecutionAccumulatedReward":{"type":"object","properties":{"type":{"type":"string","enum":["EXECUTION"]},"accumulated_eth":{"type":"number","format":"double","description":"Accumulated execution rewards in ETH between the start and the end specified in the request."},"accumulated_wei":{"type":"string","description":"Accumulated execution rewards in WEI between the start and the end specified in the request."}}},"RewardsBreakdown":{"title":"RewardsBreakdown","type":"object","description":"An array that contains breakdown of rewards depending on the “rollup_type” parameter specified in the request.","properties":{"epoch":{"type":"integer","description":"The epoch corresponds to the rewards. This is applicable only if the rollup_type is 1. ","format":"int32"},"actual_balance_in_wei":{"type":"string","description":"Actual balance of the validator in the corresponding epoch, in WEI."},"actual_balance_in_eth":{"type":"number","description":"Actual balance of the validator in the corresponding epoch, in ETH.","format":"double"},"balance_in_wei":{"type":"string","description":"Effective balance of the validator in the corresponding epoch, in WEI."},"balance_in_eth":{"type":"number","description":"Effective balance of the validator in the corresponding epoch, in ETH.","format":"double"},"timestamp":{"type":"string","description":"The timestamp corresponding to the epoch at which the rewards were given. "},"rewards":{"type":"array","items":{"$ref":"#/components/schemas/RewardsInfo"}}}},"RewardsInfo":{"description":"An array that contains consensus and execution layer rewards for the given epoch.","oneOf":[{"$ref":"#/components/schemas/ConsensusReward"},{"$ref":"#/components/schemas/ExecutionReward"}]},"ConsensusReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["CONSENSUS"]},"rewards_eth":{"type":"number","format":"double","description":"Consensus layer rewards accumulated during the period in ETH."},"rewards_wei":{"type":"string","description":"Consensus layer rewards accumulated during the period in WEI."},"attestation_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from attestation duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"attestation_rewards_wei":{"type":"string","description":"Total rewards earned from attestation duties during the period, expressed in WEI. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from block proposal duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_wei":{"type":"string","description":"Total rewards earned from block proposal duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from sync committee duties during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_wei":{"type":"string","description":"Total rewards earned from sync committee duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_eth":{"type":"number","format":"double","description":"Initial slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_wei":{"type":"string","description":"Initial slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_eth":{"type":"number","format":"double","description":"Correlation slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_wei":{"type":"string","description":"Correlation slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."}}},"ExecutionReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["EXECUTION"]},"rewards_eth":{"type":"number","format":"double","description":"Execution layer rewards accumulated during the period in ETH. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"rewards_wei":{"type":"string","description":"Execution layer rewards accumulated during the period in WEI. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"is_mev":{"type":"boolean","description":"When the MEV boost was used for the block proposal, this should be set to true; otherwise it will be false. This field will also be set to ‘false’ if the MEV information is not yet available. In a scenario like this, the rewards_eth and rewards_wei values will be set to null. The values will be updated once the MEV information becomes available."},"mev_relay":{"type":"string","description":"The name of the MEV boost service. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"recipient":{"type":"string","description":"The recipient address of the execution rewards. This field will be set to null if the MEV information has not yet been received from the relay. The value will be updated once the MEV information becomes available."},"mev_builder":{"type":"string","description":"The public key of the MEV builder that sent the execution rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"slot":{"type":"integer","description":"The slot number of the proposal made by the validator.","format":"int32"},"block":{"type":"integer","description":"The execution layer block number of the proposal made by the validator.","format":"int64"},"tx_hash":{"type":"string","description":"The hash of the transaction used to send the MEV rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true}}}}}}
```

## The AccumulatedEthRewardsData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"AccumulatedEthRewardsData":{"oneOf":[{"$ref":"#/components/schemas/ConsensusAccumulatedReward"},{"$ref":"#/components/schemas/ExecutionAccumulatedReward"}],"discriminator":{"propertyName":"type"}},"ConsensusAccumulatedReward":{"type":"object","properties":{"type":{"type":"string","enum":["CONSENSUS"]},"accumulated_eth":{"type":"number","format":"double","description":"Accumulated consensus rewards in ETH between the start and the end specified in the request."},"accumulated_wei":{"type":"string","description":"Accumulated consensus rewards in WEI between the start and the end specified in the request."}}},"ExecutionAccumulatedReward":{"type":"object","properties":{"type":{"type":"string","enum":["EXECUTION"]},"accumulated_eth":{"type":"number","format":"double","description":"Accumulated execution rewards in ETH between the start and the end specified in the request."},"accumulated_wei":{"type":"string","description":"Accumulated execution rewards in WEI between the start and the end specified in the request."}}}}}}
```

## The ConsensusAccumulatedReward object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ConsensusAccumulatedReward":{"type":"object","properties":{"type":{"type":"string","enum":["CONSENSUS"]},"accumulated_eth":{"type":"number","format":"double","description":"Accumulated consensus rewards in ETH between the start and the end specified in the request."},"accumulated_wei":{"type":"string","description":"Accumulated consensus rewards in WEI between the start and the end specified in the request."}}}}}}
```

## The ExecutionAccumulatedReward object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ExecutionAccumulatedReward":{"type":"object","properties":{"type":{"type":"string","enum":["EXECUTION"]},"accumulated_eth":{"type":"number","format":"double","description":"Accumulated execution rewards in ETH between the start and the end specified in the request."},"accumulated_wei":{"type":"string","description":"Accumulated execution rewards in WEI between the start and the end specified in the request."}}}}}}
```

## The RewardsBreakdown object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"RewardsBreakdown":{"title":"RewardsBreakdown","type":"object","description":"An array that contains breakdown of rewards depending on the “rollup_type” parameter specified in the request.","properties":{"epoch":{"type":"integer","description":"The epoch corresponds to the rewards. This is applicable only if the rollup_type is 1. ","format":"int32"},"actual_balance_in_wei":{"type":"string","description":"Actual balance of the validator in the corresponding epoch, in WEI."},"actual_balance_in_eth":{"type":"number","description":"Actual balance of the validator in the corresponding epoch, in ETH.","format":"double"},"balance_in_wei":{"type":"string","description":"Effective balance of the validator in the corresponding epoch, in WEI."},"balance_in_eth":{"type":"number","description":"Effective balance of the validator in the corresponding epoch, in ETH.","format":"double"},"timestamp":{"type":"string","description":"The timestamp corresponding to the epoch at which the rewards were given. "},"rewards":{"type":"array","items":{"$ref":"#/components/schemas/RewardsInfo"}}}},"RewardsInfo":{"description":"An array that contains consensus and execution layer rewards for the given epoch.","oneOf":[{"$ref":"#/components/schemas/ConsensusReward"},{"$ref":"#/components/schemas/ExecutionReward"}]},"ConsensusReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["CONSENSUS"]},"rewards_eth":{"type":"number","format":"double","description":"Consensus layer rewards accumulated during the period in ETH."},"rewards_wei":{"type":"string","description":"Consensus layer rewards accumulated during the period in WEI."},"attestation_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from attestation duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"attestation_rewards_wei":{"type":"string","description":"Total rewards earned from attestation duties during the period, expressed in WEI. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from block proposal duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_wei":{"type":"string","description":"Total rewards earned from block proposal duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from sync committee duties during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_wei":{"type":"string","description":"Total rewards earned from sync committee duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_eth":{"type":"number","format":"double","description":"Initial slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_wei":{"type":"string","description":"Initial slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_eth":{"type":"number","format":"double","description":"Correlation slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_wei":{"type":"string","description":"Correlation slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."}}},"ExecutionReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["EXECUTION"]},"rewards_eth":{"type":"number","format":"double","description":"Execution layer rewards accumulated during the period in ETH. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"rewards_wei":{"type":"string","description":"Execution layer rewards accumulated during the period in WEI. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"is_mev":{"type":"boolean","description":"When the MEV boost was used for the block proposal, this should be set to true; otherwise it will be false. This field will also be set to ‘false’ if the MEV information is not yet available. In a scenario like this, the rewards_eth and rewards_wei values will be set to null. The values will be updated once the MEV information becomes available."},"mev_relay":{"type":"string","description":"The name of the MEV boost service. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"recipient":{"type":"string","description":"The recipient address of the execution rewards. This field will be set to null if the MEV information has not yet been received from the relay. The value will be updated once the MEV information becomes available."},"mev_builder":{"type":"string","description":"The public key of the MEV builder that sent the execution rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"slot":{"type":"integer","description":"The slot number of the proposal made by the validator.","format":"int32"},"block":{"type":"integer","description":"The execution layer block number of the proposal made by the validator.","format":"int64"},"tx_hash":{"type":"string","description":"The hash of the transaction used to send the MEV rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true}}}}}}
```

## The RewardsInfo object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"RewardsInfo":{"description":"An array that contains consensus and execution layer rewards for the given epoch.","oneOf":[{"$ref":"#/components/schemas/ConsensusReward"},{"$ref":"#/components/schemas/ExecutionReward"}]},"ConsensusReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["CONSENSUS"]},"rewards_eth":{"type":"number","format":"double","description":"Consensus layer rewards accumulated during the period in ETH."},"rewards_wei":{"type":"string","description":"Consensus layer rewards accumulated during the period in WEI."},"attestation_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from attestation duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"attestation_rewards_wei":{"type":"string","description":"Total rewards earned from attestation duties during the period, expressed in WEI. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from block proposal duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_wei":{"type":"string","description":"Total rewards earned from block proposal duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from sync committee duties during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_wei":{"type":"string","description":"Total rewards earned from sync committee duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_eth":{"type":"number","format":"double","description":"Initial slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_wei":{"type":"string","description":"Initial slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_eth":{"type":"number","format":"double","description":"Correlation slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_wei":{"type":"string","description":"Correlation slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."}}},"ExecutionReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["EXECUTION"]},"rewards_eth":{"type":"number","format":"double","description":"Execution layer rewards accumulated during the period in ETH. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"rewards_wei":{"type":"string","description":"Execution layer rewards accumulated during the period in WEI. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"is_mev":{"type":"boolean","description":"When the MEV boost was used for the block proposal, this should be set to true; otherwise it will be false. This field will also be set to ‘false’ if the MEV information is not yet available. In a scenario like this, the rewards_eth and rewards_wei values will be set to null. The values will be updated once the MEV information becomes available."},"mev_relay":{"type":"string","description":"The name of the MEV boost service. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"recipient":{"type":"string","description":"The recipient address of the execution rewards. This field will be set to null if the MEV information has not yet been received from the relay. The value will be updated once the MEV information becomes available."},"mev_builder":{"type":"string","description":"The public key of the MEV builder that sent the execution rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"slot":{"type":"integer","description":"The slot number of the proposal made by the validator.","format":"int32"},"block":{"type":"integer","description":"The execution layer block number of the proposal made by the validator.","format":"int64"},"tx_hash":{"type":"string","description":"The hash of the transaction used to send the MEV rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true}}}}}}
```

## The ConsensusReward object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ConsensusReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["CONSENSUS"]},"rewards_eth":{"type":"number","format":"double","description":"Consensus layer rewards accumulated during the period in ETH."},"rewards_wei":{"type":"string","description":"Consensus layer rewards accumulated during the period in WEI."},"attestation_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from attestation duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"attestation_rewards_wei":{"type":"string","description":"Total rewards earned from attestation duties during the period, expressed in WEI. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from block proposal duties during the period, expressed in ETH. This field is only applicable for consensus layer rewards. Returned only when cl_rewards_breakdown is true."},"block_proposer_rewards_wei":{"type":"string","description":"Total rewards earned from block proposal duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_eth":{"type":"number","format":"double","description":"Total rewards earned from sync committee duties during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"sync_committee_rewards_wei":{"type":"string","description":"Total rewards earned from sync committee duties during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_eth":{"type":"number","format":"double","description":"Initial slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"initial_slashing_penalties_wei":{"type":"string","description":"Initial slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_eth":{"type":"number","format":"double","description":"Correlation slashing penalties incurred during the period, expressed in ETH. Returned only when cl_rewards_breakdown is true."},"correlation_slashing_penalties_wei":{"type":"string","description":"Correlation slashing penalties incurred during the period, expressed in WEI. Returned only when cl_rewards_breakdown is true."}}}}}}
```

## The ExecutionReward object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ExecutionReward":{"type":"object","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["EXECUTION"]},"rewards_eth":{"type":"number","format":"double","description":"Execution layer rewards accumulated during the period in ETH. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"rewards_wei":{"type":"string","description":"Execution layer rewards accumulated during the period in WEI. Note: If the MEV information is not yet available, this field will be set to null. The value will be updated once the MEV information becomes available."},"is_mev":{"type":"boolean","description":"When the MEV boost was used for the block proposal, this should be set to true; otherwise it will be false. This field will also be set to ‘false’ if the MEV information is not yet available. In a scenario like this, the rewards_eth and rewards_wei values will be set to null. The values will be updated once the MEV information becomes available."},"mev_relay":{"type":"string","description":"The name of the MEV boost service. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"recipient":{"type":"string","description":"The recipient address of the execution rewards. This field will be set to null if the MEV information has not yet been received from the relay. The value will be updated once the MEV information becomes available."},"mev_builder":{"type":"string","description":"The public key of the MEV builder that sent the execution rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true},"slot":{"type":"integer","description":"The slot number of the proposal made by the validator.","format":"int32"},"block":{"type":"integer","description":"The execution layer block number of the proposal made by the validator.","format":"int64"},"tx_hash":{"type":"string","description":"The hash of the transaction used to send the MEV rewards. Applicable only if is_mev is true; otherwise, it will be null. This field will also be set to null if the MEV information is not yet available. The value will be updated once the MEV information becomes available.","nullable":true}}}}}}
```

## The ValidatorExitRequest object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorExitRequest":{"title":"Validator Exit Request","type":"object","required":["client_req_id","network","type"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier generated and sent by the client for the exit request. Refer Client Request Identifier for further details."},"network":{"type":"string","description":"The network on which validators were created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"type":{"type":"integer","description":"Indicates the type of attribute used to identify the validators to exit. The possible values are,\n- 1 (pubkey)\n- 2 (validator_index)\n- 3 (withdrawal_address)","format":"int32","enum":[1,2,3]},"pubkeys":{"type":"array","items":{"type":"string","description":"List of validator public keys to be exited. \nThis is required if the exit type is 1. \nA maximum of 250 public keys can be specified."}},"validator_indexes":{"type":"array","items":{"type":"integer","description":"The list of validator indexes to be exited. \nRequired if exit type is 2. \nA maximum of 250 validator indexes can be specified.","format":"int32"}},"withdrawal_address":{"type":"string","description":"The withdrawal address of the validators that should be exited.\nRequired if exit type is 3"},"validator_count":{"type":"integer","description":"Required if exit type is 3. \nThe Max count should be 250.","format":"int32"}}}}}}
```

## The ValidatorExitData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorExitData":{"title":"Validator Exit Data","type":"object","description":"An array which contains the details of the validators to be exited.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","description":"Index of the corresponding validator.","format":"int32"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator. "},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]}}}}}}
```

## The ValidatorExitResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorExitResponse":{"title":"Validator Exit Response","type":"object","properties":{"client_req_id":{"type":"string","description":"Unique identifier specified in the request."},"network":{"type":"string","description":"Network specified in the request. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"data":{"type":"array","description":"An array which contains the details of the validators to be exited.","items":{"$ref":"#/components/schemas/ValidatorExitData"}}}},"ValidatorExitData":{"title":"Validator Exit Data","type":"object","description":"An array which contains the details of the validators to be exited.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","description":"Index of the corresponding validator.","format":"int32"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator. "},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]}}}}}}
```

## The PreSignedExitDBO object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"PreSignedExitDBO":{"title":"Validator Pre-signed Exit Data","type":"object","description":"An array which contains the details of the validators to be exited.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","description":"Index of the corresponding validator.","format":"int32"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator."},"encrypted_exit_message":{"type":"string","description":"The encrypted pre-signed exit message.The client can decrypt this message using their private key."},"fork_version":{"type":"string","description":"The genesis fork version used when generating the pre-signed exit message."},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]}}}}}}
```

## The ValidatorPreSignedExitResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorPreSignedExitResponse":{"title":"Validator Pre-signed Exit Response","type":"object","properties":{"network":{"type":"string","description":"Network specified in the request.","enum":["mainnet","hoodi"]},"data":{"type":"array","description":"An array which contains the details of the validators to be exited.","items":{"$ref":"#/components/schemas/PreSignedExitDBO"}}}},"PreSignedExitDBO":{"title":"Validator Pre-signed Exit Data","type":"object","description":"An array which contains the details of the validators to be exited.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","description":"Index of the corresponding validator.","format":"int32"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator."},"encrypted_exit_message":{"type":"string","description":"The encrypted pre-signed exit message.The client can decrypt this message using their private key."},"fork_version":{"type":"string","description":"The genesis fork version used when generating the pre-signed exit message."},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]}}}}}}
```

## The PresignedExitData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"PresignedExitData":{"title":"Pre-signed Exit Data","type":"object","properties":{"fork_version":{"type":"string","description":"The genesis fork version used when generating the pre-signed exit message."},"encrypted_exit_message":{"type":"string","description":"The encrypted pre-signed exit message. The client can decrypt this message using their private key."}},"description":"This JSON object will be populated if the include_presigned_exit query parameter is set to “true” and the validator is in active status for at-least 256 epochs. Otherwise, it will be set to null."}}}}
```

## The StatusHistoryData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"StatusHistoryData":{"title":"Status History Data","type":"object","properties":{"status":{"type":"string","description":"Status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"transitioned_at":{"type":"string","description":"The date and time the validator transitioned into the given status. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"An array that contains the state transition of the validator. "}}}}
```

## The StakingRequestInfo object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"StakingRequestInfo":{"title":"Staking Request Data","type":"object","properties":{"staking_ref_id":{"type":"string","description":"A unique reference ID generated by the staking infrastructure for the staking request."},"provisioned_at":{"type":"string","description":"The date and time when the validator was provisioned by the staking infrastructure. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains the staking request id and validators provisioned date and time. This should be set to ‘null’ for externally provisioned validators."}}}}
```

## The ValidatorInfoData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorInfoData":{"title":"Validator Info Data","type":"object","description":"An array that contains the details about validators.","properties":{"last_monitored_epoch":{"type":"integer","description":"The most recent epoch successfully monitored for the validator, regardless of whether a validator record was persisted. Not applicable from staking initiation until the validator becomes active unless an epoch record exists for the last monitored epoch. Epoch records are created only when there is a balance, status, or reward update for that epoch.","format":"int32"},"epoch":{"type":"integer","description":"The specific blockchain epoch to which the returned validator details correspond.","format":"int32"},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"pubkey":{"type":"string","description":"Public key of the validator."},"region":{"type":"string","description":"The geographic region where the validator will be created.","enum":["US","EU","KR"]},"validator_index":{"type":"integer","description":"Validator index.","format":"int32"},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator. "},"fee_recipient_address":{"type":"string","description":"The fee recipient address belongs to the validator."},"estimated_activation_at":{"type":"string","description":"Estimate of when the validator will become active and start earning rewards. This will be populated since the validator is transitioned to DEPOSITED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"estimated_exit_at":{"type":"string","description":"Estimate of when the validator will exit and stop earning rewards. This will be populated since the validator is transitioned to EXIT_INITIATED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"estimated_withdrawal_at":{"type":"string","description":"Estimate of when the validator’s principal will become withdrawable. This will be populated since the validator is transitioned to EXITED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"balance_in_wei":{"type":"string","description":"Actual balance of the validator in WEI."},"balance_in_eth":{"type":"number","description":"Actual balance of the validator in ETH.","format":"double"},"status_history":{"type":"array","items":{"$ref":"#/components/schemas/StatusHistoryData"}},"voluntary_exit":{"$ref":"#/components/schemas/VoluntaryExitData"},"presigned_exit":{"$ref":"#/components/schemas/PresignedExitData"},"staking_request_info":{"$ref":"#/components/schemas/StakingRequestInfo"}}},"StatusHistoryData":{"title":"Status History Data","type":"object","properties":{"status":{"type":"string","description":"Status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"transitioned_at":{"type":"string","description":"The date and time the validator transitioned into the given status. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"An array that contains the state transition of the validator. "},"VoluntaryExitData":{"title":"Voluntary Exit Data","type":"object","properties":{"request_id":{"type":"string","description":"Unique request id sent by the client when requesting the voluntary exit."},"requested_at":{"type":"string","description":"The date and time the exit request was received. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"submitted_at":{"type":"string","description":"The date and time the validator’s exit message was broadcasted to the beacon node. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains on demand exit related information if the validator has initiated the voluntary exit. Otherwise, it will be null."},"PresignedExitData":{"title":"Pre-signed Exit Data","type":"object","properties":{"fork_version":{"type":"string","description":"The genesis fork version used when generating the pre-signed exit message."},"encrypted_exit_message":{"type":"string","description":"The encrypted pre-signed exit message. The client can decrypt this message using their private key."}},"description":"This JSON object will be populated if the include_presigned_exit query parameter is set to “true” and the validator is in active status for at-least 256 epochs. Otherwise, it will be set to null."},"StakingRequestInfo":{"title":"Staking Request Data","type":"object","properties":{"staking_ref_id":{"type":"string","description":"A unique reference ID generated by the staking infrastructure for the staking request."},"provisioned_at":{"type":"string","description":"The date and time when the validator was provisioned by the staking infrastructure. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains the staking request id and validators provisioned date and time. This should be set to ‘null’ for externally provisioned validators."}}}}
```

## The ValidatorsInfoResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorsInfoResponse":{"title":"Validator Info Response","type":"object","properties":{"network":{"type":"string","description":"Network specified in the request.","enum":["mainnet","hoodi"]},"page":{"type":"integer","description":"The current page number sent in the request.","format":"int32"},"total":{"type":"integer","description":"Total number of validators provisioned for the given client and the network.","format":"int32"},"data":{"type":"array","description":"An array that contains the details about validators.","items":{"$ref":"#/components/schemas/ValidatorInfoData"}}}},"ValidatorInfoData":{"title":"Validator Info Data","type":"object","description":"An array that contains the details about validators.","properties":{"last_monitored_epoch":{"type":"integer","description":"The most recent epoch successfully monitored for the validator, regardless of whether a validator record was persisted. Not applicable from staking initiation until the validator becomes active unless an epoch record exists for the last monitored epoch. Epoch records are created only when there is a balance, status, or reward update for that epoch.","format":"int32"},"epoch":{"type":"integer","description":"The specific blockchain epoch to which the returned validator details correspond.","format":"int32"},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"pubkey":{"type":"string","description":"Public key of the validator."},"region":{"type":"string","description":"The geographic region where the validator will be created.","enum":["US","EU","KR"]},"validator_index":{"type":"integer","description":"Validator index.","format":"int32"},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator. "},"fee_recipient_address":{"type":"string","description":"The fee recipient address belongs to the validator."},"estimated_activation_at":{"type":"string","description":"Estimate of when the validator will become active and start earning rewards. This will be populated since the validator is transitioned to DEPOSITED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"estimated_exit_at":{"type":"string","description":"Estimate of when the validator will exit and stop earning rewards. This will be populated since the validator is transitioned to EXIT_INITIATED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"estimated_withdrawal_at":{"type":"string","description":"Estimate of when the validator’s principal will become withdrawable. This will be populated since the validator is transitioned to EXITED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"balance_in_wei":{"type":"string","description":"Actual balance of the validator in WEI."},"balance_in_eth":{"type":"number","description":"Actual balance of the validator in ETH.","format":"double"},"status_history":{"type":"array","items":{"$ref":"#/components/schemas/StatusHistoryData"}},"voluntary_exit":{"$ref":"#/components/schemas/VoluntaryExitData"},"presigned_exit":{"$ref":"#/components/schemas/PresignedExitData"},"staking_request_info":{"$ref":"#/components/schemas/StakingRequestInfo"}}},"StatusHistoryData":{"title":"Status History Data","type":"object","properties":{"status":{"type":"string","description":"Status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"transitioned_at":{"type":"string","description":"The date and time the validator transitioned into the given status. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"An array that contains the state transition of the validator. "},"VoluntaryExitData":{"title":"Voluntary Exit Data","type":"object","properties":{"request_id":{"type":"string","description":"Unique request id sent by the client when requesting the voluntary exit."},"requested_at":{"type":"string","description":"The date and time the exit request was received. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"submitted_at":{"type":"string","description":"The date and time the validator’s exit message was broadcasted to the beacon node. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains on demand exit related information if the validator has initiated the voluntary exit. Otherwise, it will be null."},"PresignedExitData":{"title":"Pre-signed Exit Data","type":"object","properties":{"fork_version":{"type":"string","description":"The genesis fork version used when generating the pre-signed exit message."},"encrypted_exit_message":{"type":"string","description":"The encrypted pre-signed exit message. The client can decrypt this message using their private key."}},"description":"This JSON object will be populated if the include_presigned_exit query parameter is set to “true” and the validator is in active status for at-least 256 epochs. Otherwise, it will be set to null."},"StakingRequestInfo":{"title":"Staking Request Data","type":"object","properties":{"staking_ref_id":{"type":"string","description":"A unique reference ID generated by the staking infrastructure for the staking request."},"provisioned_at":{"type":"string","description":"The date and time when the validator was provisioned by the staking infrastructure. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains the staking request id and validators provisioned date and time. This should be set to ‘null’ for externally provisioned validators."}}}}
```

## The VoluntaryExitData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"VoluntaryExitData":{"title":"Voluntary Exit Data","type":"object","properties":{"request_id":{"type":"string","description":"Unique request id sent by the client when requesting the voluntary exit."},"requested_at":{"type":"string","description":"The date and time the exit request was received. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"submitted_at":{"type":"string","description":"The date and time the validator’s exit message was broadcasted to the beacon node. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains on demand exit related information if the validator has initiated the voluntary exit. Otherwise, it will be null."}}}}
```

## The ValidatorInfoResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorInfoResponse":{"title":"Validator Info","type":"object","properties":{"network":{"type":"string","description":"The network on which validators were created.","enum":["mainnet","hoodi"]},"last_monitored_epoch":{"type":"integer","description":"The most recent epoch successfully monitored for the validator, regardless of whether a validator record was persisted. Not applicable from staking initiation until the validator becomes active unless an epoch record exists for the last monitored epoch. Epoch records are created only when there is a balance, status, or reward update for that epoch.","format":"int32"},"epoch":{"type":"integer","description":"The specific blockchain epoch to which the returned validator details correspond.","format":"int32"},"status":{"type":"string","description":"Current status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"pubkey":{"type":"string","description":"Public key of the validator."},"region":{"type":"string","description":"The geographic region where the validator will be created.","enum":["US","EU","KR"]},"validator_index":{"type":"integer","description":"Validator index.","format":"int32"},"withdrawal_credential_type":{"type":"string","description":"Withdrawal credential type of the validator. Applicable values are:\r\n- 0x00\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"Withdrawal address of the corresponding validator. "},"fee_recipient_address":{"type":"string","description":"The fee recipient address belongs to the validator."},"estimated_activation_at":{"type":"string","description":"Estimate of when the validator will become active and start earning rewards. This will be populated since the validator is transitioned to DEPOSITED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"estimated_exit_at":{"type":"string","description":"Estimate of when the validator will exit and stop earning rewards. This will be populated since the validator is transitioned to EXIT_INITIATED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"estimated_withdrawal_at":{"type":"string","description":"Estimate of when the validator’s principal will become withdrawable. This will be populated since the validator is transitioned to EXITED status. Until then, it will be null. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"balance_in_wei":{"type":"string","description":"Actual balance of the validator in WEI."},"balance_in_eth":{"type":"number","description":"Actual balance of the validator in ETH.","format":"double"},"status_history":{"type":"array","items":{"$ref":"#/components/schemas/StatusHistoryData"}},"voluntary_exit":{"$ref":"#/components/schemas/VoluntaryExitData"},"presigned_exit":{"$ref":"#/components/schemas/PresignedExitData"},"staking_request_info":{"$ref":"#/components/schemas/StakingRequestInfo"}}},"StatusHistoryData":{"title":"Status History Data","type":"object","properties":{"status":{"type":"string","description":"Status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"transitioned_at":{"type":"string","description":"The date and time the validator transitioned into the given status. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"An array that contains the state transition of the validator. "},"VoluntaryExitData":{"title":"Voluntary Exit Data","type":"object","properties":{"request_id":{"type":"string","description":"Unique request id sent by the client when requesting the voluntary exit."},"requested_at":{"type":"string","description":"The date and time the exit request was received. It will be in the format of “YYYY-MM-DD HH:mm:ss”."},"submitted_at":{"type":"string","description":"The date and time the validator’s exit message was broadcasted to the beacon node. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains on demand exit related information if the validator has initiated the voluntary exit. Otherwise, it will be null."},"PresignedExitData":{"title":"Pre-signed Exit Data","type":"object","properties":{"fork_version":{"type":"string","description":"The genesis fork version used when generating the pre-signed exit message."},"encrypted_exit_message":{"type":"string","description":"The encrypted pre-signed exit message. The client can decrypt this message using their private key."}},"description":"This JSON object will be populated if the include_presigned_exit query parameter is set to “true” and the validator is in active status for at-least 256 epochs. Otherwise, it will be set to null."},"StakingRequestInfo":{"title":"Staking Request Data","type":"object","properties":{"staking_ref_id":{"type":"string","description":"A unique reference ID generated by the staking infrastructure for the staking request."},"provisioned_at":{"type":"string","description":"The date and time when the validator was provisioned by the staking infrastructure. It will be in the format of “YYYY-MM-DD HH:mm:ss”."}},"description":"JSON object that contains the staking request id and validators provisioned date and time. This should be set to ‘null’ for externally provisioned validators."}}}}
```

## The SummaryData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"SummaryData":{"title":"Summary Data","type":"object","properties":{"status":{"type":"string","description":"Status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"count":{"type":"integer","description":"The number of validators in the corresponding status. ","format":"int64"}},"description":"An array that contains validators summary."}}}}
```

## The ValidatorsSummaryResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorsSummaryResponse":{"title":"Validator Summary Response","type":"object","properties":{"network":{"type":"string","description":"Network specified in the request.","enum":["mainnet","hoodi"]},"total":{"type":"integer","description":"Total number of validators provisioned for the given client and the network.","format":"int64"},"data":{"type":"array","description":"An array that contains validators summary.","items":{"$ref":"#/components/schemas/SummaryData"}}}},"SummaryData":{"title":"Summary Data","type":"object","properties":{"status":{"type":"string","description":"Status of the validator.","enum":["STAKING_INITIATED","PENDING_DEPOSIT","DEPOSITED","DEPOSIT_FAILED","PENDING_QUEUED","ACTIVE","SLASHING","SLASHED","EXIT_INITIATED","EXITING","EXITED","WITHDRAWABLE","WITHDRAWN"]},"count":{"type":"integer","description":"The number of validators in the corresponding status. ","format":"int64"}},"description":"An array that contains validators summary."}}}}
```

## The ConsolidateRequest object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ConsolidateRequest":{"title":"Consolidate Request","type":"object","required":["client_req_id","network","source_pubkeys"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the staking request generated by the client."},"network":{"description":"The network to which the source and destination validators belong to. Supported values are:\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"source_pubkeys":{"type":"array","minItems":1,"maxItems":50,"uniqueItems":true,"description":"The type 0x01 validators to be converted to type 0x02 or type 0x01 and 0x02 validators to be merged with the destination_pubkey. \r\n\r\nA maximum of 50 validators are supported.","items":{"type":"string"}},"destination_pubkey":{"type":"string","description":"The validator that will hold the merged balance. Must be a 0x02 type validator."}}}}}}
```

## The ConsolidateResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ConsolidateResponse":{"title":"Consolidate Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The unique identifier specified in the request."},"network":{"description":"Network to which the source and destination validators belong to. ","enum":["mainnet","hoodi"]},"destination_pubkey":{"type":"string","description":"The validator that will hold the merged balance. If the request was a conversion, this will be kept empty."},"consolidation_contract_address":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract."},"data":{"type":"array","items":{"$ref":"#/components/schemas/ConsolidateResponseData"}},"created_at":{"type":"string","description":"The time at which the request was received by the platform. Time will be shown in the “YYYY-MM-DD HH:mm:ss” format."}}},"ConsolidateResponseData":{"title":"Consolidate Response Data","type":"object","properties":{"source_pubkey":{"type":"string","description":"Source public key."},"contract_call_data":{"type":"string","description":"The unsigned transaction payload relevant for the source public key."},"signer":{"type":"array","minItems":1,"maxItems":1,"description":"Withdrawal address of the source public key.","items":{"type":"string"}}}}}}}
```

## The ConsolidateResponseData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ConsolidateResponseData":{"title":"Consolidate Response Data","type":"object","properties":{"source_pubkey":{"type":"string","description":"Source public key."},"contract_call_data":{"type":"string","description":"The unsigned transaction payload relevant for the source public key."},"signer":{"type":"array","minItems":1,"maxItems":1,"description":"Withdrawal address of the source public key.","items":{"type":"string"}}}}}}}
```

## The ELExitRequest object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ELExitRequest":{"title":"EL Exit Request","type":"object","required":["client_req_id","network","type"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the execution layer triggerable exit request provided by the client."},"network":{"enum":["mainnet","hoodi"],"description":"Network to which the validators belongs to. Supported values are:\r\n- mainnet\r\n- hoodi"},"type":{"enum":[1,2],"description":"Indicates the type of attribute used to identify the validators to exit. The possible values are:\r\n- 1 (pubkey)\r\n- 2 (validator_index)"},"pubkeys":{"type":"array","minItems":1,"maxItems":100,"uniqueItems":true,"description":"List of validator public keys to be exited. \r\n\r\nThis is required if the exit type is 1. \r\n\r\nA maximum of 100 public keys can be specified.","items":{"type":"string"}},"validator_indexes":{"type":"array","minItems":1,"maxItems":100,"uniqueItems":true,"description":"List of validator indexes to be exited. \r\n\r\nThis is required if the exit type is 2.\r\n\r\nA maximum of 100 validator indexes can be specified.","items":{"type":"integer","format":"int32"}}}}}}}
```

## The ELExitResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ELExitResponse":{"title":"EL Exit Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The unique identifier specified in the request."},"network":{"description":"Network to which the validators belong to. ","enum":["mainnet","hoodi"]},"exit_contract_address":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract."},"data":{"type":"array","items":{"$ref":"#/components/schemas/ELExitResponseData"}},"created_at":{"type":"string","description":"The time at which the request was received by the platform. Time will be shown in the “YYYY-MM-DD HH:mm:ss” format."}}},"ELExitResponseData":{"title":"EL Exit Response Data","type":"object","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","format":"int32","description":"Index of the validator."},"contract_call_data":{"type":"string","description":"The unsigned transaction payload associated with the exit."},"signer":{"type":"array","minItems":1,"maxItems":1,"description":"Withdrawal address of the validator public key.","items":{"type":"string"}}}}}}}
```

## The ELExitResponseData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ELExitResponseData":{"title":"EL Exit Response Data","type":"object","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","format":"int32","description":"Index of the validator."},"contract_call_data":{"type":"string","description":"The unsigned transaction payload associated with the exit."},"signer":{"type":"array","minItems":1,"maxItems":1,"description":"Withdrawal address of the validator public key.","items":{"type":"string"}}}}}}}
```

## The ELWithdrawalRequest object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ELWithdrawalRequest":{"title":"EL Withdrawal Request","type":"object","required":["client_req_id","network","type","data"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the execution layer triggerable withdrawal request provided by the client."},"network":{"enum":["mainnet","hoodi"],"description":"Network to which the validators belongs to. Supported values are:\r\n- mainnet\r\n- hoodi"},"type":{"enum":[1,2],"description":"Indicates the type of attribute used to identify the validators that need partial withdrawals. The possible values are:\r\n- 1 (pubkey)\r\n- 2 (validator_index)"},"data":{"type":"array","items":{"$ref":"#/components/schemas/ELWithdrawalRequestData"}}}},"ELWithdrawalRequestData":{"title":"EL Withdrawal Request Data","type":"object","required":["amount"],"properties":{"pubkey":{"type":"string","description":"Validator public key that needs a partial withdrawal. \r\n\r\nThis is required if the partial withdrawal type is 1. "},"validator_index":{"type":"integer","description":"Validator index that needs a partial withdrawal. \r\n\r\nThis is required if the partial withdrawal type is 2."},"amount":{"type":"number","format":"float","description":"Withdrawal amount corresponding to the given validator."}}}}}}
```

## The ELWithdrawalRequestData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ELWithdrawalRequestData":{"title":"EL Withdrawal Request Data","type":"object","required":["amount"],"properties":{"pubkey":{"type":"string","description":"Validator public key that needs a partial withdrawal. \r\n\r\nThis is required if the partial withdrawal type is 1. "},"validator_index":{"type":"integer","description":"Validator index that needs a partial withdrawal. \r\n\r\nThis is required if the partial withdrawal type is 2."},"amount":{"type":"number","format":"float","description":"Withdrawal amount corresponding to the given validator."}}}}}}
```

## The ELWithdrawalResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ELWithdrawalResponse":{"title":"EL Withdrawal Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The unique identifier specified in the request."},"network":{"description":"Network to which the validators belong to. ","enum":["mainnet","hoodi"]},"withdrawal_contract_address":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract."},"data":{"type":"array","items":{"$ref":"#/components/schemas/ELWithdrawalResponseData"}},"created_at":{"type":"string","description":"The time at which the request was received by the platform. Time will be shown in the “YYYY-MM-DD HH:mm:ss” format."}}},"ELWithdrawalResponseData":{"title":"EL Withdrawal Response Data","type":"object","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","format":"int32","description":"Index of the validator."},"amount":{"type":"number","format":"float","description":"Amount to be withdrawn."},"contract_call_data":{"type":"string","description":"The unsigned transaction payload associated with the partial withdrawal."},"signer":{"type":"array","minItems":1,"maxItems":1,"description":"Withdrawal address of the validator public key.","items":{"type":"string"}}}}}}}
```

## The ELWithdrawalResponseData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ELWithdrawalResponseData":{"title":"EL Withdrawal Response Data","type":"object","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"integer","format":"int32","description":"Index of the validator."},"amount":{"type":"number","format":"float","description":"Amount to be withdrawn."},"contract_call_data":{"type":"string","description":"The unsigned transaction payload associated with the partial withdrawal."},"signer":{"type":"array","minItems":1,"maxItems":1,"description":"Withdrawal address of the validator public key.","items":{"type":"string"}}}}}}}
```

## The TopUpRequest object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"TopUpRequest":{"title":"Top Up Request","type":"object","required":["client_req_id","network","data"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the execution layer triggerable withdrawal request provided by the client."},"network":{"enum":["mainnet","hoodi"],"description":"Network to which the validators belongs to. Supported values are:\r\n- mainnet\r\n- hoodi"},"data":{"type":"array","items":{"$ref":"#/components/schemas/TopUpRequestData"}}}},"TopUpRequestData":{"title":"Top Up Request Data","type":"object","required":["pubkey","deposit_amount"],"properties":{"pubkey":{"type":"string","description":"Validator that needs to be topped up. "},"deposit_amount":{"type":"number","format":"float","description":"The ETH amount that must be topped up. "}}}}}}
```

## The TopUpRequestData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"TopUpRequestData":{"title":"Top Up Request Data","type":"object","required":["pubkey","deposit_amount"],"properties":{"pubkey":{"type":"string","description":"Validator that needs to be topped up. "},"deposit_amount":{"type":"number","format":"float","description":"The ETH amount that must be topped up. "}}}}}}
```

## The TopUpResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"TopUpResponse":{"title":"Top Up Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The unique identifier specified in the request."},"network":{"type":"string","description":"Network to which the validators belong to. ","enum":["mainnet","hoodi"]},"data":{"type":"array","description":"A block that contains validator batches. Each batch includes details of 100 validators and the associated funding transaction.","items":{"$ref":"#/components/schemas/TopUpResponseBatchData"}}}},"TopUpResponseBatchData":{"title":"Top Up Response Batch Data","type":"object","properties":{"batch_id":{"description":"Identifier of the validator batch. Possible values are 1 - 10. ","enum":[1,2,3,4,5,6,7,8,9,10]},"deposit_data":{"type":"array","description":"An array of validator details in this batch. ","items":{"$ref":"#/components/schemas/TopUpResponseDepositData"}},"deposit_transaction":{"type":"array","items":{"$ref":"#/components/schemas/TopUpResponseTransactionData"}}}},"TopUpResponseDepositData":{"title":"Top Up Response Deposit Data","type":"object","description":"An array of validator details in this batch.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"amount":{"type":"number","description":"The amount of ETH in GWEI required to be deposited.","format":"double"},"withdrawal_credentials":{"type":"string","description":"Withdrawal credentials for the validator funds to be withdrawn upon exit."},"signature":{"type":"string","description":"A “proof of possession” which signs over pubkey, withdrawal_credentials, and amount using the validator private key."},"deposit_data_root":{"type":"string","description":"Merkle root hash of the deposit data."},"deposit_message_root":{"type":"string","description":"Merkle root hash of the deposit message."},"fork_version":{"type":"string","description":"The genesis fork version."},"deposit_cli_version":{"type":"string","description":"Staking deposit cli version."}}},"TopUpResponseTransactionData":{"title":"Top Up Response Transaction Data","type":"object","description":"The JSON object that contains the funding transaction details of all validators belonging to this batch.","properties":{"deposit_amount_wei":{"type":"string","description":"Total amount of ETH to be topped up for the received top up request, in wei."},"deposit_address":{"type":"string","description":"Batch deposit contract address."},"contract_call_data":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract. "}}}}}}
```

## The TopUpResponseBatchData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"TopUpResponseBatchData":{"title":"Top Up Response Batch Data","type":"object","properties":{"batch_id":{"description":"Identifier of the validator batch. Possible values are 1 - 10. ","enum":[1,2,3,4,5,6,7,8,9,10]},"deposit_data":{"type":"array","description":"An array of validator details in this batch. ","items":{"$ref":"#/components/schemas/TopUpResponseDepositData"}},"deposit_transaction":{"type":"array","items":{"$ref":"#/components/schemas/TopUpResponseTransactionData"}}}},"TopUpResponseDepositData":{"title":"Top Up Response Deposit Data","type":"object","description":"An array of validator details in this batch.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"amount":{"type":"number","description":"The amount of ETH in GWEI required to be deposited.","format":"double"},"withdrawal_credentials":{"type":"string","description":"Withdrawal credentials for the validator funds to be withdrawn upon exit."},"signature":{"type":"string","description":"A “proof of possession” which signs over pubkey, withdrawal_credentials, and amount using the validator private key."},"deposit_data_root":{"type":"string","description":"Merkle root hash of the deposit data."},"deposit_message_root":{"type":"string","description":"Merkle root hash of the deposit message."},"fork_version":{"type":"string","description":"The genesis fork version."},"deposit_cli_version":{"type":"string","description":"Staking deposit cli version."}}},"TopUpResponseTransactionData":{"title":"Top Up Response Transaction Data","type":"object","description":"The JSON object that contains the funding transaction details of all validators belonging to this batch.","properties":{"deposit_amount_wei":{"type":"string","description":"Total amount of ETH to be topped up for the received top up request, in wei."},"deposit_address":{"type":"string","description":"Batch deposit contract address."},"contract_call_data":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract. "}}}}}}
```

## The TopUpResponseDepositData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"TopUpResponseDepositData":{"title":"Top Up Response Deposit Data","type":"object","description":"An array of validator details in this batch.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"amount":{"type":"number","description":"The amount of ETH in GWEI required to be deposited.","format":"double"},"withdrawal_credentials":{"type":"string","description":"Withdrawal credentials for the validator funds to be withdrawn upon exit."},"signature":{"type":"string","description":"A “proof of possession” which signs over pubkey, withdrawal_credentials, and amount using the validator private key."},"deposit_data_root":{"type":"string","description":"Merkle root hash of the deposit data."},"deposit_message_root":{"type":"string","description":"Merkle root hash of the deposit message."},"fork_version":{"type":"string","description":"The genesis fork version."},"deposit_cli_version":{"type":"string","description":"Staking deposit cli version."}}}}}}
```

## The TopUpResponseTransactionData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"TopUpResponseTransactionData":{"title":"Top Up Response Transaction Data","type":"object","description":"The JSON object that contains the funding transaction details of all validators belonging to this batch.","properties":{"deposit_amount_wei":{"type":"string","description":"Total amount of ETH to be topped up for the received top up request, in wei."},"deposit_address":{"type":"string","description":"Batch deposit contract address."},"contract_call_data":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract. "}}}}}}
```

## The FeeRequest object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"FeeRequest":{"title":"Fee Request","type":"object","required":["network","operation_type"],"properties":{"network":{"description":"Network to which the validators belongs to. Supported values are:\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"operation_type":{"enum":[1,2],"description":"Indicates the type of operation for which the user is requesting fees.\r\n- 1 (validator_consolidation_or_conversion)\r\n- 2 (el_triggerable_exit_or_withdrawal)"}}}}}}
```

## The FeeResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"FeeResponse":{"title":"FeeResponse","type":"object","properties":{"network":{"description":"Network to which the validators belong to.","enum":["mainnet","hoodi"]},"operation_type":{"description":"Indicates the type of operation for which the user is requesting fees.\r\n- validator_consolidation_or_conversion\r\n- el_triggerable_exit_or_withdrawal","enum":["validator_consolidation_or_conversion","el_triggerable_exit_or_withdrawal"]},"fee_in_ETH":{"type":"number","description":"The applicable fee in ETH. ","format":"float"},"fee_in_WEI":{"type":"string","description":"The applicable fee in WEI. "},"retrieved_at":{"type":"string","description":"The time at which the fee was retrieved by the platform. Time will be shown in the “YYYY-MM-DD HH:mm:ss” format."}}}}}}
```

## The DepositDataResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"DepositDataResponse":{"title":"Staking Response","type":"object","properties":{"client_req_id":{"type":"string","description":"The client_req_id of the original Provision Validators request for which the response is returned."},"staking_ref_id":{"type":"string","description":"A unique reference ID generated by the staking infrastructure for the staking request."},"network":{"type":"string","description":"The network on which validators should be created. Supported values are;\r\n- mainnet\r\n- hoodi","enum":["mainnet","hoodi"]},"withdrawal_credentials_type":{"enum":["0x01","0x02"],"description":"The withdrawal credential type of the validator(s) that will be created. Applicable values are;\r\n- 0x01\r\n- 0x02"},"withdrawal_address":{"type":"string","description":"The specified address to which funds will be withdrawn, as mentioned in the staking request."},"fee_recipient_address":{"type":"string","description":"The fee recipient address that receives Execution Layer fees, as mentioned in the staking request."},"region":{"type":"string","description":"The geographic region where the validator will be created. Supported values are;\r\n- US\r\n- EU\r\n- KR","enum":["US","EU","KR"]},"provisioned_at":{"type":"string","description":"The date and time when the validator was provisioned by the staking infrastructure."},"data":{"type":"array","description":"A block that contains validator batches. Each batch includes details of 100 validators and the associated funding transaction.","items":{"$ref":"#/components/schemas/BatchData"}}}},"BatchData":{"title":"Staking Response Batch","type":"object","properties":{"batch_id":{"type":"integer","description":"Identifier of the validator batch.","format":"int32","enum":[1,2,3,4,5,6,7,8,9,10]},"deposit_data":{"type":"array","description":"An array of validator details in this batch.","items":{"$ref":"#/components/schemas/DepositData"}},"deposit_transaction":{"$ref":"#/components/schemas/DepositTransaction"}},"description":"A block that contains validator batches. Each batch includes details of 250 validators and the associated funding transaction."},"DepositData":{"title":"Staking Response Batch Deposit Data","type":"object","description":"An array of validator details in this batch.","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"amount":{"type":"number","description":"The amount of ETH in GWEI required to be deposited.","format":"double"},"withdrawal_credentials":{"type":"string","description":"Withdrawal credentials for the validator funds to be withdrawn upon exit."},"signature":{"type":"string","description":"A “proof of possession” which signs over pubkey, withdrawal_credentials, and amount using the validator private key."},"deposit_data_root":{"type":"string","description":"Merkle root hash of the deposit data."},"deposit_message_root":{"type":"string","description":"Merkle root hash of the deposit message."},"fork_version":{"type":"string","description":"The genesis fork version."},"deposit_cli_version":{"type":"string","description":"Staking deposit cli version."}}},"DepositTransaction":{"title":"Staking Response Batch Deposit Transaction","type":"object","description":"The JSON object that contains the funding transaction details of all validators belonging to this batch.","properties":{"deposit_amount_wei":{"type":"string","description":"The total amount of ETH to be staked for the batch in WEI."},"deposit_address":{"type":"string","description":"Batch deposit contract address."},"contract_call_data":{"type":"string","description":"Encoded function call data to be broadcasted to the Batch Deposit Contract. "}}}}}}
```

## The DepositDataErrorResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"DepositDataErrorResponse":{"title":"DepositDataErrorResponse","type":"object","required":["client_req_id","errors"],"properties":{"client_req_id":{"type":"string","description":"Client Request ID that the Staking Partner provided."},"errors":{"type":"array","items":{"$ref":"#/components/schemas/DepositDataErrorMessage"}}}},"DepositDataErrorMessage":{"title":"DepositDataErrorMessage","type":"object","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}}}}}
```

## The DepositDataErrorMessage object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"DepositDataErrorMessage":{"title":"DepositDataErrorMessage","type":"object","required":["code","message"],"properties":{"code":{"type":"integer","description":"The code related to the error being reported.","format":"int32"},"message":{"type":"string","description":"The description related to the error being reported."}}}}}}
```

## The UpdateFeeRecipientRequest object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"UpdateFeeRecipientRequest":{"title":"UpdateFeeRecipientRequest","type":"object","required":["client_req_id","network","type","data"],"properties":{"client_req_id":{"type":"string","description":"A unique identifier for the request provided by the client."},"network":{"type":"string","description":"Network to which the validators belong to.\r\n\r\nPossible values:\r\n- mainnet\r\n- hoodi"},"type":{"type":"integer","description":"Indicates the type of attribute used to identify the validators that need address changes. The possible values are,\r\n- 1 (pubkeys)\r\n\r\n2 (validator_index)"},"data":{"type":"array","items":{"$ref":"#/components/schemas/UpdateFeeRecipientData"}}}},"UpdateFeeRecipientData":{"title":"UpdateFeeRecipientData","type":"object","required":["fee_recipient_address"],"properties":{"pubkey":{"type":"string","description":"Validator public key that needs an address change. \r\n\r\nWill only be required if type = 1.\r\n\r\nAny value provided in this field when type = 2, will be ignored."},"validator_index":{"type":"number","description":"Validator index that needs an address change. \r\n\r\nWill only be required if type = 2.\r\n\r\nAny value provided in this field when type = 1, will be ignored."},"fee_recipient_address":{"type":"string","description":"The new fee recipient address corresponding to the given validator."}}}}}}
```

## The UpdateFeeRecipientData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"UpdateFeeRecipientData":{"title":"UpdateFeeRecipientData","type":"object","required":["fee_recipient_address"],"properties":{"pubkey":{"type":"string","description":"Validator public key that needs an address change. \r\n\r\nWill only be required if type = 1.\r\n\r\nAny value provided in this field when type = 2, will be ignored."},"validator_index":{"type":"number","description":"Validator index that needs an address change. \r\n\r\nWill only be required if type = 2.\r\n\r\nAny value provided in this field when type = 1, will be ignored."},"fee_recipient_address":{"type":"string","description":"The new fee recipient address corresponding to the given validator."}}}}}}
```

## The UpdateFeeRecipientResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"UpdateFeeRecipientResponse":{"title":"UpdateFeeRecipientResponse","type":"object","properties":{"client_req_id":{"type":"string","description":"The unique identifier specified in the request."},"network":{"type":"string","description":"Network to which the validators belong to."},"data":{"type":"array","items":{"$ref":"#/components/schemas/UpdateFeeRecipientResponseData"}}}},"UpdateFeeRecipientResponseData":{"title":"UpdateFeeRecipientData","type":"object","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"number","description":"Index of the validator."},"fee_recipient_address":{"type":"string","description":"The updated fee recipient address."}}}}}}
```

## The UpdateFeeRecipientResponseData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"UpdateFeeRecipientResponseData":{"title":"UpdateFeeRecipientData","type":"object","properties":{"pubkey":{"type":"string","description":"Public key of the validator."},"validator_index":{"type":"number","description":"Index of the validator."},"fee_recipient_address":{"type":"string","description":"The updated fee recipient address."}}}}}}
```

## The ValidatorMonitoringRequest object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorMonitoringRequest":{"title":"ValidatorMonitoringRequest","type":"object","required":["network","data"],"properties":{"network":{"type":"string","description":"Network to which the validators belongs to. Supported values are:\r\n- mainnet\r\n- hoodi"},"data":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorMonitoringRequestData"}}}},"ValidatorMonitoringRequestData":{"title":"ValidatorMonitoringRequestData","type":"object","required":["pubkey"],"properties":{"pubkey":{"type":"string","description":"The public key of the validator that will be monitored on the platform."},"account":{"type":"string","description":"The account name registered on the platform that is associated with the Staking Partner. If not provided, requests will be assigned to the default account."}}}}}}
```

## The ValidatorMonitoringRequestData object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorMonitoringRequestData":{"title":"ValidatorMonitoringRequestData","type":"object","required":["pubkey"],"properties":{"pubkey":{"type":"string","description":"The public key of the validator that will be monitored on the platform."},"account":{"type":"string","description":"The account name registered on the platform that is associated with the Staking Partner. If not provided, requests will be assigned to the default account."}}}}}}
```

## The ValidatorMonitoringResponse object

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorMonitoringResponse":{"title":"ValidatorMonitoringResponse","type":"object","properties":{"validator_monitoring_reference_id":{"type":"string","description":"A system-generated unique identifier for the API request. This identifier is recorded in the ‘Link ID’ field of all positions created through the API request."}}}}}}
```


# Solana

The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500.

## Stake Account Creation

> This endpoint allows clients to initiate staking by creating and funding a new stake account on the Solana blockchain.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/stake-account":{"post":{"summary":"Stake Account Creation","description":"This endpoint allows clients to initiate staking by creating and funding a new stake account on the Solana blockchain.","tags":["Solana"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["network","funding_pubkey","amount"],"properties":{"network":{"type":"string","description":"The network on which the stake account should be created. Supported values;\r\n-mainnet\r\n-testnet\r\n-devnet","enum":["mainnet","testnet","devnet"]},"participant":{"type":"string","description":"The participant name registered on the staking platform that corresponds to the client's customer. \r\nIf not provided requests will be assigned to a default participant connected to the API key."},"account":{"type":"string","description":"The account name registered on the staking platform that corresponds to the client's customer. \r\nIf not provided requests will be assigned to a default account linked to the participant."},"funding_pubkey":{"type":"string","description":"The Solana account address that will be funding the stake account."},"amount":{"type":"number","description":"The amount of SOL that should be sent to the stake account. The minimum stake amount is 0.01 SOL."},"stake_authority_pubkey":{"type":"string","description":"The Solana account address that should sign all stake account related actions (Delegation, Undelegation, Split and Merge). If not provided will default to the \"funding_pubkey\"."},"withdraw_authority_pubkey":{"type":"string","description":"The Solana account address that should sign withdrawal transactions. If not provided will default to the \"funding_pubkey\"."}}}}}},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"type":"object","properties":{"stake_account_pubkey":{"type":"string","description":"The public key of the newly created stake account."},"unsigned_tx":{"type":"string","description":"The Hexadecimal encoded serialized unsigned transaction which should be signed by the relevant parties specified in the signers field."},"signers":{"type":"array","description":"The funding account that has to sign the transaction.","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time","description":"The time at which the request was received by the staking platform.\r\nTimes will be shown in the \"YYYY-MM-DD HH:mm:ss\" format."}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Delegation

> This end point supports the delegation of stake accounts under a selected validator. Clients can delegate stake accounts that are currently onboarded onto the staking platform as well as stake accounts that do not have a corresponding position on the staking platform i.e. stake accounts created elsewhere.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/delegate":{"post":{"summary":"Delegation","description":"This end point supports the delegation of stake accounts under a selected validator. Clients can delegate stake accounts that are currently onboarded onto the staking platform as well as stake accounts that do not have a corresponding position on the staking platform i.e. stake accounts created elsewhere.","tags":["Solana"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["stake_account_pubkey","validator_pubkey"],"properties":{"stake_account_pubkey":{"type":"string","description":"The stake account that should be delegated."},"validator_pubkey":{"type":"string","description":"The validator address under which the stake account should be delegated."},"fee_payer":{"type":"string","description":"The Solana account address that should pay the fees related to the transaction. If not provided fees should be paid by the Stake Authority of the stake account."},"participant":{"type":"string","description":"The participant name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position will be created under a default participant."},"account":{"type":"string","description":"The account name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position will be created under a default account."}}}}}},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"type":"object","properties":{"stake_account_pubkey":{"type":"string","description":"The stake account that was sent in the delegation request."},"validator_pubkey":{"type":"string","description":"The validator address that was sent in the delegation request."},"unsigned_tx":{"type":"string","description":"The Hexadecimal encoded serialized unsigned transaction which should be signed by the relevant parties specified in the signers field."},"signers":{"type":"array","description":"An array of the Solana account addresses that should sign the transaction. A delegation request should be signed by the Stake Authority of the stake account and the \"fee_payer\" (If applicable).","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time","description":"The time at which the request was received by the staking platform. Times will be shown in the \"YYYY-MM-DD HH:mm:ss\" format."}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Undelegation

> Clients can use the undelegation endpoint to undelegate an existing delegation. This endpoint allows clients to undelegate stake accounts that are currently onboarded onto the staking platform as well as stake accounts that do not have a corresponding position on the staking platform&#x20;

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/undelegate":{"post":{"summary":"Undelegation","description":"Clients can use the undelegation endpoint to undelegate an existing delegation. This endpoint allows clients to undelegate stake accounts that are currently onboarded onto the staking platform as well as stake accounts that do not have a corresponding position on the staking platform ","tags":["Solana"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["stake_account_pubkey"],"properties":{"stake_account_pubkey":{"type":"string","description":"The stake account that should be undelegated."},"fee_payer":{"type":"string","description":"TThe Solana account address that should pay the fees related to the transaction. If not provided fees should be paid by the Stake Authority of the stake account."},"participant":{"type":"string","description":"The participant name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position will be created under a default participant."},"account":{"type":"string","description":"The account name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position will be created under a default account."}}}}}},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"type":"object","properties":{"stake_account_pubkey":{"type":"string","description":"The stake account that was sent in the undelegation request."},"unsigned_tx":{"type":"string","description":"The Hexadecimal encoded serialized unsigned transaction which should be signed by the relevant parties specified in the signers field."},"signers":{"type":"array","description":"An array of the Solana account addresses that should sign the transaction. An undelegation request should be signed by the Stake Authority of the stake account and the \"fee_payer\" (If applicable).","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time","description":"The time at which the request was received by the staking platform. Times will be shown in the \"YYYY-MM-DD HH:mm:ss\" format."}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Withdrawals

> Clients can use this endpoint to withdraw undelegated SOL from both onboarded stake accounts and those without a corresponding position on the staking platform. Withdrawals can be made from a stake account to a Solana account (wallet) or between stake accounts.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/withdraw":{"post":{"summary":"Withdrawals","description":"Clients can use this endpoint to withdraw undelegated SOL from both onboarded stake accounts and those without a corresponding position on the staking platform. Withdrawals can be made from a stake account to a Solana account (wallet) or between stake accounts.","tags":["Solana"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["stake_account_pubkey","amount"],"properties":{"stake_account_pubkey":{"type":"string","description":"The stake account from which SOL should be withdrawn."},"recipient_pubkey":{"type":"string","description":"The stake account or Solana account (wallet) to which the withdrawn SOL will be transferred. If not provided the withdrawal will be done to the funding account of the stake account."},"amount":{"type":"number","description":"The amount of SOL that should be withdrawn. The amount should be sent without trailing zeros."},"fee_payer":{"type":"string","description":"The Solana account address that should pay the fees related to the transaction. If not provided fees should be paid by the Withdraw Authority of the stake account."},"participant":{"type":"string","description":"The participant name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position will be created under a default participant."},"account":{"type":"string","description":"The account name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position will be created under a default account."}}}}}},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"type":"object","properties":{"stake_account_pubkey":{"type":"string","description":"The stake account that was sent in the withdrawal request."},"recipient_pubkey":{"type":"string","description":"The recipient address that was sent in the withdrawal request."},"amount":{"type":"number","description":"The amount sent in the withdrawal request."},"unsigned_tx":{"type":"string","description":"The Hexadecimal encoded serialized unsigned transaction which should be signed by the relevant parties specified in the signers field."},"signers":{"type":"array","description":"An array of the Solana account addresses that should sign the transaction. A withdrawal request should be signed by the Withdraw Authority of the stake account and the \"fee_payer\" (If applicable).","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time","description":"The time at which the request was received by the staking platform. Times will be shown in the \"YYYY-MM-DD HH:mm:ss\" format."}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Split

> Clients can use this endpoint to split the balance of a stake account into a new stake account. It supports splitting both onboarded stake accounts and those without a corresponding position on the staking platform.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/split":{"post":{"summary":"Split","description":"Clients can use this endpoint to split the balance of a stake account into a new stake account. It supports splitting both onboarded stake accounts and those without a corresponding position on the staking platform.","tags":["Solana"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["stake_account_pubkey","amount"],"properties":{"stake_account_pubkey":{"type":"string","description":"The stake account that should be split."},"amount":{"type":"number","description":"The amount of SOL that should be split from the existing stake account to the newly created stake account."},"fee_payer":{"type":"string","description":"The Solana account address that should pay the fees related to the transaction. If not provided fees should be paid by the Stake Authority of the stake account."},"participant":{"type":"string","description":"The participant name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position will be created under a default participant."},"account":{"type":"string","description":"The account name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position will be created under a default account."}}}}}},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"type":"object","properties":{"source_account_pubkey":{"type":"string","description":"The existing stake account that was sent in the split request"},"destination_account_pubkey":{"type":"string","description":"The newly created stake account to which SOL will be transferred"},"unsigned_tx":{"type":"string","description":"The Hexadecimal encoded serialized unsigned transaction which should be signed by the relevant parties specified in the signers field."},"signers":{"type":"array","description":"An array of the Solana account addresses that should sign the transaction. A split request should be signed by the Stake Authority of the stake account and the \"fee_payer\" (If applicable)","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time","description":"The time at which the request was received by the staking platform. Times will be shown in the \"YYYY-MM-DD HH:mm:ss\" format"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Merge

> The Staking API offers an endpoint to merge two stake accounts that share the same stake and withdrawal authorities into a single stake account. This endpoint allows clients to merge stake accounts that are currently onboarded onto the staking platform as well as merge stake accounts that do not have a corresponding position on the staking platform.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/merge":{"post":{"summary":"Merge","description":"The Staking API offers an endpoint to merge two stake accounts that share the same stake and withdrawal authorities into a single stake account. This endpoint allows clients to merge stake accounts that are currently onboarded onto the staking platform as well as merge stake accounts that do not have a corresponding position on the staking platform.","tags":["Solana"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["source_account_pubkey","destination_account_pubkey"],"properties":{"source_account_pubkey":{"type":"string","description":"The stake account that should be merged into the destination account."},"destination_account_pubkey":{"type":"string","description":"The stake account that the source account will be merged into."},"fee_payer":{"type":"string","description":"The Solana account address that should pay the fees related to the transaction. If not provided fees should be paid by the Stake Authority of the stake account."},"participant":{"type":"string","description":"The participant name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position/s will be created under a default participant."},"account":{"type":"string","description":"The account name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position/s will be created under a default account."}}}}}},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"type":"object","properties":{"source_account_pubkey":{"type":"string","description":"The source stake account that was sent in the merge request."},"destination_account_pubkey":{"type":"string","description":"The destination stake account that was sent in the merge request."},"unsigned_tx":{"type":"string","description":"The Hexadecimal encoded serialized unsigned transaction which should be signed by the relevant parties specified in the signers field."},"signers":{"type":"array","description":"An array of the Solana account addresses that should sign the transaction. A merge request should be signed by the Stake Authority of the stake account and the \"fee_payer\" (If applicable).","items":{"type":"string"}},"created_at":{"type":"string","format":"date-time","description":"The time at which the request was received by the staking platform. Times will be shown in the \"YYYY-MM-DD HH:mm:ss\" format."}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Transfer

> Clients can use this endpoint to transfer SOL from a Solana account (wallet) to a stake account. This endpoint allows clients to transfer SOL to stake accounts that have been onboarded onto the staking platform as well as to stake accounts that do not have a corresponding position on the staking platform.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/transfer":{"post":{"summary":"Transfer","description":"Clients can use this endpoint to transfer SOL from a Solana account (wallet) to a stake account. This endpoint allows clients to transfer SOL to stake accounts that have been onboarded onto the staking platform as well as to stake accounts that do not have a corresponding position on the staking platform.","tags":["Solana"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["source_account_pubkey","destination_account_pubkey","amount"],"properties":{"source_account_pubkey":{"type":"string","description":"The Solana account (wallet) from which SOL will be transferred out of."},"destination_account_pubkey":{"type":"string","description":"The stake account into which SOL will be transferred."},"amount":{"type":"number","description":"The amount of SOL to be transferred to the stake account."},"fee_payer":{"type":"string","description":"The Solana account address that should pay the fees related to the transaction. If not provided fees should be paid by the 'source_account_pubkey'."},"participant":{"type":"string","description":"The participant name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position/s will be created under a default participant."},"account":{"type":"string","description":"The account name registered on the staking platform under which the stake account should be created if it has not currently been onboarded onto the staking platform. If not provided the position/s will be created under a default account."}}}}}},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"type":"object","properties":{"from_account_pubkey":{"type":"string","description":"The Solana account (wallet) from which SOL will be transferred."},"to_account_pubkey":{"type":"string","description":"The destination stake account to which SOL will be transferred."},"unsigned_tx":{"type":"string","description":"The Hexadecimal encoded serialized unsigned transaction which should be signed by the relevant parties specified in the signers field."},"signers":{"type":"array","items":{"type":"string"},"description":"An array of the Solana account addresses that should sign the transaction. A transfer request should be signed by the private key of the source account and the \"fee_payer\" (If applicable)."},"created_at":{"type":"string","format":"date-time","description":"The time at which the request was received by the staking platform. Times will be shown in the \"YYYY-MM-DD HH:mm:ss\" format."}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Submit Signed Transactions

> Clients can submit their signed transactions to the staking platform via this endpoint. Upon receiving a signed transaction the staking platform will broadcast it to the Solana blockchain for execution.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/signed-transaction":{"post":{"summary":"Submit Signed Transactions","description":"Clients can submit their signed transactions to the staking platform via this endpoint. Upon receiving a signed transaction the staking platform will broadcast it to the Solana blockchain for execution.","tags":["Solana"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["stake_account_pubkey","action","tx_payload"],"properties":{"stake_account_pubkey":{"type":"string","description":"The address for which the signed transaction is being sent."},"action":{"type":"string","description":"The action for which the payload is applicable. Supported values are;\r\n- stake_account_creation \r\n- delegate \r\n- undelegate\r\n- withdraw\r\n- split\r\n- merge\r\n- transfer","enum":["stake_account_creation","delegate","undelegate","withdraw","split","merge","transfer"]},"tx_payload":{"type":"string","description":"Hexadecimal encoded serialized signed transaction corresponding to the  unsigned transaction created via respective endpoint."},"destination_account_pubkey":{"type":"string","description":"The destination address for which the signed transaction is being sent. \r\nWill be required if the action is one of the following - withdraw, split, merge, transfer."}}}}}},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"type":"object","properties":{"stake_account_pubkey":{"type":"string","description":"The stake account address in the API request."},"destination_account_pubkey":{"type":"string","description":"The destination address in the API request."},"action":{"type":"string","description":"The action sent in the request."},"tx_hash":{"type":"string","description":"The transaction hash for the broadcasted transaction. The transaction hash will be received after the payload is successfully sent to the Solana blockchain."},"tx_status":{"type":"string","description":"The status of the transaction. Supported values are;\r\n- signed_tx_received\r\n- signed_tx_sent\r\n- broadcasted\r\n- confirmed\r\n- rejected","enum":["signed_tx_received","signed_tx_sent","broadcasted","confirmed","rejected"]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Submit Transaction Hash

> Clients can use this endpoint to submit a transaction hash for a payload independently broadcasted to the blockchain. The staking platform verifies the transaction status and updates the corresponding stake account position accordingly.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/transaction":{"post":{"summary":"Submit Transaction Hash","description":"Clients can use this endpoint to submit a transaction hash for a payload independently broadcasted to the blockchain. The staking platform verifies the transaction status and updates the corresponding stake account position accordingly.","tags":["Solana"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["stake_account_pubkey","action","tx_hash"],"properties":{"stake_account_pubkey":{"type":"string","description":"The address for which the transaction hash is being sent."},"action":{"type":"string","description":"The action for which the payload is applicable. Supported values are;\r\n- stake_account_creation \r\n- delegate \r\n- undelegate\r\n- withdraw\r\n- split\r\n- merge\r\n- transfer","enum":["stake_account_creation","delegate","undelegate","withdraw","split","merge","transfer"]},"tx_hash":{"type":"string","description":"The transaction hash which is being submitted to the staking platform."},"destination_account_pubkey":{"type":"string","description":"The destination address for which the signed transaction is being sent. Will be required if the action is one of the following - withdraw, split, merge, transfer."}}}}}},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"type":"object","properties":{"stake_account_pubkey":{"type":"string","description":"The stake account address in the API request."},"destination_account_pubkey":{"type":"string","description":"The destination address in the API request."},"action":{"type":"string","description":"The action sent in the request."},"tx_hash":{"type":"string","description":"The transaction hash sent in the API request."},"tx_status":{"type":"string","description":"The status of the transaction.Supported values are;\r\n- confirmed\r\n- rejected","enum":["confirmed","rejected"]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Rewards

> The rewards endpoint returns  rewards accrued by a stake account. This endpoint accepts the filtering by start and end (can be epoch or date), and delegator address (stake account) public keys. This endpoint returns the rewards since stake account inception, accrued rewards in the specified period and epoch-wise rewards breakdown for the specified period.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"SOLDelegatorRewardsRequest":{"type":"object","required":["network","rollup_type","start","end","stake_accounts"],"properties":{"network":{"type":"string","description":"The network on which validators should be created. Supported values;\r\n- mainnet\r\n- testnet\r\n- devnet","enum":["mainnet","testnet","devnet"]},"rollup_type":{"type":"integer","description":"Denotes the granularity of rewards breakdown. THe applicable values are;\n- 1 (epoch)\n- 2 (date)","enum":[1,2]},"start":{"type":"string","description":"It specifies the start epoch if the type is 1, or the start date in the \"YYYY-MM-DD\" format (UTC timezone) if the type is 2."},"end":{"type":"string","description":"It specifies the end epoch if the type is 1, or the end date in the \"YYYY-MM-DD\" format (UTC timezone) if the type is 2."},"stake_accounts":{"type":"array","description":"List of delegator stake accounts to fetch the rewards breakdown. A maximum of 50 entries are allowed.","items":{"type":"string","description":"List of delegator stake accounts to fetch the rewards breakdown. A maximum of 50 entries are allowed."}}}},"DelegatorRewardsInfoResponse":{"type":"object","properties":{"network":{"type":"string","description":"Network specified in the request.","enum":["mainnet","testnet","devnet"]},"start":{"type":"string","description":"Start epoch or start date specified in the request."},"end":{"type":"string","description":"End epoch or end date specified in the request."},"page":{"type":"integer","description":"The current page number sent in the request.","format":"int32"},"total":{"type":"integer","description":"The total number of records resulted for the input criteria.","format":"int64"},"data":{"type":"array","description":"An array that contains stake account rewards.","items":{"$ref":"#/components/schemas/DelegatorReward"}}},"title":""},"DelegatorReward":{"type":"object","properties":{"stake_account":{"type":"string","description":"The stake_account that received the rewards."},"validator_address":{"type":"string","description":"Address of the validator that distributed the rewards (the validator the delegator is attached to)."},"total_sol":{"type":"number","format":"double","description":"Total rewards the delegator earned from inception in SOL. Values will be displayed up to 9 decimal places\n\nNote: Block rewards will not be available from delegator inception, therefore this field will not consider block rewards. Only inflation rewards and MEV rewards will be considered.\n"},"total_lamports":{"type":"integer","description":"Total rewards the delegator earned from inception in lamports.\n\nNote : Similar to \"total_sol\" this field will not consider block rewards\n"},"apy":{"type":"number","format":"double","description":"The Annualized Percentage Yield of the stake account. This value is calculated considering net inflation and net MEV rewards earned during the last 10 completed epochs."},"block_rewards_apy":{"type":"number","format":"double","description":"The Annualized Percentage Yield on block rewards earned by the stake account. This value is calculated considering net block rewards earned during the last 10 completed epochs."},"total_apy":{"type":"number","format":"double","description":"The total Annualized Percentage Yield on all rewards attributable to the stake account in the last 10 epochs, after commissions and rebates."},"total_accumulated_sol":{"type":"number","format":"double","description":"Total rewards the delegator has earned for the query criteria in SOL. Values will be displayed up to 9 decimal places\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_accumulated_lamports":{"type":"integer","description":"Total rewards the delegator has earned for the query criteria in lamports.\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"accumulated_gross_block_rewards_sol":{"type":"number","format":"double","description":"The total gross block rewards earned by the stake account for the query criteria in SOL.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_gross_block_rewards_lamports":{"type":"integer","description":"The total gross block rewards earned by the stake account for the query criteria in lamports.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_net_block_rewards_sol":{"type":"number","format":"double","description":"The net block rewards earned by the stake account for the query criteria in SOL, net of the staking platform commissions.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_net_block_rewards_lamports":{"type":"integer","description":"The net block rewards earned by the stake account for the query criteria in lamports, net of the staking platform commissions.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_rewards":{"type":"array","description":"Protocol, MEV, and block rewards for the given delegator and query criteria. A new rewards type \"NET_BLOCK\" has been introduced.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will be set to 0.\n","items":{"$ref":"#/components/schemas/AccumulatedReward"}},"rewards_breakdown":{"type":"array","description":"Per-epoch (or period) rewards breakdown.","items":{"$ref":"#/components/schemas/RewardBreakdown"}}},"required":["stake_account","validator_address"]},"AccumulatedReward":{"type":"object","properties":{"accumulated_sol":{"type":"number","format":"double","description":"Accumulated rewards in SOL between the start and end specified in the request. Values will be displayed up to 9 decimal places\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"accumulated_lamports":{"type":"integer","description":"Accumulated rewards in lamports between the start and end specified in the request.\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"type":{"type":"string","description":"Type of rewards.","enum":["PROTOCOL","MEV","BLOCK","NET_BLOCK"]}}},"RewardBreakdown":{"type":"object","description":"Rewards for a given epoch/period.","properties":{"epoch":{"type":"integer","description":"The epoch corresponding to the rewards. This is applicable only if the rollup_type is 1"},"timestamp":{"type":"string","format":"date-time","description":"If the rollup_type is 1, it should specify the timestamp corresponding to the end of the epoch."},"balance":{"type":"number","format":"double","description":"The balance of the account after rewards have been added."},"total_epoch_sol":{"type":"number","format":"double","description":"Total rewards accumulated during the period in SOL. Values will be displayed up to 9 decimal places\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_epoch_lamports":{"type":"integer","description":"Total rewards accumulated during the period in lamports.\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_epoch_gross_block_rewards_sol":{"type":"number","format":"double","description":"The gross block rewards earned by the stake account for the epoch, in SOL."},"total_epoch_gross_block_rewards_lamports":{"type":"integer","description":"The gross block rewards earned by the stake account for the epoch, in lamports."},"total_epoch_net_block_rewards_sol":{"type":"number","format":"double","description":"The net block rewards earned by the stake account for the epoch, in SOL, net of the staking platform commissions."},"total_epoch_net_block_rewards_lamports":{"type":"integer","description":"The net block rewards earned by the stake account for the epoch, in lamports, net of the staking platform commissions."},"rewards":{"type":"array","description":"An array that contains protocol, mev, and block rewards corresponding to the given epoch. A new rewards type \"NET_BLOCK\" has been introduced.","items":{"$ref":"#/components/schemas/RewardItem"}}},"required":["rewards"]},"RewardItem":{"type":"object","properties":{"rewards_sol":{"type":"number","format":"double","description":"Rewards accumulated during the period in SOL. Values will be displayed up to 9 decimal places\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"rewards_lamports":{"type":"integer","description":"Rewards accumulated during the period in lamports.\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"type":{"type":"string","description":"Type of rewards.","enum":["PROTOCOL","MEV","BLOCK","NET_BLOCK"]}}},"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/rewards":{"post":{"tags":["Solana"],"summary":"Rewards","description":"The rewards endpoint returns  rewards accrued by a stake account. This endpoint accepts the filtering by start and end (can be epoch or date), and delegator address (stake account) public keys. This endpoint returns the rewards since stake account inception, accrued rewards in the specified period and epoch-wise rewards breakdown for the specified period.","operationId":"getSOLDelegatorAccruedRewards","parameters":[{"name":"X-API-KEY","in":"header","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","description":"The current page number requested by the client, if not specified, should be defaulted to 1.","required":false,"schema":{"type":"string"}},{"name":"size","in":"query","description":"The number of entries per page, if not presented in the request, should be defaulted to the maximum value of 250.","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SOLDelegatorRewardsRequest"}}},"required":true},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelegatorRewardsInfoResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Retrieve Multiple Delegators

> The endpoint to retrieve a list of delegators returns the details of the stake accounts monitored by a given client that fit the specified filter criteria in a paginated manner. If no filtration criteria is provided, the endpoint will retrieve a list of all the stake accounts applicable to the client. All timestamp fields in the response are in UTC.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"DelegatorInfoListRequest":{"type":"object","required":["network"],"properties":{"network":{"type":"string","description":"The network on which the queried stake accounts have been created . Supported values;\r\n- mainnet\r\n- testnet\r\n- devnet","enum":["mainnet","testnet","devnet"]},"participant":{"type":"string","description":"The participant name registered on the staking platform from which stake accounts need to be retrieved."},"account":{"type":"string","description":"The account name registered on the staking platform from which stake accounts need to be retrieved."},"status":{"type":"array","description":"The status of the stake accounts that need to be retrieved. Results will be returned in the order of the statuses sent in the request. Supported values;\r\n- ACTIVE\r\n- INACTIVE\r\n- ACTIVATING\r\n- DEACTIVATING","items":{"type":"string","enum":["ACTIVE","INACTIVE","ACTIVATING","DEACTIVATING"]}},"stake_accounts":{"type":"array","description":"List of delegator stake accounts to fetch the delegator information. A maximum of 250 entries are allowed.","items":{"type":"string","description":"List of delegator stake accounts to fetch the delegator information. A maximum of 250 entries are allowed."}}}},"DelegatorInfoListResponse":{"type":"object","properties":{"network":{"type":"string","description":"Network specified in the request. Supported values;\r\n- mainnet\r\n- testnet\r\n- devnet","enum":["mainnet","testnet","devnet"]},"page":{"type":"integer","description":"The current page number sent in the request.","format":"int32"},"total":{"type":"integer","description":"Total number of stake accounts being sent in the API response","format":"int64"},"data":{"type":"object","description":"An array that contains the details about stake accounts.","properties":{"stake_account":{"type":"string","description":"\t\nThe public key of the stake account"},"status":{"type":"string","description":"Current status of the delegator"},"balance_in_sol":{"type":"number","description":"The current balance of the stake account in SOL. Values will be displayed up to 9 decimal places","format":"double"},"balance_in_lamports":{"type":"number","description":"The balance in the stake account in Lamports","format":"double"},"validator_info":{"$ref":"#/components/schemas/ValidatorInfo"},"provision_info":{"$ref":"#/components/schemas/ProvisionInfo"}}}}},"ValidatorInfo":{"type":"object","description":"JSON object that represents the validator for which the given stake account is attached to.","properties":{"address":{"type":"string","description":"The public key of the validator"}}},"ProvisionInfo":{"type":"object","description":"JSON object that contains the registration details of the delegator.","properties":{"id":{"type":"string","description":"The reference number issued when successfully onboarding the stake account"},"created_at":{"type":"string","description":"Created date and time in the platform. This should be YYYY-MM-DD HH:mm:ss in UTC."}}},"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators":{"post":{"tags":["Solana"],"summary":"Retrieve Multiple Delegators","description":"The endpoint to retrieve a list of delegators returns the details of the stake accounts monitored by a given client that fit the specified filter criteria in a paginated manner. If no filtration criteria is provided, the endpoint will retrieve a list of all the stake accounts applicable to the client. All timestamp fields in the response are in UTC.","operationId":"getMultipleDelegators","parameters":[{"name":"X-API-KEY","in":"header","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","description":"The current page number requested by the client, if not specified, should be defaulted to 1.","required":false,"schema":{"type":"string","default":"1"}},{"name":"size","in":"query","description":"The number of entries per page, if not presented in the request, should be defaulted to the maximum value of 250.","required":false,"schema":{"type":"string","default":"250"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelegatorInfoListRequest"}}},"required":true},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelegatorInfoListResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Get a Single Delegator

> This request will return the information regarding a single delegator which is being monitored by the staking partner

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"DelegatorInfoResponse":{"required":["network"],"type":"object","properties":{"network":{"type":"string","description":"The network on which validators should be created. Supported values.","enum":["mainnet","testnet","devnet"]},"stake_account":{"type":"string","description":"\t\nThe public key of the stake account"},"status":{"type":"string","description":"Current status of the delegator"},"balance_in_lamports":{"type":"number","description":"The balance in the stake account in Lamports","format":"double"},"balance_in_sol":{"type":"number","description":"The balance of the stake account in SOL. Values will be displayed up to 9 decimal places","format":"double"},"validator_info":{"$ref":"#/components/schemas/ValidatorInfo"},"provision_info":{"$ref":"#/components/schemas/ProvisionInfo"}}},"ValidatorInfo":{"type":"object","description":"JSON object that represents the validator for which the given stake account is attached to.","properties":{"address":{"type":"string","description":"The public key of the validator"}}},"ProvisionInfo":{"type":"object","description":"JSON object that contains the registration details of the delegator.","properties":{"id":{"type":"string","description":"The reference number issued when successfully onboarding the stake account"},"created_at":{"type":"string","description":"Created date and time in the platform. This should be YYYY-MM-DD HH:mm:ss in UTC."}}},"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/{network}/delegators/{stake_account}":{"get":{"tags":["Solana"],"summary":"Get a Single Delegator","description":"This request will return the information regarding a single delegator which is being monitored by the staking partner","operationId":"getSingleDelegator","parameters":[{"name":"X-API-KEY","in":"header","required":true,"schema":{"type":"string"}},{"name":"network","in":"path","description":"Applicable values are mainnet, testnet and devnet","required":true,"schema":{"type":"string"}},{"name":"stake_account","in":"path","description":"The public key of the stake account belonging to the delegator.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelegatorInfoResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Validator Information&#x20;

> Clients can use this endpoint to query detailed information about Solana validators with stake accounts under them on the staking platform. <br>

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"SolValidatorInfoResponse":{"type":"object","properties":{"network":{"type":"string","description":"Network specified in the request. Supported values;\r\n- mainnet\r\n- testnet\r\n- devnet","enum":["mainnet","testnet","devnet"]},"apy":{"type":"number","description":"The Annualized Percentage Yield of the validator. This value is calculated only using the stake accounts for the specified validator that have been onboarded onto the staking platform. The calculation considers gross rewards earned across the past 10 epochs.","format":"double"},"block_rewards_apy":{"type":"number","description":"The Annualized Percentage Yield on block rewards earned by the stake accounts under the validator. This value is calculated considering gross block rewards earned across the past 10 epochs.","format":"double"},"total_apy":{"type":"number","description":"The Annualized Percentage Yield on total rewards earned by the stake accounts under the validator. This value is calculated considering gross rewards earned across the past 10 epochs.","format":"double"},"validator_address":{"type":"string","description":"The address of the validator for which information is requested."},"validator_status":{"type":"string","description":"The current status of the validator"},"delegated_balance":{"type":"number","description":"The total balance delegated under the validator in SOL. The total \"net balance\" values of the delegators under the staking platform. Values will be displayed up to 9 decimal places","format":"double"}}},"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/{network}/validators/{validator_address}":{"get":{"tags":["Solana"],"summary":"Validator Information ","description":"Clients can use this endpoint to query detailed information about Solana validators with stake accounts under them on the staking platform.\r\n","operationId":"getValidatorInfo","parameters":[{"name":"X-API-KEY","in":"header","required":true,"schema":{"type":"string"}},{"name":"network","in":"path","description":"Applicable values are mainnet, testnet and devnet","required":true,"schema":{"type":"string","enum":["mainnet","testnet","devnet"]}},{"name":"validator_address","in":"path","description":"The public key of the validator","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolValidatorInfoResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```

## Delegator Monitoring

> Clients can invoke this endpoint to monitor existing delegations by retrieving and tracking delegator addresses (stake accounts) on the staking platform. A request with a list of delegator addresses enables the creation of corresponding positions on the staking platform for monitoring purposes.

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"tags":[{"name":"Solana","description":"The Staking API responses will adhere to standard HTTP response conventions. Importantly, the staking platform performs business validations on all POST request messages to ensure that each request contains accurate and complete information. The business validation failures will be responded to with an HTTP 400, while any internal processing errors identified will be responded to with an HTTP 500."}],"security":[{"AuthorizationToken":[]},{"APIKey":[]}],"components":{"securitySchemes":{"AuthorizationToken":{"type":"http","description":"","scheme":"bearer","bearerFormat":"JWT"},"APIKey":{"name":"X-API-KEY","type":"apiKey","in":"header"}},"schemas":{"ValidatorMonitoringRequest":{"type":"object","required":["network","validator_address","delegators"],"properties":{"network":{"type":"string","description":"Applicable network. Supported values;\r\n- mainnet\r\n- testnet\r\n- devnet","enum":["mainnet","testnet","devnet"]},"validator_address":{"type":"string","description":"The address of the validator under which the stake account is delegating SOL."},"delegators":{"type":"array","description":"A list containing the information of the delegator addresses that will be monitored on the staking platform.","items":{"$ref":"#/components/schemas/Delegators"}}}},"Delegators":{"type":"object","description":"A list containing the information of the delegator addresses that will be monitored on the staking platform.","required":["stake_accounts","participant"],"properties":{"stake_accounts":{"type":"array","description":"A list of the delegator addresses. A maximum of 250 entries are allowed. ","items":{"type":"string","description":"A list of the delegator addresses"}},"participant":{"type":"string","description":"The participant name registered on the staking platform that is associated with the client's customer. "},"account":{"type":"string","description":"The account name registered on the staking platform that is associated with the client's customer. If not provided, requests will be assigned to a default account."}}},"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}},"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}},"paths":{"/v1/solana/delegators/monitoring":{"post":{"tags":["Solana"],"summary":"Delegator Monitoring","description":"Clients can invoke this endpoint to monitor existing delegations by retrieving and tracking delegator addresses (stake accounts) on the staking platform. A request with a list of delegator addresses enables the creation of corresponding positions on the staking platform for monitoring purposes.","operationId":"createValidatorMonitoringUpdate","parameters":[{"name":"X-API-KEY","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatorMonitoringRequest"}}},"required":true},"responses":{"200":{"description":"Sample success response payload. See Response schema below for wrapper","content":{"application/json":{"schema":{"type":"object","properties":{"delegator_monitoring_reference_id":{"type":"string","description":"A system-generated unique identifier for the API request. This identifier is stamped in the 'Link ID' fields of all positions created through the API request."}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/ErrorMessage"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/InternalServerErrorMessage"}}}}}}}}}}}}
```


# Models

## The ErrorMessage object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"ErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}}}
```

## The InternalServerErrorMessage object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"InternalServerErrorMessage":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"message":{"type":"string"}}}}}}
```

## The SOLDelegatorRewardsRequest object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"SOLDelegatorRewardsRequest":{"type":"object","required":["network","rollup_type","start","end","stake_accounts"],"properties":{"network":{"type":"string","description":"The network on which validators should be created. Supported values;\r\n- mainnet\r\n- testnet\r\n- devnet","enum":["mainnet","testnet","devnet"]},"rollup_type":{"type":"integer","description":"Denotes the granularity of rewards breakdown. THe applicable values are;\n- 1 (epoch)\n- 2 (date)","enum":[1,2]},"start":{"type":"string","description":"It specifies the start epoch if the type is 1, or the start date in the \"YYYY-MM-DD\" format (UTC timezone) if the type is 2."},"end":{"type":"string","description":"It specifies the end epoch if the type is 1, or the end date in the \"YYYY-MM-DD\" format (UTC timezone) if the type is 2."},"stake_accounts":{"type":"array","description":"List of delegator stake accounts to fetch the rewards breakdown. A maximum of 50 entries are allowed.","items":{"type":"string","description":"List of delegator stake accounts to fetch the rewards breakdown. A maximum of 50 entries are allowed."}}}}}}}
```

## The DelegatorRewardsInfoResponse object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"DelegatorRewardsInfoResponse":{"type":"object","properties":{"network":{"type":"string","description":"Network specified in the request.","enum":["mainnet","testnet","devnet"]},"start":{"type":"string","description":"Start epoch or start date specified in the request."},"end":{"type":"string","description":"End epoch or end date specified in the request."},"page":{"type":"integer","description":"The current page number sent in the request.","format":"int32"},"total":{"type":"integer","description":"The total number of records resulted for the input criteria.","format":"int64"},"data":{"type":"array","description":"An array that contains stake account rewards.","items":{"$ref":"#/components/schemas/DelegatorReward"}}},"title":""},"DelegatorReward":{"type":"object","properties":{"stake_account":{"type":"string","description":"The stake_account that received the rewards."},"validator_address":{"type":"string","description":"Address of the validator that distributed the rewards (the validator the delegator is attached to)."},"total_sol":{"type":"number","format":"double","description":"Total rewards the delegator earned from inception in SOL. Values will be displayed up to 9 decimal places\n\nNote: Block rewards will not be available from delegator inception, therefore this field will not consider block rewards. Only inflation rewards and MEV rewards will be considered.\n"},"total_lamports":{"type":"integer","description":"Total rewards the delegator earned from inception in lamports.\n\nNote : Similar to \"total_sol\" this field will not consider block rewards\n"},"apy":{"type":"number","format":"double","description":"The Annualized Percentage Yield of the stake account. This value is calculated considering net inflation and net MEV rewards earned during the last 10 completed epochs."},"block_rewards_apy":{"type":"number","format":"double","description":"The Annualized Percentage Yield on block rewards earned by the stake account. This value is calculated considering net block rewards earned during the last 10 completed epochs."},"total_apy":{"type":"number","format":"double","description":"The total Annualized Percentage Yield on all rewards attributable to the stake account in the last 10 epochs, after commissions and rebates."},"total_accumulated_sol":{"type":"number","format":"double","description":"Total rewards the delegator has earned for the query criteria in SOL. Values will be displayed up to 9 decimal places\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_accumulated_lamports":{"type":"integer","description":"Total rewards the delegator has earned for the query criteria in lamports.\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"accumulated_gross_block_rewards_sol":{"type":"number","format":"double","description":"The total gross block rewards earned by the stake account for the query criteria in SOL.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_gross_block_rewards_lamports":{"type":"integer","description":"The total gross block rewards earned by the stake account for the query criteria in lamports.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_net_block_rewards_sol":{"type":"number","format":"double","description":"The net block rewards earned by the stake account for the query criteria in SOL, net of the staking platform commissions.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_net_block_rewards_lamports":{"type":"integer","description":"The net block rewards earned by the stake account for the query criteria in lamports, net of the staking platform commissions.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_rewards":{"type":"array","description":"Protocol, MEV, and block rewards for the given delegator and query criteria. A new rewards type \"NET_BLOCK\" has been introduced.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will be set to 0.\n","items":{"$ref":"#/components/schemas/AccumulatedReward"}},"rewards_breakdown":{"type":"array","description":"Per-epoch (or period) rewards breakdown.","items":{"$ref":"#/components/schemas/RewardBreakdown"}}},"required":["stake_account","validator_address"]},"AccumulatedReward":{"type":"object","properties":{"accumulated_sol":{"type":"number","format":"double","description":"Accumulated rewards in SOL between the start and end specified in the request. Values will be displayed up to 9 decimal places\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"accumulated_lamports":{"type":"integer","description":"Accumulated rewards in lamports between the start and end specified in the request.\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"type":{"type":"string","description":"Type of rewards.","enum":["PROTOCOL","MEV","BLOCK","NET_BLOCK"]}}},"RewardBreakdown":{"type":"object","description":"Rewards for a given epoch/period.","properties":{"epoch":{"type":"integer","description":"The epoch corresponding to the rewards. This is applicable only if the rollup_type is 1"},"timestamp":{"type":"string","format":"date-time","description":"If the rollup_type is 1, it should specify the timestamp corresponding to the end of the epoch."},"balance":{"type":"number","format":"double","description":"The balance of the account after rewards have been added."},"total_epoch_sol":{"type":"number","format":"double","description":"Total rewards accumulated during the period in SOL. Values will be displayed up to 9 decimal places\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_epoch_lamports":{"type":"integer","description":"Total rewards accumulated during the period in lamports.\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_epoch_gross_block_rewards_sol":{"type":"number","format":"double","description":"The gross block rewards earned by the stake account for the epoch, in SOL."},"total_epoch_gross_block_rewards_lamports":{"type":"integer","description":"The gross block rewards earned by the stake account for the epoch, in lamports."},"total_epoch_net_block_rewards_sol":{"type":"number","format":"double","description":"The net block rewards earned by the stake account for the epoch, in SOL, net of the staking platform commissions."},"total_epoch_net_block_rewards_lamports":{"type":"integer","description":"The net block rewards earned by the stake account for the epoch, in lamports, net of the staking platform commissions."},"rewards":{"type":"array","description":"An array that contains protocol, mev, and block rewards corresponding to the given epoch. A new rewards type \"NET_BLOCK\" has been introduced.","items":{"$ref":"#/components/schemas/RewardItem"}}},"required":["rewards"]},"RewardItem":{"type":"object","properties":{"rewards_sol":{"type":"number","format":"double","description":"Rewards accumulated during the period in SOL. Values will be displayed up to 9 decimal places\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"rewards_lamports":{"type":"integer","description":"Rewards accumulated during the period in lamports.\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"type":{"type":"string","description":"Type of rewards.","enum":["PROTOCOL","MEV","BLOCK","NET_BLOCK"]}}}}}}
```

## The DelegatorReward object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"DelegatorReward":{"type":"object","properties":{"stake_account":{"type":"string","description":"The stake_account that received the rewards."},"validator_address":{"type":"string","description":"Address of the validator that distributed the rewards (the validator the delegator is attached to)."},"total_sol":{"type":"number","format":"double","description":"Total rewards the delegator earned from inception in SOL. Values will be displayed up to 9 decimal places\n\nNote: Block rewards will not be available from delegator inception, therefore this field will not consider block rewards. Only inflation rewards and MEV rewards will be considered.\n"},"total_lamports":{"type":"integer","description":"Total rewards the delegator earned from inception in lamports.\n\nNote : Similar to \"total_sol\" this field will not consider block rewards\n"},"apy":{"type":"number","format":"double","description":"The Annualized Percentage Yield of the stake account. This value is calculated considering net inflation and net MEV rewards earned during the last 10 completed epochs."},"block_rewards_apy":{"type":"number","format":"double","description":"The Annualized Percentage Yield on block rewards earned by the stake account. This value is calculated considering net block rewards earned during the last 10 completed epochs."},"total_apy":{"type":"number","format":"double","description":"The total Annualized Percentage Yield on all rewards attributable to the stake account in the last 10 epochs, after commissions and rebates."},"total_accumulated_sol":{"type":"number","format":"double","description":"Total rewards the delegator has earned for the query criteria in SOL. Values will be displayed up to 9 decimal places\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_accumulated_lamports":{"type":"integer","description":"Total rewards the delegator has earned for the query criteria in lamports.\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"accumulated_gross_block_rewards_sol":{"type":"number","format":"double","description":"The total gross block rewards earned by the stake account for the query criteria in SOL.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_gross_block_rewards_lamports":{"type":"integer","description":"The total gross block rewards earned by the stake account for the query criteria in lamports.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_net_block_rewards_sol":{"type":"number","format":"double","description":"The net block rewards earned by the stake account for the query criteria in SOL, net of the staking platform commissions.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_net_block_rewards_lamports":{"type":"integer","description":"The net block rewards earned by the stake account for the query criteria in lamports, net of the staking platform commissions.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will not be considered.\n"},"accumulated_rewards":{"type":"array","description":"Protocol, MEV, and block rewards for the given delegator and query criteria. A new rewards type \"NET_BLOCK\" has been introduced.\n\nNote: If the query covers epochs/dates prior to implementation of the block rewards calculation, block rewards will be set to 0.\n","items":{"$ref":"#/components/schemas/AccumulatedReward"}},"rewards_breakdown":{"type":"array","description":"Per-epoch (or period) rewards breakdown.","items":{"$ref":"#/components/schemas/RewardBreakdown"}}},"required":["stake_account","validator_address"]},"AccumulatedReward":{"type":"object","properties":{"accumulated_sol":{"type":"number","format":"double","description":"Accumulated rewards in SOL between the start and end specified in the request. Values will be displayed up to 9 decimal places\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"accumulated_lamports":{"type":"integer","description":"Accumulated rewards in lamports between the start and end specified in the request.\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"type":{"type":"string","description":"Type of rewards.","enum":["PROTOCOL","MEV","BLOCK","NET_BLOCK"]}}},"RewardBreakdown":{"type":"object","description":"Rewards for a given epoch/period.","properties":{"epoch":{"type":"integer","description":"The epoch corresponding to the rewards. This is applicable only if the rollup_type is 1"},"timestamp":{"type":"string","format":"date-time","description":"If the rollup_type is 1, it should specify the timestamp corresponding to the end of the epoch."},"balance":{"type":"number","format":"double","description":"The balance of the account after rewards have been added."},"total_epoch_sol":{"type":"number","format":"double","description":"Total rewards accumulated during the period in SOL. Values will be displayed up to 9 decimal places\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_epoch_lamports":{"type":"integer","description":"Total rewards accumulated during the period in lamports.\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_epoch_gross_block_rewards_sol":{"type":"number","format":"double","description":"The gross block rewards earned by the stake account for the epoch, in SOL."},"total_epoch_gross_block_rewards_lamports":{"type":"integer","description":"The gross block rewards earned by the stake account for the epoch, in lamports."},"total_epoch_net_block_rewards_sol":{"type":"number","format":"double","description":"The net block rewards earned by the stake account for the epoch, in SOL, net of the staking platform commissions."},"total_epoch_net_block_rewards_lamports":{"type":"integer","description":"The net block rewards earned by the stake account for the epoch, in lamports, net of the staking platform commissions."},"rewards":{"type":"array","description":"An array that contains protocol, mev, and block rewards corresponding to the given epoch. A new rewards type \"NET_BLOCK\" has been introduced.","items":{"$ref":"#/components/schemas/RewardItem"}}},"required":["rewards"]},"RewardItem":{"type":"object","properties":{"rewards_sol":{"type":"number","format":"double","description":"Rewards accumulated during the period in SOL. Values will be displayed up to 9 decimal places\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"rewards_lamports":{"type":"integer","description":"Rewards accumulated during the period in lamports.\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"type":{"type":"string","description":"Type of rewards.","enum":["PROTOCOL","MEV","BLOCK","NET_BLOCK"]}}}}}}
```

## The AccumulatedReward object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"AccumulatedReward":{"type":"object","properties":{"accumulated_sol":{"type":"number","format":"double","description":"Accumulated rewards in SOL between the start and end specified in the request. Values will be displayed up to 9 decimal places\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"accumulated_lamports":{"type":"integer","description":"Accumulated rewards in lamports between the start and end specified in the request.\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"type":{"type":"string","description":"Type of rewards.","enum":["PROTOCOL","MEV","BLOCK","NET_BLOCK"]}}}}}}
```

## The RewardBreakdown object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"RewardBreakdown":{"type":"object","description":"Rewards for a given epoch/period.","properties":{"epoch":{"type":"integer","description":"The epoch corresponding to the rewards. This is applicable only if the rollup_type is 1"},"timestamp":{"type":"string","format":"date-time","description":"If the rollup_type is 1, it should specify the timestamp corresponding to the end of the epoch."},"balance":{"type":"number","format":"double","description":"The balance of the account after rewards have been added."},"total_epoch_sol":{"type":"number","format":"double","description":"Total rewards accumulated during the period in SOL. Values will be displayed up to 9 decimal places\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_epoch_lamports":{"type":"integer","description":"Total rewards accumulated during the period in lamports.\n\nUpdate: Reflects the sum of MEV and inflation rewards only. Block rewards are excluded from this calculation.\n"},"total_epoch_gross_block_rewards_sol":{"type":"number","format":"double","description":"The gross block rewards earned by the stake account for the epoch, in SOL."},"total_epoch_gross_block_rewards_lamports":{"type":"integer","description":"The gross block rewards earned by the stake account for the epoch, in lamports."},"total_epoch_net_block_rewards_sol":{"type":"number","format":"double","description":"The net block rewards earned by the stake account for the epoch, in SOL, net of the staking platform commissions."},"total_epoch_net_block_rewards_lamports":{"type":"integer","description":"The net block rewards earned by the stake account for the epoch, in lamports, net of the staking platform commissions."},"rewards":{"type":"array","description":"An array that contains protocol, mev, and block rewards corresponding to the given epoch. A new rewards type \"NET_BLOCK\" has been introduced.","items":{"$ref":"#/components/schemas/RewardItem"}}},"required":["rewards"]},"RewardItem":{"type":"object","properties":{"rewards_sol":{"type":"number","format":"double","description":"Rewards accumulated during the period in SOL. Values will be displayed up to 9 decimal places\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"rewards_lamports":{"type":"integer","description":"Rewards accumulated during the period in lamports.\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"type":{"type":"string","description":"Type of rewards.","enum":["PROTOCOL","MEV","BLOCK","NET_BLOCK"]}}}}}}
```

## The RewardItem object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"RewardItem":{"type":"object","properties":{"rewards_sol":{"type":"number","format":"double","description":"Rewards accumulated during the period in SOL. Values will be displayed up to 9 decimal places\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"rewards_lamports":{"type":"integer","description":"Rewards accumulated during the period in lamports.\n\nWhen \"type\" = \"NET_BLOCK\", net block rewards will be returned.\n"},"type":{"type":"string","description":"Type of rewards.","enum":["PROTOCOL","MEV","BLOCK","NET_BLOCK"]}}}}}}
```

## The DelegatorInfoListRequest object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"DelegatorInfoListRequest":{"type":"object","required":["network"],"properties":{"network":{"type":"string","description":"The network on which the queried stake accounts have been created . Supported values;\r\n- mainnet\r\n- testnet\r\n- devnet","enum":["mainnet","testnet","devnet"]},"participant":{"type":"string","description":"The participant name registered on the staking platform from which stake accounts need to be retrieved."},"account":{"type":"string","description":"The account name registered on the staking platform from which stake accounts need to be retrieved."},"status":{"type":"array","description":"The status of the stake accounts that need to be retrieved. Results will be returned in the order of the statuses sent in the request. Supported values;\r\n- ACTIVE\r\n- INACTIVE\r\n- ACTIVATING\r\n- DEACTIVATING","items":{"type":"string","enum":["ACTIVE","INACTIVE","ACTIVATING","DEACTIVATING"]}},"stake_accounts":{"type":"array","description":"List of delegator stake accounts to fetch the delegator information. A maximum of 250 entries are allowed.","items":{"type":"string","description":"List of delegator stake accounts to fetch the delegator information. A maximum of 250 entries are allowed."}}}}}}}
```

## The DelegatorInfoListResponse object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"DelegatorInfoListResponse":{"type":"object","properties":{"network":{"type":"string","description":"Network specified in the request. Supported values;\r\n- mainnet\r\n- testnet\r\n- devnet","enum":["mainnet","testnet","devnet"]},"page":{"type":"integer","description":"The current page number sent in the request.","format":"int32"},"total":{"type":"integer","description":"Total number of stake accounts being sent in the API response","format":"int64"},"data":{"type":"object","description":"An array that contains the details about stake accounts.","properties":{"stake_account":{"type":"string","description":"\t\nThe public key of the stake account"},"status":{"type":"string","description":"Current status of the delegator"},"balance_in_sol":{"type":"number","description":"The current balance of the stake account in SOL. Values will be displayed up to 9 decimal places","format":"double"},"balance_in_lamports":{"type":"number","description":"The balance in the stake account in Lamports","format":"double"},"validator_info":{"$ref":"#/components/schemas/ValidatorInfo"},"provision_info":{"$ref":"#/components/schemas/ProvisionInfo"}}}}},"ValidatorInfo":{"type":"object","description":"JSON object that represents the validator for which the given stake account is attached to.","properties":{"address":{"type":"string","description":"The public key of the validator"}}},"ProvisionInfo":{"type":"object","description":"JSON object that contains the registration details of the delegator.","properties":{"id":{"type":"string","description":"The reference number issued when successfully onboarding the stake account"},"created_at":{"type":"string","description":"Created date and time in the platform. This should be YYYY-MM-DD HH:mm:ss in UTC."}}}}}}
```

## The DelegatorInfoResponse object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"DelegatorInfoResponse":{"required":["network"],"type":"object","properties":{"network":{"type":"string","description":"The network on which validators should be created. Supported values.","enum":["mainnet","testnet","devnet"]},"stake_account":{"type":"string","description":"\t\nThe public key of the stake account"},"status":{"type":"string","description":"Current status of the delegator"},"balance_in_lamports":{"type":"number","description":"The balance in the stake account in Lamports","format":"double"},"balance_in_sol":{"type":"number","description":"The balance of the stake account in SOL. Values will be displayed up to 9 decimal places","format":"double"},"validator_info":{"$ref":"#/components/schemas/ValidatorInfo"},"provision_info":{"$ref":"#/components/schemas/ProvisionInfo"}}},"ValidatorInfo":{"type":"object","description":"JSON object that represents the validator for which the given stake account is attached to.","properties":{"address":{"type":"string","description":"The public key of the validator"}}},"ProvisionInfo":{"type":"object","description":"JSON object that contains the registration details of the delegator.","properties":{"id":{"type":"string","description":"The reference number issued when successfully onboarding the stake account"},"created_at":{"type":"string","description":"Created date and time in the platform. This should be YYYY-MM-DD HH:mm:ss in UTC."}}}}}}
```

## The ProvisionInfo object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"ProvisionInfo":{"type":"object","description":"JSON object that contains the registration details of the delegator.","properties":{"id":{"type":"string","description":"The reference number issued when successfully onboarding the stake account"},"created_at":{"type":"string","description":"Created date and time in the platform. This should be YYYY-MM-DD HH:mm:ss in UTC."}}}}}}
```

## The ValidatorInfo object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorInfo":{"type":"object","description":"JSON object that represents the validator for which the given stake account is attached to.","properties":{"address":{"type":"string","description":"The public key of the validator"}}}}}}
```

## The SolValidatorInfoResponse object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"SolValidatorInfoResponse":{"type":"object","properties":{"network":{"type":"string","description":"Network specified in the request. Supported values;\r\n- mainnet\r\n- testnet\r\n- devnet","enum":["mainnet","testnet","devnet"]},"apy":{"type":"number","description":"The Annualized Percentage Yield of the validator. This value is calculated only using the stake accounts for the specified validator that have been onboarded onto the staking platform. The calculation considers gross rewards earned across the past 10 epochs.","format":"double"},"block_rewards_apy":{"type":"number","description":"The Annualized Percentage Yield on block rewards earned by the stake accounts under the validator. This value is calculated considering gross block rewards earned across the past 10 epochs.","format":"double"},"total_apy":{"type":"number","description":"The Annualized Percentage Yield on total rewards earned by the stake accounts under the validator. This value is calculated considering gross rewards earned across the past 10 epochs.","format":"double"},"validator_address":{"type":"string","description":"The address of the validator for which information is requested."},"validator_status":{"type":"string","description":"The current status of the validator"},"delegated_balance":{"type":"number","description":"The total balance delegated under the validator in SOL. The total \"net balance\" values of the delegators under the staking platform. Values will be displayed up to 9 decimal places","format":"double"}}}}}}
```

## The ValidatorMonitoringRequest object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"ValidatorMonitoringRequest":{"type":"object","required":["network","validator_address","delegators"],"properties":{"network":{"type":"string","description":"Applicable network. Supported values;\r\n- mainnet\r\n- testnet\r\n- devnet","enum":["mainnet","testnet","devnet"]},"validator_address":{"type":"string","description":"The address of the validator under which the stake account is delegating SOL."},"delegators":{"type":"array","description":"A list containing the information of the delegator addresses that will be monitored on the staking platform.","items":{"$ref":"#/components/schemas/Delegators"}}}},"Delegators":{"type":"object","description":"A list containing the information of the delegator addresses that will be monitored on the staking platform.","required":["stake_accounts","participant"],"properties":{"stake_accounts":{"type":"array","description":"A list of the delegator addresses. A maximum of 250 entries are allowed. ","items":{"type":"string","description":"A list of the delegator addresses"}},"participant":{"type":"string","description":"The participant name registered on the staking platform that is associated with the client's customer. "},"account":{"type":"string","description":"The account name registered on the staking platform that is associated with the client's customer. If not provided, requests will be assigned to a default account."}}}}}}
```

## The Delegators object

```json
{"openapi":"3.0.0","info":{"title":"Solana API Specification","version":"1.120.0"},"components":{"schemas":{"Delegators":{"type":"object","description":"A list containing the information of the delegator addresses that will be monitored on the staking platform.","required":["stake_accounts","participant"],"properties":{"stake_accounts":{"type":"array","description":"A list of the delegator addresses. A maximum of 250 entries are allowed. ","items":{"type":"string","description":"A list of the delegator addresses"}},"participant":{"type":"string","description":"The participant name registered on the staking platform that is associated with the client's customer. "},"account":{"type":"string","description":"The account name registered on the staking platform that is associated with the client's customer. If not provided, requests will be assigned to a default account."}}}}}}
```


