Polymarket Data API

Polymarket's keyless read API for trades, positions, holders and price history.

by Polymarket

Last updated

US persons
Yes
Taker fee
None
Settlement
Crypto
Liquidity
CLOB

What it is

The third of Polymarket's three read surfaces, and the one that answers questions about people and the past rather than about what is listed or what it costs now. Gamma says which markets exist; the CLOB API prices them and takes orders. The Data API at data-api.polymarket.com answers everything else a dashboard needs: recent trades in a market, a wallet's positions and their lifecycle, its activity feed and portfolio value, the top holders of an outcome, open interest, live event volume, trader and builder leaderboards, resolution state, and the price series for an outcome token.

It is Polymarket's own service, but it behaves like an indexer, because that is what it is. The wallet, position and profit figures are built from Polygon events, and v2 publishes a gauge of how far behind the chain head they are — GET /v2/status. Where a dashboard gets its data has a reading of that gauge and explains why it matters.

Two versions are live at once, and v2 is the current one. v1 still answers but is frozen, and Polymarket's migration guide says new integrations should start on v2. It describes v2 as one shared contract across every read, replacing the original per-route contracts:

  • every response is wrapped in data, and paginated routes add a pagination object; a documented miss is data: null or an empty list, not an error;
  • pagination is an opaque cursor (pagination.next_cursor until it is null) instead of limit/offset, and v1's offset stops at 10,000 rows;
  • fields are snake_case (proxy_wallet, condition_id) instead of camelCase, though v2 accepts both spellings in request parameters;
  • markets are selected with condition, at most 20 distinct condition IDs per request;
  • GET /v2/positions folds three v1 routes into one, filtered by status — OPEN, REDEEMABLE, REDEEMABLE_LOST, MERGEABLE, CLOSED — with redeemable and mergeable flags on every row.

v2 also adds reads v1 never had: a wallet's PnL series, profile stats and trading volume, the biggest single winning positions, price history, resolution state and data freshness. One v1 route, GET /v1/accounting/snapshot, has no v2 counterpart and is outside the retirement.

Availability

Unrestricted as far as the documentation shows. The endpoints take no credentials, so there is no account to be refused and no identity check. A US reader can read every figure the API serves.

What a US reader cannot do is trade the markets it describes on this platform: Polymarket's international site blocks trading in the United States and points US visitors to Polymarket US, a separate entity operating as a CFTC-designated contract market with its own API. The Data API describes the international platform's wallets and markets only. Polymarket US positions are not in it.

Pricing

Free. There is no key to buy, no plan and no paid tier for the Data API.

What limits you is the published rate table, enforced by Cloudflare per IP address on sliding windows. As captured on 22 September 2026:

RouteLimit
All /v2 routes together800 requests / 10 s
/v2/trades300 / 10 s
/v2/positions, /v2/positions/combos200 / 10 s
/v2/activity, /v2/activity/combos200 / 10 s
/v2/prices-history200 / 10 s
/v2/status100 / 10 s
All v1 routes together1,000 / 10 s

Over the limit, requests are delayed or queued rather than rejected, so the first symptom is latency and not an error code. Why your bot gets throttled covers what that does to a polling loop.

Markets & resolution

The API reports resolutions; it does not make them. GET /v2/resolutions returns resolution state for a condition, and the positions lifecycle distinguishes a redeemable winner from a still-held loser. The decision behind both is the UMA optimistic oracle: a proposal against a bond, a two-hour challenge window, and a UMA token-holder vote if the proposal is disputed twice. A vote can come back "Unknown", in which case both outcome tokens redeem at 50 cents — which is a state your position accounting has to allow for.

Price history has a resolution ladder, and the far end is coarse. Polymarket's changelog of 4 September 2026 says GET /v2/prices-history replaces the CLOB-hosted route, though on 1 October 2026 the CLOB host's /prices-history was still in its OpenAPI description and rate-limit table with no retirement date. The v2 route takes an outcome token_id and exactly one time form — a relative interval, an absolute start/end, or a point-in-time as_of. From the documentation:

  • an explicit start/end range spans at most 15 days;
  • interval=max returns the full history at 12-hour buckets by default, and explicit buckets of 10,800 or 43,200 seconds also cover the full history;
  • anything finer returns only the last 30 days;
  • one-minute data lasts at least 7 days, five-minute at least 60 and thirty-minute at least 90 — stated as floors, not exact horizons — while three-hour and twelve-hour data is permanent;
  • asking for a resolution the store cannot fill returns an empty or sparse page, and points carry a resolution_seconds field, and the documentation tells you to read it rather than assume even spacing — the last point can fall between bucket boundaries.

Integrations

REST and JSON only. Both of Polymarket's unified SDKs cover it — polymarket-client in Python and @polymarket/client in TypeScript — and Data API v2 support starts at version 0.10.0 of each; the Python package shipped that version on 10 September 2026. An OpenAPI description of v2 is linked from Polymarket's documentation index.

The documentation's examples call every route without a header. Wallet rows identify their owner by a proxy_wallet field, which is the address to key your own tables on.

This card was written from Polymarket's documentation as captured by the Internet Archive — the migration guide on 29 September 2026, the rate-limit page on 22 September and the price-history and analytics pages on 18 and 19 September. The changelog, the CLOB OpenAPI description and the rate-limit page were re-read on 1 October 2026 on the documentation's Mintlify host. No live call to the API was made for it.

Limitations

  • v1 is retired on 24 October 2026. The response envelope, pagination, field casing and the market parameter all change, so a v1 integration does not survive the date without edits. The same documentation, captured on 18 September, still said only that the original routes "keep working" — the date was added later, which is a reason to re-read the migration page before relying on this one.
  • No stream. Polling is the only way to follow a wallet, and the polling budget is the table above.
  • No order book. Past or present, depth lives elsewhere: the current book on the CLOB API, and past books nowhere on Polymarket at all.
  • Fine price history expires. Minute-level data for a market that moved last quarter is gone from this API; only 3-hour and 12-hour buckets reach back that far.
  • It is an indexer, with an indexer's lag. Positions, PnL and value are derived from chain events and can trail the chain; GET /v2/status says by how much, and nothing else in a response does.
  • PnL and leaderboards are Polymarket's arithmetic. The documentation describes the fields, not the cost-basis method behind them, so a figure you compute yourself from trades may not match.
  • No data licence is stated on the documentation pages this card was written from. If you plan to redistribute rather than display, that is a question for Polymarket, not for this page.

Alternatives

The other two halves of the same platform are the Gamma API for market metadata and the CLOB API for current books, prices and orders. For the on-chain record without Polymarket's service in between, Polymarket dashboards on Dune answer in SQL, and the Goldsky Polymarket datasets replicate fills and positions into a database you run. For what this API does not keep — past order books — Marketlens, PolyOrderbooks and Predexon sell recordings.

Specs

Interfaces
API, Python
Export
JSON
Available in
Global
KYC required
No
Market subjects
Politics, Sports, Crypto, Macro, Culture, Business
Resolved by
Each market carries its own rules and named source; the outcome is proposed to the UMA optimistic oracle and, if contested, decided by a UMA token-holder vote.
Maker fee
None
Platforms
Library
AI features
None
Capabilities
Portfolio tracking
Pricing verified
Availability verified
Markets verified
Capabilities verified

Also from Polymarket

Background

How this part of the sector works, rather than which product to pick.

Also worth comparing

  • Goldsky Polymarket Datasets — Polymarket's on-chain fills and positions, backfilled and streamed into your own database.
  • Marketlens — Recorded Polymarket order books across every market type, replayable to the tick.
  • Polymarket Data (SII dataset) — The "107 GB" open Parquet dump of Polymarket CLOB fills, November 2022 to March 2026.
  • DepthFeed — The recorded bid-ask ladder for crypto up-or-down markets, which no venue keeps itself.
  • PolyOrderbooks — Recorded L2 books for Polymarket crypto markets, priced by how far back you may look.
  • Predexon — Tick-level book history as Parquet, billed by the gigabyte, plus a mempool-aware feed.

FAQ

Is it Data API v2 or v1?

Both, on the same host. The v2 routes sit under the /v2 prefix at data-api.polymarket.com and the original routes still answer beside them. Polymarket's migration guide, as captured on 29 September 2026, says v1 is retired on 24 October 2026, so a new integration should start on v2.

Do I need an API key for the Polymarket Data API?

No. Every request in Polymarket's own Data API documentation is a plain GET with no credentials — trades, positions, holders, open interest, leaderboards and price history for any wallet or market. The limit that applies is per IP address, not per key.

How far back does Polymarket price history go?

To the start of the market, but only at coarse resolution. Three-hour and twelve-hour buckets are kept permanently; bucket widths finer than that return only the last 30 days, and one-minute data is promised for at least 7 days. One explicit start-to-end request spans at most 15 days.

What rate limit does the Data API enforce?

On v2, 800 requests per 10 seconds across all routes, with lower ceilings on the busy ones — 300 for trades and 200 each for positions, activity and price history. Over the limit, Cloudflare delays and queues requests rather than rejecting them.

Can I watch a wallet in real time through the Data API?

Only by polling. The Data API has no WebSocket. Live fills and book changes come from the CLOB market channel, and your own orders from the authenticated user channel, both on the trading side of the platform.