Skip to main content

Chain analytics

GET /api/v1/chain/* — chain-wide rollups and leaderboards over activity, transfers, stake movement, weights, and concentration. Distinct from the raw /chain-events firehose. No API key.

Last updated

The chain events reference covers the raw, unfiltered pallet.method event firehose. This page is the other /api/v1/chain/* surface — pre-aggregated, chain-wide rollups and leaderboards, built from the same curated event/neuron stores that back the per-account and per-subnet analytics elsewhere in the API. Where chain events answers "what happened, unfiltered," these routes answer "what happened, ranked and summed across every subnet."

GET https://api.metagraph.sh/api/v1/chain/activity

All 21 routes below are mainnet-only (no /{network}/ prefix support). Most share one windowed-leaderboard shape: ?window=7d|30d (default 7d), ?limit= (varies by route, capped at 100), ?format=csv for the row-level leaderboard only — network rollups and distributions stay JSON-only.

Activity & liveness

PathPurposeExtra params
GET /api/v1/chain/activityDaily block/extrinsic/event counts, success rate, unique signers.
GET /api/v1/chain/callsExtrinsic call-mix — count and share per pallet module (or module.function).call_module, group_by=module|module_function
GET /api/v1/chain/signersMost-active-account leaderboard, by tx count or total fee paid.call_module, sort=tx_count|total_fee_tao
GET /api/v1/chain/feesDaily fee/tip series + top fee payers + median fee.call_module

Transfers & relationships

PathPurposeExtra params
GET /api/v1/chain/transfersNetwork-wide TAO transfer volume + top senders/receivers + concentration share.
GET /api/v1/chain/transfer-pairsTop sender→receiver TAO corridors, ranked by volume or count.sort=volume|count

Stake movement & market

PathPurposeParams
GET /api/v1/chain/stake-flowNet stake added minus removed per subnet — capital flow.window/limit
GET /api/v1/chain/stake-movesStake re-delegation churn per subnet (same coldkey, no unstake).window/limit
GET /api/v1/chain/stake-transfersStake ownership moved to a different coldkey — origin side only.window/limit
GET /api/v1/chain/alpha-volumeRolling 24h buy/sell alpha-volume leaderboard + network sentiment.fixed 24h window, limit, format — no ?window
GET /api/v1/chain/yieldNetwork-wide emission/stake return rate, validator vs miner, p10–p90 spread.none
curl -s 'https://api.metagraph.sh/api/v1/chain/stake-flow?window=30d&limit=20'

Registration & serving churn

PathWhat it counts
GET /api/v1/chain/registrationsNeuronRegistered leaderboard — registration demand per subnet.
GET /api/v1/chain/deregistrationsNeuronDeregistered leaderboard — exit/eviction activity per subnet.
GET /api/v1/chain/axon-removalsAxonInfoRemoved leaderboard — serving-infrastructure teardown per subnet.
GET /api/v1/chain/servingAxonServed leaderboard — which subnets are announcing serving endpoints.
GET /api/v1/chain/prometheusPrometheusServed leaderboard — which subnets run telemetry endpoints.

Weights & network state

PathPurposeParams
GET /api/v1/chain/weightsWeightsSet leaderboard per subnet — aggregate only, doesn't name setters.window/limit
GET /api/v1/chain/weights/settersThe individual validators behind the above, ranked by total WeightsSet events network-wide.window/limit
GET /api/v1/chain/concentrationNetwork-wide stake/emission concentration across five lenses.none — pure snapshot
GET /api/v1/chain/performanceNetwork-wide reward-distribution concentration + trust-score spread.none
GET /api/v1/chain/identity-historyMost-recent on-chain identity changes across every subnet, newest-first.limit (default 50, max 200)
GET /api/v1/chain/turnoverValidator-set churn between window-boundary snapshots.window=7d|30d|90d (default 30d), limit

Chain-scope concentration isn't just the per-subnet view summed

The per-subnet /subnets/{netuid}/concentration route measures a subnet's own neuron set. Chain-scope concentration adds two lenses the per-subnet view structurally can't compute — entity_emission/entity_stake — which collapse an operator's hotkeys across every subnet before measuring concentration. An operator diversified across five subnets looks decentralized in each one individually but concentrated at network scale; only this route sees that.

const res = await fetch(
  "https://api.metagraph.sh/api/v1/chain/signers?sort=total_fee_tao&limit=20",
);
const { data } = await res.json();

Only /chain/fees carries a dedicated rate limit (60 req/60s, when it runs through the deep-history Postgres tier) — every other route here relies on edge caching alone. All are cached 60s, keyed on the shared health-cron snapshot stamp.