Updated September 2026

Kalshi Data: Historical Prices, Order Book Depth and Open Interest

Kalshi has no data marketplace and no bulk export button. What it has is a free, unauthenticated API that exposes more than most traders realise, plus two gaps that no endpoint will ever fill for you. This page maps what exists, what it costs, and what you have to record yourself before it disappears.

The short answer

Every Kalshi data source, and what it gives you

SourceWhat you getCostNotes
Candlesticks endpoint
GET /series/{series}/markets/{ticker}/candlesticks
OHLC price history per market tickerFreeThe primary route for historical price series. Poll and persist to build an archive.
Events with nested markets
GET /events?status=open&with_nested_markets=true&limit=50
Bulk snapshot: prices, volume, open interestFreeBest bulk discovery call. Roughly 250+ markets per request.
Order book
GET /markets/{ticker}/orderbook
Current bid and ask depthFreeLive state only. No historical depth is served, so snapshot it yourself.
Series metadata
GET /series/{series_ticker}
Settlement source, contract terms, frequencyFreeTells you which NWS station or data source settles a contract.
Portfolio and fills
GET /portfolio/*
Your own orders, positions, settlementsFree, auth requiredRSA-PSS signed. Your fill history is the only trade level data you can fully export.

All market data routes live on https://api.elections.kalshi.com/trade-api/v2. Portfolio routes live on https://external-api.kalshi.com/trade-api/v2. Using the wrong host is the most common reason a data pull comes back empty. Details in the API reference.

How to download Kalshi historical data

There is no archive endpoint, so the practical approach is a two step collector. First enumerate the markets you care about, then pull candlestick history for each ticker and write it to storage.

# 1. Enumerate open markets in bulk
GET https://api.elections.kalshi.com/trade-api/v2/events
    ?status=open&with_nested_markets=true&limit=50

# 2. Pull price history per market ticker
GET https://api.elections.kalshi.com/trade-api/v2/series/{series}
    /markets/{ticker}/candlesticks
    ?start_ts={unix}&end_ts={unix}&period_interval=60

Run that on a schedule and you accumulate exactly the dataset Kalshi does not sell you. The important detail is starting early: markets that settle and age out become far harder to reconstruct, and depth data is never recoverable after the fact.

The two gaps you cannot fill retroactively

Historical order book depth

The order book endpoint is a live snapshot. There is no parameter that returns yesterday's book. If you want to study how depth moved before a resolution, you must be snapshotting on an interval today. Every hour you wait is an hour of depth history that no longer exists.

Trade level tape for other participants

Aggregate volume and open interest are published, but an individual print by print tape of who traded what is not exposed. Your own fills are fully available through the portfolio endpoints. Everyone else's activity is visible only in aggregate.

Reading the fields correctly

API v2 renamed most of the fields that data pipelines depend on. If your collector is writing nulls, this is almost always the reason.

What you wantField nameFormat
Open interestopen_interest_fpnumber, e.g. 246292.19
Volumevolume_fpnumber, e.g. 785807.77
Best bidyes_bid_dollarsstring, e.g. "0.3300"
Best askyes_ask_dollarsstring, e.g. "0.3400"
Bid depthyes_bid_size_fpnumber, e.g. 2574.02
Last traded pricelast_price_dollarsstring, e.g. "0.3300"

Price fields are strings in dollars, not integer cents. Cast before arithmetic. Size and volume fields use the _fp suffix and arrive as numbers.

Building a Kalshi screener

A useful screener does not need a paid data feed. One bulk events call returns several hundred markets with everything you need to rank them. Filter client side on the criteria that actually predict tradability.

Frequently asked questions

Can I download historical Kalshi data?

There is no single download button for a full historical archive. Kalshi exposes candlestick history per market through the API, and settled markets remain queryable after resolution. To build a historical dataset you poll the candlesticks endpoint per market ticker and store the results yourself. Most serious traders run a daily collector for exactly this reason.

Does Kalshi provide historical order book data?

Not as a historical archive. The order book endpoint returns the current book only, so depth history has to be recorded by you as it happens. If you need historical depth, snapshot the order book on a schedule and persist it. Once a moment has passed, that depth is gone and cannot be retrieved retroactively.

How do I get Kalshi open interest?

Open interest arrives on the market object as open_interest_fp, returned as a fixed point number such as 246292.19. It is not a separate endpoint. Request the market or use the events endpoint with nested markets, then read the field directly from each market.

Is Kalshi market data free?

Yes. Market data endpoints including markets, events, order books, candlesticks and series require no API key and no payment. Authentication is only needed for portfolio actions such as placing orders or reading your balance. Rate limits still apply to unauthenticated calls, so batch politely.

What is the best way to screen Kalshi markets in bulk?

Use GET /events?status=open&with_nested_markets=true&limit=50 against api.elections.kalshi.com. It returns events with markets embedded, which gives you several hundred markets per call including prices, volume and open interest. Filter client side on volume_fp and bid depth to build a screener.

How far back does Kalshi candlestick history go?

History exists for the lifetime of each individual market, so it is bounded by when that contract was listed rather than by a fixed lookback window. Short cycle markets such as the 15 minute crypto contracts have very brief histories. Long running series accumulate considerably more.

A collector that already runs

The Kalshi AutoTrader Bot Kit ships the API client, correct field mapping and a backtesting framework, so market data lands in a usable shape from the first run instead of after a week of debugging field names.

See the Bot Kit — API client, risk manager, backtester

Related guides