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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | no | qrl2 | Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2. |
| window | string | no | 30d | Look-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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | no | qrl2 | Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2. |
| window | string | no | 30d | Look-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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | no | qrl2 | Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2. |
| window | string | no | 90d | Look-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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| window | string | no | 30d | Look-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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | no | qrl2 | Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2. |
| window | string | no | 30d | Look-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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | no | qrl2 | Which 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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| page | integermin 1 | no | 1 | |
| page_size | integermin 1 · max 200 | no | 50 | |
| chain | string | no | qrl2 | Which 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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | no | qrl2 | Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2. |
| window | string | no | 30d | Look-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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| window | string | no | 365d | Look-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 365d. Examples: 24h, 7d, 90d. |
| chain | string | no | qrl2 | Which 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
Six "ocean" holder tiers (whale → shrimp) by share of supply (whale ≥0.1%, then each step 10× smaller down to shrimp), with holder-count AND supply-% per tier. On-demand over address_summary. Cached 10 min.
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | no | qrl2 | Which 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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | no | qrl2 | Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2. |
| window | string | no | 365d | Look-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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| window | string | no | 90d | Look-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 90d. Examples: 24h, 7d, 90d. |
| chain | string | no | qrl2 | Which 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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | no | qrl2 | Which 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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | no | qrl2 | Which 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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | no | qrl2 | Which 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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | no | qrl2 | Which 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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | no | qrl2 | Which 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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| window | string | no | 90d | Look-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, 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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| metric | string | yes | — |
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| window | string | no | 90d | Look-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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| window | string | no | 30d | Look-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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | no | qrl2 | Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2. |
| window | string | no | 30d | Look-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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | no | qrl2 | Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2. |
| window | string | no | 30d | Look-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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | no | qrl2 | Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2. |
| window | string | no | 30d | Look-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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| window | string | no | 30d | Look-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 30d. Examples: 24h, 7d, 90d. |
| chain | string | no | qrl2 | Which 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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| window | string | no | 30d | Look-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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | integermin 1 · max 100 | no | 20 | |
| chain | string | no | qrl2 | Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2. |
| window | string | no | 30d | Look-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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| threshold_pct | number | null | no | — | |
| chain | string | no | qrl2 | Which 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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| threshold_pct | number | null | no | — | |
| chain | string | no | qrl2 | Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2. |
| window | string | no | 30d | Look-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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| threshold_pct | number | null | no | — | |
| chain | string | no | qrl2 | Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2. |
| window | string | no | 90d | Look-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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | integermin 1 · max 200 | no | 50 | |
| threshold_pct | number | null | no | — | |
| chain | string | no | qrl2 | Which 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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | integermin 1 · max 50 | no | 10 | |
| threshold_pct | number | null | no | — | |
| chain | string | no | qrl2 | Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2. |
| window | string | no | 7d | Look-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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| threshold_pct | number | null | no | — | |
| chain | string | no | qrl2 | Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2. |
| window | string | no | 7d | Look-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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | integermin 1 · max 100 | no | 25 | |
| threshold_pct | number | null | no | — | |
| chain | string | no | qrl2 | Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2. |
| window | string | no | 30d | Look-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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| threshold_pct | number | null | no | — | If set, threshold = this %% of current total supply. None = legacy 100K floor. |
| chain | string | no | qrl2 | Which 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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| address | string | yes | — |
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| page | integermin 1 | no | 1 | |
| page_size | integermin 1 · max 200 | no | 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 transfers TO/FROM labelled exchanges 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). Pure exchange↔exchange edges are excluded. qrl-primary; degrades to an empty feed on chains without curated exchange labels (e.g. QRL2 testnet).
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | no | qrl2 | Which chain to query: qrl (legacy PoW) or qrl2 (PoS EVM). Defaults to qrl2. |
| limit | integermin 1 · max 100 | no | 20 | |
| direction | string | no | both | |
| window | string | no | 30d | Look-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 flow (7d/30d), and the share of held supply on exchanges. qrl-primary — QRL2 exchange labels populate at mainnet. Defaults to chain=qrl since that is where the curated exchange labels live today.
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | no | qrl2 | Which 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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| chain | string | no | qrl2 | Which 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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| window | string | no | 365d | Look-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 365d. Examples: 24h, 7d, 90d. |
| chain | string | no | qrl2 | Which 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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| window | string | no | 365d | Look-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 365d. Examples: 24h, 7d, 90d. |
| chain | string | no | qrl2 | Which 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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| window | string | no | 365d | Look-back window with unit suffix (m=min, h=hour, d=day, w=week). Default 365d. Examples: 24h, 7d, 90d. |
| chain | string | no | qrl2 | Which 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.