Validator queues over time
See the queues over time in TraceFast →
Ethereum's validator queues as a summary: the current state plus one closing
point per UTC day for the most recent limit days, newest first — the series
behind a queue chart. What the queues are is explained in the
Ethereum proof-of-stake docs.
GET https://tracefast.xyz/api/v1/chains/1/consensus/queues
| Parameter | In | Type | Notes |
|---|---|---|---|
limit | query | integer, optional | the most recent daily points to return, 1..90, default 30 |
Access — an API key on the Intelligence plan or higher (plans), or no key at all: pay per call with x402 at the same path on https://mpp.tracefast.xyz/api/v1, at the price its 402 states. As a tool for AI agents: get_validator_queue_history on the MCP server. Stable — see stability.
chains/1 is a literal: the method serves Ethereum mainnet data. Other chain
ids answer 404 chain_not_supported, and an unknown query parameter is refused
rather than ignored.
What it covers, and what it does not
- Daily points only — one closing sample per UTC day, stated in
granularity. The epoch-grain series and anything older than 90 days are not published here. - Queues and status counts, apart. Each point carries
queues— the queues by the Electra rules, read from the chain's own pending lists — andstatus, the validator counts by status. Since Electra the status counts are not the queues; see validator queues now. - The queues are sampled from 2026-10-19. Earlier points carry
queues: null— not sampled, not empty — and only theirstatus. - Wait estimates in epochs only on a point:
waitEstimatesthere hasentryEpochs,exitEpochsandconsolidationEpochs; the estimates in days are stated oncurrentonly. They are estimates of the queue as a whole, not a promise to any one validator. - Two kinds of point.
observedpoints are sampled from the live chain, one per day at the day's last sampled epoch.reconstructedpoints predate sampling (observedFrom): a lower-bound estimate derived from validator activations and exits, with rates, active set and capitalnull. The reconstruction ends at the Electra fork (2025-05-07), whose queues it cannot derive, so inside today's 90-day window every point isobserved, and the span between the fork and the start of sampling is listed ingaps— not filled in. A request for 90 points can therefore return fewer. - Validator-set mechanics only — no yield, APR or staking-pool data. Capital is in gwei, as decimal strings (1 ETH = 10^9 gwei).
Response
200 application/json, here with ?limit=2:
{
"data": {
"chainId": 1,
"current": {
"asOfEpoch": 483380,
"asOfTime": "2026-10-19T20:33:26Z",
"queues": {
"deposits": {
"count": 16008,
"gwei": "1182642016359495",
"newValidators": { "count": 14861, "gwei": "941192166772238" },
"topUps": { "count": 1147, "gwei": "241449849587257" }
},
"exitQueue": { "count": 3750, "gwei": "193204595956291" },
"consolidations": { "count": 9017, "gwei": "694330896378892" },
"partialWithdrawals": { "count": 230, "gwei": "11277248613950" },
"exitedAwaitingWithdrawal": { "count": 1045, "gwei": "60988663443785" },
"activeSet": { "count": 828537, "gwei": "43826023452914003" },
"churn": {
"activationExitGweiPerEpoch": "256000000000",
"consolidationGweiPerEpoch": "412000000000"
},
"waitEstimates": {
"entryEpochs": 4620,
"exitEpochs": 755,
"consolidationEpochs": 1686,
"entryDays": 20.533333333333335,
"exitDays": 3.3555555555555556,
"consolidationDays": 7.493333333333333
}
},
"status": {
"activeOngoing": 816835,
"pendingActivation": 127,
"pendingExit": 13812,
"netQueue": -13685,
"activationRate": 0.00015547815654324312,
"exitRate": 0.01690916770216751,
"pendingActivationGwei": "1858000000000",
"pendingExitGwei": "948524155778968"
}
},
"granularity": "day",
"observedFrom": "2026-08-11T20:21:01Z",
"gaps": [
{
"from": "2026-07-21T20:38:02Z",
"to": "2026-08-11T20:21:01Z",
"note": "No series covers this span: the reconstruction ends at the Electra fork (2025-05-07), whose queues it cannot derive, and sampling had not begun."
}
],
"points": [
{
"time": "2026-10-19T20:33:26Z",
"source": "observed",
"epoch": 483380,
"queues": {
"deposits": {
"count": 16008,
"gwei": "1182642016359495",
"newValidators": { "count": 14861, "gwei": "941192166772238" },
"topUps": { "count": 1147, "gwei": "241449849587257" }
},
"exitQueue": { "count": 3750, "gwei": "193204595956291" },
"consolidations": { "count": 9017, "gwei": "694330896378892" },
"partialWithdrawals": { "count": 230, "gwei": "11277248613950" },
"exitedAwaitingWithdrawal": { "count": 1045, "gwei": "60988663443785" },
"activeSet": { "count": 828537, "gwei": "43826023452914003" },
"churn": {
"activationExitGweiPerEpoch": "256000000000",
"consolidationGweiPerEpoch": "412000000000"
},
"waitEstimates": {
"entryEpochs": 4620,
"exitEpochs": 755,
"consolidationEpochs": 1686
}
},
"status": {
"activeOngoing": 816835,
"pendingActivation": 127,
"pendingExit": 13812,
"netQueue": -13685,
"activationRate": 0.00015547815654324312,
"exitRate": 0.01690916770216751,
"pendingActivationGwei": "1858000000000",
"pendingExitGwei": "948524155778968"
},
"totalActiveBalanceGwei": "43043853651991843"
},
{
"time": "2026-10-18T23:57:30Z",
"source": "observed",
"epoch": 483187,
"queues": null,
"status": {
"activeOngoing": 816490,
"pendingActivation": 129,
"pendingExit": 15329,
"netQueue": -15200,
"activationRate": 0.00015799336182929368,
"exitRate": 0.01877426545334297,
"pendingActivationGwei": "1865000000000",
"pendingExitGwei": "999644738865610"
},
"totalActiveBalanceGwei": "42993264398803580"
}
]
},
"meta": {
"chain": "ethereum",
"timestamp": 1792442282213,
"cached": true,
"docs": "https://docs.tracefast.xyz/api/consensus-queues"
}
}The newest point is today's, still open: it is the latest sample, and the day
closes on the last epoch sampled before 00:00 UTC. The day before carries
queues: null — it predates sampling of the queues.
data
| Field | Meaning |
|---|---|
chainId | 1 |
current | the state as of the newest sampled epoch: asOfEpoch, asOfTime, queues and status — the same facts as validator queues now, cut to what a chart needs beside its newest point |
granularity | always day |
observedFrom | when sampling began, RFC 3339 UTC. Points before it are reconstructed. null while nothing has been sampled |
gaps[] | the span of the 90-day window between the end of the reconstruction and the start of sampling, when the window reaches into it: from, to (RFC 3339 UTC) and a note saying why nothing covers it. Only that span — a pause in sampling itself is not listed |
points[] | at most limit points, newest first |
A point
| Field | Meaning |
|---|---|
source | observed or reconstructed |
epoch | the sampled epoch (observed) or the estimate's boundary epoch (reconstructed) |
time | the time of the sample, RFC 3339 UTC |
queues | the queues at that epoch, field for field as on validator queues now, with waitEstimates in epochs only. null before the queues were sampled |
status | the counts by status, as on validator queues now — the counts and rates only. On reconstructed, activeOngoing and the rates are null |
totalActiveBalanceGwei | total effective balance of the active set, gwei. null on reconstructed |
Errors
| Status | code | When | details |
|---|---|---|---|
| 400 | bad_request | limit outside 1..90 | reason: limit_out_of_range, maxLimit: 90 |
| 503 | service_unavailable | no queue state has been sampled yet; retry later | — |
Malformed input, unknown parameters and the key check's 401/403/429 are the same for every method — see conventions and API keys.
Related pages
- Validator queues now — the current state with averages, flow and capital weights
- Block-proposal leaderboard — who proposes blocks
- Withdrawals of a validator — one validator's payouts
- Validators — the queues over time, read in the app
Last updated 22 Oct 2026, 08:06 UTC · verified against TraceFast v1.0.261 · Markdown