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 minute / 1000 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 availble 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.
Example Request
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