Polymarket price history

Polymarket price history: how to get it, and why it looks empty

Polymarket serves free price history down to 1-minute buckets, on every market including ones that resolved years ago. Most reports that it is missing come from two parameter defaults rather than absent data.

Checked against the live API on 2026-08-24.

Short answer

The endpoint

Price history comes from the CLOB service, not Gamma. It is free, needs no key, and takes a token id rather than a market slug:

curl -G "https://clob.polymarket.com/prices-history" \
  --data-urlencode "market=<TOKEN_ID>" \
  --data-urlencode "startTs=1755000000" \
  --data-urlencode "endTs=1755086400" \
  --data-urlencode "fidelity=1"

Each outcome is its own token, so a binary market needs two calls. Token ids come from Gamma's market record — and note that Gamma hides resolved markets by default, which is the first of the two traps below.

Parameters that matter

ParameterTypeNotes
marketstring, requiredThe CLOB token id, not the market slug. One token per outcome, so a binary market has two.
startTs / endTsunix secondsBound the window explicitly. This is the combination that works at fine granularity — the one most people skip.
interval1m, 1h, 6h, 1d, 1w, maxA shorthand for a window ending now. interval=max with a fine fidelity returns an empty array rather than an error.
fidelityinteger, minutesBucket size. 1 is the floor. There is no sub-minute option and no parameter that creates one.

Why it looks like the data is missing

SymptomCauseFix
Empty array for a market you know existedinterval=max combined with fidelity=1. Returns [] rather than an error.Drop interval and pass startTs and endTs instead.
Old markets appear to be missing entirelyGamma defaults to closed=false, so resolved markets are filtered out before you ever reach prices.Pass closed=true when looking up the market, then query its token ids.
Sub-minute data never arrivesfidelity is expressed in minutes. Values below 1 are not honoured.One minute is the floor. Anything finer has to be captured live as the market trades.
Prices look flat across a volatile periodA 1-minute bucket collapses everything inside it to one value.Expected behaviour. Use a finer source if intra-minute movement matters.

The first two account for most of it. Neither returns an error — one returns an empty array and the other silently filters the market out before you get as far as prices, so both look like the data does not exist.

One minute is the floor

fidelity is expressed in minutes and the smallest honoured value is 1. No combination of parameters produces sub-minute history, and none is planned as far as the public API is concerned.

For most analysis that is fine. It stops being fine when a minute is long relative to the thing you are studying — a 5-minute up/down market resolves in 300 seconds, so 1-minute buckets give you five observations of its entire life. Anything about execution, spread, or how the market behaves into settlement needs something finer.

If you need finer than a minute

Sub-minute prices have to be recorded while the market is trading. They cannot be backfilled afterwards, and neither can the order book — Polymarket archives neither.

FAQ

How do I get Polymarket price history?

Call the CLOB endpoint https://clob.polymarket.com/prices-history with a token id in the market parameter, and bound the window with startTs and endTs as unix seconds. It is free and needs no API key. Each outcome is a separate token, so a binary market requires two calls.

Why does Polymarket's prices-history return an empty array?

Almost always because interval=max was combined with a fine fidelity. That combination returns an empty array rather than an error, which reads like missing data. Remove interval and pass explicit startTs and endTs instead, and the same market returns full history.

What is the finest resolution Polymarket price history supports?

One minute. The fidelity parameter is expressed in minutes and 1 is the floor. There is no sub-minute price history available from Polymarket at any parameter combination.

How far back does Polymarket price history go?

To the market's creation, including markets that resolved years ago. If old markets appear missing, it is usually because Gamma defaults to closed=false and filters resolved markets out before you reach the price endpoint. Pass closed=true when looking up the market.

Does Polymarket price history include the order book?

No. prices-history returns a price series only. Order book depth — the resting bids and asks at each level — is not archived by Polymarket at any granularity, and cannot be recovered after the fact.

Can I get second-by-second Polymarket prices?

Not from Polymarket. It has to be captured live while the market trades. PolyOrderbooks records prices and full L2 depth at 1-second resolution and serves them over REST, with a free tier at the same resolution.