Polymarket API Reference
Polymarket's on-chain prediction markets — events and the YES/NO outcome tokens that trade against them, with OHLC candles, minute-fidelity price history, and the full public trade tape.
Main
events
polymarket.eventsA real-world event that anchors a set of Polymarket markets — a single sports game, an election, a futures question, or any other resolvable scenario. E.g., "Mavericks vs Suns" game event or "2026 NBA Champion" futures event.
GET/api/v1/polymarket/eventsList events for Polymarket
Requires one of:
league_code — requests satisfying none of these return 400.Parameters
league_codequerystringoptionalFilter to events for a single league/sport slug (e.g., "nba", "nfl", "soccer").
competition_idquerybigintoptionalFilter to events linked to a specific competition (cross-schema game; resolved from slug).
statusquerystringoptionalFilter by event status — "active" or "closed". Values: active, closed.
game_datequerydateoptionalFilter to events scheduled on a specific date (YYYY-MM-DD).
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/polymarket/events?league_code=example'Responses
200events rows matching the declared filter set, wrapped in { events, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonGET/api/v1/polymarket/events/{id}Get a single event by id
Parameters
idpathbigintrequiredPrimary key (id) of the event row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/polymarket/events/{pk_value}'Responses
200Single event row.application/jsonshow example ▸
404Row not found.
tokens
polymarket.tokensThe tradable outcome tokens within a Polymarket market — YES and NO for binary markets, or one token per outcome for multi-outcome markets (e.g., each team in a championship futures market). The clobTokenId is used to query CLOB API for pricing and trades.
GET/api/v1/polymarket/tokensList tokens for Polymarket
Requires one of:
market_id — requests satisfying none of these return 400.Parameters
market_idquerybigintoptionalFilter to outcome tokens for a single Polymarket market.
event_idquerybigintoptionalFilter to tokens linked to a single event (denormalized for direct event queries).
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/polymarket/tokens?market_id=1'Responses
200tokens rows matching the declared filter set, wrapped in { tokens, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonGET/api/v1/polymarket/tokens/{id}Get a single token by id
Parameters
idpathbigintrequiredPrimary key (id) of the token row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/polymarket/tokens/{pk_value}'Responses
200Single token row.application/jsonshow example ▸
404Row not found.
markets
polymarket.marketsAn individual prediction market on Polymarket — a specific question tied to an event, resolved on-chain, with one or more tradable outcome tokens. Each market has 2+ tokens representing outcome positions.
GET/api/v1/polymarket/marketsList markets for Polymarket
Requires one of:
event_id or competition_id — requests satisfying none of these return 400.Parameters
event_idquerybigintoptionalFilter to all markets that belong to a single Polymarket event.
competition_idquerybigintoptionalFilter to markets linked to a specific competition (denormalized from event).
statusquerystringoptionalFilter by market status — "active" or "closed" ("resolved" appears only on 22 legacy rows that carry no resolution data; resolution fields live on closed rows). Values: active, closed, resolved.
activequerybooleanoptionalFilter by active status (defaults to true to show only currently-active rows; pass active=false to include inactive).
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/polymarket/markets?event_id=1'Responses
200markets rows matching the declared filter set, wrapped in { markets, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonGET/api/v1/polymarket/markets/{id}Get a single market by id
Parameters
idpathbigintrequiredPrimary key (id) of the market row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/polymarket/markets/{pk_value}'Responses
200Single market row.application/jsonshow example ▸
404Row not found.
Markets
candles
polymarket.candlesOHLC candlestick price summaries for Polymarket outcome tokens — the open, high, low, close, and volume over standard time bins (1 minute, 5 minute, 1 hour, 1 day). Bucketed by (token_id, period_interval, end_period_ts).
GET/api/v1/polymarket/candlesList candles for Polymarket
Requires one of:
market_id — requests satisfying none of these return 400.Parameters
market_idquerybigintoptionalFilter to candles for all tokens in a single Polymarket market.
token_idquerystringoptionalFilter to candles for a single outcome token (clobTokenId).
period_intervalqueryintegeroptionalBin width in seconds. Currently every row is period_interval=1 (event-driven captures, irregular spacing) — resample client-side for fixed OHLC bins.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/polymarket/candles?market_id=1'Responses
200candles rows matching the declared filter set, wrapped in { candles, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonGET/api/v1/polymarket/candles/{id}Get a single candle by id
Parameters
idpathbigintrequiredPrimary key (id) of the candle row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/polymarket/candles/{pk_value}'Responses
200Single candle row.application/jsonshow example ▸
404Row not found.
price_histories
polymarket.price_historiesHistorical price tracks for each Polymarket outcome token — the full time-series of trading prices since the market opened. Analogous to kalshi.candle.
GET/api/v1/polymarket/price_historiesList price_histories for Polymarket
Requires one of:
token_id — requests satisfying none of these return 400.Parameters
token_idquerystringoptionalFilter to price history for a single Polymarket outcome token (clobTokenId).
market_idquerybigintoptionalFilter to price history for all tokens in a single market.
interval_secondsqueryintegeroptionalUpstream fetch-window label (currently always 86400) — NOT a bin width; points within a window are irregularly spaced. Resample client-side.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/polymarket/price_histories?token_id=example'Responses
200price_histories rows matching the declared filter set, wrapped in { price_histories, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonGET/api/v1/polymarket/price_histories/{id}Get a single price_history by id
Parameters
idpathbigintrequiredPrimary key (id) of the price_history row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/polymarket/price_histories/{pk_value}'Responses
200Single price_history row.application/jsonshow example ▸
404Row not found.
public_trades
polymarket.public_tradesEvery executed trade on Polymarket — price, size, side (buy or sell of each token), and timestamp, comprising the public market tape. Represents completed market trades.
GET/api/v1/polymarket/public_tradesList public_trades for Polymarket
Requires one of:
market_id — requests satisfying none of these return 400.Parameters
market_idquerybigintoptionalFilter to trades on a single Polymarket market.
token_idquerystringoptionalFilter to trades for a single outcome token (clobTokenId).
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/polymarket/public_trades?market_id=1'Responses
200public_trades rows matching the declared filter set, wrapped in { public_trades, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonGET/api/v1/polymarket/public_trades/{id}Get a single public_trade by id
Parameters
idpathbigintrequiredPrimary key (id) of the public_trade row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/polymarket/public_trades/{pk_value}'Responses
200Single public_trade row.application/jsonshow example ▸
404Row not found.
Misc
sports
polymarket.sportsSport categories used on Polymarket — basketball, football, baseball, hockey, soccer, MMA, and other tags that organize sports markets. Small reference table (~20 rows).
⚠️ This endpoint is documented but not yet live. Calls return
503 until data is wired in.GET/api/v1/polymarket/sportsList sports for Polymarket
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 200.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/polymarket/sports?limit=3'Responses
200sports rows matching the declared filter set, wrapped in { sports, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/json503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/polymarket/sports/{id}Get a single sport by id
Parameters
idpathbigintrequiredPrimary key (id) of the sport row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/polymarket/sports/{pk_value}'Responses
200Single sport row.application/jsonshow example ▸
404Row not found.
503Coming soon — handler returns 503 until data is wired in.