Polymarket’s data-api exposes a per-category leaderboard that the UI uses but isn’t widely documented. It accepts only 9 fixed category slugs, is case-insensitive, and lets you pull the top PNL/VOL traders for a specific category (e.g. weather, crypto). Durable external-API fact, verified live 2026-06-05.
For Agents
GET https://data-api.polymarket.com/v1/leaderboard ?timePeriod=month # day | week | month | all (case-insensitive) &orderBy=PNL # PNL | VOL &category=<slug> # one of the 9 below, or OVERALL (case-insensitive) &limit=N &offset=0Also:
GET https://data-api.polymarket.com/v1/biggest-winners?...&category=<slug>.
The 9 valid categories (only these)
politics, sports, crypto, finance, culture, mentions, economics, weather, tech
Arbitrary gamma tags do NOT work
The
categoryparam accepts only the 9 fixed leaderboard categories above (plusOVERALLfor the global board). Passing an arbitrary gamma tag —iran,elections,geopolitics, etc. — returns empty or the global board, not a filtered slice. This is a different namespace from gammaevent_tags(see pmv2-gamma-tags-categorization), and the two don’t map 1:1 — see the mismatches in category-consensus.
Param semantics
categoryis case-insensitive —category=WEATHERandcategory=OVERALLboth work; so does lowercase.timePeriodis case-insensitive —monthandMONTHboth work. Values:day,week,month,all.orderBy∈{PNL, VOL}.
Verified live (2026-06-05)
| category | top trader(s) | ~PNL |
|---|---|---|
weather | ShyGuy1 / HighTempTation | ~$5k |
crypto | strike123 | $467k |
OVERALL (global) | Inaccuratestake | $1.36M |
How it was found
By inspecting the Polymarket UI’s /leaderboard page — the “All Categories” dropdown drives the route /leaderboard/{category}/{window}/{metric}, which fans out to the data-api category= param above.
Code state — already wired (no bug)
The polymarket_data Category enum (types.rs) ALREADY contains all 9 categories + Overall, and leaderboard() already sends category = params.category.as_query_value() (which renders UPPERCASE, e.g. OVERALL). pmv2’s cohort fetch uses Category::Overall (the global board).
FALSE ALARM — the uppercase
categoryis NOT a bugA code reviewer flagged the UPPERCASE
as_query_value()as a “lowercase bug.” It is not a bug: the API is case-insensitive, and production already runs withcategory=OVERALL(uppercase) successfully. Do not “fix” this to lowercase — it changes nothing and risks churn on a working prod path.
Related
- category-consensus — consumes this endpoint to fetch a category-specific PNL cohort; documents the category→gamma-tag mapping mismatches
- pmv2-gamma-tags-categorization — the gamma tag namespace (distinct from these 9 leaderboard categories)
- pmv2-two-tier-trader-scoring — pmv2 cohort fetch uses
Category::Overall - polymarket-fetch