vike
API EndpointsPolymarket

/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/datasets

A 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.

cURL
# 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"
assetqueryoptional
Matches family-layout rows only, e.g. btc. Supplying it excludes every flat row.
tenorqueryoptional
Matches family-layout rows only, e.g. 5m.
streamqueryoptional
One of book_events, trades, l1_quotes.
fromqueryoptional
YYYY-MM-DD, inclusive lower date bound.
toqueryoptional
YYYY-MM-DD, inclusive upper date bound.
limitqueryoptional
Max rows. Default 200, hard cap 1000.
offsetqueryoptional
Skip this many matching rows. Default 0.
Example response
{
  "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:

Example response — limit=1, stream=trades
{
  "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.

cURL
# 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 againstcurl -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 rowscurl -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 rowcurl -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 bytescurl -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) >= totalcurl -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 offsetcurl -H "X-API-Key: $VIKE_API_KEY" \  "https://data.vike.io/v1/polymarket/archive/datasets?stream=trades&limit=100&offset=100"
Example response
{  "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}