Polymarket API reference / Data API v1
GET/v1/positions/combos

Get 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

NameInTypeRequiredDescription
userquerystringyes
statusquerystring[]noOne 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).
sortquerystringno
market_idqueryobject[]noComma-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.
limitqueryintegerno
offsetqueryintegerno
updatedAfterqueryintegernoIncremental-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.
updatedBeforequeryintegernoOptional upper bound (epoch seconds, inclusive) for updated_at; clamped to the safety lag. Must be >= updatedAfter.
cursorquerystringnoOpaque 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

FieldTypeDescription
combosobject[]
paginationobjectStandard pagination metadata. No total count; has_more is derived from page fullness. next_cursor is opaque.

Responses

StatusMeaning
200Success
400Bad Request
401Unauthorized
500Server Error

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.