Polymarket API reference / Data API v2
GET/v2/trades

List trades

Keyset-paginated trade feed in the standard `{ data, pagination }` envelope. Pass `?cursor=` from a prior response's `next_cursor` to fetch the next page; it carries both the page size and the `(block_timestamp, sequence_id)` seek anchor, so deep pages cost the same as shallow ones.

Base URL
https://data-api.polymarket.com
Auth
Public, no key
Rate limit
300 req / 10s (30 per second)
Limit applies to
/v2/trades

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
userquerystringnullnoAddress to filter by; omit for the market/event/global feed.
limitqueryintegernullnoFirst-page size. Ignored when `cursor` is supplied (the cursor's size wins).
cursorquerystringnullnoOpaque pagination cursor from a prior response's `next_cursor`.
taker_onlyquerybooleannullnoDefaults to `true`: each fill is served once, on its taker side. `false` includes the maker rows too.
filter_typequerystringnullnoCASH or TOKENS; defaults to TOKENS.
filter_amountquerynumbernullnoMinimum trade size; defaults to 0.01, and 0 means the same.
startqueryintegernullnoWindow start on `block_timestamp`, epoch seconds (inclusive); honored on the `user` shape only. Omitted or `0` floors to three years back; `start=1` asks for full history.
endqueryintegernullnoWindow end, epoch seconds (inclusive); honored on the `user` shape only; omitted or `0` means now plus one day.
conditionquerystringnullnoCondition id(s), comma-separated (at most 20 distinct values). `condition_id` / `conditionId` are accepted aliases.
event_idquerystringnullnoEvent id(s), comma-separated (at most 20 distinct values).
sidequerystringnullnoBUY or SELL.

Example

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

Returns a list of objects with these fields

FieldTypeDescription
biostringProfile bio text.
condition_idstringOn-chain condition id of the market (`0x` hex).
event_slugstringParent event slug.
iconstringMarket icon URL.
namestringProfile display name of the wallet.
outcomestringLabel of the traded outcome (e.g. `Yes`).
outcome_indexintegerIndex of the traded outcome within the market; `999` means the outcome could not be labeled.
pricenumberExecution price per share, in USDC.
profile_imagestringProfile image URL.
profile_image_optimizedstringResized profile image URL, when one exists.
proxy_walletstringProxy wallet the row belongs to; the address every wallet-keyed endpoint accepts as `user`.
pseudonymstringGenerated fallback handle for profiles without a display name.
sidestring`BUY` or `SELL`, from this wallet's perspective.
sizenumberFilled quantity in shares; bare sizes are shares, never USD.
slugstringMarket slug; the URL segment on polymarket.com.
timestampintegerBlock timestamp of the fill, epoch seconds.
titlestringMarket question title (Gamma enrichment; empty when unenriched).
token_idstringCLOB asset id of the traded outcome token.
transaction_hashstringHash of the settling transaction.

Responses

StatusMeaning
200A page of trades
400Invalid query params or cursor, a malformed 'condition' id, or a 'user' that is a known protocol contract address
429Service is at heavy-query capacity; 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`

Errors this endpoint returns

Related endpoints

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.