Kalshi API data
Kalshi API Data: Markets, Order Books, Candles and Trades
Kalshi's public API returns series, events, markets, the current order book, candlesticks and trades, and none of those calls needs an API key. What it does not return is the order book at a past moment. This page maps each kind of Kalshi data to its endpoint, shows the calls, and covers the gap with 1.5 billion recorded books.
Kalshi API data is the exchange data served by Kalshi's Trade API at https://external-api.kalshi.com/trade-api/v2. Public market data covers series, events, markets, the current orderbook, candlesticks and trades; settled data older than a published cutoff moves to /historical endpoints. Account data (orders, fills, positions) needs RSA-signed API-key requests.
One Kalshi order book, as recorded
Copied from one stored BTC 15-minute observation in DepthFeed's archive. Kalshi's orderbook response carries the same two bid ladders for the current moment.
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_dollars / yes_prices
- Resting yes bids as price and contract count, best first.
- no_dollars / no_prices
- Resting no bids. Each is a yes offer at 1 − price, which gives the implied yes ask (0.33 here).
- ticker
- The exact market ticker, strike included.
- recv_ts_ms
- DepthFeed's receive time in epoch milliseconds; Kalshi's book response has no exchange timestamp.
Kalshi API data at a glance
- Base URL
- https://external-api.kalshi.com/trade-api/v2
- Market data auth
- None for series, events, markets, orderbook, candlesticks and trades
- Account data auth
- RSA-signed API-key headers
- Order book
- Current yes and no bid ladders; ask = 1 − best opposite bid
- Candlestick periods
- 1 minute · 1 hour · 1 day
- Older settled data
- /historical endpoints after the published cutoff
- Past order books
- Not served by Kalshi; DepthFeed records them from 2026-01-08
Fetch Kalshi API data with curl
Every call below is public. Replace the tickers with ones from the first response; timestamps are Unix seconds.
# Open markets in one series
curl -s "https://external-api.kalshi.com/trade-api/v2/markets?series_ticker=KXBTC15M&status=open&limit=5"
# The current order book for one exact market
curl -s "https://external-api.kalshi.com/trade-api/v2/markets/<market_ticker>/orderbook"
# Hourly candles for that market
curl -s "https://external-api.kalshi.com/trade-api/v2/series/KXBTC15M/markets/<market_ticker>/candlesticks?start_ts=1793232000&end_ts=1793318400&period_interval=60"
# Recent trades, then the cutoff for older ones
curl -s "https://external-api.kalshi.com/trade-api/v2/markets/trades?ticker=<market_ticker>&limit=100"
curl -s "https://external-api.kalshi.com/trade-api/v2/historical/cutoff"- Follow the cursor field until it comes back empty.
- Read the yes ask as 1 − best no bid; the orderbook has no ask array.
- Markets settled before the cutoff are only on the /historical endpoints.
Kalshi API data
What the Kalshi API returns, and from where
Series, events and markets: the hierarchy
A series is a recurring question (KXBTC15M is Bitcoin every 15 minutes), an event is one instance of it, and a market is one tradable yes/no contract inside the event, with its strike in the ticker. GET /series/{series_ticker}, GET /events/{event_ticker} and GET /markets?series_ticker=… return them. Use the full market ticker as the join key: an event ticker names several markets with very different prices.
Market data without an API key
Kalshi documents its market-data endpoints as public: no API-key headers are needed for series, events, markets, orderbook, candlesticks or trades. The production base URL is https://external-api.kalshi.com/trade-api/v2; the older api.elections.kalshi.com host serves the same markets, not only elections. Keys are needed for the account side (orders, fills, positions) and for the WebSocket feed.
The order book: bids only, and current only
GET /markets/{ticker}/orderbook returns two ladders of bids, yes and no, as dollar prices with contract counts (orderbook_fp.yes_dollars and no_dollars). There is no ask array: a no bid at p is a yes offer at 1 − p, so in the recorded sample on this page the best yes bid is 0.32, the best no bid 0.67 and the implied yes ask 0.33. The response is the book now; calling it again later does not tell you what it was.
Candlesticks: 1-minute, hourly or daily
GET /series/{series_ticker}/markets/{ticker}/candlesticks takes start_ts, end_ts and period_interval of 1, 60 or 1440 minutes. Each candle carries open, high, low and close for the yes bid, the yes ask and the traded price, plus volume and open interest. It is the cheapest way to chart a market, but it records what traded and where the top of book closed, not how much size was available.
Trades, and where old data moves
GET /markets/trades lists executed trades with cursor pagination. Kalshi splits data into live and historical tiers: once a market settles before the cutoff published at GET /historical/cutoff, it and its candlesticks are served from GET /historical/markets and /historical/markets/{ticker}/candlesticks, and older trades from GET /historical/trades. Read the cutoff for each data type before assuming a live endpoint has everything.
Rate limits and polling
Kalshi's limits are token budgets per tier, with separate read and write buckets, rather than one requests-per-second number. Polling the orderbook endpoint for every open market quickly uses the read budget. Answer a 429 with exponential backoff, page with the cursor until it is empty, and use the authenticated WebSocket when you need every book change live.
What the Kalshi API cannot give you
No Kalshi endpoint returns the yes and no ladders as they stood an hour, a week or a month ago. A backtest that needs the spread and resting size at past decision times needs books recorded while they were live. DepthFeed has polled full-depth Kalshi books since January 2026: 1.5 billion snapshots across 2,600,000+ markets as of June 21, 2026, served by REST or as 196 sealed daily Parquet files.
Add the order books Kalshi's API does not keep
Kalshi's public API gives you markets, candles and trades for free. When a backtest needs the resting yes and no ladders at a past moment, query DepthFeed's recorded books with a free key or buy whole UTC days as Parquet.
