Polymarket API reference / Data API v2
GET/v2/activity

List account activity

Keyset-paginated activity feed (trades, splits, merges, redeems, …) in the standard `{ data, pagination }` envelope. Ordering is `(block_timestamp, sequence_id)`, `DESC` by default or `ASC` via `sort_direction=ASC`; both keyset-seekable. Value sorts (`CASH`/`TOKENS`) have no seek anchor and are rejected with `400` rather than silently re-served as page one.

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

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
userquerystringnullyesRequired; the feed is user-anchored.
limitqueryintegernullnoPage size; default 100, max 1000, past-cap rejected.
cursorquerystringnullnoOpaque cursor from a prior response's `next_cursor`; binds the sort direction it was minted under.
typequerystringnullnoActivity type(s), comma-separated (TRADE, SPLIT, MERGE, REDEEM, …). `TIP` is **opt-in**: it is never in the default set, so it is only returned when you name it here.
conditionquerystringnullnoCondition id(s), comma-separated (at most 20 distinct values). `condition_id` / `conditionId` are accepted aliases.
event_idquerystringnullnoGamma event id(s), comma-separated (at most 20 distinct values); resolves to the events' markets. Mutually exclusive with `condition`.
sidequerystringnullnoBUY or SELL.
startqueryintegernullnoWindow start on `block_timestamp`, epoch seconds (inclusive). Omitted or `0` floors to three years back; pass `start=1` for full history.
endqueryintegernullnoWindow end, epoch seconds (inclusive); omitted or `0` means now plus one day.
sort_byquerystringnullnoOnly `TIMESTAMP` is supported (v2 pages by keyset).
sort_directionquerystringnullno`ASC` or `DESC` (default). The keyset seeks in the chosen direction; the minted cursor binds it, so pass it consistently when paging.
exclude_deposits_withdrawalsquerybooleannullnoDefaults to `true`.

user is listed as optional in Polymarket's OpenAPI spec, but the API returns 400 without it (checked 2026-10-04).

Example

curl -X GET "https://data-api.polymarket.com/v2/activity?user=<user>"

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.
is_combobooleanFlag only, on V2/V3 combo trade rows. Combo detail lives on the combos endpoints; omitted from non-combo rows.
namestringProfile display name of the wallet.
outcomestringLabel of the outcome (e.g. `Yes`).
outcome_indexintegerIndex of the outcome within the market; `999` means the outcome could not be labeled.
pricenumberPrice per share in USDC (trades; `0` where no price applies).
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` on trade rows, from this wallet's perspective; empty where a side does not apply.
sizenumberShare quantity of the action; bare sizes are shares, never USD.
slugstringMarket slug; the URL segment on polymarket.com.
timestampintegerBlock timestamp of the action, epoch seconds.
titlestringMarket question title (Gamma enrichment; empty when unenriched).
token_idstringCLOB asset id of the outcome token the action touched.
transaction_hashstringHash of the settling transaction.
typestringTRADE, SPLIT, MERGE, REDEEM, REWARD, CONVERSION, …
usdc_sizenumberCash value of the action in USDC.

Responses

StatusMeaning
200A page of activity events
400Missing `user`, invalid query params, unsupported sort, bad 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`

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.