Bulk datasets

For multi-day or multi-asset pulls, skip the REST API and download Parquet files directly from Cloudflare R2. Free egress, no rate limit, same data as the live endpoints.

How it works

  1. List available datasets with GET /v1/datasets — filter by asset, timeframe, date range, and tier.
  2. Request a signed URL for each dataset_id via GET /v1/download/{id}.
  3. Download the Parquet directly from R2. URLs expire after 15 minutes.

File layout

One file per (market-asset, day), three kinds of file:

  • polymarket_quotes_<YYYY-MM-DD>_<asset_id>.parquet — every top-of-book update. Light tier.
  • polymarket_trades_<YYYY-MM-DD>_<asset_id>.parquet — every executed trade. Light tier.
  • polymarket_book_snapshot_25_<YYYY-MM-DD>_<asset_id>.parquet — L25 order book snapshots, 109 columns. Full tier (Pro only).

List datasets

GET/v1/datasets
FieldTypeDescription
assetstringFilter by asset symbol — BTC, ETH, etc.
timeframestringOne of 5m, 15m, 1h, 4h, daily.
tierstringlight (quotes + trades) or full (adds L25 book snapshots).
fromdateLower bound on the file's day.
todateUpper bound on the file's day.
kindstringRestrict to one file kind: quotes, trades, or book_snapshot_25.

Example

terminal
curl https://api.tradrr.dev/v1/datasets \
  -H "Authorization: Bearer $TRADRR_API_KEY" \
  -G \
  --data-urlencode "asset=BTC" \
  --data-urlencode "timeframe=1h" \
  --data-urlencode "from=2025-01-01" \
  --data-urlencode "to=2025-01-07" \
  --data-urlencode "tier=full"
200 OK
{
  "data": [
    {
      "dataset_id": "ds_8f2c3a...",
      "kind":       "book_snapshot_25",
      "market_slug":"btc-updown-1h-1735689600",
      "day":        "2025-01-01",
      "size_bytes": 12483920,
      "row_count":  184231
    }
  ],
  "next_cursor": null
}

Get a download URL

GET/v1/download/{datasetId}

Returns a short-lived presigned URL pointing at the Parquet file on R2.

terminal
curl https://api.tradrr.dev/v1/download/ds_8f2c3a... \
  -H "Authorization: Bearer $TRADRR_API_KEY"
200 OK
{
  "url": "https://r2.tradrr.dev/...signed...",
  "expires_at": "2025-05-20T13:15:00Z",
  "size_bytes": 12483920,
  "sha256":     "0a1b2c..."
}
Note
Pro plan keys can download any file. Free keys are limited to BTC files in the last seven days, and the L25 tier is not available on Free.

Reading a file

Pandas, Polars, DuckDB — anything that speaks Parquet works directly.

python
import polars as pl

df = pl.read_parquet(url)
print(df.head())
# ts_us | market_id | asset_id | outcome | bid_price | bid_size | ask_price | ask_size

For the L25 snapshots, the 25 levels are stored as separate columns (bid_price_0bid_price_24, bid_size_0bid_size_24, same for asks). See the book reference for the level semantics.