Polymarket API reference / Data API v2
GET/v2/biggest-winners

List the biggest wins

The biggest single winning positions. One row per winning POSITION, not per user: `pnl` is `final_value - initial_value` for that position, and the window (`?time_period=`, default `day`) is on when it resolved. `?category=` narrows to a market category. Deeper pages come only from `?cursor=`, which **pins the window and category it was minted on**; restating a different one is a `400`, not a silent re-point.

Base URL
https://data-api.polymarket.com
Auth
Public, no key
Rate limit
800 req / 10s (80 per second)
Limit applies to
General (all /v2 endpoints)

Things to know

Every v2 response wraps its payload in a data field. Paginated reads return an opaque cursor in pagination and do not accept offset. Under load the API answers 429 with a Retry-After header.

Parameters

NameInTypeRequiredDescription
time_periodquerystringnullnoWindow on `resolved_at`: `day` | `week` | `month` | `all`. Defaults to `day`.
categoryquerystringnullno`overall` (default), a Gamma market category (e.g. `sports`), or a synthetic category: `combos` (combinatorial wins get their own full top-500 per window) or `esports` (promoted subcategory).
limitqueryintegernullnoFirst-page size. Ignored when `cursor` is supplied.
cursorquerystringnullnoOpaque pagination cursor from a prior response's `next_cursor`.

Example

curl -X GET "https://data-api.polymarket.com/v2/biggest-winners"

Returns a list of objects with these fields

FieldTypeDescription
condition_idstringOn-chain condition id of the market (combo rows: the combo condition).
event_idintegerGamma event id of the parent event; `0` on combo rows.
event_slugstringParent event slug; empty on combo rows.
event_titlestringParent event title; on combo rows, the `' / '`-joined leg questions.
final_valuenumberValue at resolution, in USDC.
initial_valuenumberCost basis of the winning position, in USDC.
kindstring`market` or `combo`; combo rows carry no Gamma event (`event_id` 0, empty `event_slug`), so branch on this before building event links.
pnlnumber`final_value - initial_value`, in USDC.
position_idstringToken id of the winning position.
profile_imagestringProfile image URL.
resolved_atintegerUnix seconds; when the position resolved.
user_idstringThe winning wallet.
user_namestringProfile display name of the wallet.
win_rankintegerUnique 1-based ordinal within the window/category; `row_number()`, so equal PnL does not share a rank (unlike the leaderboard's `rank`).

Responses

StatusMeaning
200A page of the biggest winning positions
400Invalid time_period or cursor, or a param that contradicts the cursor pin
429Too many requests; retry after `Retry-After`
500Internal server error
503Timed out (the request deadline, the datastore statement timeout, or the connection pool's acquire budget) or a serving dependency is unavailable; retry after `Retry-After`
Polymarket's API serves current state only, so it cannot show what a market's book looked like after it resolved. PolyTest records Up/Down markets while they run and keeps the snapshots. Try it free, or read the full rate limit reference.

From Polymarket's published OpenAPI spec and rate-limit tables, synced 2026-10-04.