GET
/v2/activityList 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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| user | query | stringnull | yes | Required; the feed is user-anchored. |
| limit | query | integernull | no | Page size; default 100, max 1000, past-cap rejected. |
| cursor | query | stringnull | no | Opaque cursor from a prior response's `next_cursor`; binds the sort direction it was minted under. |
| type | query | stringnull | no | Activity 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. |
| condition | query | stringnull | no | Condition id(s), comma-separated (at most 20 distinct values). `condition_id` / `conditionId` are accepted aliases. |
| event_id | query | stringnull | no | Gamma event id(s), comma-separated (at most 20 distinct values); resolves to the events' markets. Mutually exclusive with `condition`. |
| side | query | stringnull | no | BUY or SELL. |
| start | query | integernull | no | Window start on `block_timestamp`, epoch seconds (inclusive). Omitted or `0` floors to three years back; pass `start=1` for full history. |
| end | query | integernull | no | Window end, epoch seconds (inclusive); omitted or `0` means now plus one day. |
| sort_by | query | stringnull | no | Only `TIMESTAMP` is supported (v2 pages by keyset). |
| sort_direction | query | stringnull | no | `ASC` or `DESC` (default). The keyset seeks in the chosen direction; the minted cursor binds it, so pass it consistently when paging. |
| exclude_deposits_withdrawals | query | booleannull | no | Defaults 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
| Field | Type | Description |
|---|---|---|
| bio | string | Profile bio text. |
| condition_id | string | On-chain condition id of the market (`0x` hex). |
| event_slug | string | Parent event slug. |
| icon | string | Market icon URL. |
| is_combo | boolean | Flag only, on V2/V3 combo trade rows. Combo detail lives on the combos endpoints; omitted from non-combo rows. |
| name | string | Profile display name of the wallet. |
| outcome | string | Label of the outcome (e.g. `Yes`). |
| outcome_index | integer | Index of the outcome within the market; `999` means the outcome could not be labeled. |
| price | number | Price per share in USDC (trades; `0` where no price applies). |
| profile_image | string | Profile image URL. |
| profile_image_optimized | string | Resized profile image URL, when one exists. |
| proxy_wallet | string | Proxy wallet the row belongs to; the address every wallet-keyed endpoint accepts as `user`. |
| pseudonym | string | Generated fallback handle for profiles without a display name. |
| side | string | `BUY` or `SELL` on trade rows, from this wallet's perspective; empty where a side does not apply. |
| size | number | Share quantity of the action; bare sizes are shares, never USD. |
| slug | string | Market slug; the URL segment on polymarket.com. |
| timestamp | integer | Block timestamp of the action, epoch seconds. |
| title | string | Market question title (Gamma enrichment; empty when unenriched). |
| token_id | string | CLOB asset id of the outcome token the action touched. |
| transaction_hash | string | Hash of the settling transaction. |
| type | string | TRADE, SPLIT, MERGE, REDEEM, REWARD, CONVERSION, … |
| usdc_size | number | Cash value of the action in USDC. |
Responses
| Status | Meaning |
|---|---|
| 200 | A page of activity events |
| 400 | Missing `user`, invalid query params, unsupported sort, bad cursor, a malformed 'condition' id, or a 'user' that is a known protocol contract address |
| 429 | Service is at heavy-query capacity; retry after `Retry-After` |
| 500 | Internal server error |
| 503 | Timed 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
- GET /activity Data API v1
- GET /v2/activity/combos Data API v2
From Polymarket's published OpenAPI spec and rate-limit tables, synced 2026-10-04.