Chain and DEX protocol boards
Precomputed rankings of the chains we index, and of the venues inside one chain. Every row carries its raw metrics beside its dimension scores, so a client can sort on any figure and ignore the composite entirely.
scope=protocols is one board of DEXes and launchpads together. Every pair counts in exactly one row: the launchpad it was created on when it has one, otherwise the DEX that owns its factory. A launchpad trading on Uniswap pools is its own row, and its volume is never part of Uniswap's. category labels each row (dex, launchpad, perps, aggregator), infra names the protocols its pools trade on, and metrics.hosted_volume_24h shows the volume other venues trade on a row's pools without ranking it. Pools no one can name — including v4 pools under a hook with no known brand — stay out of the rows and inside the share denominator, so the named shares fall short of one by exactly that amount.
Nothing here is computed on the request: the response is drawn from a snapshot taken on a fixed cadence, and snapshot_at says exactly how old it is. Rows the board refused to rank appear in excluded with a reason rather than going silently missing.
With seasonal=true the window is a season instead of the live rolling day. A closed season is frozen and never changes; a running one still moves.
Query Parameters
which population to rank
Value in
- "chains"
- "protocols"
chain slug or id; required for scope=protocols
1 <= length <= 32comma-separated chain slugs or ids to include; used by scope=chains
items <= 32rank the season window instead of the live rolling board
season number; omit or 0 with seasonal=true for the season now running
int320 <= valueint321 <= value <= 20050Header Parameters
payment methods the client can use, comma-separated, case-insensitive. With x402 in the list, a spent keyless budget answers 402 with the x402 challenge instead of 429.
base64 x402 v2 payment payload for this request. A paid request skips the keyless budget and is settled only when it answers 2xx. The v1 header X-PAYMENT is accepted too.
Response Body
application/json
application/problem+json
application/problem+json
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/leaderboard?scope=chains"{ "scope": "chains", "snapshot_at": "string", "methodology_version": 0, "population": 0, "season": { "number": 0, "starts_at": "string", "ends_at": "string", "live": true, "length_days": 0, "latest": 0 }, "items": [ { "key": "string", "display_name": "string", "category": "string", "infra": [ "string" ], "chain": { "slug": "hyperliquid", "chain_id": 0 }, "rank": 0, "rank_change_24h": 0, "data_state": "string", "exclusion_reason": "string", "badges": [ "string" ], "dimensions": { "property1": 0.1, "property2": 0.1 }, "metrics": { "volume_24h": 0.1, "buy_volume_24h": 0.1, "liquidity": 0.1, "quality_liquidity": 0.1, "pairs": 0, "tradable_pairs": 0, "active_pairs": 0, "priced_pairs": 0, "new_pairs_24h": 0, "scam_pairs": 0, "txns_24h": 0, "buyers_24h": 0, "volume_share": 0.1, "liquidity_share": 0.1, "capital_efficiency": 0.1, "has_capital_efficiency": true, "risk_rate": 0.1, "smoothed_risk": 0.1, "wash_rate": 0.1, "liquidity_coverage": 0.1, "growth_24h": { "available": true, "volume": 0.1, "liquidity": 0.1, "reason": "string" }, "growth_7d": { "available": true, "volume": 0.1, "liquidity": 0.1, "reason": "string" }, "hosted_volume_24h": 0.1 }, "season_metrics": { "volume": 0.1, "buy_volume": 0.1, "liquidity_last": 0.1, "liquidity_peak": 0.1, "quality_liquidity": 0.1, "txns": 0, "buyers": 0, "new_pairs": 0 } } ], "excluded": [ { "key": "string", "display_name": "string", "category": "string", "infra": [ "string" ], "chain": { "slug": "hyperliquid", "chain_id": 0 }, "rank": 0, "rank_change_24h": 0, "data_state": "string", "exclusion_reason": "string", "badges": [ "string" ], "dimensions": { "property1": 0.1, "property2": 0.1 }, "metrics": { "volume_24h": 0.1, "buy_volume_24h": 0.1, "liquidity": 0.1, "quality_liquidity": 0.1, "pairs": 0, "tradable_pairs": 0, "active_pairs": 0, "priced_pairs": 0, "new_pairs_24h": 0, "scam_pairs": 0, "txns_24h": 0, "buyers_24h": 0, "volume_share": 0.1, "liquidity_share": 0.1, "capital_efficiency": 0.1, "has_capital_efficiency": true, "risk_rate": 0.1, "smoothed_risk": 0.1, "wash_rate": 0.1, "liquidity_coverage": 0.1, "growth_24h": { "available": true, "volume": 0.1, "liquidity": 0.1, "reason": "string" }, "growth_7d": { "available": true, "volume": 0.1, "liquidity": 0.1, "reason": "string" }, "hosted_volume_24h": 0.1 }, "season_metrics": { "volume": 0.1, "buy_volume": 0.1, "liquidity_last": 0.1, "liquidity_peak": 0.1, "quality_liquidity": 0.1, "txns": 0, "buyers": 0, "new_pairs": 0 } } ]}One wallet across every chain it traded GET
The per-chain profiles merged into one header: lifetime totals, the PNL split per chain with each chain's share, and the most profitable chain. Chains in scope whose wallet data could not be read are listed in `unavailable_chains` rather than silently counted as zero — a missing chain and a chain that earned nothing are different claims. Omit `chains` for every served chain.
Trader profile with metrics for every window GET
Everything known about one trader on one chain: capital tier, behaviour labels, the two scores with the reasons behind them, and `metrics` once per window so a client switches window without another round trip. `rebuild_skipped` true means the zeroes are a decision rather than a gap — the wallet is classified as machinery nobody can copy. `human_known` false means the timing evidence was too thin to have an opinion, which caps the score and is not the same as a wallet judged mid-range.