---
title: "Post Top up Intent"
method: POST
path: "/v1/ethereum/{network}/topup-intents"
tags: ["Ethereum"]
---

# Post Top up Intent

`POST /v1/ethereum/{network}/topup-intents`

Adds additional balance to one or more eligible validators and returns an unsigned transaction.
Only withdrawal credentials of type **0x02** are supported.
If a validator uses 0x01 credentials or if the combined value of the additional deposit and the validator's current effective balance exceeds **2048 ETH**, the deposit will not be processed.

The unsigned transaction remains valid for up to 90 days or until it is signed and confirmed on the network.

Through the Blockdaemon [batch deposit contract](https://gitlab.com/Blockdaemon/open-source/eth2-batch-deposit-contract),
a single transaction can top up up to 250 validators simultaneously,
delivering over 50% gas fee savings compared to submitting separate transactions for each validator.

To complete the staking process, you must sign an Ethereum transaction
with a [data field](https://ethereum.org/en/developers/docs/transactions/#the-data-field)
set to match the returned `unsigned_transaction` property of the response.
The `recipient` of the transaction must be set to the `contract_address`
property of the response. The account signing the transaction must have
the sufficient balance to top up the requested number of validators and
this amount must be provided as the value of the signed transaction.

## Request body

- NewEthereumTopUpIntent — Request object to create a new Ethereum Top Up Intent.
  - `top_ups` NewEthereumTopUp[], required — Top ups for Ethereum 0x02 validators.
    - `public_key` string, base64, required — A BLS public Key.
    - `amount` string, required — Amount of ETH (denominated in Gwei).

## Response `200`

Created

- EthereumTopUpIntent — Ethereum validator top up intent
  - `network` 'mainnet' | 'hoodi', required — Ethereum network
  - `contract_address` string, hex, required — Hex-encoded Ethereum [account or smart contract address](https://ethereum.org/en/developers/docs/accounts/).
  - `estimated_gas` integer, required — Gas estimation of the transaction
  - `total_amount` string, required — Amount of ETH (denominated in Gwei).
  - `unsigned_transaction` string, base64, required — Generated unsigned transaction smart contract call data.
  - `expiration_time` integer, required — Transaction expiration time
  - `top_ups` EthereumTopUp[], required
    - `public_key` string, base64, required — A BLS public Key.
    - `amount` string, required — Amount of ETH (denominated in Gwei).
    - `withdrawal_credentials` string, hex, required — Hexadecimal encoded [withdrawal credentials](https://github.com/ethereum/consensus-specs/blob/master/specs/phase0/validator.md#withdrawal-credentials) which can be either a BLS public key or an Ethereum account address. This parameter currently accepts ETH1 and BLS withdrawal credentials, but it is considered deprecated after the Capella/Shanghai fork. All users are now advised to use an ETH1 withdrawal address, specified through the `withdrawal_address` parameter as this is required to enable the ongoing accrual of rewards. For more information regarding creating withdrawal credentials, please see the official [Ethereum Launchpad FAQ](https://launchpad.ethereum.org/en/faq#withdrawal-credentials).
    - `fee_recipient` string, hex, required — Hex-encoded Ethereum [account or smart contract address](https://ethereum.org/en/developers/docs/accounts/).

## Other responses

- `400` — Invalid request.
- `401` — Unauthorized
- `500` — Internal server error
- `503` — Insufficient validators available to process Stake Intent request

---

[API](https://skmtc.dev/blockdaemon/apis/staking-api.md) · [All operations](https://skmtc.dev/blockdaemon/apis/staking-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/blockdaemon/staking-api/revisions/f94e296a08a3/schema)
