Overview
Key concepts
- Minimum stake: 2 SOL.
- Validator selection: provide either a validator
addressor aproviderName.- Provide one or the other, not both.
- Multiple stake requests: staking multiple times to the same validator address will create multiple
stakingPositionIdvalues. - Unstake timing: unstake requires about one epoch (~2–3 days) to complete.
- Collect timing and stake-account reserve: to maximize rewards and avoid unexpected stake-account closure:
- Prefer waiting 1 epoch after an unstake completes before collecting, or
- Leave a minimum reserve of 2,282,880 lamports (0.00228288 SOL) in the
stakingPositionIdto prevent the stake account from being destroyed.
Endpoint summary
- Stake:
POST /v2/transactions/stake - Unstake:
POST /v2/transactions/unstake - Collect (SOL-specific):
POST /v2/transactions/collect - Get staking positions:
GET /v2/wallets/{walletId}/staking/positions - Get staking rewards:
GET /v2/wallets/{walletId}/staking/rewards - List available validators:
GET /v2/delegation-addresses/{assetType}
Workflows
Stake (Solana)
EndpointPOST /v2/transactions/stake
Request rules
assetTypemust be"SOL".amountmust be at least"2".- Include
parameterswith either:address(validator public identifier), orproviderName(provider name)
Example: Stake using validator address
Example: Stake using provider name
Response
A successful request returns 201 Created with a transaction id.Unstake (Solana)
EndpointPOST /v2/transactions/unstake
Request rules
stakingPositionIdandamountare required.- After the unstake completes (about ~1 epoch), funds are inactive but not yet available for use.
- Use the Collect endpoint (below) to move inactive SOL back to the wallet.
Example: Unstake
Response
A successful request returns 201 Created with a transaction id.Collect (Solana-specific)
The collect action moves inactive SOL from a stake account back to the wallet’s available balance. EndpointPOST /v2/transactions/collect
Request rules
stakingPositionIdis required.amountis required.assetTypemust be"SOL".
Example: Collect
Possible failure reasons
- 400 Invalid request: unsupported
assetType, not enough available balance. - 404 Not found: staking position not found.
Get staking positions
This endpoint retrieves the staking positions (stake accounts) associated with a wallet. EndpointGET /v2/wallets/{walletId}/staking/positions
Expected behavior
- Accepts
SOLas a valid asset type to retrieve positions. - Returns SOL staking positions, including
stakingPositionIdvalues. - A new position appears only after the stake transaction is confirmed on-chain, typically a few minutes after
blockchainTxIdis available. Poll this endpoint with thetransactionIdfilter set to your stake transaction ID. See When the staking position ID becomes available.
Get staking rewards
This endpoint is used to query rewards generated by staking and assigned to a wallet. EndpointGET /v2/wallets/{walletId}/staking/rewards
Expected behavior
- Accepts
SOLas a valid asset type. - Includes
addressas an optional filtering argument.
List available validators (delegation addresses)
A new endpoint is introduced to retrieve the list of available validators for delegation. EndpointGET /v2/delegation-addresses/{assetType}
Request parameters
assetType: must beSOLfor Solana validators.limit: pagination size.afterId: pagination cursor.
Example request
GET /v2/delegation-addresses/SOL?limit=10&afterId=XXXXXX
Example response
Common pitfalls
- For
POST /v2/transactions/stake, provide eitherparameters.addressorparameters.providerName(not both). - Do not expect unstaked SOL to be immediately available. Plan for epoch timing, then call collect.
- If you want to keep the stake account alive (for rewards or operational reasons), leave the minimum reserve in the stake account when collecting.