Skip to main content
GET
GET /leaderboard/volume: Polymarket Volume Leaderboard
Sign each request with a fresh HMAC signature. The cURL and HTTP header values below are placeholders, not reusable credentials. For runnable signing code, use request signing examples. Python examples use the signed session from that page; Node.js examples use its bravadoFetch helper.
Returns traders ranked by USDC trading volume for the requested window. The ranking runs in the database over the complete candidate set on the served column, with a deterministic wallet tie-break, so pages never overlap or skip rows.

Query Parameters

string
default:"24h"
Rolling time window. One of 1h, 4h, 24h, 7d, 30d, 90d, 365d, all.
integer
default:"50"
Number of traders to return. Maximum 500.
integer
default:"0"
Offset for pagination. See Pagination. Passing order=asc is usually cheaper than a large offset — see the note below.
string
default:"volume_usdc"
Ranking column: volume_usdc (USDC notional), trades (fill count), or volume_shares (contracts traded). This board carries no PnL fields, so a PnL sort key from GET /leaderboard is rejected with 400.
string
default:"desc"
desc or asc. order=asc reads the bottom of the board directly — e.g. the least-active traders — without walking pages backward from an offset you have to discover first.
integer
default:"0"
Minimum trade count to be included in the candidate set. Note this board’s default is 0, while GET /leaderboard’s default is 5 — pass the same value to both endpoints to compare over the same set of traders.
string
Filter: keep only wallets whose dominant category equals this value. One of Politics, Crypto, Sports, Science, Tech, Entertainment, Earnings, Finance, Geopolitics, World, Elections, Weather, Other. This is not “rank within category X” — it narrows which wallets qualify for the board at all, then ranks the survivors normally. On day-grained windows (7d/30d/90d/365d/all) this matches the wallet’s dominance in that window; on sub-day windows (1h/4h/24h), which have no day-grained answer to give, it matches the wallet’s all-time dominant category instead (see category_basis below) — the filter works the same way on every board, just against an explicitly all-time question on sub-day ones. Returns 400 on a window the category backfill hasn’t reached yet (see category_basis below), and on any venue other than Polymarket.

Response

array
string
Echo of the window parameter used for the response.
string
Echo of the ranking column actually applied (default resolved).
string
Echo of the ranking direction actually applied (default resolved).
integer | null
Size of the candidate set after min_trades — the number of rows a full page walk visits. null only if it could not be counted; never a fake 0.
boolean
true while offset + results.length < total.
object | null
Board-wide aggregate over the same candidate set as total — for a stat-strip header, not for paging. null only if it could not be computed.

Errors

See the Error reference.

Example

Reading the bottom of the board

Because total is now on the response, finding the end of the board no longer requires a binary search over offset. If you need the worst-performing or least-active traders specifically, sort=trades&order=asc (or sort=volume_usdc&order=asc) reads them directly from the front of an ascending sort — which is meaningfully cheaper than a large offset against a descending one, since ClickHouse still has to produce every row before a large offset even though it only returns the page after it.