Appearance
Queries
All read-only, all free. These are what the dashboard is built on.
config
json
{ "config": {} }Admin, denoms, unbonding period, batch window, validator set and weights, fee, minimums, max_validators, paused flag, rewards vault, deposit cap.
state
json
{ "state": {} }Pool accounting:
| Field | Meaning |
|---|---|
total_pooled_atom | ATOM backing the vATOM supply |
total_receipt_supply | vATOM outstanding |
pending_claim_atom | Owed to redeemers, unsettled — open and in-flight batches |
claimable_reserve_atom | Finalized, awaiting claim |
vesting_rewards | Reward lump currently vesting into the rate |
vesting_started_at | When that window began |
last_observed_unbonding_seconds | The unbonding period the chain most recently demonstrated. Zero until the first batch is processed |
current_unbond_batch_id | The batch accepting requests now |
exchange_rate
json
{ "exchange_rate": {} }Returns atom_per_vatom — vesting-adjusted, the same basis mint and redeem use.
withdrawal
json
{ "withdrawal": { "request_id": 7 } }One withdrawal, enriched with everything needed to display it honestly:
| Field | Meaning |
|---|---|
withdrawal | The raw record: owner, receiver, recorded ATOM, batch, timestamps, claimed |
claimable_at | null until the batch is processed. Then the chain's own completion time |
forecast_maturity | The maturity is a local estimate — treat timings as provisional |
slashing_effect | null until finalized. Below 1 means the batch was slashed |
payout_atom | What claim would pay right now. null until finalized, because the haircut is unknowable before that. Once claimed, the amount actually paid, recorded at claim time |
ready_to_claim | Whether this withdrawal has reached the point in its lifecycle where it can be paid: processed, matured, finalized, unclaimed, and not paused. Not "the caller may claim" — claim also requires the sender to be the owner or receiver, and a query has no sender, so check that yourself if you did not fetch by claimant |
Do not display atom_amount as a promise
The raw atom_amount is the recorded obligation, not a guarantee. Rendering it as "you will receive X" is mis-selling — use payout_atom once finalized, and say the amount is unknown before that. Everything in this response exists to make that distinction expressible.
withdrawals
json
{ "withdrawals": { "claimant": "cosmos1…", "start_after": null, "limit": 30 } }A claimant's withdrawals, newest ids last. claimant matches either the owner or the receiver, since either can claim. Default page 30, maximum 100.
batch
json
{ "batch": { "batch_id": 3 } }| Field | Meaning |
|---|---|
status | Open (accepting requests) or Unbonding |
total_atom | Recorded obligation — the fixed denominator for the haircut |
backing | Live slash-adjusted backing, what actually gets undelegated |
request_count | Requests in the batch |
first_arrival_at | Earliest completion time among its entries |
claimable_at | Latest completion time — when all its ATOM has arrived |
forecast_maturity | Maturity is estimated rather than chain-reported |
slashing_effect | Fraction actually received, once finalized |
unclaimed_atom | Realized ATOM not yet claimed |
claimed_count | Claims settled so far |
arrival_observed_height | Height at which the batch was first seen matured. null until then. Settlement is only permitted at a strictly greater height, so the balance read happens after the chain has delivered |
total_atom and backing are equal absent any slash.
batches
json
{ "batches": { "start_after": null, "limit": 30 } }pending_finalization
json
{ "pending_finalization": {} }Batches processed but not yet finalized — the keeper work queue, and where a forecast-maturity batch surfaces. This drives the dashboard's unbonding pipeline table.