Browse API groups
Validators & Withdrawals API
/api/v1/qrl2/validators/QRL 2.0List Validators
Paginated list of QRL2 validators with consensus-layer columns joined in (status, effective_balance, blocks_proposed_count, slashed).
Wave 6: ?sort_by= + ?sort_dir= → ?sort=field / ?sort=-field
(D5). The validator registry is a stable Gold projection, so we keep
page/page_size offset pagination (D1).
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| page | integermin 1 | no | 1 | |
| page_size | integermin 1 · max 100 | no | 20 | |
| status | string | null | no | — | Filter to one validator-lifecycle state (e.g. active_ongoing, exited_slashed). Accepts any of the 9 spec states. |
| sort | string | null | no | index | Sort spec: '<field>' (asc) or '-<field>' (desc). Allowed fields: index, balance, proposals, withdrawn, activity. Default `index`. |
Response 200 · ValidatorsPaginated
▸itemsValidatorDetail[]
itemsValidatorDetail[]validator_indexintegerrequiredtotal_withdrawn_planckstring | nulltotal_withdrawn_qrl2string | nullwithdrawal_countinteger | nulllast_recipientstring | nullfirst_withdrawal_atstring | nulllast_withdrawal_atstring | nullcurrent_statusstring | nullcurrent_effective_balanceinteger | nullblocks_proposed_countinteger | nullslashedboolean | nullfirst_proposal_atstring | nulllast_proposal_atstring | nulltotalinteger | nulllimitinteger | nulloffsetinteger | nullnetworkstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/validators/" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"validator_index": 0,
"first_withdrawal_height": 277,
"first_withdrawal_at": "2026-04-01T05:05:36",
"last_withdrawal_height": 174884,
"last_withdrawal_at": "2026-07-31T11:12:36",
"total_withdrawn_planck": "686597821406000000000",
"total_withdrawn_qrl2": "686",
"withdrawal_count": 4770,
"last_recipient": "Qc0e6dd0e844e0048dcb0bd3fdcc44a970beca38d",
"current_status": "active_ongoing",
"current_effective_balance": 40000000000000,
"blocks_proposed_count": 40,
"slashed": false,
"first_proposal_at": null,
"last_proposal_at": "2026-07-31T11:08:36"
},
{
"validator_index": 1,
"first_withdrawal_height": 278,
"first_withdrawal_at": "2026-04-01T05:06:36",
"last_withdrawal_height": 174863,
"last_withdrawal_at": "2026-07-31T10:51:36",
"total_withdrawn_planck": "685350132011000000000",
"total_withdrawn_qrl2": "685",
"withdrawal_count": 5203,
"last_recipient": "Qc0e6dd0e844e0048dcb0bd3fdcc44a970beca38d",
"current_status": "active_ongoing",
"current_effective_balance": 40000000000000,
"blocks_proposed_count": 41,
"slashed": false,
"first_proposal_at": null,
"last_proposal_at": "2026-07-27T18:15:36"
},
"… (18 more)"
],
"total": 512,
"limit": 20,
"offset": 0,
"network": "testnet"
}/api/v1/qrl2/validators/{validator_index}QRL 2.0Get Validator
Single validator detail: rewards totals, first/last withdrawal, latest recipient address.
Path parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| validator_index | integermin 0 | yes | — |
Response 200 · ValidatorDetail
validator_indexintegerrequiredtotal_withdrawn_planckstring | nulltotal_withdrawn_qrl2string | nullwithdrawal_countinteger | nulllast_recipientstring | nullfirst_withdrawal_atstring | nulllast_withdrawal_atstring | nullcurrent_statusstring | nullcurrent_effective_balanceinteger | nullblocks_proposed_countinteger | nullslashedboolean | nullfirst_proposal_atstring | nulllast_proposal_atstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/validators/0" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"validator_index": 0,
"first_withdrawal_height": 277,
"first_withdrawal_at": "2026-04-01T05:05:36",
"last_withdrawal_height": 174884,
"last_withdrawal_at": "2026-07-31T11:12:36",
"total_withdrawn_planck": "686597821406000000000",
"total_withdrawn_qrl2": "686",
"withdrawal_count": 4770,
"last_recipient": "Qc0e6dd0e844e0048dcb0bd3fdcc44a970beca38d"
}/api/v1/qrl2/validators/{validator_index}/incomeQRL 2.0Validator Income
Per-day income timeline for one validator: proposed blocks + withdrawal payouts (in planck). Powers a "validator income chart" on the validator detail page.
Wave 6: ?days=N → ?window=DURATION (D4).
Empty items when beacon indexer hasn't run (graceful — no 500).
Path parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| validator_index | integermin 0 | yes | — |
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| window | string | no | 90d | Look-back window for validator income timeline. Default 90d. |
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/validators/0/income" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2026-07-31",
"proposed_blocks": 3,
"withdrawal_amount_planck": "3242258750000000000"
},
{
"day": "2026-07-30",
"proposed_blocks": 2,
"withdrawal_amount_planck": "5994288430000000000"
},
"… (89 more)"
],
"count": 91,
"validator_index": 0,
"network": "testnet",
"window_days": 90
}/api/v1/qrl2/validators/{validator_index}/performanceQRL 2.0Validator Performance
Combined execution + consensus bundle for the validator-detail page.
Always returns the execution side (withdrawals from EIP-4895). The
consensus field is populated only when migration 035 is applied AND
ETL_INDEX_BEACON=1 has been running long enough to capture this
validator (proposal or registry snapshot). Returns 404 only when both
sides are empty (validator unknown to us).
Path parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| validator_index | integermin 0 | yes | — |
Response 200 · ValidatorFullPerformance
validator_indexintegerrequirednetworkstringrequired▸executionValidatorExecutionSide | null
executionValidatorExecutionSide | nullvalidator_indexintegerrequiredtotal_withdrawn_planckstring | nulltotal_withdrawn_qrl2string | nullwithdrawal_countinteger | nulllast_recipientstring | nullfirst_withdrawal_atstring | nulllast_withdrawal_atstring | null▸consensusValidatorBeaconPerformance | null
consensusValidatorBeaconPerformance | nullvalidator_indexintegerrequiredblocks_proposed_countintegerfirst_proposal_slotinteger | nulllast_proposal_slotinteger | nullfirst_proposal_atstring | nulllast_proposal_atstring | nullcurrent_statusstring | nullslashedbooleancurrent_effective_balanceinteger | nullpubkeystring | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/validators/0/performance" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"validator_index": 0,
"network": "testnet",
"execution": {
"validator_index": 0,
"first_withdrawal_height": 277,
"first_withdrawal_at": "2026-04-01T05:05:36",
"last_withdrawal_height": 174884,
"last_withdrawal_at": "2026-07-31T11:12:36",
"total_withdrawn_planck": "686597821406000000000",
"total_withdrawn_qrl2": "686",
"withdrawal_count": 4770,
"last_recipient": "Qc0e6dd0e844e0048dcb0bd3fdcc44a970beca38d"
},
"consensus": {
"validator_index": 0,
"blocks_proposed_count": 40,
"first_proposal_slot": null,
"last_proposal_slot": 174880,
"first_proposal_at": null,
"last_proposal_at": "2026-07-31T11:08:36",
"current_status": "active_ongoing",
"slashed": false,
"current_effective_balance": 40000000000000,
"pubkey": "0xf29d9fe70df768f8769b042c7f395360fd4024c862f73c12f4c2acfac8883980e5deba9a42edc3ae1a33d891c6e36ec5df56d9479baf8151aa96e50cd2d16bd8e2b283ead777aa6b7b845bdb300fde00aa38f2f2f60497b32003a3f0b44c77bfe18e14…"
}
}/api/v1/qrl2/validators/{validator_index}/withdrawalsQRL 2.0Per-validator withdrawal history (UI label: "Validator Rewards")
EIP-4895 withdrawal history for a single validator. Public-name mapping: surfaced as "Validator Rewards" in the UI (/validator/{idx} and /rewards).
Path parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| validator_index | integermin 0 | yes | — |
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| page | integermin 1 | no | 1 | |
| page_size | integermin 1 · max 200 | no | 50 |
Response 200 · ValidatorWithdrawalsList
itemsobject[]limitinteger | nulloffsetinteger | nullvalidator_indexinteger | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/validators/0/withdrawals" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"height": 174884,
"block_hash": "0x5beee5fde6f4b9e67004bd01a70757f139e4b8313c3874c36d1781c9ae19aacc",
"chain_index": 2798120,
"address": "Qc0e6dd0e844e0048dcb0bd3fdcc44a970beca38d",
"amount": "217205240000000000",
"timestamp": "2026-07-31T11:12:36"
},
{
"height": 174863,
"block_hash": "0x4949bc40c51620771fce20b039c3eb628738d106826673389291551801986e88",
"chain_index": 2797790,
"address": "Qc0e6dd0e844e0048dcb0bd3fdcc44a970beca38d",
"amount": "450681152000000000",
"timestamp": "2026-07-31T10:51:36"
},
"… (48 more)"
],
"limit": 50,
"offset": 0,
"validator_index": 0
}/api/v1/qrl2/validators/stake-concentrationQRL 2.0Stake Concentration
Stake-distribution KPI bundle for the /validators hub.
Returns active validator count, total effective balance (gwei + QRL2), and the top-10 concentration ratio (0..1). Empty/null-filled on a pre-mig-035 deploy (gracefully degraded).
Response 200 · StakeConcentrationResponse
networkstringrequiredactive_validator_countintegertotal_effective_balance_gweistringtotal_effective_balance_qrl2stringtop10_concentration_pctnumber | nulloperator_countintegertop10_operator_share_pctnumber | nulllargest_operator_validatorsintegerRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/validators/stake-concentration" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"network": "testnet",
"active_validator_count": 0,
"total_effective_balance_gwei": "0",
"total_effective_balance_qrl2": "0",
"top10_concentration_pct": null,
"operator_count": 0,
"top10_operator_share_pct": null,
"largest_operator_validators": 0
}/api/v1/qrl2/validators/status-breakdownQRL 2.0Status Breakdown
Validator-count breakdown by lifecycle bucket for the /validators hub strip: entering (activation queue), active, exiting (leaving the active set) and exited. More meaningful than a static stake total — it shows churn. Zero-filled gracefully on a pre-mig-035 deploy or before the beacon indexer snapshots the registry.
Response 200 · ValidatorStatusBreakdown
networkstring | nulltotalintegerenteringintegeractiveintegerexitingintegerexitedintegerslashedintegerRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/validators/status-breakdown" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"network": "testnet",
"total": 512,
"entering": 0,
"active": 512,
"exiting": 0,
"exited": 0,
"slashed": 0
}/api/v1/qrl2/validators/topQRL 2.0Top Validators
Top validators ranked by lifetime withdrawn rewards.
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | integermin 1 · max 1000 | no | 100 |
Response 200 · TopValidatorsList
▸itemsValidatorDetail[]
itemsValidatorDetail[]validator_indexintegerrequiredtotal_withdrawn_planckstring | nulltotal_withdrawn_qrl2string | nullwithdrawal_countinteger | nulllast_recipientstring | nullfirst_withdrawal_atstring | nulllast_withdrawal_atstring | nullcurrent_statusstring | nullcurrent_effective_balanceinteger | nullblocks_proposed_countinteger | nullslashedboolean | nullfirst_proposal_atstring | nulllast_proposal_atstring | nulllimitinteger | nullnetworkstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/validators/top" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"validator_index": 160,
"total_withdrawn_planck": "716178647500000000000",
"total_withdrawn_qrl2": "716",
"withdrawal_count": 6676,
"last_recipient": "Qc0e6dd0e844e0048dcb0bd3fdcc44a970beca38d",
"last_withdrawal_at": "2026-07-31T11:01:36"
},
{
"validator_index": 290,
"total_withdrawn_planck": "715588508019000000000",
"total_withdrawn_qrl2": "715",
"withdrawal_count": 6243,
"last_recipient": "Qc0e6dd0e844e0048dcb0bd3fdcc44a970beca38d",
"last_withdrawal_at": "2026-07-31T10:38:36"
},
"… (98 more)"
],
"limit": 100,
"network": "testnet"
}/api/v1/qrl2/withdrawals/QRL 2.0List validator withdrawals (UI label: "Validator Rewards")
Paginated EIP-4895 withdrawal feed, newest first. Public-name mapping: surfaced as "Validator Rewards" in the UI (/rewards). The API uses the spec-aligned withdrawals term.
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| page | integermin 1 | no | 1 | |
| page_size | integermin 1 · max 100 | no | 25 | |
| address | string | null | no | — | Filter by recipient address |
Response 200 · WithdrawalsPaginated
▸itemsWithdrawalItem[]
itemsWithdrawalItem[]chainstringrequirednetworkstringrequiredheightintegerrequiredblock_hashstringrequiredwithdrawal_indexintegerrequiredchain_indexintegerrequiredvalidator_indexintegerrequiredaddressstringrequiredamountstringrequiredtimestampstringrequiredtotalinteger | nullpageinteger | nullpage_sizeinteger | nulltotal_pagesinteger | nulllimitinteger | nulloffsetinteger | nullhas_nextboolean | nullhas_prevboolean | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/withdrawals/" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"chain": "qrl2",
"network": "testnet",
"height": 174935,
"block_hash": "0xf697fd11528ce281af00e5f838f3ebdca0f414ca648f347f3cd5b81a4f523685",
"withdrawal_index": 15,
"chain_index": 2798943,
"validator_index": 75,
"address": "Qc0e6dd0e844e0048dcb0bd3fdcc44a970beca38d",
"amount": "4471872000000000",
"timestamp": "2026-07-31T12:03:36"
},
{
"chain": "qrl2",
"network": "testnet",
"height": 174935,
"block_hash": "0xf697fd11528ce281af00e5f838f3ebdca0f414ca648f347f3cd5b81a4f523685",
"withdrawal_index": 14,
"chain_index": 2798942,
"validator_index": 72,
"address": "Qc0e6dd0e844e0048dcb0bd3fdcc44a970beca38d",
"amount": "4471872000000000",
"timestamp": "2026-07-31T12:03:36"
},
"… (23 more)"
],
"total": 2798896,
"page": 1,
"page_size": 25,
"total_pages": 111956,
"limit": 25,
"offset": 0,
"has_next": true,
"has_prev": false
}/api/v1/qrl2/withdrawals/dailyQRL 2.0Per-day withdrawal rollup (UI label: "Daily rewards")
Per-day rollup: count, total amount (planck), unique recipients.
Wave 6: ?days=N → ?window=30d (D4).
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| window | string | no | 30d | Look-back window for daily withdrawals. Default 30d. |
Response 200 · DailyWithdrawalsList
▸itemsDailyWithdrawalItem[]
itemsDailyWithdrawalItem[]daystringrequiredwithdrawal_countintegerrequiredtotal_amountstringrequiredunique_recipientsintegerrequiredcountinteger | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/withdrawals/daily" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2026-07-01",
"withdrawal_count": 23040,
"total_amount": "2888744501135000000000",
"unique_recipients": 1
},
{
"day": "2026-07-02",
"withdrawal_count": 23040,
"total_amount": "2917808166447000000000",
"unique_recipients": 1
},
"… (29 more)"
],
"count": 31
}/api/v1/qrl2/withdrawals/summaryQRL 2.0All-time withdrawal totals (UI label: "Rewards summary")
All-time totals (count, amount, recipients, first/last day).
Response 200 · WithdrawalSummaryResponse
total_withdrawalsintegertotal_amountstringunique_recipientsinteger | nullapprox_unique_recipientsinteger | nullfirst_daystring | nulllast_daystring | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/withdrawals/summary" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"total_withdrawals": 2798944,
"total_amount": "357002332914421000000000",
"unique_recipients": 1,
"approx_unique_recipients": 1,
"first_day": "2026-04-01",
"last_day": "2026-07-31"
}/api/v1/qrl2/withdrawals/top-recipientsQRL 2.0Top operators by rewards received (UI label: "Top operators")
Recipient (withdrawal) addresses ranked by total EIP-4895 rewards received. One address can serve many validators run by the same operator, so this ranks operators rather than individual validators.
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | integermin 1 · max 100 | no | 10 |
Response 200 · TopWithdrawalRecipientsList
▸itemsTopWithdrawalRecipient[]
itemsTopWithdrawalRecipient[]addressstringrequiredtotal_amountstringrequiredwithdrawal_countintegerrequiredvalidator_countintegerrequiredlast_withdrawal_atstring | nullcountinteger | nullnetworkstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/withdrawals/top-recipients" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"address": "Qc0e6dd0e844e0048dcb0bd3fdcc44a970beca38d",
"total_amount": "357001455309566000000000",
"withdrawal_count": 2798896,
"validator_count": 512,
"last_withdrawal_at": "2026-07-31T12:03:36"
}
],
"count": 1,
"network": "testnet"
}All endpoints verified against a live indexer. Need the raw spec? See openapi.json or the API overview.