Chain and DEX protocol boards

GET
/leaderboard

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

scope*string

which population to rank

Value in

  • "chains"
  • "protocols"
chain?string

chain slug or id; required for scope=protocols

Length1 <= length <= 32
chains?array<>

comma-separated chain slugs or ids to include; used by scope=chains

Itemsitems <= 32
seasonal?boolean

rank the season window instead of the live rolling board

season?integer

season number; omit or 0 with seasonal=true for the season now running

Formatint32
Range0 <= value
limit?integer
Formatint32
Range1 <= value <= 200
Default50

Header Parameters

Accept-Payment?string

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.

PAYMENT-SIGNATURE?string

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      }    }  ]}