Skip to main content

Endpoints

API Usage

Once you have access to the Staking API with a validated user and existing API keys, you can start using this service.

Try it live

tip

Every endpoint on this page can be executed from the interactive Swagger console, using your own X-API-KEY.

The machine-readable OpenAPI schema is available at:

Authentication

In order to use the Staking API endpoints you need to include your API KEY.

tip

Heads up! To obtain a valid API key required for authentication, please refer to the Authentication > Create API keys section of the documentation.

Header:

NameDescriptionExample valueRequired
X-API-KEYYour api key value<API_KEY_VALUE>
X-NETWORKBlockchain network/chain identifier1
X-IDENTITYCaller-defined identity stored in the audit loguser-1234

X-NETWORK header

Set the X-NETWORK header to the StakeWise chain you want to target.

warning

Supported values: 1 (Ethereum Mainnet) and 560048 (Ethereum Hoodi).

When omitted the API falls back to the default StakeWise network configured for your account.

X-IDENTITY header

Use the X-IDENTITY header to attribute a request to the end user or account acting through your integration. The value is caller-defined and is stored with the request in the audit log, so activity can be traced back to it later.

info

The header is optional and does not change the response. Prefer an opaque internal identifier such as a user ID or account reference over personal data like emails or names. If you omit it, the request is attributed only to your API key.

List available networks

Use this helper endpoint to discover which StakeWise networks are currently enabled for your API key.

  • Endpoint: /api/v1/ethereum/stakewise/networks

Response payload fields:

FieldTypeRequiredDescription
namestringInternal blockchain entry name
typestringBlockchain type string (always ETHEREUM)
chain_idstringChain identifier such as 1 or 560048
is_defaultbooleantrue when the network is used as fallback

Example

curl "https://staking-api.stakely.io/api/v1/ethereum/stakewise/networks" \
-H "X-API-KEY: $STAKELY_API_KEY" \
-H "X-NETWORK: 1"

Response:

[
{
"name": "ethereum",
"type": "ETHEREUM",
"chain_id": "1",
"is_default": true
}
]

Staking information

Get the staking parameters of this protocol:

  • Endpoint: /api/v1/ethereum/stakewise/staking-info

Description

Staking parameters for the StakeWise vault on Ethereum mainnet: activation, deactivation and withdrawal times in minutes, fees, current APR/APY, slashing risk and stake limits. Served from an in-memory snapshot refreshed hourly.

Returned

FieldTypeRequiredDescription
stake_activation_max_timenumberMaximum time, in minutes, for a new stake to become active and start accruing rewards. 0 means it is effective immediately.
stake_deactivation_max_timenumberMaximum time, in minutes, for an unstake request to complete the unbonding/exit period. 0 means the stake is released immediately.
withdrawal_max_timenumberMaximum time, in minutes, between a completed deactivation and the funds being spendable again. 0 means the funds are available as soon as the deactivation completes.
staking_reward_feenumberAggregate fee charged on staking rewards, as a percentage of the rewards generated (validator commission plus any protocol fee).
withdrawal_feenumberFee charged when withdrawing the stake, as a percentage of the withdrawn amount. Network transaction (gas) costs are not included.
staking_aprnumberCurrent annual percentage rate (rewards without compounding), as a percentage.
staking_apynumberCurrent annual percentage yield (rewards with compounding), as a percentage.
max_slashing_percentagenumberMaximum percentage of the staked amount that the protocol can slash. 0 means the protocol implements no slashing.
min_stake_amountstringMinimum amount that can be staked, as a decimal string in the native token of the chain.
max_stake_amountstringMaximum amount that can be staked, as a decimal string in the native token of the chain. null means the protocol enforces no upper limit.
usersnumberNumber of addresses currently staking with Stakely on this chain. Live figure, refreshed hourly. null on protocol-scoped endpoints (liquid staking, vaults), because the feed only publishes this per chain and the chain-wide figure is not that protocol's.
tvl_usdnumberTotal value staked with Stakely on this chain, in USD. Live figure, refreshed hourly. null on protocol-scoped endpoints, for the same reason as users.
tvl_tokennumberTotal value staked with Stakely on this chain, in the native token of the chain. Live figure, refreshed hourly. null on protocol-scoped endpoints, for the same reason as users.

Example

curl "https://staking-api.stakely.io/api/v1/ethereum/stakewise/staking-info" \
-H "X-API-KEY: $STAKELY_API_KEY"

Response:

{
"stake_activation_max_time": 0,
"stake_deactivation_max_time": 43200,
"withdrawal_max_time": null,
"staking_reward_fee": 5,
"withdrawal_fee": 0,
"staking_apr": 2.18,
"staking_apy": 2.22,
"max_slashing_percentage": 100,
"min_stake_amount": "0",
"max_stake_amount": null,
"users": null,
"tvl_usd": null,
"tvl_token": null
}

Stake into stakewise vault

Craft a stake transaction:

  • Endpoint: /api/v1/ethereum/stakewise/action/stake

Description

This endpoint will craft a stake transaction ready to be signed.

Request body parameters

FieldTypeRequiredDescription
addressstringEth address that will perform the staking action
amountnumberAmount of stake to perform in eth units

Returned

FieldTypeRequiredDescription
serialized_tx_hexstringSerialized transaction hex string ready to be signed
unsigned_tx_hash_hexstringUnasigned tx hash hex string, ready to be signed by external integrations
payloadobjectPayload object

Example

curl -X POST "https://staking-api.stakely.io/api/v1/ethereum/stakewise/action/stake" \
-H "X-API-KEY: $STAKELY_API_KEY" \
-H "X-NETWORK: 1" \
-H "Content-Type: application/json" \
-d '{
"address": "0x0e79065B5F11b5BD1e62B935A600976ffF3754B9",
"amount": 0.1
}'

Response:

{
"serialized_tx_hex": "03b8ef9558b9a2d9f2d4c1f4f8bafce1a6df628d6c521474d6823b6e3223d9e8af",
"unsigned_tx_hash_hex": "1a6edb7358323bafca52b1755f3ad985754dc23887110b65429373ed83321500",
"payload": {
"type": "0x0",
"nonce": "0x5fe08",
"gasLimit": "0x30d40",
"to": "0x169856275ddca01b2fcdc63c4f1b0adf72a4cf10",
"value": "0x16345785d8a0000",
"data": "0x18f729500000000000000000000000000e7906...1d1c666802bd",
"gasPrice": "0x2887734d"
}
}

Unstake action

Craft a unstake transaction

  • Endpoint: /api/v1/ethereum/stakewise/action/unstake

Description

This endpoint will build an "enter exit queue" unstake transaction ready to be signed. The exited assets needs to mature for a given period before there are claimable

Request param

FieldTypeRequiredDescription
addressstringEth address that will perform the staking action
amountnumberAmount of stake to perform in eth units

Returned

FieldTypeRequiredDescription
serialized_tx_hexstringSerialized transaction hex string ready to be signed
unsigned_tx_hash_hexstringUnasigned tx hash hex string, ready to be signed by external integrations
payloadobjectPayload object

Example

curl -X POST "https://staking-api.stakely.io/api/v1/ethereum/stakewise/action/unstake" \
-H "X-API-KEY: $STAKELY_API_KEY" \
-H "X-NETWORK: 1" \
-H "Content-Type: application/json" \
-d '{
"address": "0x0e79065B5F11b5BD1e62B935A600976ffF3754B9",
"amount": 0.1
}'

Response:

{
"serialized_tx_hex": "03b8ef9558b9a2d9f2d4c1f4f8bafce1a6df628d6c521474d6823b6e3223d9e8af",
"unsigned_tx_hash_hex": "1a6edb7358323bafca52b1755f3ad985754dc23887110b65429373ed83321500",
"payload": {
"type": "0x0",
"nonce": "0x5fe08",
"gasLimit": "0x30d40",
"to": "0x169856275ddca01b2fcdc63c4f1b0adf72a4cf10",
"value": "0x16345785d8a0000",
"data": "0x18f729500000000000000000000000000e7906...1d1c666802bd",
"gasPrice": "0x2887734d"
}
}

Withdraw action

Craft a withdraw transaction

  • Endpoint: /api/v1/ethereum/stakewise/action/withdraw

Description

Once the assets in queue are ready to be claimable you can claim them. This action will craft a withdraw transaction of the withdrawable assets.

FieldTypeRequiredDescription
addressstringEth address that will perform the staking action

Returned

FieldTypeRequiredDescription
serialized_tx_hexstringSerialized transaction hex string ready to be signed
unsigned_tx_hash_hexstringUnasigned tx hash hex string, ready to be signed by external integrations
payloadobjectPayload object

Example

curl -X POST "https://staking-api.stakely.io/api/v1/ethereum/stakewise/action/withdraw" \
-H "X-API-KEY: $STAKELY_API_KEY" \
-H "X-NETWORK: 1" \
-H "Content-Type: application/json" \
-d '{
"address": "0x0e79065B5F11b5BD1e62B935A600976ffF3754B9"
}'

Response:

{
"address": "0x0e79065B5F11b5BD1e62B935A600976ffF3754B9",
"amount": 0.1
}

Prepare action

Gathers signature and unsigned tx:

  • Endpoint: /api/v1/ethereum/stakewise/action/prepare

Description

Prepare a signed transaction by gathering the provided signatures with the unsigned transaction hex string:

Request body parameters

FieldTypeRequiredDescription
serialized_tx_hexstringUnsigned serialized transaction hex string ready to be signed
rstringr part of the ECDSA signature in hex
sstrings part of the ECDSA signature in hex
vnumberv part of the ECDSA signature

Returned

FieldTypeRequiredDescription
signed_tx_hexstringSigned transaction hex string ready to be broadcasted

Example

curl -X POST "https://staking-api.stakely.io/api/v1/ethereum/stakewise/action/prepare" \
-H "X-API-KEY: $STAKELY_API_KEY" \
-H "X-NETWORK: 1" \
-H "Content-Type: application/json" \
-d '{
"serialized_tx_hex": "03b8ef9558b9a2d9f2d4c1f4f8bafce1a6df628d6c521474d6823b6e3223d9e8af",
"r": "6da2b6fe309b629720bc3d1d3a8befb3f461e3b53ccee85c55d10b11d3a3d263",
"s": "085fe4bb8ff0c04e4e41a2ba44609f894b9a70f4330de726d1403ee21b65e685",
"v": 34035
}'

Response:

{
"signed_tx_hex": "0xf9014b1f8455bd900c83030d4094169856275d...ad908c2b5b15"
}

Broadcast action

Broadcast a signed transaction

  • Endpoint: /api/v1/ethereum/stakewise/action/broadcast

Description

Broadcast a signed transaction. Usually you will brodcast the signed transaction returned in prepare previous step:

Request body parameters

FieldTypeRequiredDescription
signed_tx_hexstringSigned transaction hex string ready to be broadcasted

Returned

FieldTypeRequiredDescription
tx_hashstringTransaction hash of the broadcasted transaction

Example

curl -X POST "https://staking-api.stakely.io/api/v1/ethereum/stakewise/action/broadcast" \
-H "X-API-KEY: $STAKELY_API_KEY" \
-H "X-NETWORK: 1" \
-H "Content-Type: application/json" \
-d '{
"signed_tx_hex": "0xf9014b1f8455bd900c83030d4094169856275d...ad908c2b5b15"
}'

Response:

{
"tx_hash": "0x23273dacef9d64fdb2c790e9f9f4c13574125078a272059dac2473bc8bfba163"
}

Action history

Get the StakeWise action history for the given address

  • Endpoint: /api/v1/ethereum/stakewise/historic/{address}

Description

Get the StakeWise action history for the given address. It returns all past actions of the different action kinds.

Request parameters

ParameterInTypeRequiredDescription
addresspathstringAddress to retrieve action history for

Returned

Array of StakewiseGetActionResponseDto items:

FieldTypeRequiredDescription
idstringEvent identifier
assetsstringTransaction amount assets in eth units
sharesstringTransaction amount shares in eth units
actionTypestringStakewise vault action type
linkstringTransaction explorer link
createdAtnumberTransaction date in unix timestamp format (ms)

Example

curl "https://staking-api.stakely.io/api/v1/ethereum/stakewise/historic/0xb794f5ea0ba39494ce839613fffba74279579268" \
-H "X-API-KEY: $STAKELY_API_KEY" \
-H "X-NETWORK: 1"

Response:

[
{
"id": "0xe08ff6b0c57162c32feebde105af11c7ad14f8aa068140271d393128eee5076e-53",
"assets": "0.01",
"shares": "0.009990742171519222",
"actionType": "03b8ef9558b9a2d9f2d4c1f4f8bafce1a6df628d6c521474d6823b6e3223d9e8af",
"link": "https://holesky.etherscan.io/tx/0xe08ff6...3128eee5076e",
"createdAt": 1713279456000
}
]

Unified staking balance

Get the staking balance for the given address in the unified cross-protocol shape:

  • Endpoint: /api/v1/ethereum/stakewise/staking-balance/{address}

Description

Staking balance for an address in the unified cross-protocol shape, in ETH. Vault shares are minted on deposit and rewards accrue through the share price, so activation and rewards are null; the exit queue is split into deactivating and withdrawable. Each exit queue ticket is listed as a staking object, and the withdraw endpoint claims all claimable tickets of the address at once, so their ids are informational.

Amounts are in ETH. The field names are the same on every protocol Stakely supports, so a single integration can read a position on any of them; a bucket that does not apply here is null.

Request parameters

ParameterInTypeRequiredDescription
addresspathstringAddress to query the vault position for

Returned

FieldTypeRequiredDescription
staked_amountnumberStake that is currently active and earning rewards, in native token units.
stake_activation_amountnumberStake that has been delegated but is still warming up, in native token units. null when the protocol activates stake immediately.
stake_deactivation_amountnumberStake that is unbonding and has not completed its deactivation period yet, in native token units. null when the protocol has no unbonding period.
stake_withdrawing_amountnumberStake that finished deactivating and is waiting for a withdrawal transaction, in native token units. null when the protocol releases the funds automatically.
stake_rewards_amountnumberRewards that can be claimed, in native token units. null when the protocol compounds rewards into staked_amount instead of accruing them separately.
staking_objectsStakingObjectDto[]Individually addressable units that make up the position, normalised across protocols. The amounts above are the aggregate; these are the handles needed to act on the position, because protocols such as Solana and Sui require an object id to craft an unstake or withdraw transaction. null means the protocol exposes no addressable objects at all and every action is amount-based; an empty array means it does expose them and the address currently holds none. An object is only listed when the protocol publishes a real identifier for it, so the listed objects do not necessarily add up to the totals above.

Each item in staking_objects is a StakingObjectDto:

FieldTypeRequiredDescription
idstringIdentifier of this object on its protocol, passed back to the action endpoints of that protocol (see below).
typeStakingObjectTypeWhether the object holds stake (delegation) or represents an exit already requested (withdrawal_request).
statusStakingObjectStatusLifecycle phase of the object. Objects sharing a status add up to the matching amount bucket of the response.
amountnumberPrincipal held by this object, in native token units. null when it could not be read.
rewards_amountnumberRewards accrued by this object on top of its principal, in native token units. null when the protocol reports rewards only at address level, compounds them into the principal, or when they could not be derived.
validator_addressstringValidator this object is delegated to, in the protocol native format (a vote account on Solana, a validator address on Sui). null when the protocol does not attribute the object to a single validator.
activation_epochnumberEpoch at which this object starts earning rewards. null on protocols that do not track activation per object.
withdrawable_epochnumberEpoch from which this object can be withdrawn. null on protocols whose withdrawal is time-based or that release funds automatically.
withdrawable_atstringISO-8601 instant from which this object can be withdrawn. null on protocols whose withdrawal is epoch-based or that release funds automatically.

On StakeWise the id is the exit queue position ticket. The withdraw action claims every claimable ticket of the address at once, so the ids are informational.

type values:

ValueDescription
delegationThe object holds stake.
withdrawal_requestThe object represents an exit that has already been requested.

status values:

ValueDescription
activatingWarming up, not earning rewards yet. Adds up to stake_activation_amount.
activeLive and earning rewards. Adds up to staked_amount.
deactivatingUnbonding, deactivation period not finished. Adds up to stake_deactivation_amount.
withdrawableDeactivated and waiting for a withdrawal transaction. Adds up to stake_withdrawing_amount.
unknownThe lifecycle phase could not be derived from the protocol data.

Example

curl "https://staking-api.stakely.io/api/v1/ethereum/stakewise/staking-balance/0xb794f5ea0ba39494ce839613fffba74279579268" \
-H "X-API-KEY: $STAKELY_API_KEY" \
-H "X-NETWORK: 1"

Response:

{
"staked_amount": 4.703704937280252,
"stake_activation_amount": null,
"stake_deactivation_amount": 0.4000625951448294,
"stake_withdrawing_amount": 2.0403431925398383,
"stake_rewards_amount": null,
"staking_objects": [
{
"id": "2000017702121399987",
"type": "withdrawal_request",
"status": "withdrawable",
"amount": 2.0403431925398383,
"rewards_amount": null,
"validator_address": null,
"activation_epoch": null,
"withdrawable_epoch": null,
"withdrawable_at": null
},
{
"id": "2397621601411000795",
"type": "withdrawal_request",
"status": "deactivating",
"amount": 0.4000625951448294,
"rewards_amount": null,
"validator_address": null,
"activation_epoch": null,
"withdrawable_epoch": null,
"withdrawable_at": "2026-08-01T06:20:00.000Z"
}
]
}

Vault info

Get stakewise vault info such as APY and balance for the current time

  • Endpoint: /api/v1/ethereum/stakewise/vault

Description

Get vault details, as current APY

Returned

FieldTypeRequiredDescription
vaultAddressstringVault address
apynumberCurrent APY of the vault

Example

curl "https://staking-api.stakely.io/api/v1/ethereum/stakewise/vault" \
-H "X-API-KEY: $STAKELY_API_KEY" \
-H "X-NETWORK: 1"

Response:

{
"vaultAddress": "0x1234567890123456789012345678901234567890",
"apy": 5.6
}

User Stats

Get user stats for the StakeWise vault over the last N days

  • Endpoint: /api/v1/ethereum/stakewise/stats/{address}

Description

Get historical user stats for the StakeWise vault over the last N days. Use the days query parameter to set the window.

Request parameters

ParameterInTypeRequiredDescription
addresspathstringAddress to query stats for
daysquerynumberNumber of days to retrieve stats for, if not provided 7 days will be used as default

Returned

Array of StakewiseGetUserStatsResponseDto items:

FieldTypeRequiredDescription
timenumberDate and time for each data point
balancenumberTotal assets by the user in current vault at the moment of time
apynumberCurrent APY based on time, rewards and balance
rewardsnumberNumber of assets earned by the user in current vault during the interval

Example

curl "https://staking-api.stakely.io/api/v1/ethereum/stakewise/stats/0xb794f5ea0ba39494ce839613fffba74279579268" \
-H "X-API-KEY: $STAKELY_API_KEY" \
-H "X-NETWORK: 1"

Response:

[
{
"time": 1713279456000,
"balance": 10.5,
"apy": 5.6,
"rewards": 0.01
}
]