Incremental Staking / Top-up

Objective

Increase the balance of an existing validator by staking additional ETH, up to a total of 2048 ETH.

Applicable scenarios

  • You want to increase the stake of a validator without creating a new one
  • The validator is already active and uses 0x02 withdrawal credentials

Endpoints

Flow

  1. Submit the pubkey of the target validator and the additional amount to stake.
  2. The system verifies:
    • The resulting balance will not exceed 2048 ETH
    • The validator is compatible with top-ups (uses 0x02 credentials)
  3. The API returns a transaction payload to be signed and broadcasted.

This method is supported for both Ethereum and SSV validators.

Flow Example

1. Create Increment Request

Send a POST request to /api/v1/eth/staking/direct/increment-request/create.

Example request:

curl --request POST \
  --url https://api.p2p.org/api/v1/eth/staking/direct/increment-request/create \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer <token>' \
  --data '{
    "id": "f293e499-9188-4e01-8e7c-621038967b06",
    "pubkeys": [
      "0x80001...66ea3e185fc"
    ],
    "amountPerValidator": "10000000000",
    "withdrawalAddress": "0x368F...f8e4a21"
}'

Example response:

{
  "error": null,
  "result": true
}

2. Check Status & Retrieve Transaction Data

Send a GET request to /api/v1/eth/staking/direct/increment-request/status/{id}.

Example request:

curl --request GET \
  --url https://api.p2p.org/api/v1/eth/staking/direct/increment-request/status/f293e499-9188-4e01-8e7c-621038967b06 \
  --header 'Authorization: Bearer <token>'

Example response:

{
  "error": null,
  "result": {
    "serializeTx": "0x02f8ab8b0...",
    "value": "10000000000",
    "to": "0x00000000219ab540356cBB839Cbe05303d7705Fa",
    "gasLimit": "100000",
    "data": "0x",
    "chainId": 560048,
    "type": 2,
    "maxFeePerGas": "2111533588",
    "maxPriorityFeePerGas": "79385672"
  }
}