GET
/activityGet user activity
**Data API v2:** this route has a v2 counterpart, `GET /v2/activity`. See [Migrating to Data API v2](/migrate/data-api-v1-to-v2).
- Base URL
- https://data-api.polymarket.com
- Auth
- Public, no key
- Rate limit
- 1,000 req / 10s (100 per second)
- Limit applies to
- Data API general
Things to know
Data API v1 has been frozen since 4 September 2026. It still answers, but new fields and endpoints only go to v2. The v2 version of this call is GET /v2/activity.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| limit | query | integer | no | Page size. Values above the maximum are clamped to 500. |
| offset | query | integer | no | Starting index for pagination. Requests past the cap are rejected with a 400 (never silently clamped). To read history deeper than offset 5000, page inside `start`/`end` windows — each window has its own offset budget. |
| user | query | string | yes | |
| market | query | object[] | no | Comma-separated list of condition IDs. Mutually exclusive with eventId. |
| eventId | query | integer[] | no | Comma-separated list of event IDs. Mutually exclusive with market. |
| type | query | string[] | no | Comma-separated list of activity types to include. DEPOSIT and WITHDRAWAL records also require `excludeDepositsWithdrawals=false`. |
| excludeDepositsWithdrawals | query | boolean | no | Excludes deposit and withdrawal records. The default `true` applies even when `type` requests those records, so to get deposits and withdrawals you must pass `false`. |
| start | query | integer | no | Lower-bound timestamp (epoch seconds) for the activity window. Omit or pass `0` for the default window (most recent ~3 years); pass a positive epoch (e.g. `1`) to retrieve full history. |
| end | query | integer | no | Upper-bound timestamp (epoch seconds) for the activity window. Omit for the default (current time); rows newer than `end` are excluded. |
| sortBy | query | string | no | |
| sortDirection | query | string | no | `DESC` (default) returns the newest rows first; `ASC` the oldest first. Both orders are stable — the same query returns the same rows at any `limit`/`offset`, so pages compose without gaps or repeats. |
| side | query | string | no |
Example
curl -X GET "https://data-api.polymarket.com/activity?user=<user>"Returns a list of objects with these fields
| Field | Type | Description |
|---|---|---|
| proxyWallet | string | User Profile Address (0x-prefixed, 40 hex chars) |
| timestamp | integer | |
| conditionId | string | 0x-prefixed 64-hex string |
| type | string | |
| size | number | Token amount for this row. On `REDEEM` rows it is the number of tokens burned for this row's outcome, so redeeming both sides of a market returns one row per outcome instead of a single combined row. |
| usdcSize | number | USDC amount for this row. On `REDEEM` rows it is the payout for this row's outcome and is `0` for a losing outcome; the rows of one redemption sum to the total payout. |
| transactionHash | string | |
| price | number | |
| asset | string | Token ID this row refers to. Populated on `REDEEM` rows with the token that row settles. Empty when the row is not token-specific. |
| side | string | |
| outcomeIndex | integer | Zero-based index of this row's outcome in the market's `outcomes` array, so `outcome` always equals `outcomes[outcomeIndex]`. |
| title | string | |
| slug | string | |
| icon | string | Market artwork. Falls back to the market image, then to the parent event's icon and image, when the market has no icon of its own. Empty on `CONVERSION` rows. |
| eventSlug | string | |
| outcome | string | |
| name | string | |
| pseudonym | string | |
| bio | string | |
| profileImage | string | |
| profileImageOptimized | string | |
| isCombo | boolean | True when this row is part of a combinatorial (multi-market) position. Flag only — combo detail is not embedded here. |
Responses
| Status | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad Request |
| 401 | Unauthorized |
| 500 | Server Error |
Related endpoints
- GET /v2/activity Data API v2
From Polymarket's published OpenAPI spec and rate-limit tables, synced 2026-10-04.