# 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.117.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.","format":"date-time"},"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.117.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","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.117.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","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.117.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":{"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","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":"Current balance of the validator in WEI."},"balance_in_eth":{"type":"number","description":"Current 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","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.117.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"]},"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","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":"Current balance of the validator in WEI."},"balance_in_eth":{"type":"number","description":"Current 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","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.117.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","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.117.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 the granularity of rewards breakdown. The applicable values are,\n <ul><li>1 (epoch)</li><li>2 (date)</li>","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."}}}},"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 validators accrued rewards on execution and consensus layers at epoch and daily basis. This endpoint returns rewards for validators created via provision validators endpoint as well as registered for validator monitoring. This endpoint accepts the filtering by start and end (can be epoch or date), and validator public keys.&#x20;

```json
{"openapi":"3.0.1","info":{"title":"Ethereum API Specification","version":"1.117.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 the granularity of rewards breakdown. The applicable values are,\n <ul><li>1 (epoch)</li><li>2 (date)</li>","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."}}}},"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.","format":"double"},"total_wei":{"type":"string","description":"Total rewards the validator earned since inception in WEI."},"accumulated_rewards":{"type":"array","description":"An array that contains accumulated consensus and execution layer rewards for the given validator and the query criteria. ","items":{"$ref":"#/components/schemas/AccumulatedEthRewardsData"}},"rewards_breakdown":{"title":"Rewards Breakdown","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"},"balance_in_wei":{"type":"string","description":"Balance of the validator in the corresponding epoch, in WEI."},"balance_in_eth":{"type":"number","description":"Balance of the validator in the corresponding epoch, in ETH.","format":"double"},"timestamp":{"type":"string","description":"If the rollup_type is 1, it should specify the timestamp corresponding to the epoch at which the rewards were given. If it’s 2, it should specify the latest timestamp at which the rewards were given on the given date. Should be in the format of “YYYY-MM-DD HH:mm:ss”."},"rewards":{"title":"Epoch Rewards","type":"object","description":"An array that contains the consensus and execution layer rewards corresponding to the given epoch.","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["CONSENSUS","EXECUTION"]},"recipient":{"type":"string","description":"The recipient address of the execution rewards. This field should be presented only for execution layer rewards."},"slot":{"type":"integer","description":"The slot number of the proposal made by the validator.This field should be presented only for execution layer rewards.","format":"int32"},"block":{"type":"integer","description":"The execution layer block number of the proposal made by the validator.This field should be presented only for execution layer rewards.","format":"int64"},"rewards_eth":{"type":"number","description":"Rewards accumulated during the period in ETH.","format":"double"},"rewards_wei":{"type":"string","description":"Rewards accumulated during the period in wei. "},"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 should be presented only for execution layer rewards"},"mev_relay":{"type":"string","description":"The name of the MEV boost service, applicable when the is_mev is set to true, otherwise it will be set to null.This field should be presented only for execution layer rewards."},"mev_builder":{"type":"string","description":"The address of the MEV builder that sent the execution rewards. Applicable only if is_mev is true, otherwise it will be null. This field should be presented only for execution layer rewards."},"tx_hash":{"type":"string","description":"The hash of the transaction that used to send the MEV rewards.  Applicable only if is_mev is true, otherwise it will be null.This field should be presented only for execution layer rewards."}}}}}}},"AccumulatedEthRewardsData":{"title":"Accumulated Rewards","type":"object","description":"An array that contains accumulated consensus and execution layer rewards for the given validator and the query criteria. ","properties":{"type":{"type":"string","description":"Type of rewards.","enum":["CONSENSUS","EXECUTION"]},"accumulated_eth":{"type":"number","description":"Accumulated rewards in ETH between the start and the end specified in the request.","format":"double"},"accumulated_wei":{"type":"string","description":"Accumulated rewards in WEI between the start and the end specified in the 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."}}}}},"paths":{"/v1/ethereum/validators/rewards":{"post":{"tags":["Ethereum"],"summary":"Rewards","description":"The rewards endpoint returns validators accrued rewards on execution and consensus layers at epoch and daily basis. This endpoint returns rewards for validators created via provision validators endpoint as well as registered for validator monitoring. This endpoint accepts the filtering by start and end (can be epoch or date), and validator public keys. ","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.117.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","format":"date-time","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.117.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","format":"date-time","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.117.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","format":"date-time","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.117.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.117.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.117.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.","format":"date-time"},"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.117.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.117.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":{"$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"}}}}}}}}
```
