Browse API groups
Beacon Chain API
/api/v1/qrl2/beacon/attestation/dailyQRL 2.0Daily attestation participation rate (UI: validator-health chart)
Network-wide daily attestation participation rate (included/expected across all validators). A liveness/health metric — distinct from the validator registry/count. Powers /charts/attestation-rate. Empty list when the beacon attestation indexer hasn't run on this deploy.
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| window | string | no | 90d | Look-back window for the attestation participation rate. Default 90d. |
Response 200 · BeaconAttestationDaily
▸itemsBeaconAttestationDailyBucket[]required
itemsBeaconAttestationDailyBucket[]requireddaystringrequiredISO date (YYYY-MM-DD)includedintegerexpectedintegerparticipation_ratenumber | nullincluded/expected as a percentage (0-100)daysintegerrequirednetworkstringrequiredRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/beacon/attestation/daily" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2026-06-21",
"included": 2256,
"expected": 3584,
"participation_rate": 62.95
},
{
"day": "2026-06-24",
"included": 1654,
"expected": 2048,
"participation_rate": 80.76
},
"… (15 more)"
],
"days": 90,
"network": "testnet"
}/api/v1/qrl2/beacon/blocksQRL 2.0List beacon blocks (UI label: "Beacon Chain · Blocks")
Latest beacon (consensus-layer) blocks, newest first. Public-name mapping: surfaced under /beacon/blocks in the UI. API uses the spec-aligned beacon/blocks path.
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | integermin 1 · max 200 | no | 20 | |
| cursor | string | null | no | — | Opaque pagination token from a previous response's `next_cursor`. Omit to start at the chain head (newest). |
Response 200 · BeaconBlocksList
▸itemsBeaconBlock[]required
itemsBeaconBlock[]requiredslotintegerrequiredepochintegerrequiredblock_rootstringrequiredparent_rootstringrequiredproposer_indexintegerrequiredexecution_block_numberinteger | nullexecution_block_hashstring | nullattestations_countintegerdeposits_countintegervoluntary_exits_countintegerproposer_slashings_countintegerattester_slashings_countintegersync_committee_participantsinteger | nulltimestampstringrequiredproposer_withdrawal_addressstring | nullReward recipient of this block's proposer — the execution (withdrawal) address where the validator's staking rewards are paid (EIP-4895 withdrawals), decoded from its withdrawal_credentials (last 20 bytes of an execution-type credential). Null when the validator uses a non-execution credential or its registry snapshot is unavailable. Many validators can share one recipient.limitintegerrequirednetworkstringrequirednext_cursorstring | nullOpaque pagination token — pass back unchanged as ?cursor=... to fetch the next (older) page. Null when there are no older blocks. The token encodes the slot internally; callers MUST NOT decode or construct it.Request examples
curl -s "https://quantascan.io/api/v1/qrl2/beacon/blocks" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"slot": 174934,
"epoch": 1366,
"block_root": "0x3b5341b5a54ee625a74fde33c0ca2bbcadee9ca9a32f7130c1e54c23f44960c3",
"parent_root": "0x849d581b191ab3d587c5fe2ecb23227f1753f795c7b319f2497b2cbb3abc445e",
"proposer_index": 229,
"execution_block_number": null,
"execution_block_hash": null,
"attestations_count": 1,
"deposits_count": 0,
"voluntary_exits_count": 0,
"proposer_slashings_count": 0,
"attester_slashings_count": 0,
"sync_committee_participants": null,
"timestamp": "2026-07-31T12:02:36",
"proposer_withdrawal_address": "Qc0e6dd0e844e0048dcb0bd3fdcc44a970beca38d"
},
{
"slot": 174933,
"epoch": 1366,
"block_root": "0x849d581b191ab3d587c5fe2ecb23227f1753f795c7b319f2497b2cbb3abc445e",
"parent_root": "0x42169428c366f03953c89594ddbd63a245c3847a9a9a5c432d6c65a46f4b86b9",
"proposer_index": 192,
"execution_block_number": null,
"execution_block_hash": null,
"attestations_count": 1,
"deposits_count": 0,
"voluntary_exits_count": 0,
"proposer_slashings_count": 0,
"attester_slashings_count": 0,
"sync_committee_participants": null,
"timestamp": "2026-07-31T12:01:36",
"proposer_withdrawal_address": "Qc0e6dd0e844e0048dcb0bd3fdcc44a970beca38d"
},
"… (18 more)"
],
"limit": 20,
"network": "testnet",
"next_cursor": "eyJiZWZvcmVfc2xvdCI6MTc0OTE1fQ"
}/api/v1/qrl2/beacon/blocks/{slot}QRL 2.0Single beacon block by slot (UI: `/beacon/blocks/{slot}`)
Single beacon block by slot. 404 when the slot is empty (legitimately — beacon-chain slots can be skipped) OR when the indexer hasn't reached this slot yet.
Path parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| slot | integermin 0 | yes | — |
Response 200 · BeaconBlock
slotintegerrequiredepochintegerrequiredblock_rootstringrequiredparent_rootstringrequiredproposer_indexintegerrequiredexecution_block_numberinteger | nullexecution_block_hashstring | nullattestations_countintegerdeposits_countintegervoluntary_exits_countintegerproposer_slashings_countintegerattester_slashings_countintegersync_committee_participantsinteger | nulltimestampstringrequiredproposer_withdrawal_addressstring | nullReward recipient of this block's proposer — the execution (withdrawal) address where the validator's staking rewards are paid (EIP-4895 withdrawals), decoded from its withdrawal_credentials (last 20 bytes of an execution-type credential). Null when the validator uses a non-execution credential or its registry snapshot is unavailable. Many validators can share one recipient.Request examples
curl -s "https://quantascan.io/api/v1/qrl2/beacon/blocks/12543" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"slot": 174934,
"epoch": 1366,
"block_root": "0x3b5341b5a54ee625a74fde33c0ca2bbcadee9ca9a32f7130c1e54c23f44960c3",
"parent_root": "0x849d581b191ab3d587c5fe2ecb23227f1753f795c7b319f2497b2cbb3abc445e",
"proposer_index": 229,
"execution_block_number": null,
"execution_block_hash": null,
"attestations_count": 1,
"deposits_count": 0,
"voluntary_exits_count": 0,
"proposer_slashings_count": 0,
"attester_slashings_count": 0,
"sync_committee_participants": null,
"timestamp": "2026-07-31T12:02:36"
}/api/v1/qrl2/beacon/epochsQRL 2.0List consensus epochs (UI: "Epochs" page)
Recent QRL 2.0 beacon-chain epochs, newest-first.
Each epoch is SLOTS_PER_EPOCH × SECONDS_PER_SLOT long — for QRL2
that's 128 × 60s = 2h 8min (NOT Ethereum's 6m 24s). Rows are
aggregated from etl_silver.qrl2_beacon_blocks at query-time; when
that table is empty we still emit synthetic epoch entries computed
from genesis_time so the UI has something to render.
Wave 5: ?before_epoch=N → ?cursor=... (opaque token).
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | integermin 1 · max 200 | no | 25 | |
| cursor | string | null | no | — | Opaque pagination token from a previous response's `next_cursor`. Omit to start at the current epoch. |
Response 200 · BeaconEpochsList
▸itemsBeaconEpoch[]required
itemsBeaconEpoch[]requiredepochintegerrequiredfirst_slotintegerrequiredlast_slotintegerrequiredstart_timestringrequiredend_timestringrequiredslots_totalintegerblocks_proposedintegerunique_proposersintegerattestations_countintegerdeposits_countintegervoluntary_exits_countintegerproposer_slashings_countintegerattester_slashings_countintegeravg_sync_participantsnumber | nullsync_participation_pctnumber | nullavg_sync_participants / SyncCommitteeSize(128) × 100.statusstringrequiredWall-clock lifecycle status.finality_statestring | nullCasper-FFG state: 'finalized' | 'justified' | null.indexedbooleanlimitintegerrequirednetworkstringrequiredcurrent_epochinteger | nulllatest_data_epochinteger | nullHighest epoch with indexed data (None when none indexed).indexer_lag_epochsinteger | nullcurrent_epoch − latest_data_epoch; drives a catch-up banner.slots_per_epochintegerseconds_per_slotintegersync_committee_sizeintegerfinalized_epochinteger | nullcurrent_justified_epochinteger | nullfinality_lag_epochsinteger | nullfinality_snapshot_age_secondsinteger | nullnext_cursorstring | nullOpaque token for the next (older) page; null at the end.Request examples
curl -s "https://quantascan.io/api/v1/qrl2/beacon/epochs" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"epoch": 1368,
"first_slot": 175104,
"last_slot": 175231,
"start_time": "2026-07-31T14:52:36",
"end_time": "2026-07-31T17:00:35",
"slots_total": 128,
"status": "current",
"finality_state": null,
"blocks_proposed": 0,
"unique_proposers": 0,
"attestations_count": 0,
"deposits_count": 0,
"voluntary_exits_count": 0,
"proposer_slashings_count": 0,
"attester_slashings_count": 0,
"avg_sync_participants": null,
"sync_participation_pct": null,
"indexed": false
},
{
"epoch": 1367,
"first_slot": 174976,
"last_slot": 175103,
"start_time": "2026-07-31T12:44:36",
"end_time": "2026-07-31T14:52:35",
"slots_total": 128,
"status": "complete",
"finality_state": null,
"blocks_proposed": 0,
"unique_proposers": 0,
"attestations_count": 0,
"deposits_count": 0,
"voluntary_exits_count": 0,
"proposer_slashings_count": 0,
"attester_slashings_count": 0,
"avg_sync_participants": null,
"sync_participation_pct": null,
"indexed": false
},
"… (23 more)"
],
"limit": 25,
"network": "testnet",
"current_epoch": 1368,
"latest_data_epoch": 1366,
"indexer_lag_epochs": 2,
"slots_per_epoch": 128,
"seconds_per_slot": 60,
"sync_committee_size": 128,
"finalized_epoch": 1364,
"current_justified_epoch": 1365,
"finality_lag_epochs": 4,
"finality_snapshot_age_seconds": 17450,
"next_cursor": "eyJiZWZvcmVfZXBvY2giOjEzNDR9"
}/api/v1/qrl2/beacon/epochs/{epoch}QRL 2.0Single epoch detail (UI: `/epoch/{epoch}`)
Single epoch detail: per-slot grid (128 slots) + aggregated counts.
Returns 404 for negative epoch numbers, otherwise always returns a
payload (with empty blocks array when the indexer hasn't caught up).
Path parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| epoch | integermin 0 | yes | — |
Response 200 · BeaconEpochDetail
epochintegerrequiredfirst_slotintegerrequiredlast_slotintegerrequiredstart_timestringrequiredend_timestringrequiredslots_totalintegerblocks_indexedintegerstatusstringrequiredfinality_statestring | null▸blocksBeaconBlock[]required
blocksBeaconBlock[]requiredslotintegerrequiredepochintegerrequiredblock_rootstringrequiredparent_rootstringrequiredproposer_indexintegerrequiredexecution_block_numberinteger | nullexecution_block_hashstring | nullattestations_countintegerdeposits_countintegervoluntary_exits_countintegerproposer_slashings_countintegerattester_slashings_countintegersync_committee_participantsinteger | nulltimestampstringrequiredproposer_withdrawal_addressstring | nullReward recipient of this block's proposer — the execution (withdrawal) address where the validator's staking rewards are paid (EIP-4895 withdrawals), decoded from its withdrawal_credentials (last 20 bytes of an execution-type credential). Null when the validator uses a non-execution credential or its registry snapshot is unavailable. Many validators can share one recipient.networkstringrequiredRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/beacon/epochs/100" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"epoch": 1366,
"first_slot": 174848,
"last_slot": 174975,
"start_time": "2026-07-31T10:36:36",
"end_time": "2026-07-31T12:44:35",
"slots_total": 128,
"blocks_indexed": 87,
"status": "complete",
"finality_state": null,
"blocks": [
{
"slot": 174848,
"proposer_index": 249,
"block_root": "0x83114cb3949ebfc64e6e49cc0c45c08de3ae704f4e56dec7518bf3264c9fe4b8",
"parent_root": "0xeab6fbfefb6c20f475a2934c5cdb2c14f92dc3b1676c02200b6a316c42927215",
"execution_block_number": null,
"attestations_count": 1,
"deposits_count": 0,
"proposer_slashings_count": 0,
"attester_slashings_count": 0,
"sync_committee_participants": null,
"timestamp": "2026-07-31T10:36:36"
},
{
"slot": 174849,
"proposer_index": 267,
"block_root": "0xd5cdf6200c7251b6bce71f8863905e32895c03085f71f69c3f1f7e15bd79ce0f",
"parent_root": "0x83114cb3949ebfc64e6e49cc0c45c08de3ae704f4e56dec7518bf3264c9fe4b8",
"execution_block_number": null,
"attestations_count": 1,
"deposits_count": 0,
"proposer_slashings_count": 0,
"attester_slashings_count": 0,
"sync_committee_participants": null,
"timestamp": "2026-07-31T10:37:36"
},
"… (85 more)"
],
"network": "testnet"
}/api/v1/qrl2/beacon/slashingsQRL 2.0List validator slashings (UI label: "Validator Penalties")
Slashings newest-first, with optional type filter. Public-name mapping: the Quantascan UI labels these "Validator Penalties" on /penalties. The API uses the spec-aligned slashings term (matches the Beacon API /eth/v1/beacon/pool/{proposer,attester}_slashings).
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | integermin 1 · max 200 | no | 50 | |
| slashing_type | string | null | no | — | Optional filter: 'proposer' or 'attester' |
Response 200 · BeaconSlashingsList
▸itemsBeaconSlashing[]required
itemsBeaconSlashing[]requiredslotintegerrequiredepochintegerrequiredslashing_typestringrequired'proposer' | 'attester'slashed_validator_indexintegerrequiredreporter_proposer_indexintegerrequiredtimestampstringrequiredlimitintegerrequirednetworkstringrequiredtotalintegerTotal slashings matching the filter (ignores `limit`). The table shows the latest `limit`; `total` is the all-time count so the UI can say 'N of M'.Request examples
curl -s "https://quantascan.io/api/v1/qrl2/beacon/slashings" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [],
"limit": 50,
"network": "testnet",
"total": 0
}/api/v1/qrl2/beacon/slashings/dailyQRL 2.0Slashings histogram per day (UI: penalties bar chart)
Daily slashings histogram split proposer vs attester. Powers the "Slashings over time" bar chart on /penalties. Empty buckets included so the UI gets a continuous timeline.
Wave 5: ?days=N → ?window=30d (D4).
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| window | string | no | 30d | Look-back window for the slashings histogram. Default 30d. |
Response 200 · BeaconSlashingsDaily
▸itemsBeaconSlashingsDailyBucket[]required
itemsBeaconSlashingsDailyBucket[]requireddaystringrequiredISO date (YYYY-MM-DD)proposer_countintegerattester_countintegerdaysintegerrequirednetworkstringrequiredtotal_proposerintegertotal_attesterintegerRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/beacon/slashings/daily" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [],
"days": 30,
"network": "testnet",
"total_proposer": 0,
"total_attester": 0
}/api/v1/qrl2/beacon/summaryQRL 2.0Consensus-layer summary (UI label: "Beacon Chain · Network status")
Headline metrics for the consensus layer. Public-name mapping: the Quantascan UI surfaces this widget as "Network status" on the /beacon hub. API uses the spec-aligned beacon namespace.
Response 200 · BeaconSummary
networkstringrequiredhead_slotinteger | nullblocks_indexedintegervalidators_knownintegervalidators_activeintegervalidators_slashedintegerslashings_totalintegertotal_active_effective_balance_gweiinteger | nulltotal_active_effective_balance_qrlnumber | nullindexer_lag_slotsinteger | nullfinalized_epochinteger | nullcurrent_justified_epochinteger | nullprevious_justified_epochinteger | nullfinality_snapshot_atstring | nullfinality_lag_epochsinteger | nullfinality_snapshot_age_secondsinteger | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/beacon/summary" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"network": "testnet",
"head_slot": 174934,
"blocks_indexed": 11717,
"validators_known": 512,
"validators_active": 512,
"validators_slashed": 0,
"slashings_total": 0,
"total_active_effective_balance_gwei": 20480000000000000,
"total_active_effective_balance_qrl": 20480000,
"finalized_epoch": 1364,
"current_justified_epoch": 1365,
"previous_justified_epoch": 1364,
"finality_snapshot_at": "2026-07-31T10:37:32.680000",
"finality_lag_epochs": 2,
"finality_snapshot_age_seconds": 17450,
"indexer_lag_slots": 0
}/api/v1/qrl2/beacon/validators/{validator_index}QRL 2.0Get Beacon Validator
Latest registry snapshot for a validator: status, pubkey,
effective_balance, activation/exit epochs, slashed flag. Distinct
from /validators/{idx}/performance which is the combined
execution+consensus rollup; this is the raw registry row.
Path parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| validator_index | integermin 0 | yes | — |
Response 200 · BeaconValidatorRegistry
validator_indexintegerrequiredpubkeystring | nullstatusstring | nulleffective_balanceintegerbalanceinteger | nullslashedbooleanactivation_eligibility_epochinteger | nullactivation_epochinteger | nullexit_epochinteger | nullwithdrawable_epochinteger | nullwithdrawal_credentialsstring | nullsnapshot_atstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/beacon/validators/0" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"validator_index": 0,
"pubkey": "0xf29d9fe70df768f8769b042c7f395360fd4024c862f73c12f4c2acfac8883980e5deba9a42edc3ae1a33d891c6e36ec5df56d9479baf8151aa96e50cd2d16bd8e2b283ead777aa6b7b845bdb300fde00aa38f2f2f60497b32003a3f0b44c77bfe18e14…",
"status": "active_ongoing",
"effective_balance": 40000000000000,
"balance": 40000450681152,
"slashed": false,
"activation_eligibility_epoch": 0,
"activation_epoch": 0,
"exit_epoch": 18446744073709552000,
"withdrawable_epoch": 18446744073709552000,
"withdrawal_credentials": "0x000000000000000000000000c0e6dd0e844e0048dcb0bd3fdcc44a970beca38d",
"snapshot_at": "2026-07-31T10:37:32.520000"
}All endpoints verified against a live indexer. Need the raw spec? See openapi.json or the API overview.