Backfill

Event Streaming doesn't replay history past its own retention window. Here's how to backfill missed data from Blockdaemon's other APIs instead.

Event Streaming is forward-only. Once a message falls outside its retention window, covered in Event Coverage, it isn't redelivered. To recover that data, reconstruct it from Blockdaemon's other data APIs instead.

Three Backfill Routes

RouteBest forBacking store
RPC APIPoint queries against a specific block or transactionArchive or full-history nodes, depending on chain. See RPC API Overview for per-chain depth.
REST APIBulk historical queries (blocks, transactions, balances)Blockdaemon's own indexers, independent of node history limits. See Historical Data for per-chain depth.
Universal APIOne consistent request shape across every supported protocolA shared database for indexed protocols, direct node access for non-indexed ones.

All three authenticate the same way as the rest of the API: an Authorization: Bearer <API_KEY> header (recommended), an X-API-Key header, or an apiKey query parameter.

Schema Alignment

Data pulled from any of the three routes above comes back in that source's native shape, not the UNIFIED_V1 envelope Event Streaming uses. Reconciling a backfilled range against events already received live requires mapping the fields manually. The mapping differs by chain family.

EVM chains (Ethereum and others in the same family)

Native fieldUnified envelope fieldNotes
blockNumberblock_number
blockHashblock_hash
hash (transaction)tx_id
fromtransfers[].from
totransfers[].to
valuetransfers[].valueHex converted to decimal
statusstatus0x1 maps to "success", 0x0 maps to "failed"
gasUsedfee.gas_used
gasfee.gas_limit
gasPricefee.gas_price
maxFeePerGasfee.max_fee_per_gas
maxPriorityFeePerGasfee.max_priority_fee_per_gas

UTXO chains (Bitcoin and others in the same family)

Native fieldUnified envelope fieldNotes
heightblock_number
hash (block)block_hash
timeblock_timestamp
previousblockhashparent_hash
txidtx_id
hash (transaction)tx_hash
vin[]transfers[] entryAddress in from, event_name set to "vin"
vout[]transfers[] entryAddress also in from (not to), event_name set to "vout"
feefee.value

Polkadot

Native fieldUnified envelope fieldNotes
block_idblock_hash
datetimestamp
id (transaction)tx_id
meta.extrinsicHashtx_hash
events[].sourcetransfers[].from
events[].destinationtransfers[].to
events[].amounttransfers[].value
events[].meta.currency.typetransfers[].assetNot the top-level denomination field
statusstatusPasses through unchanged (for example "completed"), not remapped to "success"/"failed"

Solana

Native fieldUnified envelope fieldNotes
slotblock_numberAlso duplicated as blockHeight in block events
blockhashblock_hash
previousBlockhashparent_hash
blockTimeblock_timestamp

Stellar

Native fieldUnified envelope fieldNotes
sequenceblock_numberLedger sequence number
headerJson.header.previous_ledger_hashparent_hash
ledgerCloseTimeblock_timestamp
ledger (transaction)block_numberOn confirmed_tx events
txHashtx_id and tx_hashSame value maps to both fields
statusstatus
createdAttimestamp
account_id (balance entry)addressOn confirmed_balance events
balance (balance entry)value

block_hash is not populated on confirmed_tx or confirmed_balance events, only on block events. Transfer details for confirmed_tx are decoded from the transaction's operations (source, destination, and payment amount), rather than a single flat field, the exact operation-body path depends on the operation type (payment, path payment, account merge, and so on).


Did this page help you?