Node Provisioning API

Dynamically provision nodes and receive staking transactions to sign.

What is the Node Provisioning API?

The Node Provisioning API allows partners to programmatically spin-up nodes for staking. Partners specify the number of nodes needed and receive a transaction to sign that stakes with those node/s.

Chain

Assets per Node

32-2048 ETH per Validator

ETH2

Provision validators with an API request and submit the deposits through a single ETH1 transaction.

Integration Environments

Staked supports integration testing on ETH2, as defined below.

Base URL
Target ETH Network

https://mainnet.staked.cloud/api

Mainnet

https://testnet.staked.cloud/api

Hoodi

Post ETH2 Provisioning Request

POST https://mainnet.staked.cloud/api/provisioning_requests/eth2

Provision ETH2 validators in our secure cloud environments. The response contains a unique identifier for the provisioning request.

Request Headers

Name
Type
Description

X-Api-Key

string

Your API key - (Must have ETH2 access, preferred method of passing api key is now in headers rather than query params)

Query Parameters

Name
Type
Description

api_key

string

[Deprecated since March '25 (preferred method of passing api key is now in headers rather than query params)]

Your API Key - (Must have ETH2 access)

Request Body

Name
Type
Description

attributes

object

ETH2 Attributes Object

Postman - Provisioning Request

ETH2 Attributes Object

Field
Description
Type
Required

eth1Address

Ethereum wallet address which will be used to create withdrawal credentials for the validator (consensus layer reward recipient)

string

true

payoutAddress

Optional: A payable Ethereum address that will receive execution layer payments. Note: if none is provided, payments will be sent to the withdrawal credential.

string

false

feeRecipientGroupKey

Optional: Specify that these validators should receive execution layer fees on an separate address. Note: This groupKey and its associated recipient address must be registered and confirmed with Staked in advance before it is valid to be used in provisioning requests.

string

false

stakingMode

type0x01 for pre-Pectra staking: max 32 ETH per validator; rewards do not compound automatically.

type0x02 for post-Pectra staking, max 2048 ETH per validator; rewards compound automatically.

string

false

amount

Deposit amount. This field is ignored if you select type0x01 staking mode. It is mandatory if you select type0x02 staking mode.

string

false for type0x01

true for type0x02

validators

Array of validator config objects

array

true

Validator Config Object

Field

Description

Type

provider

Validator provider enum: "decentralized" or "amazon"

String

count

Number of validators to provision

Number

Provisioning Response Object

Field

Description

Type

id

Numbered identifier of provisioning request

String

uuid

Unique identifier of provisioning request

String

created

Provisioning request creation datetime

String

status

Provisioning request status - "CREATED"

String

chain

Chain identifier - "ETH2"

String

user_id

User identifier - returns null unless using oauth

String

partner_id

Partner identifier associated with api key

String

attributes

ETH2 attributes object

Object

Get ETH2 Delegation Objects

GET https://mainnet.staked.cloud/api/delegations/eth2

After POSTing a provisioning request, use the unique identifier to GET the delegation objects for each validator. Delegation objects contain the information required to submit deposits on ETH1.

Request Headers

Name
Type
Description

X-Api-Key

string

Your API key - (Must have ETH2 access, preferred method of passing api key is now in headers rather than query params)

Query Parameters

Name
Type
Description

api_key

string

[Deprecated since March '25 (preferred method of passing api key is now in headers rather than query params)]

Your API Key - (Must have ETH2 access)

filters

string

provisioning_request_uuid:YOUR UUID

page

number

Page of results to fetch

per_page

number

Number of results per page

Postman - Delegation Objects
circle-info

Validators are provisioned asynchronously, meaning the GET request will fill-in over time as our infrastructure fulfills the associated provisioning request. Use the "total" field in the response object to track the number of validators provisioned at any given time.

Paginated Response Object

Field

Description

Type

results

Array of ETH2 delegation objects

Array

page

Page of fetched results

Number

pages

Total number of pages

Number

per_page

Number of results per page

Number

total

Number of results in total

Number

ETH2 Delegation Object

Field

Description

Type

id

Identifier of delegation object

Number

address

Validator public key

String

chain

Chain identifier - "ETH2"

String

attributes

ETH2 delegation attributes object

Object

amount

Amount currently delegated

String

created

Delegation object creation time

String

status

ETH2 delegation status enum

String

user_id

User identifier - returns null unless using oauth

String

partner_id

Partner identifier associated with api key

String

provisioning_request_uuid

Associated provisioning request unique identifier

String

provisioning_request_id

Associated provisioning request numbered identifier

String

ETH2 Delegation Attributes Object

Field

Description

Type

cloud

Validator cloud configuration

String

count

Total number of validators in associated provisioning request

Number

index

Index of validator in associated provisioning request

Number

depositInput

Validator deposit transaction data

String

validatorKey

Validator public key

String

ETH2 Delegation Status Enum

Value

Definition

Time Period

CREATED

Validator was provisioned through Staked API

n /a

DEPOSITED

Deposit is waiting to be seen by ETH2 chain

0-6 Hours

PENDING

Validator is in the queue waiting to go live

0-6 Days

ACTIVE

Validator is participating and earning rewards

n / a

Submit Deposits through the Batching Contract

The canonical ETH2 deposit contractarrow-up-right, used to convert ETH1 to ETH2, only supports one deposit transaction at a time. Since 32 ETH is required for each validator, depositors with large amounts of ETH would have to broadcast many deposit transactions.

To simplify submitting deposits, we have created a batching contract which takes up to 185 deposits at once and submits each to the deposit contract. Integrators can therefore stake up to 5920 ETH in one Ethereum transaction, and leave behind the hassle of tracking many individually broadcasted transactions.

Batching Contract Deployments

file-download
2KB

The batching contract contains an external payable function, batchDeposits, which loops over each validator's deposit and sends them to the deposit contract. The function arguments are passed as a 2-d array where the array at [i] represents the deposit arguments for validator i.

circle-check

Last updated