Skip to content
TraceFast Docs

Validator withdrawals of one block

Open this block in TraceFast →

The validator withdrawals paid out in one block: for each, the withdrawal index, the validator it was paid for, the recipient address and the amount, in withdrawal-index order. A block holds at most 16. Withdrawals move staked ETH and rewards from the consensus layer to an execution-layer address — see proof-of-stake on ethereum.org.

GET https://tracefast.xyz/api/v1/chains/1/blocks/{number}/withdrawals
ParameterInTypeNotes
numberpathintegerblock height, 0 or more
validatorIndexqueryinteger, optionalonly the withdrawals of this validator
addressquerystring, optionalonly the withdrawals paid to this address, 0x-prefixed, 40 hex characters
limitqueryinteger, optional1..100, default 25
cursorquerystring, optionalnextCursor of the previous page, unchanged

Access — an API key on the Enriched Data 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_block_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. There are no other parameters — an unknown one is refused rather than ignored.

What it covers, and what it does not

  • Execution-layer payouts only. A withdrawal here is the credit an address received in this block. The validator's own history across blocks is withdrawals of a validator.
  • A block before withdrawals existed answers an empty list with withdrawalCount: 0 — a real zero: blocks before the Shanghai upgrade hold none.
  • Served to the chain head. A block with no withdrawals answers an empty list — a statement about that block, not a gap. A block above the head does not exist yet and answers 404 not_found; see data freshness.
  • withdrawalCount counts what matches the request — the block's whole count without filters, the matching rows with validatorIndex or address.

Response

200 application/json, here for block 25925120 with ?limit=2:

{
  "data": {
    "blockNumber": 25925120,
    "withdrawalCount": 16,
    "withdrawals": [
      {
        "index": 142242539,
        "validatorIndex": 1039847,
        "address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
        "amountGwei": "65514597"
      },
      {
        "index": 142242540,
        "validatorIndex": 1039848,
        "address": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
        "amountGwei": "14373529"
      }
    ],
    "nextCursor": "AVsyNTkyNTEyMCwxNDIyNDI1NDBdT15gMPCahJjXY7pXXo_P9g"
  },
  "meta": {
    "chain": "ethereum",
    "timestamp": 1789067462121,
    "cached": false,
    "asOfBlock": 25925120,
    "docs": "https://docs.tracefast.xyz/api/block-withdrawals"
  }
}

data

FieldMeaning
blockNumberthe block these withdrawals belong to
withdrawalCounthow many withdrawals of the block match the request — the block's whole count when no filter is given
withdrawals[]this page, in withdrawal-index order
nextCursorcursor for the next page. Absent on the last page

A withdrawal

FieldMeaning
indexthe withdrawal's index — a counter that runs across the whole chain, so it is unique and grows from block to block
validatorIndexthe validator the withdrawal was paid for, by its index in the consensus-layer registry
addressthe recipient, lowercase
amountGweithe amount in gwei (1 gwei = 10^9 wei), as a decimal string

The sum of amountGwei over the whole block equals the block's totalWithdrawalGwei on one block.

Pagination

Keyset pagination: pass nextCursor back as cursor, with the same number and filters, until the response carries no nextCursor. A cursor is valid only for this method, this block and these filters; anything else answers 400 invalid_cursor — restart from the first page. See pagination.

Errors

StatuscodeWhendetails
400bad_requestnumber is not a non-negative integerreason: block_number_invalid
400bad_requestvalidatorIndex is not a non-negative integerreason: validator_index_invalid, validatorIndex
400bad_requestaddress is not 0x + 40 hex charactersreason: address_invalid
400bad_requestlimit outside 1..100reason: limit_out_of_range, limit, maxLimit
400invalid_cursorthe cursor was not issued for this request—
404not_foundthe block is above the chain head — it does not exist yet—
422block_not_availablethe block sits in a coverage gap; it exists, ask again laterreason: coverage_gap, coverageGapFromBlock, coverageGapToBlock, maxAvailableBlock
503service_unavailablethe block is outside the range that can be read right now, and that range's edge could not be read; retry with backoff—

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