Most proof-of-stake chains make you lock coins, hand them to a validator, and accept that a misbehaving operator can get part of your stake slashed. Cardano works differently, and if you think in terms of state and permissions it is a neat design: delegating ADA does not move your coins at all. It just attaches a certificate to your stake key that says "count my balance toward this pool."
This post walks through that model the way a developer would look at it, then shows a short Python script that checks a stake pool's numbers through the public Koios API before you delegate. For the full beginner walkthrough, including exchange options and US and Canada tax notes, see NutshellCrypto's ADA staking guide on how rewards and risks work.
The mental model: permissions, not custody
A Cardano address has two parts that matter here: a payment part (who can spend the coins) and a stake part (who gets credit for that stake). Delegation only touches the stake part. You sign one transaction that registers your stake key and submits a delegation certificate pointing it at a pool.
That has some useful consequences:
- No lock-up. Your ADA stays spendable the whole time. Spending some just lowers the stake counted in the next snapshot.
- No minimum. Any balance counts, and the wallet delegates the whole balance tied to that stake key.
- No slashing. A bad pool can cost you rewards, but the protocol never takes delegated ADA.
- A refundable deposit. Registering a stake key for the first time costs a 2 ADA deposit, which you get back when you deregister it.
The operator never gets your keys. If anyone, whether a "pool support" account or a wallet pop-up, asks for your recovery phrase to stake, it's a scam.
Why the first reward takes 15 to 20 days
Cardano runs in 5-day epochs, and pools are chosen to make blocks based on a stake snapshot. So a new delegation moves through a pipeline: you delegate in epoch N, the snapshot picks it up at the next boundary, the stake is active in N+2, rewards are calculated in N+3, and they're paid in N+4. After that first wait, rewards land every epoch as long as the pool makes blocks, and they compound automatically because the reward account counts toward your stake.
One recent change catches people out. Since the Plomin hard fork, you can only withdraw rewards once your stake key also has a vote delegation (a DRep, Abstain, or No Confidence). Rewards keep piling up without it; you just can't move them.
Checking a pool with Python before you delegate
Pool choice is the one decision you actually control, and the inputs are all on-chain. The things worth checking are the margin (the operator's percentage), the fixed cost per epoch, saturation (beyond it, rewards per ADA drop for everyone in the pool), and whether the owners are actually meeting their declared pledge. If live pledge falls below declared pledge, the pool's rewards for that epoch are zero.
Koios is a free community API for Cardano chain data. This script pulls the current protocol parameters and flags common red flags for one or more pool IDs:
import sys
import requests
KOIOS = "https://api.koios.rest/api/v1"
LOVELACE = 1_000_000 # 1 ADA = 1,000,000 lovelace
def protocol_params():
p = requests.get(f"{KOIOS}/cli_protocol_params", timeout=20).json()
return {
"stake_key_deposit_ada": p["stakeAddressDeposit"] / LOVELACE,
"k": p["stakePoolTargetNum"],
"min_fixed_cost_ada": p["minPoolCost"] / LOVELACE,
}
def check_pool(pool_id):
r = requests.post(f"{KOIOS}/pool_info",
json={"_pool_bech32_ids": [pool_id]}, timeout=20)
pool = r.json()[0]
flags = []
if pool["pool_status"] != "registered" or pool["retiring_epoch"]:
flags.append("pool is retiring or not registered")
if int(pool["live_pledge"]) < int(pool["pledge"]):
flags.append("live pledge below declared pledge (rewards can be zero)")
if (pool["live_saturation"] or 0) > 90:
flags.append(f"near saturation ({pool['live_saturation']}%)")
if pool["margin"] > 0.05:
flags.append(f"margin is {pool['margin']:.1%}")
return {
"margin": pool["margin"],
"fixed_cost_ada": int(pool["fixed_cost"]) / LOVELACE,
"live_stake_ada": int(pool["live_stake"]) / LOVELACE,
"saturation_pct": pool["live_saturation"],
"lifetime_blocks": pool["block_count"],
"flags": flags or ["no obvious red flags"],
}
if __name__ == "__main__":
print(protocol_params())
for pid in sys.argv[1:]:
print(pid[:16], check_pool(pid))
Run it with one or more pool1... IDs copied from a pool explorer or your wallet. When I ran it on October 15, 2026, Koios reported a 2 ADA stake key deposit, a target of 500 pools (the k parameter), and a 170 ADA minimum fixed cost per epoch. The 5% margin and 90% saturation cutoffs are my own arbitrary picks for the example, so adjust them to taste.
A couple of caveats. One epoch of low blocks doesn't mean a pool is bad, since small pools get picked less often and their rewards vary more, so look at performance over many epochs. And treat the script as a filter, not a ranking: a pool with low fees that is often offline will still pay you less.
Exchange staking vs delegating yourself
Exchanges like Coinbase offer ADA staking in some regions. It's simpler, but it's custodial: the exchange holds the coins, chooses the pool, and takes a cut. With native delegation, the worst a pool can do is earn you nothing. With an exchange, you're also exposed to frozen withdrawals or the exchange failing. Either way, there's no fixed APY: rewards depend on pool performance, fees, and total stake.
Takeaways
- Delegation on Cardano is a certificate on your stake key, not a transfer, so there's no lock-up and no slashing.
- Expect the first reward about 15 to 20 days in, then every 5-day epoch.
- Set a vote delegation, or you won't be able to withdraw rewards.
- Check margin, fixed cost, saturation, and pledge before choosing a pool; the Koios API makes that scriptable.
- In the US and Canada, staking rewards are generally treated as income when you receive them, so log each payout.
Comparing chains? NutshellCrypto's guide to how staking works in crypto covers the basics behind all of this.
Read the full guide on NutshellCrypto
This is for education only and is not financial, investment, or tax advice.
This post was written with AI assistance.
Top comments (0)