GET
/closed-positionsGet closed positions for a user
**Data API v2:** this route has a v2 counterpart, `GET /v2/positions?status=CLOSED`. 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
- 150 req / 10s (15 per second)
- Limit applies to
- /closed-positions
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.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| user | query | string | yes | The address of the user in question |
| market | query | object[] | no | The conditionId of the market in question. Supports multiple csv separated values. Cannot be used with the eventId param. |
| title | query | string | no | Filter by market title |
| eventId | query | integer[] | no | The event id of the event in question. Supports multiple csv separated values. Returns positions for all markets for those event ids. Cannot be used with the market param. |
| limit | query | integer | no | The max number of positions to return |
| offset | query | integer | no | The starting index for pagination |
| sortBy | query | string | no | The sort criteria |
| sortDirection | query | string | no | The sort direction |
Example
curl -X GET "https://data-api.polymarket.com/closed-positions?user=<user>"Returns a list of objects with these fields
| Field | Type | Description |
|---|---|---|
| proxyWallet | string | User Profile Address (0x-prefixed, 40 hex chars) |
| asset | string | |
| conditionId | string | 0x-prefixed 64-hex string |
| avgPrice | number | |
| totalBought | number | |
| realizedPnl | number | |
| curPrice | number | |
| timestamp | integer | |
| title | string | |
| slug | string | |
| icon | string | |
| eventSlug | string | |
| outcome | string | |
| outcomeIndex | integer | |
| oppositeOutcome | string | |
| oppositeAsset | string | |
| endDate | string |
Responses
| Status | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad Request |
| 401 | Unauthorized |
| 500 | Server Error |
From Polymarket's published OpenAPI spec and rate-limit tables, synced 2026-10-04.