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

# Post Stake Intent

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

Reserves one or more available validators and returns an unsigned transaction.
Supports 0x01 withdrawal address types.
The validators will remain reserved for 90 days or until the returned transaction is signed and confirmed in the network. Blockdaemon reserves the right to free any allocated resources if the transaction is not confirmed in time.

A single transaction can create up to 250 validators through the use of the Blockdaemon [batch deposit contract](https://gitlab.com/Blockdaemon/open-source/eth2-batch-deposit-contract) which delivers over 50% reduction in gas fees when compared to submitting individual transactions for each deposit.

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 create the requested number of validators and this amount must be provided as the value of the signed transaction.

## Request body

- NewStakeIntentEthereum — Stake intent for the Ethereum protocol.
  - `stakes` NewStakeIntentEthereumStake[], required — Stakes for the Ethereum protocol.
    - `amount` string, required — Amount of ETH (denominated in Gwei).
    - `withdrawal_address` string, hex, required — Hex-encoded Ethereum [account or smart contract address](https://ethereum.org/en/developers/docs/accounts/).
    - `quantity` integer — Number of validators to create that will share the same withdrawal credentials.
    - `fee_recipient` string — An Ethereum address to receive transaction fees from published blocks. 20-bytes, hex encoded with 0x prefix, case insensitive.
  - `plan_id` string — This feature enables you to stake to validators from the specified plan(s). When no plan id is specified, validators across all plans that match the API route will be available for staking. If it is a shared plan, you can to stake to validators on a shared node from the specified plan.

## Response `200`

Created

- EthereumStakeIntentResponse
  - `stake_intent_id` string, base58, required — Unique idenifier for a group of stakes.
  - `customer_id` string, required — Unique identifier for a customer
  - `plan_id` string — This feature enables you to stake to validators from the specified plan(s). When no plan id is specified, validators across all plans that match the API route will be available for staking. If it is a shared plan, you can to stake to validators on a shared node from the specified plan.
  - `protocol` 'ethereum', required — Ethereum protocol
  - `network` 'mainnet' | 'hoodi', required — Ethereum network
  - `ethereum` StakeIntentEthereum — Ethereum Stake Intent response
    - `stakes` StakeIntentEthereumStake[], required — Stakes being made.
      - `stake_id` string, base58, required — Unique stake identifier.
      - `amount` string, required — Amount of ETH (denominated in Gwei).
      - `validator_public_key` string, base64, required — A BLS public Key.
      - `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, required — An Ethereum address to receive transaction fees from published blocks. 20-bytes, hex encoded with 0x prefix, case insensitive.
    - `contract_address` string, hex, required — Hex-encoded Ethereum [account or smart contract address](https://ethereum.org/en/developers/docs/accounts/).
    - `unsigned_transaction` string, base64, required — Generated unsigned transaction smart contract call data.
    - `estimated_gas` integer, required — Gas estimation of the transaction
    - `expiration_time` integer, required — Transaction expiration time

## 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)
