Kalshi data
Kalshi Data: Order Books, Price History, Downloads and API
Kalshi data comes in four layers, and they answer different questions. Markets, candlesticks and trades are served by Kalshi's own API. The resting yes and no order book is the layer Kalshi shows only as it is now — so the book as it was at any past moment exists only if someone recorded it.
First-hand figures from the Kalshi archive
Computed directly from DepthFeed's own capture rather than quoted from a vendor sheet, which is why they carry a measurement date and a named cohort. Measured on the live archive as of June 21, 2026, on BTC 15-minute markets. Coverage grows continuously, so counts are a floor rather than a fixed figure.
1.5 billion
order-book snapshots. Recorded books across 2,600,000+ Kalshi crypto markets.
1¢
typical spread. Median yes spread on BTC 15-minute markets.
96 price levels on each side
ladder depth. Median levels per side on BTC 15-minute markets, out of Kalshi's full 100.
156,000 contracts
resting size. Median total contracts resting across both ladders of the same cohort.
Kalshi data covers four layers: market metadata (the series, event and market tickers and how a contract settles), price history (candlesticks of where it traded), trades (what executed), and order-book depth (the resting yes and no bids at a moment). Kalshi's API serves the first three historically; its order-book endpoint returns the current book only.
Anatomy of a real Kalshi book
This ladder is copied verbatim from one recorded BTC 15-minute observation — a real row from the archive, not an illustration.
A yes bid at price p is a no offer at 1 − p, so the implied yes ask is 1 − the best no bid.: full-depth REST poll.
- yes_prices / yes_sizes
- The resting yes bids as price and contract count, best first.
- no_prices / no_sizes
- The resting no bids. Each one is a yes offer at 1 − price, which is how the implied yes ask (0.33 here) is read.
- ticker
- The exact market ticker — series, event window and strike — and the only stable join key.
- recv_ts_ms
- When the book was received, in epoch milliseconds — the time axis every Kalshi snapshot is ordered and joined on.
Kalshi coverage at a glance
- Order-book snapshots
- 1.5 billion+ recorded observations
- Markets captured
- 2,600,000+
- History from
- January 2026
- Market windows
- 15-minute, hourly, daily, and weekly
- Crypto assets
- 7
- Book structure
- Yes and no bid ladders; implied ask = 1 − best opposite bid
- Delivery
- REST, CSV and Parquet
Pull Kalshi data by layer
Discover markets by series first so tickers and metadata stay attached to the request, then ask for recorded books on one exact market ticker.
curl -s "https://api.depthfeed.com/v3/kalshi/markets?series=KXBTC15M&limit=5" \
-H "Authorization: Bearer df_your_key"
curl -s "https://api.depthfeed.com/v3/kalshi/<exact_market_ticker>/snapshots?include_orderbook=true" \
-H "Authorization: Bearer df_your_key"
curl -s "https://api.depthfeed.com/v3/kalshi/<exact_market_ticker>/orderbook/latest" \
-H "Authorization: Bearer df_your_key"- Use the full market ticker, strike included; an event ticker names several markets with different books.
- Read the yes ask as 1 − best no bid; there is no separate ask array.
- Follow the response cursor for the next page instead of building offsets.
Kalshi data
The four layers of Kalshi data
Markets and tickers — what the contract actually is
Kalshi names everything with three nested tickers: a series (KXBTC15M, every 15-minute Bitcoin market), an event (one window of that series) and a market (one strike inside the event, such as KXBTC15M-26JUN211530-30). The market ticker is the join key; the series and event tickers are how you discover markets in bulk. Getting this level wrong is the most common reconciliation bug, because an event holds several markets with different strikes and very different books.
Kalshi price history — candlesticks and what they leave out
Kalshi's API serves candlesticks: open, high, low and close of the yes price over fixed periods, with volume. For forecast accuracy, calibration and charting that is the right input. What a candle cannot say is whether size was available: a close of 32 cents means a trade printed there, not that a 500-contract order could have filled near it. On a 15-minute market a coarse candle series also carries only a few points across the contract's whole life.
Trades — what executed
Kalshi's trades endpoint returns executed fills with price, count and taker side, and its historical tier keeps them. That covers volume, flow and fill-timing research. As with any trade tape, it cannot recover the book: a thin market and a deep one can print the same trades, so the slippage an order would have paid is not derivable from trades alone.
Kalshi order book data — yes bids, no bids, and the implied ask
A Kalshi book is two ladders of bids: yes bids and no bids. There is no separate ask side, because a no bid at price p is a yes offer at 1 − p. In the recorded sample below the best yes bid is 0.32 and the best no bid 0.67, so the implied yes ask is 0.33 — a one-cent market. Kalshi's public orderbook endpoint returns this structure for the present moment only; its historical tier covers trades and candlesticks, not depth over time. Replaying the book as it was requires continuous capture, which is what DepthFeed's archive is.
Kalshi data API: matching the request to the layer
DepthFeed serves the recorded layers over one REST surface. Market discovery takes a series ticker and a time range and returns the markets with their tickers and metadata; the snapshot route returns recorded books for one exact market ticker, with include_orderbook exposing both ladders; orderbook/latest returns the newest recorded book. Downsampling selects a real recorded observation rather than interpolating one, so a gap stays a visible gap.
Kalshi data download: CSV, Parquet or REST
Use CSV for inspection and small extracts, Parquet for large columnar research, and REST for bounded or incremental pulls. The format should change how bytes arrive, never what a record means: keep the market ticker, the millisecond receive timestamp, the full yes and no price and size arrays, and explicit markers where data is absent. A Kalshi dataset reduced to one price per row is a candle series under another name.
What is deliberately not claimed here
The recorded archive starts in January 2026, where continuous capture began, not where Kalshi began — Kalshi's own candlesticks and trades reach further back than any third-party book archive, which is why the layers are complements rather than substitutes. Coverage here is crypto markets; figures describe measured samples on a named cohort, not a service guarantee. Where a market was not captured, the answer is an explicit gap.
Pull a real Kalshi book before you integrate
Start with a bounded recorded sample: check the tickers, the timestamps and both ladders against your own loader, then create a key once the schema fits the job.
