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 identifier1672⚪
X-IDENTITYCaller-defined identity stored in the audit loguser-1234⚪

X-NETWORK header​

Use the X-NETWORK header to select the Pharos network. For Pharos mainnet, the chain ID is typically 1672 (confirm with the networks endpoint below).

info

If you omit the header the API falls back to the default Pharos network configured for your account.

tip

Need another Pharos environment exposed? Let us know at [email protected].

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 obtain the list of Pharos staking networks that are currently enabled for your API key.

  • Endpoint: /api/v1/pharos/native/networks

Response payload: array of NetworkResponseDto items:

FieldTypeRequiredDescription
namestring✅Internal blockchain entry name
typestring✅Blockchain type string (typically ETHEREUM)
chain_idstring✅Chain identifier to use as X-NETWORK
is_defaultboolean✅true when this network is used as fallback

Example​

curl "https://staking-api.stakely.io/api/v1/pharos/native/networks" \
-H "X-API-KEY: $STAKELY_API_KEY" \
-H "X-NETWORK: 1672"

Response:

[
{
"name": "pharos",
"type": "ETHEREUM",
"chain_id": "1672",
"is_default": true
}
]

Staking information​

Get the staking parameters of this protocol:

  • Endpoint: /api/v1/pharos/native/staking-info

Description​

Staking parameters for Pharos native staking: 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_timenumber✅Maximum time, in minutes, for a new stake to become active and start accruing rewards. 0 means it is effective immediately.
stake_deactivation_max_timenumber✅Maximum time, in minutes, for an unstake request to complete the unbonding/exit period. 0 means the stake is released immediately.
withdrawal_max_timenumber✅Maximum 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_feenumber✅Aggregate fee charged on staking rewards, as a percentage of the rewards generated (validator commission plus any protocol fee).
withdrawal_feenumber✅Fee charged when withdrawing the stake, as a percentage of the withdrawn amount. Network transaction (gas) costs are not included.
staking_aprnumber✅Current annual percentage rate (rewards without compounding), as a percentage.
staking_apynumber✅Current annual percentage yield (rewards with compounding), as a percentage.
max_slashing_percentagenumber✅Maximum percentage of the staked amount that the protocol can slash. 0 means the protocol implements no slashing.
min_stake_amountstring✅Minimum amount that can be staked, as a decimal string in the native token of the chain.
max_stake_amountstring✅Maximum amount that can be staked, as a decimal string in the native token of the chain. null means the protocol enforces no upper limit.
usersnumber✅Number 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_usdnumber✅Total 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_tokennumber✅Total 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/pharos/native/staking-info" \
-H "X-API-KEY: $STAKELY_API_KEY" \
-H "X-NETWORK: 1672"

Response:

{
"stake_activation_max_time": 240,
"stake_deactivation_max_time": 20160,
"withdrawal_max_time": 0,
"staking_reward_fee": 10,
"withdrawal_fee": 0,
"staking_apr": 0,
"staking_apy": 0,
"max_slashing_percentage": 0,
"min_stake_amount": "1",
"max_stake_amount": "50000000",
"users": 8,
"tvl_usd": 1776095.24,
"tvl_token": 4000214.5
}

Delegate action​

Craft a delegate transaction:

  • Endpoint: /api/v1/pharos/native/action/delegate

Description​

This endpoint crafts a delegate transaction ready to be signed. The transaction delegates the specified amount (native token, 18 decimals) from address to the validator pool.

Request body parameters​

FieldTypeRequiredDescription
addressstring✅Address that will perform the delegation
amountnumber✅Amount to delegate in native token (18 decimals)

Returned​

FieldTypeRequiredDescription
serialized_tx_hexstring✅Serialized transaction hex string ready to be signed
unsigned_tx_hash_hexstring✅Unsigned tx hash hex string used for offline signing integrations
payloadobject✅Transaction payload object

Example​

curl -X POST "https://staking-api.stakely.io/api/v1/pharos/native/action/delegate" \
-H "X-API-KEY: $STAKELY_API_KEY" \
-H "X-NETWORK: 1672" \
-H "Content-Type: application/json" \
-d '{
"address": "0xb794f5ea0ba39494ce839613fffba74279579268",
"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": "0x18f72950...",
"gasPrice": "0x2887734d"
}
}

Undelegate action​

Craft an undelegate transaction:

  • Endpoint: /api/v1/pharos/native/action/undelegate

Description​

This endpoint crafts an undelegate transaction ready to be signed. It exits the delegator’s effective stake for the given address. Principal becomes withdrawable only after the protocol 84-epoch withdraw window.

Request body parameters​

FieldTypeRequiredDescription
addressstring✅Address that will perform the undelegation

Returned​

FieldTypeRequiredDescription
serialized_tx_hexstring✅Serialized transaction hex string ready to be signed
unsigned_tx_hash_hexstring✅Unsigned tx hash hex string used for offline signing integrations
payloadobject✅Transaction payload object

Example​

curl -X POST "https://staking-api.stakely.io/api/v1/pharos/native/action/undelegate" \
-H "X-API-KEY: $STAKELY_API_KEY" \
-H "X-NETWORK: 1672" \
-H "Content-Type: application/json" \
-d '{
"address": "0xb794f5ea0ba39494ce839613fffba74279579268"
}'

Response:

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

Withdraw action​

Craft a withdraw (claimStake) transaction:

  • Endpoint: /api/v1/pharos/native/action/withdraw

Description​

Once principal has passed the unlock period, this action crafts a transaction to withdraw completed unstake back to the wallet. If nothing is withdrawable or funds are still locked, the API returns a validation error.

Request body parameters​

FieldTypeRequiredDescription
addressstring✅Address that will withdraw completed unstake

Returned​

FieldTypeRequiredDescription
serialized_tx_hexstring✅Serialized transaction hex string ready to be signed
unsigned_tx_hash_hexstring✅Unsigned tx hash hex string used for offline signing integrations
payloadobject✅Transaction payload object

Example​

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

Response:

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

Claim rewards action​

Craft a claim rewards transaction:

  • Endpoint: /api/v1/pharos/native/action/claim-rewards

Description​

This endpoint crafts a claim rewards transaction ready to be signed. It transfers accumulated staking rewards for the delegator address.

Request body parameters​

FieldTypeRequiredDescription
addressstring✅Address that will claim rewards

Returned​

FieldTypeRequiredDescription
serialized_tx_hexstring✅Serialized transaction hex string ready to be signed
unsigned_tx_hash_hexstring✅Unsigned tx hash hex string used for offline signing integrations
payloadobject✅Transaction payload object

Example​

curl -X POST "https://staking-api.stakely.io/api/v1/pharos/native/action/claim-rewards" \
-H "X-API-KEY: $STAKELY_API_KEY" \
-H "X-NETWORK: 1672" \
-H "Content-Type: application/json" \
-d '{
"address": "0xb794f5ea0ba39494ce839613fffba74279579268"
}'

Response:

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

Compound rewards action​

Craft a compound rewards transaction:

  • Endpoint: /api/v1/pharos/native/action/compound-rewards

Description​

This endpoint crafts a compound rewards transaction ready to be signed. It reinvests claimable rewards into the active stake for the delegator address.

Request body parameters​

FieldTypeRequiredDescription
addressstring✅Address that will compound rewards

Returned​

FieldTypeRequiredDescription
serialized_tx_hexstring✅Serialized transaction hex string ready to be signed
unsigned_tx_hash_hexstring✅Unsigned tx hash hex string used for offline signing integrations
payloadobject✅Transaction payload object

Example​

curl -X POST "https://staking-api.stakely.io/api/v1/pharos/native/action/compound-rewards" \
-H "X-API-KEY: $STAKELY_API_KEY" \
-H "X-NETWORK: 1672" \
-H "Content-Type: application/json" \
-d '{
"address": "0xb794f5ea0ba39494ce839613fffba74279579268"
}'

Response:

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

Prepare action​

After signing unsigned_tx_hash_hex, call the Pharos prepare endpoint:

  • Endpoint: /api/v1/pharos/native/action/prepare

Description​

Prepare a signed transaction by combining the provided signatures (r, s, v) with the unsigned transaction hex from the crafting response.

Request body parameters​

FieldTypeRequiredDescription
serialized_tx_hexstring✅Unsigned serialized transaction hex string ready to be signed
rstring✅r part of the ECDSA signature in hex
sstring✅s part of the ECDSA signature in hex
vnumber✅v part of the ECDSA signature

Returned​

FieldTypeRequiredDescription
signed_tx_hexstring✅Signed transaction hex string ready to be broadcasted

Example​

curl -X POST "https://staking-api.stakely.io/api/v1/pharos/native/action/prepare" \
-H "X-API-KEY: $STAKELY_API_KEY" \
-H "X-NETWORK: 1672" \
-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 the signed transaction:

  • Endpoint: /api/v1/pharos/native/action/broadcast

Description​

Broadcast a signed transaction. Typically you broadcast the hex returned from the prepare step.

Request body parameters​

FieldTypeRequiredDescription
signed_tx_hexstring✅Signed transaction hex string ready to be broadcasted

Returned​

FieldTypeRequiredDescription
tx_hashstring✅Transaction hash of the broadcasted transaction

Example​

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

Response:

{
"tx_hash": "0x23273dacef9d64fdb2c790e9f9f4c13574125078a272059dac2473bc8bfba163"
}

Unified staking balance​

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

  • Endpoint: /api/v1/pharos/native/staking-balance/{address}

Description​

Staking balance for an address in the unified cross-protocol shape, in PHRS. Every bucket lives on a single delegator struct and both undelegate and withdraw take only the address, so there are no staking objects.

Amounts are in PHRS. 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
addresspathstring✅Delegator EVM address to query

Returned​

FieldTypeRequiredDescription
staked_amountnumber✅Stake that is currently active and earning rewards, in native token units.
stake_activation_amountnumber✅Stake that has been delegated but is still warming up, in native token units. null when the protocol activates stake immediately.
stake_deactivation_amountnumber✅Stake 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_amountnumber✅Stake that finished deactivating and is waiting for a withdrawal transaction, in native token units. null when the protocol releases the funds automatically.
stake_rewards_amountnumber✅Rewards 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
idstring✅Identifier of this object on its protocol, passed back to the action endpoints of that protocol (see below).
typeStakingObjectType✅Whether the object holds stake (delegation) or represents an exit already requested (withdrawal_request).
statusStakingObjectStatus✅Lifecycle phase of the object. Objects sharing a status add up to the matching amount bucket of the response.
amountnumber✅Principal held by this object, in native token units. null when it could not be read.
rewards_amountnumber✅Rewards 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_addressstring✅Validator 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_epochnumber✅Epoch at which this object starts earning rewards. null on protocols that do not track activation per object.
withdrawable_epochnumber✅Epoch from which this object can be withdrawn. null on protocols whose withdrawal is time-based or that release funds automatically.
withdrawable_atstring✅ISO-8601 instant from which this object can be withdrawn. null on protocols whose withdrawal is epoch-based or that release funds automatically.

Pharos exposes no addressable objects: every bucket lives on a single delegator struct and both undelegate and withdraw take only the address, so staking_objects is always null. The fields above are documented because they are part of the shared response.

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/pharos/native/staking-balance/0xb794f5ea0ba39494ce839613fffba74279579268" \
-H "X-API-KEY: $STAKELY_API_KEY" \
-H "X-NETWORK: 1672"

Response:

{
"staked_amount": 1,
"stake_activation_amount": 0,
"stake_deactivation_amount": 0,
"stake_withdrawing_amount": 0,
"stake_rewards_amount": 0,
"staking_objects": null
}