Base URL
/v3 endpoint — pass your key as a query parameter or header:
What you can build
- Perps trading dashboards — live tickers, orderbooks, best bid/offer, recent trades, and candles for every listed instrument, over REST or a single WebSocket connection
- Portfolio trackers — look up any wallet’s perps positions and equity. Pass either the Polymarket profile address or the underlying account address; resolution is automatic (how it works)
- Funding and analytics tools — hourly funding-rate history, 24h statistics, OHLCV candles, plus polynode-exclusive open-interest and volume time series
- Cross-product platforms — perps data lives under the same
/v3surface as prediction-market trades, positions, and P&L, so one integration covers both sides of Polymarket
Instruments
Instruments span four categories —crypto, index, commodity, and equity (11 live as of mid-July 2026, and Polymarket has dozens more defined for future launch). The API discovers new instruments automatically as they list; nothing is hardcoded, so /instruments is always the current list. Everywhere an endpoint takes an instrument you can pass the numeric id (6), the full symbol (BTC-USD), or the bare asset (btc).
Data conventions
- Prices and quantities are strings. The exchange uses high-precision decimals; we pass them through untouched so you never lose precision to floating point. Exchange-reported values (prices, sizes, equity, unrealized PnL) keep their full native precision; values we derive (aggregates, notionals, basis, CVD) are normalized to a clean decimal form.
- Timestamps are Unix milliseconds in responses, always in a field named
timestamp(snapshot-based rows additionally carryas_of— when we last observed that account). Time-range filters (after,before) accept seconds or milliseconds — values are detected automatically. - Lists come wrapped as
{"data": [...]}, with amoreflag on paginated endpoints. instrument_idandsymbolappear together in every response, so you never need a separate lookup call.- Unknown query parameters are rejected with a
400naming what the endpoint accepts, so a typo’d filter can never silently return unfiltered data.

