Skip to content
TraceFast Docs

Withdrawals of a validator

See validator withdrawals in TraceFast →

The withdrawals paid out for one validator: for each, the block it was included in, its global withdrawal index, the execution-layer address paid and the amount. Since the Shanghai/Capella upgrade the chain sweeps validator balances automatically — partial withdrawals of rewards above the balance cap, full withdrawals after an exit; see the Ethereum staking withdrawals docs.

GET https://tracefast.xyz/api/v1/chains/1/consensus/validators/{index}/withdrawals
ParameterInTypeNotes
indexpathintegerthe validator's index in the consensus registry, a non-negative integer
fromBlockqueryinteger, optionalinclusive lower bound. Default: toBlock - 215999
toBlockqueryinteger, optionalinclusive upper bound. Default: the newest covered block
limitqueryinteger, optional1..100, default 25
cursorquerystring, optionalnextCursor of the previous page

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_withdrawals 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

  • One window per request, at most 216 000 blocks — about 30 days. Without fromBlock / toBlock the newest window is answered; the window used is echoed in window. A wider window is refused with the bound, never narrowed.
  • Older history: ask again with toBlock set to window.fromBlock - 1. The cursor pages inside one window only.
  • The newest withdrawals arrive here later. This method reads a history that trails the chain head, so a fresh withdrawal shows on withdrawals of one block minutes before it shows here. A toBlock past that history is refused with 422 and the highest block you can ask about — see data freshness.
  • Amounts are in gwei, as decimal strings (1 ETH = 10^9 gwei), not wei.
  • An empty list is also what an unknown index answers — a validator the chain does not know yet was paid nothing, like a known one with no payout in the window. The method does not tell the two apart.
  • The address paid is a payout destination, not proof of who runs the validator.

Response

200 application/json, here with ?limit=2 for validator 2236426:

{
  "data": {
    "chainId": 1,
    "validatorIndex": 2236426,
    "window": {
      "fromBlock": 25709129,
      "toBlock": 25925128
    },
    "withdrawals": [
      {
        "blockNumber": 25821577,
        "withdrawalIndex": 140585851,
        "address": "0x4aafdb911085dd7703e57951279744dd713f744d",
        "amountGwei": "3610291101",
        "timestamp": 1787532887
      },
      {
        "blockNumber": 25815167,
        "withdrawalIndex": 140483291,
        "address": "0x4aafdb911085dd7703e57951279744dd713f744d",
        "amountGwei": "1931",
        "timestamp": 1787455715
      }
    ],
    "nextCursor": "AVsyNTgxNTE2NywxNDA0ODMyOTEsMjU3MDkxMjksMjU5MjUxMjhdTp3ug5ew4LBT1XTfk2FP8w"
  },
  "meta": {
    "chain": "ethereum",
    "timestamp": 1789063605891,
    "cached": false,
    "asOfBlock": 25925128,
    "docs": "https://docs.tracefast.xyz/api/validator-withdrawals"
  }
}

The default window ends at the newest covered block, which meta.asOfBlock also states. It can trail the chain head while part of the history is temporarily unavailable — see coverage gaps.

data

FieldMeaning
chainId1
validatorIndexthe validator asked about
window.fromBlock, window.toBlockthe inclusive block window this page was answered over
withdrawals[]newest first. Empty when nothing was paid in the window
nextCursorthe cursor of the next page inside the window. Absent on the window's last page

A withdrawal

FieldMeaning
blockNumberthe block the withdrawal was included in
withdrawalIndexthe withdrawal's global index, unique across the chain
addressthe address paid, lowercase
amountGweithe amount paid, gwei
timestampUnix time of the block, seconds. Absent while it cannot be resolved yet — the newest blocks take a few seconds — never a placeholder date

Pagination

Inside one window the method pages by keyset: pass nextCursor back as cursor, with the same fromBlock / toBlock, until it is absent. A cursor is valid only for this method and this window. To go further back than the window, start a new request with toBlock = window.fromBlock - 1. See pagination.

Errors

StatuscodeWhendetails
400bad_requestthe index is not a non-negative integerreason: validator_index_invalid, index
400bad_requestthe window is wider than 216 000 blocksreason: block_window_too_wide, span, maxSpan: 216000, fromBlock, toBlock
400bad_requestfromBlock above toBlockreason: block_window_inverted
400bad_requestlimit outside 1..100reason: limit_out_of_range, maxLimit: 100
400invalid_cursorthe cursor is not valid for this request — restart from the first page—
422block_not_availabletoBlock is above the newest covered blockreason: block_not_available, maxAvailableBlock
503service_unavailablethe newest covered block cannot be determined right now and no toBlock was given; retry, or pass toBlock—

Malformed input, unknown parameters and the key check's 401/403/429 are the same for every method — see conventions and API keys.


Last updated 22 Oct 2026, 08:06 UTC · verified against TraceFast v1.0.261 · Markdown