Blockchain Data API reference

Blockchain Data API request reference: REST endpoints, API key authentication, parameters, response schemas, errors and CU weights for indexed chain data.

Overview

Use this Blockchain Data API reference to construct REST requests for indexed blocks, transactions, addresses, tokens, NFTs, DEX activity, tokenized stocks and dataset freshness. To choose a dataset and check chain availability, start with the datasets directory; for wallet token balances and transfer history, follow the wallet assets guide.

  • Base URL: https://api.blockvectra.com/v1/data — every route except /chains is prefixed with a chain identifier (e.g. https://api.blockvectra.com/v1/data/{chain}/…)
  • Protocol: HTTP GET (plus POST for batch token lookups at /{chain}/tokens:batch), JSON responses
  • Authentication: API key required — pass your key in the x-api-key request header. Requests are metered and billed in Compute Units (CU); only 2xx successful responses are billed
  • Ethereum: data coverage is determined by coverage.from_block in GET /v1/data/chains, and covers a smaller set of datasets — see Supported Chains → Ethereum
  • TypeScript SDK (GitHub) · Daily DEX price example · npm · WETH/USDG · robinhood_mainnet · 2026-10-01 UTC · JSON
npm install @blockvectra/data-api

Need cursor-based history? The checkpointed ERC-20 transfers example saves one page and its original meta per run, then resumes from the same opaque cursor when you rerun it with the same fixed query and state file. Pagination exhaustion alone does not prove a complete history — check coverage separately. ERC-20 only. Install the prebuilt package to run it directly; no local schema generation or source build.

Data API CU weights are listed on the Pricing page and returned by GET /v1/plans. See Quickstart → Call the Data API for example requests and response shapes. For path versioning, backward compatibility rules, and SDK recommendations, see API versioning and compatibility.

Chains

The Data API serves indexed data scoped to each chain: https://api.blockvectra.com/v1/data/{chain}/….

Available datasets and features vary by chain; see Supported Chains for the full capability matrix. GET https://api.blockvectra.com/v1/data/chains reports each chain's features, coverage, finality and limits. Requests outside a dataset's coverage return HTTP 422 no_coverage (not billed); an unknown or not-public chain returns HTTP 404 with error.code not_found (not billed; chain names must be exact lowercase slugs).

Errors

Every error response is {"error":{"code","message"}}; only 409 not_indexed_yet may add indexed_through (the highest indexed block on that chain), and it is absent when the chain has no indexed data yet. Codes customers hit most often:

Statuserror.codeMeaningAction
402insufficient_balancePaid balance or free grant exhausted; when balance is known, error.data includes balance_units and balance_cu (not billed)Top up on-chain on the console Billing page, or wait for the free allowance to refill
404not_foundUnknown or not-public {chain}, or the object does not existFix the request
409not_indexed_yetRequest reaches above as_of_block (newest fully written block; includes indexed_through), hash resolves above as_of_block, or the chain has no indexed data yet (no indexed_through)With indexed_through, poll until your block or to_block is at or below it; without it, wait for the chain to start indexing (coverage.has_data in GET /v1/data/chains shows the state)
422no_coveragePermanent gap: the chain lacks that capability, or the block is before indexed/trace coverageChange the request; retrying will not help
429rate_limitedKey CU rate limit (response includes Retry-After) or account call rate limit (no Retry-After); not billedRetry after Retry-After seconds
429cost_exceeds_burstA single request costs more than the key's burst capacity; no Retry-After (not billed)Split the request; retrying as sent never succeeds
503unavailableTemporarily unavailable; the response carries Retry-After. Also returned for historical requests on a chain whose coverage.from_block is currently nullRetry after Retry-After seconds
503gateway_overloadedAccount concurrency limit across all its keys and chains is reached, or the service is temporarily busy; Retry-After: 1 (not billed)Reduce concurrent requests across the account and wait Retry-After seconds before retrying

Endpoint index

Chain

MethodPathSummary
GET/chainsList supported chains
GET/{chain}/blocks/{number}Get a block by number
GET/{chain}/blocks/hash/{hash}Get a block by hash
GET/{chain}/blocks/{number}/transactionsList a block's transactions
GET/{chain}/transactions/{hash}Get a transaction by hash

Status

MethodPathSummary
GET/{chain}/status/freshnessFreshness and lag per dataset

Addresses

MethodPathSummary
GET/{chain}/addresses/{address}/transactionsList an address's transactions
GET/{chain}/addresses/{address}/transfersList an address's token transfers
GET/{chain}/addresses/{address}/balancesList an address's ERC-20 balances

Tokens

MethodPathSummary
GET/{chain}/tokens/{token}/transfersList a token contract's transfers
GET/{chain}/tokens/{token}/holdersList a token's holders
GET/{chain}/tokens/{token}Get token metadata
POST/{chain}/tokens:batchBatch get token metadata

NFTs

MethodPathSummary
GET/{chain}/nfts/{contract}/{token_id}Get one NFT's owner/holders
GET/{chain}/nftsList NFTs owned by an address

DEX

MethodPathSummary
GET/{chain}/dex/swapsList DEX swaps by pool or token
GET/{chain}/dex/pricesDaily DEX token prices

Stocks

MethodPathSummary
GET/{chain}/stocksDaily leaderboard of tokenized stocks
GET/{chain}/stocks/{token}Get one tokenized stock

Traces

MethodPathSummary
GET/{chain}/blocks/{number}/tracesHistorical callTracer trace tree for a whole block
GET/{chain}/transactions/{hash}/traceHistorical callTracer trace tree for one transaction

Last updated:

On this page