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 indata, 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.
SDK Migration to Data API V2
Data API v2 is supported starting with version0.10.0 in both official SDKs:
the TypeScript package @polymarket/client and the Python package
polymarket-client. Review the
TypeScript SDK changelog or
Python SDK changelog for the breaking changes,
renamed methods, response fields, and pagination behavior to update when
migrating.