GET
/v1/positions/combosGet user combo positions
**Data API v2:** this route has a v2 counterpart, `GET /v2/positions/combos`. See [Migrating to Data API v2](/migrate/data-api-v1-to-v2). Combinatorial (multi-market) positions held by a user, with per-leg breakdown. Also available at /v1/data/user/{address}/positions/combos (address from the path). Open positions with shares_balance below 0.001 are omitted (dust floor — e.g.
- 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.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| user | query | string | yes | |
| status | query | string[] | no | One or more statuses, comma-separated (e.g. status=RESOLVED_WIN,RESOLVED_PARTIAL,RESOLVED_LOSS). Values are case-insensitive; any invalid member is a 400. Omit for the default listing (open positions plus resolved positions with a recorded resolution). |
| sort | query | string | no | |
| market_id | query | object[] | no | Comma-separated combo_condition_id values to filter to specific combos. These equal the market_id of isCombo rows on /activity. Omit for all of the user's combos. |
| limit | query | integer | no | |
| offset | query | integer | no | |
| updatedAfter | query | integer | no | Incremental-sync watermark (epoch seconds, inclusive): only rows whose updated_at is at or after this time. Positions mutate on resolution and redemption, so this catches changes a creation-time filter cannot. |
| updatedBefore | query | integer | no | Optional upper bound (epoch seconds, inclusive) for updated_at; clamped to the safety lag. Must be >= updatedAfter. |
| cursor | query | string | no | Opaque continuation token from a previous response's pagination.next_cursor. When present it supersedes offset (which is ignored). Invalid, tampered, or cross-endpoint tokens return 400. |
Example
curl -X GET "https://data-api.polymarket.com/v1/positions/combos?user=<user>"Response fields
| Field | Type | Description |
|---|---|---|
| combos | object[] | |
| pagination | object | Standard pagination metadata. No total count; has_more is derived from page fullness. next_cursor is opaque. |
Responses
| Status | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad Request |
| 401 | Unauthorized |
| 500 | Server Error |
Related endpoints
- GET /v1/accounting/snapshot Data API v1
- GET /v1/activity/combos Data API v1
- GET /v1/market-positions Data API v1
- GET /v1/builders/leaderboard Data API v1
- GET /v1/builders/volume Data API v1
- GET /v1/leaderboard Data API v1
From Polymarket's published OpenAPI spec and rate-limit tables, synced 2026-10-04.