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
- List available datasets with
GET /v1/datasets— filter by asset, timeframe, date range, and tier. - Request a signed URL for each
dataset_idviaGET /v1/download/{id}. - 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
| Field | Type | Description |
|---|---|---|
| asset | string | Filter by asset symbol — BTC, ETH, etc. |
| timeframe | string | One of 5m, 15m, 1h, 4h, daily. |
| tier | string | light (quotes + trades) or full (adds L25 book snapshots). |
| from | date | Lower bound on the file's day. |
| to | date | Upper bound on the file's day. |
| kind | string | Restrict 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_0…bid_price_24, bid_size_0…bid_size_24, same for asks). See the book reference for the level semantics.