Free Polymarket API & order-book data
Markets, the raw event tape, order-book snapshots, candles and on-chain settlements over the API — 15 routes under /v1/polymarket, with /events and /orderbook recorded from 2026-07-25. The same days, in bulk, are the Parquet archive below, licensed CC BY 4.0.
/events and /orderbookPolymarket markets API: find a market, then its tokens
Search recorded markets by slug, open or closed; one market by condition_id; and its on-chain resolution.
/v1/polymarket/markets
Search recorded markets by slug substring; active = true | false (or closed); newest end_date first; limit ≤ 100. A bare array.
/v1/polymarket/markets/{condition_id}
One market by condition_id, as an array of 0 or 1 rows — an unknown id is 200 [].
/v1/polymarket/settlements/{condition_id}
The on-chain resolution of one market, 0 or 1 rows. [] means the chain resolved nothing — not that the market is open.
/v1/polymarket/settlements/bulk
Many resolutions in one walk, oldest first: optional from_ms / to_ms and slug_prefix; limit ≤ 5,000; {settlements, has_more, next_cursor}.
Market search · /markets
/v1/polymarket/markets?active=true&limit=25On-chain settlement · /settlements/{condition_id}
Search Polymarket markets · /markets
/v1/polymarket/markets?query={query}&active={active}&limit={limit}One market · /markets/{condition_id}
/v1/polymarket/markets/{condition_id}Market resolution · /settlements/{condition_id}
/v1/polymarket/settlements/{condition_id}Polymarket order book, stats and candles
The live panels follow one liquid recorded token, picked when the snapshot is captured; its id is in each panel's </> API side.
/v1/polymarket/orderbook
The nearest book snapshot at or before ts (omit ts for the latest), flattened to levels; depth ≤ 25. One array, asks first then bids.
/v1/polymarket/market_stats
One token's tape summary: event counts, trade volume, first and last timestamps. Always exactly one row.
/v1/polymarket/ohlcv
Candles at 1m | 5m | 1h | 1d, oldest first; from / to are epoch ms, both inclusive; limit ≤ 1,000.
Order book · /orderbook
Candles · /ohlcv
A book can be one-sided, so depth=10 can return fewer than 20 rows. as_of_ts on every row is the snapshot actually used, not the ts you asked for. A snapshot can also list a level more than once — key rows on (side, level).
Order book snapshot · /orderbook
/v1/polymarket/orderbook?token_id={token_id}&depth={depth}Market stats · /market_stats
/v1/polymarket/market_stats?token_id={token_id}Polymarket price candles · /ohlcv
/v1/polymarket/ohlcv?token_id={token_id}&interval={interval}&from={from}&limit={limit}Bars come back oldest first and limit cuts the head of the range, so pass from for a recent window. Each captured from pairs with its interval.
Polymarket trade and event tape, in order
GET /v1/polymarket/events — the per-market event tape ordered by receive time and sequence: book snapshots, price changes, trades, tick-size changes and status markers.
/v1/polymarket/events
Raw event tape for one token (or up to 100 via token_ids); from_ms / to_ms required, ≤ 24h per call; limit ≤ 50,000; event_type filter; next_cursor.
Event tape · /events
An enveloped route (/settlements/bulk is the other): {"events": […], "has_more": …, "next_cursor": …}. next_cursor is a string only while has_more is true — pass it back as cursor. bids / asks are strings carrying JSON.
/v1/polymarket/events?token_id={token_id}&from_ms={from_ms}&to_ms={to_ms}&event_type={event_type}&limit={limit}/events and /orderbook serve every recorded day from 2026-07-25 and answer in pages; a /events call spans at most 24 hours. Anything you want in bulk is the archive: one Parquet file per stream per UTC day, every recorded market in it.
Polymarket smart money: who is trading, and who is early
Three routes over the on-chain trade tape — not the recorded book — that run the same code as the MCP tools polymarket_wallet, polymarket_smart_money and polymarket_leaderboard.
/v1/polymarket/wallets/{address}
One trader: realized P&L, hit rate on resolved markets, volume, categories, recent trades and an equity curve. window = 24h | 7d | 30d | all.
/v1/polymarket/smart_money
Markets the profitable-wallet cohort is buying (mode = flows) or bought well below the mid (mode = mispricings); hours, category, limit ≤ 20.
/v1/polymarket/leaderboard
Wallets ranked by realized P&L, hit rate, volume or trade count, lifetime or over a window, with bot and whale tags; category, window, sort, min_resolved, min_volume_usd, min_avg_usd; limit ≤ 50, offset ≤ 1000.
Polymarket historical data: the Parquet archive
Full L2 Polymarket history as daily Parquet under https://data.vike.io/archive/. The calendar is the captured /archive/datasets reply: click a day for its streams, sizes and rows, and the resolved file URL where the capture has one.
/archive/datasetsArchive calendar · /archive/datasets
/v1/polymarket/archive/datasets?limit=1000| Stream | What it holds |
|---|---|
book_events | Full L2: book snapshots, price_change deltas, trade prints, tick-size changes and status markers, in sequence. Recorder gaps are marked with gap_start / live_resume, not hidden. |
trades | The taker tape alone — the trade prints without the book. |
l1_quotes | Derived top of book: bid, ask and both sizes, one row per change. |
Two layouts
By date — one UTC day, every recorded market:venue=polymarket/date=YYYY-MM-DD/<stream>.parquet.
By family — the crypto up/down families on their own: asset=btc/tenor=5m/date=….
Families
Assets btc eth sol xrp doge bnb hype + other; tenors 5m 15m 4h + other. other/other is the catch-all for every market that is not an up/down family. A family with no rows in a stream on a day has no file.
Licence and access
CC BY 4.0 — use it for anything, credit vike. Samples and the manifest need no key. Full files need a free key, and downloads do not count against your 20,000 requests an hour.
No key at all
https://data.vike.io/archive/samples/—book_events,trades,l1_quotes, the same columns as the full archive.https://data.vike.io/archive/manifest.json— every partition, both layouts, the column schemas, regenerated daily.
Resolve, then download
/archive/url resolves one file to a download link of your own, valid 7 days and needing no key. With redirect=1 it answers 302 with a Location header (and the same JSON body), so curl -L lands on the Parquet file. The resolve is one API request; the download it redirects to is not counted.
curl -L -H "X-API-KEY: vk_…" -o trades.parquet \
"https://data.vike.io/v1/polymarket/archive/url?date=YYYY-MM-DD&stream=trades&redirect=1"
Download whole files and read them locally: a Parquet reader pointed at a remote file issues a range request per column chunk and repeats them on every query.
Download link for one archive file · /archive/url
/v1/polymarket/archive/url?date={date}&stream={stream}&asset={asset}&tenor={tenor}Pass both asset and tenor for a family file, or neither for the whole day. "No such file" is a 400, not a 404.
Archive file list · /archive/datasets
/v1/polymarket/archive/datasets?stream={stream}&asset={asset}&limit={limit}{"datasets": […], "limit", "offset", "total"} in manifest order. Here from / to are YYYY-MM-DD strings — on /ohlcv the same names are epoch ms.
/v1/polymarket/archive/datasets
The archive file index, filtered by stream, asset, tenor, from / to (YYYY-MM-DD) and paged by limit ≤ 1,000 / offset.
/v1/polymarket/archive/url
Resolve one file to its download URL; redirect=1 answers 302 to the file.