Browse API groups
Analytics API
Network activity
/api/v1/analytics/block-sizeBlock Size
Per-day average / max / sum block size in bytes.
Backs /charts/daily-block-size on the frontend. Reads quantascan.block_size_daily (mig 062).
Query parameters
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
windowoptionalstringdefault 30dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 30d. Examples: 24h, 7d, 90d.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/block-size" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2026-07-31",
"block_count": 724,
"avg_block_size": 1049,
"max_block_size": 1073,
"total_block_size": "760198"
},
{
"day": "2026-07-30",
"block_count": 1440,
"avg_block_size": 1056,
"max_block_size": 10094,
"total_block_size": "1521888"
},
"… (29 more)"
],
"count": 31,
"chain": "qrl2",
"network": "testnet",
"window_days": 30
}/api/v1/analytics/block-timesBlock Times
Per-day mean block-interval (seconds) + block count.
Useful for catching block-time degradation on PoW (qrl ~60s target) or slot-skipping on PoS (qrl2 ~12s target).
Query parameters
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
windowoptionalstringdefault 30dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 30d. Examples: 24h, 7d, 90d.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/block-times" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [],
"count": 0,
"chain": "qrl",
"network": "testnet",
"window_days": 30
}/api/v1/analytics/network/active-addresses-dailyActive Addresses Daily
Daily/weekly/monthly active addresses (DAU/WAU/MAU) per day.
Exact distinct active addresses from the mig-078 user-tx Gold states (same definition as the /timeline/active-addresses metric: no coinbase, no EIP-4895 withdrawals). DAU = that exact day; WAU/MAU = trailing 7/30 calendar days (exact uniques, not a sum-of-DAU approximation). Backs the weekly-monthly chart, /growth lead and /network sparse-gate. Day-count snaps to UI tiers (_snap_days) against cache-key enumeration.
Query parameters
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
windowoptionalstringdefault 90dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 90d. Examples: 24h, 7d, 90d.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/network/active-addresses-daily" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2026-05-02",
"dau": 4,
"wau": 9,
"mau": 82
},
{
"day": "2026-05-03",
"dau": 3,
"wau": 9,
"mau": 84
},
"… (89 more)"
],
"count": 91,
"days": 90,
"chain": "qrl2",
"network": "testnet"
}/api/v1/analytics/network/gas-trendsGas Trends
QRL2 EIP-1559 base-fee + burn trend per day. Wraps the underlying
qrl2_fee_burned_daily Gold table; exposed here for the analytics
namespace so dashboards have one root for all chart endpoints.
Query parameters
windowoptionalstringdefault 30dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 30d. Examples: 24h, 7d, 90d.
Response 200 · AnalyticsGasTrends
itemsobject[]daysinteger | nullchainstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/network/gas-trends" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2026-07-02",
"fee_burned_planck": "7850024",
"fee_burned_qrl2": "0",
"block_count": 20,
"avg_base_fee_planck": "7"
},
{
"day": "2026-07-03",
"fee_burned_planck": "2070761",
"fee_burned_qrl2": "0",
"block_count": 4,
"avg_base_fee_planck": "7"
},
"… (23 more)"
],
"days": 30,
"chain": "qrl2"
}/api/v1/analytics/network/healthNetwork Health
Composite per-chain health signal. Returns:
- latest_block_time
- tip_lag_seconds (now - latest_block_time)
- dlq_open_count (failed_blocks_open)
- silver_blocks_24h (rows written in the last 24h via ingested_at)
- status: 'ok' | 'degraded' | 'stalled' | 'unknown'
Frontend renders this as the dashboard traffic-light. Real ops alerting happens via Prometheus (alert_rules.yml), not this endpoint — this is for UX, not paging.
Response 200 · AnalyticsHealthCheck
chainsobjectchecked_atstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/network/health" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"chains": {
"qrl2:testnet": {
"chain": "qrl2",
"network": "testnet",
"latest_block_time": "2026-07-31T12:03:36",
"tip_lag_seconds": 12288,
"silver_blocks_24h": 5292,
"status": "degraded"
},
"qrl:mainnet": {
"chain": "qrl",
"network": "mainnet",
"latest_block_time": "2022-09-11T03:28:50",
"tip_lag_seconds": 122644774,
"dlq_open_count": 40,
"status": "stalled"
}
},
"checked_at": "2026-07-31T15:28:24.511401Z"
}/api/v1/analytics/network/new-vs-returning-dailyNew Vs Returning Daily
Per-day new-address vs returning-address breakdown.
Adoption-health signal — when returning > new sustained, the network is seeing real organic stickiness rather than churn.
Query parameters
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
windowoptionalstringdefault 30dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 30d. Examples: 24h, 7d, 90d.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/network/new-vs-returning-daily" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2026-07-01",
"new_addresses": 2,
"returning_addresses": 1
},
{
"day": "2026-07-02",
"new_addresses": 1,
"returning_addresses": 8
},
"… (24 more)"
],
"count": 26,
"days": 30,
"chain": "qrl2",
"network": "testnet"
}/api/v1/analytics/network/page-summaryNetwork Page Summary
Bundle for the /network hero strip: KPIs + sparse-data flag.
Reads the user-DAU rollup (etl_gold.active_addresses_daily, mig 078) for DAU/MAU and quantascan.daily_activity for the 30d tx count + delta. Single round-trip from the frontend on initial page load.
Query parameters
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
Response 200 · GenericObject
Variable shape — see the example response below.
Request examples
curl -s "https://quantascan.io/api/v1/analytics/network/page-summary" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"chain": "qrl2",
"network": "testnet",
"dau_yesterday": 1,
"mau_proxy": 199,
"tx_count_30d": 988,
"tx_count_prior_30d": 256,
"tx_count_delta_pct": 285.9,
"is_sparse": false
}/api/v1/analytics/network/reorgsNetwork Reorgs
Reorg event history (P3 #20, migration 037).
Each row = one detected chain-reorg, with the old hash (prev_hash)
that got swapped out and the new hash (new_hash) that replaced it
at that height. Returns empty on pre-mig-037 deploys or chains that
haven't reorged.
Query parameters
pageoptionalintegermin 1default 1page_sizeoptionalintegermin 1 · max 200default 50chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/network/reorgs" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [],
"count": 0,
"total": 0,
"limit": 50,
"offset": 0
}/api/v1/analytics/network/tpsNetwork Tps
Rolling transactions-per-second per chain over 1h / 24h / 7d windows.
Cheap composite over the hourly_activity Gold table. Powers a "Network throughput" widget on the landing page.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/network/tps" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"chain": "qrl2",
"network": "testnet",
"tps_1h": 0,
"tps_24h": 0.000011574074074074072,
"tps_7d": 0.00000496031746031746
}
],
"count": 1,
"generated_at": "2026-07-31T15:28:24.476673Z"
}/api/v1/analytics/wallet-countWallet Count
Per-day new-wallets + cumulative wallet count (every distinct wallet ever seen on-chain).
Backs the /charts/wallet-count thumbnail + the growth widget. Cumulative
count uses a window function over quantascan.wallets.first_seen_at
(mig 062, view renamed mig 075). The detail page's "with balance (> 0)"
toggle is served separately via /timeline/active-wallets.
Query parameters
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
windowoptionalstringdefault 30dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 30d. Examples: 24h, 7d, 90d.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/wallet-count" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2026-07-30",
"new_wallets": 2,
"wallet_count": 406
},
{
"day": "2026-07-29",
"new_wallets": 1,
"wallet_count": 404
},
"… (20 more)"
],
"count": 22,
"chain": "qrl2",
"network": "testnet",
"window_days": 30
}Supply
/api/v1/analytics/supply/age-dailySupply Age Daily
Per-day supply-by-age buckets (HODL waves / dormant supply over time, mig 089).
The over-time companion to /supply/dormant-buckets: each day's positive-balance supply split by last-activity age (<1m / 1m-1y / 1-2y / 2-5y / >5y), as % of supply. Powers a stacked composition chart. Consensus-banned addresses (mig 077) are excluded by the backfill, so it matches the dormant-buckets snapshot.
Query parameters
windowoptionalstringdefault 365dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 365d. Examples: 24h, 7d, 90d.
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/supply/age-daily" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2026-04-01",
"bucket": "1-2y",
"balance_pct": 0,
"holders": 0
},
{
"day": "2026-04-01",
"bucket": "1m-1y",
"balance_pct": 0,
"holders": 0
},
"… (488 more)"
],
"count": 490,
"chain": "qrl2",
"network": "testnet",
"window_days": 365,
"buckets": [
"<1m",
"1m-1y",
"… (3 more)"
]
}/api/v1/analytics/supply/cohortsSupply Cohorts
The ten "ocean" holder tiers (plankton → leviathan) by each wallet's ABSOLUTE coin balance (whale ≥ 100,000, orca ≥ 40,000, up to leviathan ≥ 5,000,000; the single ladder in app.core.tiers), with holder-count AND supply-% per tier. On-demand over address_summary. Cached 10 min.
Query parameters
individuals_onlyoptionalbooleandefault falseExclude the wallets that are not a single private holder — custodial/treasury classes (exchange + foundation) and confirmed exchange deposit relays — the same set the /whales cohort excludes, so the size-tier 'whale' population matches the /whales count. Powers the 'Individuals only' toggle on the /distribution tier chart. Default false = all holders (consistent with the Gini/Nakamoto/top-N metrics on the same page).
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
Response 200 · GenericObject
Variable shape — see the example response below.
Request examples
curl -s "https://quantascan.io/api/v1/analytics/supply/cohorts" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"chain": "qrl2",
"network": "testnet",
"holders": 289,
"cohorts": [
{
"cohort": "whale",
"holders": 3,
"supply_pct": 99.05
},
{
"cohort": "shark",
"holders": 19,
"supply_pct": 0.91
},
"… (4 more)"
]
}/api/v1/analytics/supply/combined-curveSupply Combined Curve
Stacked dual-series cumulative supply (QRL PoW + QRL2 PoS) per day.
Chain-less and ALWAYS full history — a cumulative total-supply curve only makes sense from genesis, so no window parameter. QRL2 is plotted net of the re-homed migration mirror so the cumulative line has no cutover jump once the snapshot lands.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/supply/combined-curve" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2018-06-26",
"qrl_minted_coins": 10216.192418,
"qrl2_minted_coins": 0,
"qrl_cumulative_coins": 65010216.1924,
"qrl2_cumulative_coins": 0
},
{
"day": "2018-06-27",
"qrl_minted_coins": 8783.173246,
"qrl2_minted_coins": 0,
"qrl_cumulative_coins": 65018999.3657,
"qrl2_cumulative_coins": 0
},
"… (1659 more)"
],
"count": 1661
}/api/v1/analytics/supply/curveSupply Curve
Historical cumulative minted supply per day. Reads from the existing total_supply_timeline Gold MV (no new migration). Halving-projection and burn-via-migration tracking deferred to backlog.
Query parameters
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
windowoptionalstringdefault 365dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 365d. Examples: 24h, 7d, 90d.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/supply/curve" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2026-04-01",
"minted_today": "2465408896383",
"block_count_today": 22560,
"cumulative_minted": "2465408896383"
},
{
"day": "2026-04-02",
"minted_today": "3081833396093",
"block_count_today": 23040,
"cumulative_minted": "5547242292476"
},
"… (120 more)"
],
"count": 122,
"chain": "qrl2",
"days": 365
}/api/v1/analytics/supply/distribution-timelineSupply Distribution Timeline
Daily concentration timeseries (top-10 share, Gini, Nakamoto) from the
forward-only snapshot table etl_gold.distribution_daily (mig 084).
Degrades to an empty series if the table/job isn't live yet. Cached 10 min.
Query parameters
windowoptionalstringdefault 90dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 90d. Examples: 24h, 7d, 90d.
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/supply/distribution-timeline" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2026-05-03",
"top10_pct": 99.8286,
"top100_pct": 100,
"gini": 0.9779,
"nakamoto": 1,
"holders": 50,
"hhi": 9732.2,
"palma": 1000000
},
{
"day": "2026-05-04",
"top10_pct": 99.7787,
"top100_pct": 100,
"gini": 0.978,
"nakamoto": 1,
"holders": 51,
"hhi": 9732.16,
"palma": 1000000
},
"… (67 more)"
],
"count": 69,
"chain": "qrl2",
"network": "testnet",
"days": 90
}/api/v1/analytics/supply/dormant-bucketsSupply Dormant Buckets
Positive-balance holders bucketed by last_seen age.
Buckets: <1m / 1m-1y / 1-2y / 2-5y / >5y. Each returns holder-count + total-balance-% held — answers "how much supply is in deeply-dormant addresses (likely lost)".
Query parameters
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/supply/dormant-buckets" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"bucket": "<1m",
"holders": 183,
"total_balance_pct": 98.9
},
{
"bucket": "1m-1y",
"holders": 106,
"total_balance_pct": 1.1
}
],
"count": 2,
"chain": "qrl2",
"network": "testnet"
}/api/v1/analytics/supply/entity-distributionSupply Entity Distribution
Supply share per wallet entity-class (mig 080) + a recomputed concentration EXCLUDING custodial/protocol entities. Answers "are the big holders exchanges/foundation/pools or individuals?". Joins quantascan.wallet_class with address_summary. Cached 10 min.
Query parameters
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
Response 200 · GenericObject
Variable shape — see the example response below.
Request examples
curl -s "https://quantascan.io/api/v1/analytics/supply/entity-distribution" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"chain": "qrl2",
"network": "testnet",
"holders": 289,
"classes": [
{
"wallet_class": "others",
"holders": 285,
"supply_pct": 100
},
{
"wallet_class": "",
"holders": 4,
"supply_pct": 0
}
],
"excl_entities": {
"holders": 289,
"supply_pct_of_total": 100,
"top10_pct": 99.47,
"gini": 0.9958,
"nakamoto": 1
}
}/api/v1/analytics/supply/holders-distributionSupply Holders Distribution
Top 10 / 100 / 1k / 10k holder % of supply + Gini + Nakamoto.
Pulls all positive-balance address balances and computes inequality metrics in Python. ~13k addresses on qrl, ~50 on qrl2 — fits comfortably in memory. Cached 10 minutes (distribution moves slowly).
Query parameters
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
Response 200 · GenericObject
Variable shape — see the example response below.
Request examples
curl -s "https://quantascan.io/api/v1/analytics/supply/holders-distribution" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"chain": "qrl2",
"network": "testnet",
"holders": 289,
"distribution": [
{
"bucket": "Top 10",
"rank_threshold": 10,
"pct": 99.47
},
{
"bucket": "Top 100",
"rank_threshold": 100,
"pct": 100
},
"… (2 more)"
],
"gini": 0.9958,
"nakamoto": 1
}/api/v1/analytics/supply/lorenzSupply Lorenz
Lorenz-curve points (cumulative %-holders vs cumulative %-supply) + the exact Gini. Backs the /distribution Lorenz chart — the visual companion to the Gini number. Down-sampled to ~100 points; computed on-demand over quantascan.address_summary (no new table). Cached 10 min.
Query parameters
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
Response 200 · GenericObject
Variable shape — see the example response below.
Request examples
curl -s "https://quantascan.io/api/v1/analytics/supply/lorenz" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"chain": "qrl2",
"network": "testnet",
"holders": 289,
"points": [
{
"p_holders": 0,
"p_supply": 0
},
{
"p_holders": 0.692,
"p_supply": 0
},
"… (144 more)"
],
"gini": 0.9958
}/api/v1/analytics/supply/overviewSupply Overview
Combined cross-chain ecosystem-supply KPIs for the /supply hub page.
Chain-less by design (like every analytics endpoint): one migration-adjusted
total across QRL Legacy + QRL 2.0, a 3-way "where supply lives" split, per-
chain emission/cap, and the migration_measurable flag that drives the
"not yet measurable" UI state (CLAUDE.md:153). Backed by
app.core.supply_metrics.get_combined_supply_overview — existing Gold views
only, no new migration. Degrades to a zeroed shape if views are missing.
Response 200 · GenericObject
Variable shape — see the example response below.
Request examples
curl -s "https://quantascan.io/api/v1/analytics/supply/overview" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"available": true,
"combined_supply_shor": "76923065470161060",
"combined_supply_coins": 76923065.4702,
"emission_per_day_coins": 2895.216,
"inflation_annual_pct": 1.37,
"mirror_shor": "0",
"migration_measurable": false,
"is_sparse": true,
"qrl": {
"minted_shor": "76566060680830737",
"minted_coins": 76566060.6808,
"genesis_coins": 65000000,
"mined_coins": 11566060.6808,
"mining_pool_coins": 40000000,
"mining_remaining_coins": 28433939.3192,
"cap_coins": 105000000,
"cap_pct": 72.92,
"remaining_coins": 28433939.3192,
"emission_per_day_coins": 0,
"inflation_annual_pct": 0,
"indexed_height": 2224459,
"node_tip_height": 4236819,
"is_fully_indexed": false
},
"max_supply": {
"max_coins": 105000000,
"public_sale_coins": 52000000,
"reserved_coins": 13000000,
"foundation_earmark_coins": 8000000,
"genesis_coins": 65000000,
"mining_pool_coins": 40000000,
"mined_coins": 11566060.6808,
"unmined_coins": 28433939.3192
},
"qrl2": {
"minted_shor": "357004789330326",
"minted_coins": 357004.7893,
"net_minted_shor": "357004789330323",
"net_minted_coins": 357004.7893,
"fee_burned_shor": "3",
"fee_burned_coins": 0,
"cap_coins": null,
"emission_per_day_coins": 2895.216,
"inflation_annual_pct": 296.01
},
"split": {
"legacy_shor": "76566060680830737",
"legacy_coins": 76566060.6808,
"legacy_pct": 99.54,
"claimed_shor": "0",
"claimed_coins": 0,
"claimed_pct": 0,
"qrl2_net_shor": "357004789330323",
"qrl2_net_coins": 357004.7893,
"qrl2_net_pct": 0.46
}
}/api/v1/analytics/supply/summarySupply Summary
Hero KPI strip for the /supply page: total supply, holders count, top-10 share, dormant-1y %.
Backed by app.core.supply_metrics.get_supply_summary — single CH query over quantascan.address_summary. Cached 5 minutes.
Query parameters
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
Response 200 · GenericObject
Variable shape — see the example response below.
Request examples
curl -s "https://quantascan.io/api/v1/analytics/supply/summary" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"chain": "qrl2",
"network": "testnet",
"holders": 289,
"total_supply": "80357000678950137572690762",
"top10_supply": "79934964253157455255286433",
"top10_pct": 99.47,
"dormant_holders_1y": 0,
"dormant_supply_1y_pct": 0,
"is_sparse": false
}/api/v1/analytics/total_supplyTotal Supply
Cross-chain mint per day. Today QRL coinbase + QRL2 withdrawals;
the migration columns (*_via_migration) stay 0 until the bridge
parser is built (Fase 6+).
Query parameters
windowoptionalstringdefault 90dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 90d. Examples: 24h, 7d, 90d.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/total_supply" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2026-05-03",
"qrl_minted_shor": "0",
"qrl2_minted_shor": "2911688665332",
"qrl_burned_via_migration_shor": "0",
"qrl2_minted_via_migration_shor": "0",
"qrl_block_count": 0,
"qrl2_block_count": 23040
},
{
"day": "2026-05-04",
"qrl_minted_shor": "0",
"qrl2_minted_shor": "3082804915989",
"qrl_burned_via_migration_shor": "0",
"qrl2_minted_via_migration_shor": "0",
"qrl_block_count": 0,
"qrl2_block_count": 23040
},
"… (88 more)"
],
"days": 90
}Transactions & timelines
/api/v1/analytics/timeline/{metric}Unified Timeline
Cross-chain QRL → QRL2 stitched timeline for one metric.
metric ∈ {transactions, blocks, gas, wallets, active-wallets, active-wallets-100, active-wallets-1000, supply, block_time, block_size, active-addresses, active-addresses-excl-payouts}.
Wave 7: ?days=N → ?window=DURATION (D4). The legacy days=0
"all-time" sentinel maps to ?window=10y (3650d, the max cap) —
no real chain history exceeds that. The day-count snaps UP to the
nearest UI tier (_snap_days) to keep the cache-key space bounded.
On testnet (no cutover set) returns the QRL mainnet series in points
plus the QRL2 testnet series in preview (rendered separately so the
wall-clock overlap isn't concatenated). Once the migration cutover block
is configured (mainnet launch) the two chains are stitched into a single
continuous points series with cutover_block / cutover_date set.
Path parameters
metricrequiredstring
Query parameters
windowoptionalstringdefault 90dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 90d. Examples: 24h, 7d, 90d.
Response 200 · GenericObject
Variable shape — see the example response below.
Request examples
curl -s "https://quantascan.io/api/v1/analytics/timeline/transactions" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"metric": "transactions",
"unit": "txns",
"kind": "flow",
"phase": "testnet",
"cutover_block": null,
"cutover_date": null,
"points": [
{
"date": "2022-06-14",
"value": 532,
"chain": "qrl"
},
{
"date": "2022-06-15",
"value": 592,
"chain": "qrl"
},
"… (88 more)"
],
"preview": []
}/api/v1/analytics/transactions-normalisedTransactions Normalised
Cross-chain daily tx volume + count in one denomination (quanta).
QRL and QRL2 use different base units (shor vs planck). This view normalises both to shor-equivalent so they can be plotted on the same Y-axis. Powers cross-chain comparison charts.
Query parameters
windowoptionalstringdefault 30dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 30d. Examples: 24h, 7d, 90d.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/transactions-normalised" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"chain": "qrl2",
"day": "2026-07-30",
"tx_count": 1,
"volume_quanta": "0",
"fees_quanta": "442563"
},
{
"chain": "qrl2",
"day": "2026-07-29",
"tx_count": 1,
"volume_quanta": "10000000000",
"fees_quanta": "21000"
},
"… (23 more)"
],
"count": 25,
"window_days": 30,
"unit": "quanta (shor for QRL, planck/1e9 for QRL2)"
}/api/v1/analytics/transactions/by-typeTransactions By Type
Per-day distinct transaction count grouped by tx_type (mig 070).
Powers the stacked "transaction types" composition chart. QRL surfaces its real subtype mix (coinbase / transfer / slave / ...); QRL2 surfaces derived EVM categories (transfer / contract_call / contract_create).
Query parameters
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
windowoptionalstringdefault 30dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 30d. Examples: 24h, 7d, 90d.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/transactions/by-type" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [],
"count": 0,
"chain": "qrl",
"network": "testnet",
"window_days": 30
}/api/v1/analytics/transactions/user-dailyTransactions User Daily
Per-day economic USER transactions (mig 070 quantascan.user_tx_daily).
The PURE daily-txs definition: QRL excludes coinbase (block-reward) and admin txs (slave/message/token/...); QRL2 counts all EVM txs. Backs the /charts/daily-txs single-chain thumbnail; the cross-chain detail page uses the stitched /timeline/transactions, which reads the same view.
Query parameters
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
windowoptionalstringdefault 30dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 30d. Examples: 24h, 7d, 90d.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/transactions/user-daily" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2026-07-30",
"user_tx_count": 1
},
{
"day": "2026-07-29",
"user_tx_count": 1
},
"… (24 more)"
],
"count": 26,
"chain": "qrl2",
"network": "testnet",
"window_days": 30
}Fees & gas
/api/v1/analytics/fees/percentilesFees Percentiles
Daily fee p50/p95/p99 + max + total.
Surfaces what the typical user actually paid (vs a sum-of-fees view that's dominated by single big txs). Powers a "Fee distribution" chart with three percentile lines per day.
Query parameters
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
windowoptionalstringdefault 30dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 30d. Examples: 24h, 7d, 90d.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/fees/percentiles" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2026-07-30",
"tx_count": 1,
"fee_p50": "442563003097941",
"fee_p95": "442563003097941",
"fee_p99": "442563003097941",
"fee_max": "442563003097941",
"fee_sum": "442563003097941"
},
{
"day": "2026-07-29",
"tx_count": 1,
"fee_p50": "21000000294000",
"fee_p95": "21000000294000",
"fee_p99": "21000000294000",
"fee_max": "21000000294000",
"fee_sum": "21000000294000"
},
"… (24 more)"
],
"count": 26,
"chain": "qrl2",
"network": "testnet",
"window_days": 30
}/api/v1/analytics/gas-distributionGas Distribution
Per-day gas-used bucketed distribution (qrl2 EVM only).
7 buckets aligned to common EVM ops (simple value transfer / QRC-20 / contract call / contract swap / complex contract call / deploy / 1M+). Powers a stacked-bar chart and surfaces what kind of workload the chain handles over time.
Query parameters
windowoptionalstringdefault 30dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 30d. Examples: 24h, 7d, 90d.
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/gas-distribution" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2026-07-30",
"bucket": 4,
"bucket_label": "250k-500k",
"bucket_count": 1
},
{
"day": "2026-07-29",
"bucket": 0,
"bucket_label": "0-21k",
"bucket_count": 1
},
"… (88 more)"
],
"count": 90,
"network": "testnet",
"window_days": 30,
"buckets": [
{
"id": 0,
"label": "0-21k",
"meaning": "simple value transfer"
},
{
"id": 1,
"label": "21k-50k",
"meaning": "QRC-20 token transfer"
},
"… (5 more)"
]
}/api/v1/qrl2/fees/burned/dailyQRL 2.0Burn Daily
Per-day EIP-1559 burn for the "supply-deflation" line on the QRL2 dashboard.
Wave 6: ?days=N → ?window=30d (D4).
Query parameters
windowoptionalstringdefault 30dLook-back window for daily EIP-1559 burn. Default 30d.
Response 200 · FeeBurnDailyList
itemsobject[]daysinteger | nullnetworkstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/fees/burned/daily" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2026-07-02",
"fee_burned_planck": "7850024",
"fee_burned_qrl2": "0",
"block_count": 20,
"gas_used_total": "1121432",
"avg_base_fee_planck": "7"
},
{
"day": "2026-07-03",
"fee_burned_planck": "2070761",
"fee_burned_qrl2": "0",
"block_count": 4,
"gas_used_total": "295823",
"avg_base_fee_planck": "7"
},
"… (28 more)"
],
"days": 30,
"network": "testnet"
}/api/v1/qrl2/fees/burned/summaryQRL 2.0Burn Summary
All-time burn totals + 24h/7d/30d rolling windows in one response.
Response 200 · FeeBurnSummary
networkstringrequiredtotal_planckstring | nulltotal_qrl2string | nulltotal_blocksinteger | nullplanck_24hstring | nullplanck_7dstring | nullplanck_30dstring | nulllatest_daystring | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/fees/burned/summary" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"total_planck": "3237548755",
"total_qrl2": "0",
"total_blocks": 1972,
"planck_24h": "0",
"planck_7d": "3400453",
"planck_30d": "1166836594",
"latest_day": "2026-07-30",
"network": "testnet"
}Whales
/api/v1/analytics/whales/biggestWhales Biggest Txs
Largest single transactions by value within the time window.
Distinct from /transactions/whales (which is a recency feed) — this is sorted-by-value within a window. Used for "biggest tx today / 7d / 30d / all-time" feed. Not threshold-aware on purpose.
Query parameters
limitoptionalintegermin 1 · max 100default 20chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
windowoptionalstringdefault 30dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 30d. Examples: 24h, 7d, 90d.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/whales/biggest" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"tx_hash": "0x956da14889674e6c0d26b0959118c19b40e6273e21b7dbb8599589eccfb62d93",
"height": 143838,
"from_addr": "Q6153d37fa4da7193e6219dcbd2bbe62fa12905b1",
"to_addr": "Q7d4175166aa4b696cf77c23808811ef5ffa7c36b",
"value": "20000000000000000000000",
"timestamp": "2026-07-09 21:46:36.000",
"tx_type": null
},
{
"tx_hash": "0x90b12b4199b6e4ada293c3154ca17cfdfcf025e6226d5a77ea71b48c6063c74b",
"height": 137425,
"from_addr": "Qf68379b949fc1cf6eb1695237be8e734118a0931",
"to_addr": "Qfc8f79ab26f37d238a4ffc60a23258b050a5ccfb",
"value": "2000000000000000000000",
"timestamp": "2026-07-05 10:53:36.000",
"tx_type": null
},
"… (18 more)"
],
"count": 20,
"chain": "qrl2",
"network": "testnet",
"days": 30
}/api/v1/analytics/whales/cohortsWhales Cohorts
Per-cohort breakdown of the whale population.
Buckets: new / active / hodler / distributor / dormant. Each entry returns holder-count + balance-share-of-cohort. Sums to ~100%.
Query parameters
threshold_pctoptionalnumber | nullchainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
Response 200 · GenericObject
Variable shape — see the example response below.
Request examples
curl -s "https://quantascan.io/api/v1/analytics/whales/cohorts" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"cohort": "new",
"count": 0,
"balance_pct": 0
},
{
"cohort": "active",
"count": 2,
"balance_pct": 0.4
},
"… (3 more)"
],
"total_whales": 3,
"chain": "qrl2",
"network": "testnet",
"whale_threshold": "99999999999999991611392",
"threshold_pct": null
}/api/v1/analytics/whales/exchange-flowWhales Exchange Flow
Net flow between the whale cohort and labeled exchanges over the window.
deposits (whale→exchange) = distribution/bearish; withdrawals
(exchange→whale) = accumulation/bullish; net = withdrawals − deposits. A
very large window reads as "all time" (all_time=true). Depends on curated
exchange labels — returns a neutral exchange_labeled=false shape on chains
without any (e.g. QRL2 testnet).
Query parameters
threshold_pctoptionalnumber | nullchainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
windowoptionalstringdefault 30dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 30d. Examples: 24h, 7d, 90d.
Response 200 · GenericObject
Variable shape — see the example response below.
Request examples
curl -s "https://quantascan.io/api/v1/analytics/whales/exchange-flow" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"chain": "qrl2",
"network": "testnet",
"days": 30,
"all_time": false,
"deposits": "0",
"withdrawals": "0",
"net": "0",
"deposit_txs": 0,
"withdrawal_txs": 0,
"exchange_labeled": false,
"exchange_count": 0,
"whale_threshold": "0",
"threshold_pct": null
}/api/v1/analytics/whales/heatmapWhales Heatmap
Daily count of whales who moved at all, last N days.
Returns one row per calendar day in the window (including zero days) with movers, volume and normalised intensity (0..1). Frontend renders as a GitHub-style calendar heatmap.
Query parameters
threshold_pctoptionalnumber | nullchainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
windowoptionalstringdefault 90dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 90d. Examples: 24h, 7d, 90d.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/whales/heatmap" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2026-05-02",
"movers": 1,
"volume": "2894771256008000000000",
"intensity": 0.5
},
{
"day": "2026-05-03",
"movers": 1,
"volume": "2921688665332000000000",
"intensity": 0.5
},
"… (89 more)"
],
"count": 91,
"chain": "qrl2",
"network": "testnet",
"days": 90,
"max_movers": 2,
"whale_threshold": "99999999999999991611392",
"threshold_pct": null
}/api/v1/analytics/whales/leaderboardWhales Leaderboard
Top N wallets by balance, with 7-day net-flow delta.
Powers the "accumulating / distributing / stable" insight on the /whales page. Delta uses address_balance_daily (W2 MV).
Query parameters
limitoptionalintegermin 1 · max 200default 50threshold_pctoptionalnumber | nullchainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/whales/leaderboard" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"rank": 1,
"address": "Qc0e6dd0e844e0048dcb0bd3fdcc44a970beca38d",
"balance": "79275760786657432843151000",
"tx_count": 2798931,
"last_seen": "2026-07-31 12:03:36.000",
"delta_7d": "21990899784414000000000"
},
{
"rank": 2,
"address": "Q4242424242424242424242424242424242424242",
"balance": "200000000000000000000000",
"tx_count": 3,
"last_seen": "2026-05-19 05:41:36.000",
"delta_7d": "0"
},
"… (1 more)"
],
"count": 3,
"chain": "qrl2",
"network": "testnet",
"whale_threshold": "99999999999999991611392",
"threshold_pct": null
}/api/v1/analytics/whales/moversWhales Movers
Biggest accumulators & distributors within the whale cohort.
Replaces the old "top wallets by balance" leaderboard (a duplicate of /richlist) with a behavioural angle: who moved the most net coins over the window. Exchanges are excluded so the lists are individual holders.
Query parameters
limitoptionalintegermin 1 · max 50default 10threshold_pctoptionalnumber | nullchainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
windowoptionalstringdefault 7dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 7d. Examples: 24h, 7d, 90d.
Response 200 · GenericObject
Variable shape — see the example response below.
Request examples
curl -s "https://quantascan.io/api/v1/analytics/whales/movers" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"accumulators": [
{
"address": "Qc0e6dd0e844e0048dcb0bd3fdcc44a970beca38d",
"balance": "79275760786657432843151000",
"net_flow": "21990899784414000000000"
}
],
"distributors": [],
"chain": "qrl2",
"network": "testnet",
"window_days": 7,
"whale_threshold": "99999999999999991611392",
"threshold_pct": null
}/api/v1/analytics/whales/sentimentWhales Sentiment
Signed net-flow across the whale cohort over the window.
Powers the bull/bear barometer hero on /whales. Positive net_flow = whales accumulating; negative = distributing. Also returns split counts (accumulators vs distributors) so the UI can show "X buying / Y selling" alongside the headline figure.
Query parameters
threshold_pctoptionalnumber | nullchainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
windowoptionalstringdefault 7dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 7d. Examples: 24h, 7d, 90d.
Response 200 · GenericObject
Variable shape — see the example response below.
Request examples
curl -s "https://quantascan.io/api/v1/analytics/whales/sentiment" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"chain": "qrl2",
"network": "testnet",
"days": 7,
"net_flow": "21990899784414000000000",
"net_flow_pct": 0.0276,
"accumulators": 1,
"distributors": 0,
"whale_count": 3,
"total_whale_balance": "79596760786657432843151000",
"whale_threshold": "99999999999999991611392",
"threshold_pct": null
}/api/v1/analytics/whales/sparklinesWhales Sparklines
Per-whale daily balance series, reconstructed from daily flows.
Returns top-N whales by current balance with a chronological [{day, balance}] series. Used to render inline 30d trend sparklines next to each leaderboard row.
Query parameters
limitoptionalintegermin 1 · max 100default 25threshold_pctoptionalnumber | nullchainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
windowoptionalstringdefault 30dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 30d. Examples: 24h, 7d, 90d.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/whales/sparklines" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"address": "Qc0e6dd0e844e0048dcb0bd3fdcc44a970beca38d",
"series": [
{
"day": "2026-07-01",
"balance": "79188905614325919843151000"
},
{
"day": "2026-07-02",
"balance": "79191823422492366843151000"
},
"… (29 more)"
]
},
{
"address": "Q4242424242424242424242424242424242424242",
"series": [
{
"day": "2026-07-01",
"balance": "200000000000000000000000"
},
{
"day": "2026-07-02",
"balance": "200000000000000000000000"
},
"… (29 more)"
]
},
"… (1 more)"
],
"count": 3,
"chain": "qrl2",
"network": "testnet",
"days": 30,
"whale_threshold": "99999999999999991611392",
"threshold_pct": null
}/api/v1/analytics/whales/summaryWhales Summary
Hero KPIs for the /whales page: whale-count, total whale balance, movers in 7d, biggest tx in 30d.
Whale threshold can be the legacy 100K fixed value (when threshold_pct is omitted) or computed as a percentage of current total supply via the slider on /whales. Dynamic mode keeps the "Whale" badge on /address/[hash] in sync only when called without threshold_pct.
Query parameters
threshold_pctoptionalnumber | nullIf set, threshold = this %% of current total supply. None = legacy 100K floor.
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
Response 200 · GenericObject
Variable shape — see the example response below.
Request examples
curl -s "https://quantascan.io/api/v1/analytics/whales/summary" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"chain": "qrl2",
"network": "testnet",
"whale_threshold": "99999999999999991611392",
"whale_count": 3,
"total_whale_balance": "79596760786657432843151000",
"total_supply": "80357000678950137572690762",
"whale_supply_pct": 99.05,
"avg_per_whale": "26532253595552477614383666",
"moved_whales_7d": 1,
"biggest_tx_30d": "20000000000000000000000",
"is_sparse": true,
"threshold_pct": null
}Overview & cross-chain
/api/v1/analytics/cross-chain/history/{address}Cross Chain History
Unified wallet history across both chains. Returns rows from QRL +
QRL2 sorted by timestamp DESC. Uses unified_account_history view —
while address_linkage is empty, returns per-chain history for the
single address. Post-bridge: combined history of all linked addresses.
Path parameters
addressrequiredstring
Query parameters
pageoptionalintegermin 1default 1page_sizeoptionalintegermin 1 · max 200default 50
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/cross-chain/history/<address>" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"quantascan_account_id": "",
"chain": "qrl2",
"timestamp": "2026-07-30T19:22:36",
"height": 173934,
"tx_hash": "0x7757ba180d74a02a33350b143bca0c8ee5a55c912ce8e359cfc24646baf85e2c",
"from_addr": "Qedc109a7e31a982023b91f8e2fb46c34ca524f7d",
"to_addr": null,
"value_quanta": "0",
"tx_type": null,
"migration_role": "normal"
},
{
"quantascan_account_id": "",
"chain": "qrl2",
"timestamp": "2026-06-01T19:17:36",
"height": 88969,
"tx_hash": "0x03106d397f807b64e7ee8074a1704960f9f16a157efa1972d960cbe0278e1b0f",
"from_addr": "Qedc109a7e31a982023b91f8e2fb46c34ca524f7d",
"to_addr": "Q83242a8fde6429aa53e050aefb03c0382a495df3",
"value_quanta": "0",
"tx_type": null,
"migration_role": "normal"
},
"… (2 more)"
],
"address": "Qedc109a7e31a982023b91f8e2fb46c34ca524f7d",
"limit": 50,
"offset": 0
}/api/v1/analytics/dashboard/summaryDashboard Summary
Single-call bundle for the landing page. Per chain returns:
- headline counts (blocks, txs, tokens, validators)
- latest_block_time
- 24h fee_burned (qrl2)
- 7-day activity sparkline data
Designed so the homepage server-component can fetch once + render everything above-the-fold without orchestrating multiple calls.
Response 200 · AnalyticsDashboardSummary
Variable shape — see the example response below.
Request examples
curl -s "https://quantascan.io/api/v1/analytics/dashboard/summary" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"chains": {
"qrl": {
"chain": "qrl",
"network": "mainnet",
"total_blocks": 2224460,
"min_height": 0,
"max_height": 2224459,
"total_transactions": 3425275,
"latest_block_time": "2022-09-11T03:28:50",
"tokens_count": 322
},
"qrl2": {
"chain": "qrl2",
"network": "testnet",
"total_blocks": 174935,
"min_height": 1,
"max_height": 174935,
"total_transactions": 1977,
"latest_block_time": "2026-07-31T12:03:36",
"tokens_count": 136,
"validators_count": 512,
"fee_burned_24h_planck": "0",
"activity_7d": [
{
"day": "2026-07-31",
"block_count": 724,
"tx_count": 0
},
{
"day": "2026-07-30",
"block_count": 1440,
"tx_count": 1
},
"… (5 more)"
]
}
},
"generated_at": "2026-07-31T15:28:23.798558Z"
}/api/v1/analytics/exchange/largest-transfersExchange Largest Transfers
Largest single deposits and withdrawals within the window.
Concrete deposit/withdrawal feed for /exchange-flow — sorted by value, each row tagged deposit (into an exchange) or withdrawal (out of one).
Deposits are matched at the DEPOSIT ADDRESS, not at the later sweep into
the exchange main wallet, so from_addr is the actual depositor and the
timestamp is when the coins actually moved. exchange_label names the
venue even when the counterparty is one of its deposit addresses, and
via_relay marks exactly those rows. Transfers internal to one exchange
(sweeps, hot/cold rebalances) are excluded. qrl-primary; degrades to an
empty feed on chains without curated exchange labels (e.g. QRL2 testnet).
Query parameters
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
limitoptionalintegermin 1 · max 100default 20directionoptionalstringdefault bothwindowoptionalstringdefault 30dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 30d. Examples: 24h, 7d, 90d.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/exchange/largest-transfers" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [],
"count": 0,
"chain": "qrl",
"network": "testnet",
"days": 30,
"direction": "both",
"exchange_labeled": false
}/api/v1/analytics/exchange/summaryExchange Summary
Exchange-activity snapshot for the /exchange-flow page.
Per-exchange leaderboard (current balance + address count), aggregate net and gross flow (7d/30d), and the share of held supply on exchanges.
"An exchange" means its curated wallets PLUS its confirmed deposit relays —
the personal deposit addresses users are handed, which are swept into the
main wallet later. Balances therefore include coins parked in those deposit
addresses; relay_addresses and relay_balance_quanta report that part
separately per venue. qrl-primary — QRL2 exchange labels populate at
mainnet. Defaults to chain=qrl since that is where the curated exchange
labels live today.
A venue whose curated wallets have been silent for inactive_after_days
is flagged inactive and carries wallet_last_seen. Its custody is still
included in total_balance_quanta (the coins are really there) but not in
supply_pct / active_balance_quanta, which describe sell-ready supply.
supply_pct_all keeps the whole-custody share available.
Query parameters
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
Response 200 · GenericObject
Variable shape — see the example response below.
Request examples
curl -s "https://quantascan.io/api/v1/analytics/exchange/summary" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"chain": "qrl",
"network": "testnet",
"exchange_count": 0,
"tracked_addresses": 0,
"total_balance_quanta": 0,
"supply_pct": null,
"net_flow_7d_quanta": null,
"net_flow_30d_quanta": null,
"gross_inflow_7d_quanta": null,
"gross_outflow_7d_quanta": null,
"gross_inflow_30d_quanta": null,
"gross_outflow_30d_quanta": null,
"biggest": null,
"leaderboard": []
}/api/v1/analytics/home/highlightsHome Highlights
Curated "Today's highlights" for the home page.
4 small facts: biggest tx recent, busiest hour today, newest whale, block cadence. Each fact returns null when no data — frontend hides null entries gracefully so a sparse chain doesn't break the page.
Query parameters
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
Response 200 · GenericObject
Variable shape — see the example response below.
Request examples
curl -s "https://quantascan.io/api/v1/analytics/home/highlights" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"chain": "qrl2",
"network": "testnet",
"biggest_tx_recent": {
"window": "7d",
"tx_hash": "0xe981de6f7f770ac5d5d5b5a076e7994f6690dbd7554fd2308e2790634a05b8f0",
"value": "10000000000000000000",
"from_addr": "Q6153d37fa4da7193e6219dcbd2bbe62fa12905b1",
"to_addr": "Qbb2cdffb66221359edf62cb8b0d1c18c3b4ee4fb",
"timestamp": "2026-07-29 00:27:36.000"
},
"busiest_hour_today": null,
"newest_whale": {
"address": "Q7baa653b01c99fa7347a0aedc26b153aad08aad5",
"balance": "121000000000000000000000",
"first_seen": "2026-05-25 12:06:36.000"
},
"block_cadence": {
"blocks_24h": 1236,
"expected_24h": 7200,
"ratio": 0.17
}
}/api/v1/analytics/staking/apr-dailyStaking Apr Daily
Per-day validator APR % (qrl2-only, mig 092) — net beacon rewards (rewards minus penalties) annualized over staked principal. Can be negative on a low-participation testnet (inactivity leak). QRL Legacy (PoW) has no APR.
Query parameters
windowoptionalstringdefault 365dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 365d. Examples: 24h, 7d, 90d.
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/staking/apr-daily" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2026-06-20",
"apr_pct": 0.3848,
"rewarded_validators": 512
},
{
"day": "2026-06-21",
"apr_pct": 2.3212,
"rewarded_validators": 512
},
"… (16 more)"
],
"count": 18,
"network": "testnet",
"window_days": 365
}/api/v1/analytics/staking/dailyStaking Daily
Per-day PoS decentralisation (qrl2-only, mig 091): staking ratio %, active validator count, and validator-Nakamoto (min validators to control >33% of stake). From the per-epoch beacon balances; QRL Legacy (PoW) has no validators.
Query parameters
windowoptionalstringdefault 365dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 365d. Examples: 24h, 7d, 90d.
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/staking/daily" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2026-06-21",
"active_validators": 512,
"staking_ratio_pct": 25.5231,
"nakamoto_33": 171,
"total_staked_quanta": 20480000
},
{
"day": "2026-06-24",
"active_validators": 512,
"staking_ratio_pct": 25.5204,
"nakamoto_33": 171,
"total_staked_quanta": 20480000
},
"… (15 more)"
],
"count": 17,
"network": "testnet",
"window_days": 365
}/api/v1/analytics/staking/slashings-dailyStaking Slashings Daily
Per-day validator slashing count (qrl2-only). 0-filled flat-zero line on a healthy network (QRL 2.0 has had zero slashings to date). QRL Legacy has none.
Query parameters
windowoptionalstringdefault 365dLook-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 365d. Examples: 24h, 7d, 90d.
chainoptionalstringdefault qrl2Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2.
Response 200 · GenericListResponse
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nullpageinteger | nullhas_nextboolean | nullhas_prevboolean | nullnext_cursorstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/analytics/staking/slashings-daily" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"day": "2026-06-21",
"slashings": 0
},
{
"day": "2026-06-24",
"slashings": 0
},
"… (15 more)"
],
"count": 17,
"network": "testnet",
"window_days": 365
}All endpoints verified against a live indexer. Need the raw spec? See openapi.json or the API overview.