Polymarket hub

Polymarket Perps Klines API

OHLC candles for one Perps instrument, oldest first.

GET /v1/polymarket/perps/instruments/{instrumentId}/klines

1 credit Failed requests are free

About this endpoint

GET /v1/polymarket/perps/instruments/{instrumentId}/klines returns data.candles, oldest first. Each candle has at, open, high, low, close, volume (contracts) and trades. data.instrumentId and data.interval echo the request, and data.page continues a long series.

interval is 1m, 5m, 15m, 30m, 1h, 4h, 6h, 12h, 1d or 1w and defaults to 1h. from and to are unix seconds; by default the range is 48 hours before to, which defaults to now. An id that matches no instrument returns a found answer with an empty list.

Polymarket Perps Klines API FAQ

What is the default range?

With no from or to, the route returns the 48 hours before now. Pass from and to in unix seconds for another window. The interval sets the candle length, not the range.

Why are there no candles?

An instrument id that matches nothing returns an empty list on a found lookup. A valid instrument with no trades in the requested window also returns an empty list. Check the instrument list first.

Are volume and trades per candle?

Yes. volume is contracts traded in that candle and trades is the number of trades in it. They reset on each candle rather than accumulating.

What does lookupStatus mean on this route?

found means the object or list was returned. not_found means no matching object exists. HTTP 200 only means the request finished, so branch on data.lookupStatus before storing a row.

How much does this route cost?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth.