/archive/datasets
A JSON index of every downloadable archive partition across both Hive layouts, each row carrying the absolute download URL beside the known size and row count.
GET https://data.vike.io/v1/polymarket/archive/datasetsA JSON index of every downloadable archive partition, across both Hive layouts: the flat
venue=polymarket/date=.../ layout (every recorded market that day, sports and politics included)
and the family-partitioned venue=polymarket/asset=<asset>/tenor=<tenor>/date=.../ layout (one
crypto up/down family's own much smaller file, with other/other as the catch-all for every market
that is not a recognised family). Rows arrive in manifest order: every flat row first, newest date
first, then the family rows grouped by family.
The unfiltered call — no parameters at all, which is the one worth seeing first because it shows what the defaults do:
Truncated for the page: datasets held 200 rows; the first two are shown. The envelope is
complete and is the part that matters — sending no limit returned "limit": 200, the default
echoed back, and "total": 2100 against 200 rows delivered. That first page is under a tenth of
the archive, which is the paging point made with real numbers: page until
offset + len(datasets) >= total.
The two shown are the same date's two streams, the newest flat rows. Note the first
one's size — 4,799,571,940 bytes and 306,994,531 rows for a single day of book_events. This
is why bytes and rows are in the index at all: a day of book events is a 4.8 GB download, and
the archive's download guidance matters before you fetch one.
# what the archive holds, with no filter: the first 200 of every file across both layouts (flat first, newest date first), plus a total to page against
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/archive/datasets"
# only the small taker-tape files, and one of them: each row carries the absolute url, bytes and rows
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/archive/datasets?limit=1&stream=trades"
# one day in full, both layouts (the flat rows, then that day's family rows, since no asset filter): from and to are
# inclusive YYYY-MM-DD dates (date= is not a parameter and is refused with a 400)
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/archive/datasets?from=2026-09-01&to=2026-09-01"
# one crypto up/down family's own much smaller files: asset and tenor select family rows only, which drops every flat row
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/archive/datasets?asset=btc&tenor=5m&stream=trades&limit=30"
# size a download before starting it: the day's flat book_events file, in bytes
curl -s -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/archive/datasets?from=2026-09-01&to=2026-09-01&stream=book_events&limit=1" | jq '.datasets[0].bytes'
# walk the whole index, page 1 of 100 trades files; stop when offset + len(datasets) >= total
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/archive/datasets?stream=trades&limit=100"
# page 2: the same parameters plus offset
curl -H "X-API-Key: $VIKE_API_KEY" \
"https://data.vike.io/v1/polymarket/archive/datasets?stream=trades&limit=100&offset=100"assetqueryoptionalbtc. Supplying it excludes every flat row.tenorqueryoptional5m.streamqueryoptionalbook_events, trades, l1_quotes.fromqueryoptionalYYYY-MM-DD, inclusive lower date bound.toqueryoptionalYYYY-MM-DD, inclusive upper date bound.limitqueryoptional200, hard cap 1000.offsetqueryoptional0.{
"datasets": [
{
"bytes": 4799571940,
"date": "2026-09-02",
"layout": "flat",
"rows": 306994531,
"stream": "book_events",
"url": "https://data.vike.io/archive/venue=polymarket/date=2026-09-02/book_events.parquet",
"venue": "polymarket"
},
{
"bytes": 12314277,
"date": "2026-09-02",
"layout": "flat",
"rows": 1006555,
"stream": "trades",
"url": "https://data.vike.io/archive/venue=polymarket/date=2026-09-02/trades.parquet",
"venue": "polymarket"
}
],
"limit": 200,
"offset": 0,
"total": 2100
}Response — an object carrying the matching rows under datasets, each row with the absolute
download URL alongside the known size and row count, so you can budget a download before starting
it. This is ?limit=1&stream=trades, fetched from the running service:
{
"datasets": [
{
"bytes": 12314277,
"date": "2026-09-02",
"layout": "flat",
"rows": 1006555,
"stream": "trades",
"url": "https://data.vike.io/archive/venue=polymarket/date=2026-09-02/trades.parquet",
"venue": "polymarket"
}
],
"limit": 1,
"offset": 0,
"total": 700
}limit and offset echo back the values actually in force — limit reports the default 200
when you send none. total is the count of rows matching your filters before limit and
offset are applied, and it is the only field that tells you when to stop: page until
offset + len(datasets) >= total. It follows the filters rather than the page — measured in the
same minute, an unfiltered call reported 2100, ?stream=trades 700, and ?asset=btc 270.
Three names that look right and are refused: date, layout and venue
date=, layout= and venue= are not parameters here. A request carrying one is refused with
400 {"error":"unknown query parameter 'date' (this endpoint accepts: asset, tenor, stream, from, to, limit, offset)"}.
Earlier captures of this page found them silently ignored (?date=2026-09-01 came back with all 40
recorded dates); the route now rejects any name it does not list, so a typo cannot return an
unfiltered page that looks like an answer. A bad stream is a 400 as well:
invalid stream 'x' (must be one of book_events, trades, l1_quotes).
Use from and to for dates, and note they take YYYY-MM-DD, not the epoch milliseconds
that from/to mean on /ohlcv. Layout is not selected
directly: it follows from asset/tenor, which restrict the result to family rows. Dates are
compared as plain text, never parsed, so a malformed one does not error: depending on the value it
can match every row or none (from=abc excludes all of them, to=abc and from=2026 exclude
none). Validate dates client-side.
Because the default page is 200 rows out of considerably more, an unfiltered first page is not the
whole archive. Page with limit and offset, or filter first.
/settlements/{condition_id}
The on-chain settlement of one market — which outcome won, the payout vector, and the block and timestamp at which it resolved. For "how did this end", this is the authority.
/archive/url
Resolves one partition to its absolute download URL plus that file's known byte and row counts. Use it when you already know the partition you want.