Skip to main content
Data API v2 replaces the original per-route contracts with one shared contract across every read. The original routes keep working, so you can migrate one call site at a time, but new integrations should start on v2 directly.
This page is about the Data API served at data-api.polymarket.com. It is unrelated to CLOB V2, the trading infrastructure upgrade.

What Changed

Response envelope. v1 routes return bare arrays or objects. Every v2 response wraps its payload in data, and paginated routes add a pagination object. A documented miss is data: null or an empty list, never an error. Pagination. v1 pages with limit/offset, and offset stops at 10,000 rows. v2 pages with an opaque cursor: follow pagination.next_cursor until it is null, with no offset arithmetic to manage, and the feed routes stay consistent while new rows arrive. See Paginate With Cursors. Field casing. v1 responses are camelCase (proxyWallet, conditionId). v2 responses are snake_case (proxy_wallet, condition_id). Request parameters accept both spellings on v2. Market selection. v1 selects markets with the market parameter. v2 unifies on condition (aliases condition_id, conditionId), taking at most 20 distinct comma-separated condition ids. event_id filtering carries over. Position lifecycle. v2 folds three v1 routes into one: GET /v2/positions serves the whole lifecycle behind a status filter (OPEN, REDEEMABLE, CLOSED) with redeemable and mergeable flags on every row, replacing the separate /closed-positions and /v1/market-positions routes.

Route Mapping

Each v2 endpoint page documents its full parameter set and row shape; several routes accept filters their v1 counterparts did not.

New in v2

v2 adds these reads. User stats also covers the existing traded-market count:

Staying on v1

GET /v1/accounting/snapshot has no v2 counterpart. Keep calling its existing route.