STAT-API

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

eventspolymarket.events
A 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/events
Requires one of: league_code — requests satisfying none of these return 400.
Parameters
league_codequerystringoptional
Filter to events for a single league/sport slug (e.g., "nba", "nfl", "soccer").
competition_idquerybigintoptional
Filter to events linked to a specific competition (cross-schema game; resolved from slug).
statusquerystringoptional
Filter by event status — "active" or "closed". Values: active, closed.
game_datequerydateoptional
Filter to events scheduled on a specific date (YYYY-MM-DD).
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return 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/json
GET/api/v1/polymarket/events/{id}
Parameters
idpathbigintrequired
Primary 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.
tokenspolymarket.tokens
The 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/tokens
Requires one of: market_id — requests satisfying none of these return 400.
Parameters
market_idquerybigintoptional
Filter to outcome tokens for a single Polymarket market.
event_idquerybigintoptional
Filter to tokens linked to a single event (denormalized for direct event queries).
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return 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/json
GET/api/v1/polymarket/tokens/{id}
Parameters
idpathbigintrequired
Primary 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.
marketspolymarket.markets
An 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/markets
Requires one of: event_id or competition_id — requests satisfying none of these return 400.
Parameters
event_idquerybigintoptional
Filter to all markets that belong to a single Polymarket event.
competition_idquerybigintoptional
Filter to markets linked to a specific competition (denormalized from event).
statusquerystringoptional
Filter 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.
activequerybooleanoptional
Filter by active status (defaults to true to show only currently-active rows; pass active=false to include inactive).
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return 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/json
GET/api/v1/polymarket/markets/{id}
Parameters
idpathbigintrequired
Primary 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

candlespolymarket.candles
OHLC 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/candles
Requires one of: market_id — requests satisfying none of these return 400.
Parameters
market_idquerybigintoptional
Filter to candles for all tokens in a single Polymarket market.
token_idquerystringoptional
Filter to candles for a single outcome token (clobTokenId).
period_intervalqueryintegeroptional
Bin width in seconds. Currently every row is period_interval=1 (event-driven captures, irregular spacing) — resample client-side for fixed OHLC bins.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return 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/json
GET/api/v1/polymarket/candles/{id}
Parameters
idpathbigintrequired
Primary 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_historiespolymarket.price_histories
Historical 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_histories
Requires one of: token_id — requests satisfying none of these return 400.
Parameters
token_idquerystringoptional
Filter to price history for a single Polymarket outcome token (clobTokenId).
market_idquerybigintoptional
Filter to price history for all tokens in a single market.
interval_secondsqueryintegeroptional
Upstream fetch-window label (currently always 86400) — NOT a bin width; points within a window are irregularly spaced. Resample client-side.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return 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/json
GET/api/v1/polymarket/price_histories/{id}
Parameters
idpathbigintrequired
Primary 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_tradespolymarket.public_trades
Every 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_trades
Requires one of: market_id — requests satisfying none of these return 400.
Parameters
market_idquerybigintoptional
Filter to trades on a single Polymarket market.
token_idquerystringoptional
Filter to trades for a single outcome token (clobTokenId).
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return 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/json
GET/api/v1/polymarket/public_trades/{id}
Parameters
idpathbigintrequired
Primary 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

sportspolymarket.sports
Sport 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/sports
Parameters
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 200.
from_idquerybigintoptional
Return 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/json
503Coming soon — handler returns 503 until data is wired in.
GET/api/v1/polymarket/sports/{id}
Parameters
idpathbigintrequired
Primary 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.