The V2 API is the recommended API for all new integrations. It offers richer data, flexible validator selectors, cursor-based pagination, and exclusive features like BeaconScore and entity benchmarking . The V1 API remains available but no new features will be added to V1.
Pricing
Plan Price/mo Features Limit/sec Limit/mo Free 0€ Basic 1 1000 Hobbyist 59€* Basic 1 — Business 99€* Basic 2 — Scale 399€* Basic & Pro 💎 5 — Enterprise Contact us Basic & Pro 💎 Contact us -
*Prices shown are for annual billing, excluding VAT
Free Usage Policy: The API is free to use under a fair use policy, with rate limits of 1 request per second / 1,000 requests per month.
API Keys: API endpoints require an API key, get your free api key here .
Access: Free and paid users have access to both V1 and V2 APIs. Pro 💎 features are available for users on the Scale and Enterprise plans.
Higher Usage Plans: For higher usage plans, visit: https://beaconcha.in/pricing .
Attribution: See API Terms and Conditions for details.
Building with AI? Connect your AI assistant to our documentation via AI Integration . Get accurate, up-to-date answers about the beaconcha.in API directly in your development environment.
Attribution Requirements
If you use beaconcha.in API data in your application or website, please follow these attribution guidelines:
BeaconScore
After an agreement the BeaconScore badge may be required. See API Terms and Conditions for details.
Powered by beaconcha.in
After an agreement the “Powered by beaconcha.in” logo may be required. See API Terms and Conditions for details.
License Materials Download official BeaconScore and “Powered by beaconcha.in” badges in SVG and PNG formats
For full terms and conditions, see our BeaconScore License .
API Keys
API keys can be obtained in the user portal and must be included in requests either as a query string parameter or in the request header.
V1 and V2 APIs use the same authentication method. A single API key is valid for all endpoints.
Quick Start — Your First Request
The simplest V2 API call is the Chain State endpoint, which returns the current state of the Ethereum network with a single field in the request body:
curl
Python
TypeScript
JavaScript
curl -X POST 'https://beaconcha.in/api/v2/ethereum/state' \
-H 'Authorization: Bearer <YOUR_API_KEY>' \
-H 'Content-Type: application/json' \
-d '{"chain": "mainnet"}'
import requests
response = requests.post(
"https://beaconcha.in/api/v2/ethereum/state" ,
headers = {
"Authorization" : "Bearer <YOUR_API_KEY>" ,
"Content-Type" : "application/json"
},
json = { "chain" : "mainnet" }
)
print (response.json())
const response = await fetch ( "https://beaconcha.in/api/v2/ethereum/state" , {
method: "POST" ,
headers: {
"Authorization" : "Bearer <YOUR_API_KEY>" ,
"Content-Type" : "application/json"
},
body: JSON . stringify ({ chain: "mainnet" })
});
const data : { data : { current_epoch : number ; total_validators : number } } = await response . json ();
console . log ( data );
const response = await fetch ( "https://beaconcha.in/api/v2/ethereum/state" , {
method: "POST" ,
headers: {
"Authorization" : "Bearer <YOUR_API_KEY>" ,
"Content-Type" : "application/json"
},
body: JSON . stringify ({ chain: "mainnet" })
});
const data = await response . json ();
console . log ( data );
All V2 API endpoints use the POST method with a JSON request body. The chain field ("mainnet" or "hoodi") is required in every request.
Full Example — Validator Rewards
This example uses the Rewards endpoint to get validator rewards data.
Request
curl
Python
TypeScript
JavaScript
curl -X POST 'https://beaconcha.in/api/v2/ethereum/validators/rewards-list' \
-H 'Authorization: Bearer <YOUR_API_KEY>' \
-H 'Content-Type: application/json' \
-d '{
"validator": {
"validator_identifiers": [1]
},
"chain": "mainnet",
"page_size": 10,
"epoch": 347566
}'
import requests
API_KEY = "<YOUR_API_KEY>"
BASE_URL = "https://beaconcha.in"
response = requests.post(
f " { BASE_URL } /api/v2/ethereum/validators/rewards-list" ,
headers = {
"Authorization" : f "Bearer { API_KEY } " ,
"Content-Type" : "application/json"
},
json = {
"validator" : { "validator_identifiers" : [ 1 ]},
"chain" : "mainnet" ,
"page_size" : 10 ,
"epoch" : 347566
}
)
if response.status_code == 200 :
data = response.json()
print (data)
else :
print ( f "Error { response.status_code } : { response.json() } " )
const API_KEY = "<YOUR_API_KEY>" ;
const BASE_URL = "https://beaconcha.in" ;
interface RewardsResponse {
data : Array <{
validator : { index : number ; public_key : string };
total : string ;
total_reward : string ;
total_penalty : string ;
}>;
paging : { next_cursor ?: string };
}
async function getValidatorRewards () : Promise < RewardsResponse > {
const response = await fetch (
` ${ BASE_URL } /api/v2/ethereum/validators/rewards-list` ,
{
method: "POST" ,
headers: {
"Authorization" : `Bearer ${ API_KEY } ` ,
"Content-Type" : "application/json"
},
body: JSON . stringify ({
validator: { validator_identifiers: [ 1 ] },
chain: "mainnet" ,
page_size: 10 ,
epoch: 347566
})
}
);
if ( ! response . ok ) {
const error = await response . json ();
throw new Error ( `API error ${ response . status } : ${ error . error } ` );
}
return response . json ();
}
const API_KEY = "<YOUR_API_KEY>" ;
const BASE_URL = "https://beaconcha.in" ;
async function getValidatorRewards () {
const response = await fetch (
` ${ BASE_URL } /api/v2/ethereum/validators/rewards-list` ,
{
method: "POST" ,
headers: {
"Authorization" : `Bearer ${ API_KEY } ` ,
"Content-Type" : "application/json"
},
body: JSON . stringify ({
validator: { validator_identifiers: [ 1 ] },
chain: "mainnet" ,
page_size: 10 ,
epoch: 347566
})
}
);
if ( ! response . ok ) {
const error = await response . json ();
throw new Error ( `API error ${ response . status } : ${ error . error } ` );
}
return response . json ();
}
Response
{
"data" : [
{
"total" : "80660680222696592" ,
"validator" : {
"index" : 1 ,
"public_key" : "0xa1d1ad0714035353258038e964ae9675dc0252ee22cea896825c01458e1807bfad2f9969338798548d9858a571f7425c"
},
"total_reward" : "80660680222696592" ,
"total_penalty" : "0" ,
"total_missed" : "132644000000000" ,
"attestation" : {
"total" : "9371000000000" ,
"head" : {
"total" : "2408000000000" ,
"reward" : "2408000000000" ,
"penalty" : "0" ,
"missed_reward" : "0"
},
"source" : {
"total" : "2437000000000" ,
"reward" : "2437000000000" ,
"penalty" : "0" ,
"missed_reward" : "0"
},
"target" : {
"total" : "4526000000000" ,
"reward" : "4526000000000" ,
"penalty" : "0" ,
"missed_reward" : "0"
},
"inactivity_leak_penalty" : "0" ,
"inclusion_delay" : null
},
"sync_committee" : {
"total" : "0" ,
"reward" : "0" ,
"penalty" : "0" ,
"missed_reward" : "0"
},
"proposal" : {
"total" : "80651309222696592" ,
"execution_layer_reward" : "35087332222696592" ,
"attestation_inclusion_reward" : "43946801000000000" ,
"sync_inclusion_reward" : "1617176000000000" ,
"slashing_inclusion_reward" : "0" ,
"missed_cl_reward" : "132644000000000" ,
"missed_el_reward" : "0"
},
"finality" : "finalized"
}
],
"paging" : {},
"range" : {
"slot" : {
"start" : 11122112 ,
"end" : 11122143
},
"epoch" : {
"start" : 347566 ,
"end" : 347566
},
"timestamp" : {
"start" : 1740289367 ,
"end" : 1740289750
}
}
}
View Full API Documentation See all parameters, response fields, and try the Rewards endpoint