How ADA Staking Works
ADA staking is made of four separate operations, each submitted as its own service request:
Your ADA stays in your wallet while it is staked: it isn’t locked, there is no lock-up period, and delegation applies to the wallet’s whole balance. A wallet has to be registered before it can delegate, and delegated before it earns rewards.
Wallets
All four operations require a DeFi wallet that holds ADA. Otherwise the request is rejected withER-259 for a wallet that isn’t a DeFi wallet, or ER-3016 for a wallet that doesn’t hold ADA.
To find the wallets you can use, filter Retrieve wallets by type. Each wallet in the response carries its walletType:
Staking Operations
Every ADA staking operation is submitted the same way as any other Digital Asset Service Desk product: create the instruction withPOST /v3/api/servicedesk/create and a {"serviceId": ..., "payload": ...} body, then submit, confirm and approve it following the same steps described in Signing the Payload and demonstrated end-to-end in Wallet Creation. What follows is what’s specific to each ADA operation; see Products & Services for the exact payload template of each one.
The checks on the wallet’s registration status run when you create the request and again when you submit it, so a request that was valid when created can still be rejected at submit if the wallet’s status changed in between.
Register (0x0020-020)
Registering opens a stake account for walletId. The payload is the wallet ID only.
- Registering again: a wallet that has unregistered can register again.
- Already registered: if the wallet is already registered, or a request is still pending for it, the request is rejected with
ER-617. - Deposit: registering requires a refundable stake-key deposit, which is returned when you unregister. In the wallet’s transactions, the deposit appears as a transfer to your own wallet.
Delegate (0x0020-021)
Delegating sends the wallet’s stake to the stake pool in stakePoolAddress.
- Pool:
stakePoolAddressis a stake pool ID, which starts withpool1, not a wallet address. Use a pool Zodia has set up for your account. A pool that isn’t one of yours is rejected withER-3015, and a pool that can’t be found on Cardano withER-3014. - Registered wallet: the wallet must be registered. A wallet that has never registered is rejected with
ER-621, and one that has unregistered, or has an unregister request pending, withER-618. - Changing pool: a delegated wallet can delegate again to move to another pool.
Reward Withdrawal (0x0020-022)
A Reward Withdrawal moves the rewards you have earned to your wallet. There is no amount: everything available is withdrawn, and the dashboard shows what that is.
- Minimum: the rewards must be at least 1 ADA, otherwise the request is rejected with
ER-625. - Checks: a request is checked in this order: registered (
ER-621), not unregistered (ER-618), delegated (ER-623), then the 1 ADA minimum (ER-625). - Signing:
POST /v3/api/servicedesk/pendingreturns an array of instructions for a Reward Withdrawal, even when it holds a single one, and you send the whole array back when you approve. See Multiple pending instructions for a single service request.
Unregister (0x0020-023)
Unregistering closes the stake account. The deposit paid when registering is returned to the wallet, and appears in the wallet’s transactions as a transfer to your own wallet.
- Rewards first: a wallet with rewards still to withdraw can’t unregister, and the request is rejected with
ER-624. Withdraw the rewards first with a Reward Withdrawal. - Small rewards: while rewards are below 1 ADA they can’t be withdrawn yet. Once they reach 1 ADA, withdraw them, then unregister.
- Registered wallet: a wallet that has never registered is rejected with
ER-621, and one that has already unregistered, or has an unregister request pending, withER-618.
Tracking Your Position
Get ADA Staking Dashboard returns the staking position of an ADA wallet: the staked amount and the rewards available to withdraw. It takes the wallet ID only:- Amounts:
amountis a string in ADA with 8 decimals and comma thousands separators.fiatValueis a string with 2 decimals and comma thousands separators, expressed infiatCurrency, the fiat currency configured for your account. - No staking activity: a wallet that has never registered, or has unregistered, returns
0amounts, not an error. - Up to date: the figures reflect the position at the time of the call. If the position can’t be retrieved at that moment, the call fails with a
500and you can retry.
Notifications
Each ADA operation results in an on-chain transaction. If you have webhooks configured, you receive Transfer notifications when it is posted on chain and when it is confirmed. To follow your position over time, use the dashboard.Errors
See Staking Error Codes for the errors specific to ADA staking.FAQs
How long does it take to start earning rewards?
Cardano applies a delegation at an epoch boundary, and rewards start to accrue a few epochs later, typically around 15 days after you delegate. Use the dashboard to follow your rewards.Why does my dashboard show a staked amount but no rewards?
stakedAmount shows the wallet’s balance as soon as it is registered, but rewards only accrue once the wallet has delegated and the first rewards have been earned. A Reward Withdrawal is rejected with ER-623 until the wallet has delegated, and with ER-625 while its rewards are below 1 ADA.