API reference
CSV, bundles, and replay
Three calls build a derived file from the daily Parquet. The first answer is status: building. Call again until status: ready. A finished object is cached, so the next caller gets it immediately.
Auth required. Ready files count toward the monthly allowance once.
CSV of one file
POST /api/v1/files/csv converts one Parquet file to gzipped CSV. Optional tickers keep only those markets. A file that is too large returns 413 — download the Parquet, or pass --csv to a request script.
{ "key": "flat/v1/trades/date=2026-10-12/series=KXBTC15M/trades-KXBTC15M-2026-10-12.parquet", "tickers": [] }status: ready includes file.url. The allowance is charged as the Parquet source, not the CSV size.
Event bundle
POST /api/v1/events/{event_id}/bundle builds one zip for a Kalshi event: book, snapshots, BBO, trades, crypto spot, the markets table, settlement, and metadata.json. It includes the datasets on your plan. An unknown event, or an event with no published files, is 404.
curl -X POST "https://kalshieye.com/api/v1/events/KXBTC15M-26OCT121545/bundle" \
-H "Authorization: Bearer $KALSHIEYE_API_KEY"While it builds, the body includes event, days, datasets, and markets. When it is ready, file is a signed link to kalshieye-{event}.zip. The zip counts once.
Book replay
GET /api/v1/markets/{ticker}/replay returns top-of-book frames from book_snap_1s (at most 3,600) and the trades for one market-day. This is the replay on the market page. It needs book_snap_1s on your plan (402 with required_tier: pro otherwise).
date is a UTC day. Omit it and the call uses the market's last published day. status: ready includes the frames. A series with no book files yet is 404.
curl "https://kalshieye.com/api/v1/markets/KXBTC15M-26OCT121545-45/replay?date=2026-10-12" \
-H "Authorization: Bearer $KALSHIEYE_API_KEY"