Why Migrate?
All new features, endpoints, and improvements are built exclusively for V2. We recommend migrating to V2 for the best experience.
Richer data: V2 endpoints return more detailed, structured responses with fine-grained reward breakdowns
Flexible selectors: Query by validator index, public key, deposit address, withdrawal address, entity, or dashboard
Use cases and guides: 14+ step-by-step guides with code examples for common workflows
BeaconScore and entities: Exclusive V2 features for performance benchmarking and entity comparison
Active development: All new features ship on V2 only
Need Help?
Use Cases Task-specific guides with code examples for common operations.
Error Handling V2 error patterns, status codes, and troubleshooting.
AI Integration Connect your AI assistant to the beaconcha.in docs via MCP or llms.txt.
Discord Ask questions and get help from the community.
Key Differences
Aspect V1 API V2 API HTTP method Mostly GET All POST Authentication Query param (?apikey=) or header (apikey: ...) Bearer token (Authorization: Bearer <key>) Pagination Offset-based (offset and limit) Cursor-based (cursor and page_size) Validator selection Path parameter (single index or pubkey) JSON body selector (batch indices, pubkeys, deposit address, withdrawal address, entity, dashboard, or dashboard group ID) Response envelope { "status": "OK", "data": ... }{ "data": ..., "paging": ... }Chain selection Implicit (server URL) Explicit "chain" field in request body ("mainnet" or "hoodi")
Endpoint Mapping
Network State
V1 V2 Notes GET /api/v1/latestStatePOST /api/v2/ethereum/statePending API: the beaconcha.in team is working on this API.
Validators
Rewards
Queues and Sync Committees
V1 V2 Notes GET /api/v1/validators/queuePOST /api/v2/ethereum/queuesNetwork-wide queue data. For per-validator queue position, see also validators/queues Pending. The beaconcha.in team is working on this endpoint. GET /api/v1/sync_committee/{period}POST /api/v2/ethereum/sync-committee
Slots
V1 V2 Notes GET /api/v1/slot/{slotOrHash}POST /api/v2/ethereum/slotGET .../slot/{slot}/attestationsPOST .../slot/attestation-dutiesPending API: the beaconcha.in team is working on this API. GET .../slot/{slot}/depositsPOST .../slot/depositsPending API: the beaconcha.in team is working on this API. GET .../slot/{slot}/withdrawalsPOST .../slot/withdrawalsPending API: the beaconcha.in team is working on this API.
V1-Only Endpoints (No V2 Equivalent Yet)
The following V1 endpoints do not have V2 equivalents at this time. They remain accessible via the V1 API.
Category V1 Notes Validators GET .../validator/{indexOrPubkey}/blsChangeBLS-to-execution credential changes Validators GET .../validator/stats/{index}Daily validator statistics Validators GET .../validator/leaderboardPerformance leaderboard Validators GET .../validators/proposalLuckProposal luck metrics Validators GET .../eth1deposit/{txhash}Deposits by execution transaction hash Epochs GET /api/v1/epoch/{epoch}Epoch overview Epochs GET /api/v1/epoch/{epoch}/slotsAll slots in an epoch Slots GET .../slot/{slot}/attesterslashingsAttester slashings Slots GET .../slot/{slot}/proposerslashingsProposer slashings Slots GET .../slot/{slot}/voluntaryexitsVoluntary exits Execution Layer GET .../execution/address/{address}Address balances Execution Layer GET .../execution/address/{address}/erc20tokensERC-20 token balances Execution Layer GET .../execution/{addressIndexOrPubkey}/producedBlocks produced by fee recipient Execution Layer GET .../execution/gasnowGas price recommendations Other GET /api/v1/rocketpool/statsRocket Pool network statistics Other GET /api/v1/rocketpool/validator/{indexOrPubkey}Rocket Pool validator metadata Other GET /api/v1/ethstore/{day}ETH.Store daily aggregates Other GET /api/v1/ens/lookup/{domain}ENS resolution Other GET /api/v1/chart/{chart}Chart data Other GET /api/v1/graffitiwallGraffiti wall
V2-Only Endpoints (New in V2)
These endpoints are only available in V2 and have no V1 equivalent:
Category V2 Notes Validator Metrics POST .../validators/metadataValidator metadata (Pro) Validator Metrics POST .../validators/apy-roiAPY and ROI calculations Validator Duties POST .../validators/upcoming-duty-slotsPending API: the beaconcha.in team is working on this API. Validator Duties POST .../validators/sync-committee-periodsSync committee period history Sync Committees POST .../sync-committee/validatorsPending API: the beaconcha.in team is working on this API. Blocks POST /api/v2/ethereum/blockBlock overview Blocks POST .../block/rewardsBlock rewards breakdown Network POST /api/v2/ethereum/configPending API: the beaconcha.in team is working on this API. Network POST /api/v2/ethereum/performance-aggregateNetwork-wide performance aggregate Entities POST /api/v2/ethereum/entitiesStaking entities overview (Pro) Entities POST .../entity/sub-entitiesEntity sub-entities (Pro)
Migration Example: Validator Lookup
Before (V1)
curl 'https://beaconcha.in/api/v1/validator/1?apikey=YOUR_API_KEY'
After (V2)
curl -X POST 'https://beaconcha.in/api/v2/ethereum/validators' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"chain": "mainnet",
"validator": {"validator_identifiers": [1]}
}'
Key changes in this example:
GET becomes POST with a JSON body
The validator index moves from the URL path into the validator object in the request body
Authentication moves from query parameter to Authorization: Bearer header
You must specify the chain explicitly
Migration Example: Rewards Data
Before (V1)
curl -H 'apikey: YOUR_API_KEY' \
'https://beaconcha.in/api/v1/validator/1/incomedetailhistory'
After (V2)
curl -X POST 'https://beaconcha.in/api/v2/ethereum/validators/rewards-list' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"chain": "mainnet",
"validator": {"validator_identifiers": [1]},
"page_size": 10
}'
V2 rewards data includes a detailed breakdown by duty type (attestation, sync committee, proposal) with reward, penalty, and missed reward amounts.
Authentication Changes
V1 supported both query parameter and header authentication:
# V1 - query parameter
curl 'https://beaconcha.in/api/v1/validator/1?apikey=YOUR_API_KEY'
# V1 - header
curl -H 'apikey: YOUR_API_KEY' 'https://beaconcha.in/api/v1/validator/1'
V2 uses only Bearer token authentication:
# V2 - Bearer token (only method)
curl -H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-X POST 'https://beaconcha.in/api/v2/ethereum/state' \
-d '{"chain": "mainnet"}'
The same API key works for both V1 and V2. You do not need a new key to start using V2.
V1 uses offset-based pagination:
# V1 - offset pagination
curl 'https://beaconcha.in/api/v1/validator/1/balancehistory?offset=100&limit=25&apikey=YOUR_API_KEY'
V2 uses cursor-based pagination. The first request omits the cursor, and subsequent requests use the cursor value from the paging object in the previous response:
# V2 - first page
curl -X POST 'https://beaconcha.in/api/v2/ethereum/validators/balances' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"chain": "mainnet",
"validator": {"validator_identifiers": [1]},
"page_size": 25
}'
# V2 - next page (use cursor from previous response)
curl -X POST 'https://beaconcha.in/api/v2/ethereum/validators/balances' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"chain": "mainnet",
"validator": {"validator_identifiers": [1]},
"page_size": 25,
"cursor": "eyJlcG9jaCI6MzQ3NTY2fQ=="
}'
See the Pagination Guide for full details on cursor-based pagination.
Rate Limit Considerations
When migrating, your rate limit behavior depends on your subscription type:
Legacy plans (Sapphire, Emerald, Diamond): V1 and V2 use separate rate limit buckets. Your V1 quota is unaffected by V2 usage.
Current plans (Hobbyist, Business, Scale): V1 and V2 share a single rate limit bucket.
See the Rate Limits guide for full details.