Skip to main content

Overview

As trading activity on Kalshi grows, so does the volume of settled markets, completed trades, and fulfilled orders. To keep the live API fast and responsive, Kalshi partitions exchange data into live and historical tiers. Live endpoints return current and recent data — open and recently closed markets, active orders, and recent fills. Older data that is no longer actively referenced is made available through a separate set of historical endpoints. This separation means that if you query for data that is older than the cutoff (described below), you’ll need to use the historical API instead of the standard live endpoints. The partitioning happens for markets, market_candlesticks, trades, and orders. Old Events and Series will always still be available through their original endpoints.

How It Works

The boundary between live and historical data is defined by a set of cutoff timestamps, which you can retrieve at any time via GET /historical/cutoff. Any record older than the relevant cutoff must be queried through the corresponding historical endpoint. The cutoff timestamps will be regularly updated, advancing forward over time. The target window for live data is approximately 3 months, though the initial cutoff will start at 1 year of lookback.

Cutoff Timestamps

FieldPartitioned ByMeaning
market_settled_tsMarket settlement timeMarkets and their candlesticks that settled before this timestamp are only available via GET /historical/markets
trades_created_tsTrade fill timeFills that occurred before this timestamp are only available via GET /historical/fills
orders_updated_tsOrder cancellation or execution timeOrders canceled or fully executed before this timestamp are only available via GET /historical/orders
Resting (active) orders are unaffected and always appear in GET /portfolio/orders, regardless of the cutoff.

Historical Endpoints

EndpointDescription
GET /historical/cutoffReturns the current cutoff timestamps
GET /historical/marketsSettled markets older than the cutoff
GET /historical/markets/{ticker}Single historical market by ticker
GET /historical/markets/{ticker}/candlesticksCandlestick data for historical markets
GET /historical/fillsTrade fills older than the cutoff
GET /historical/ordersCanceled/executed orders older than the cutoff

Impacted Live Endpoints

The following live endpoints will no longer return data older than the corresponding cutoff:
Live EndpointCutoff FieldImpact
GET /markets, GET /markets/{ticker}market_settled_tsSettled markets and their candlesticks older than the cutoff will not appear
GET /events with with_nested_markets=truemarket_settled_tsNested markets older than the cutoff will not be included, only markets impacted
GET /markets/trades, GET /portfolio/fillstrades_created_tsFills older than the cutoff will not appear
GET /portfolio/ordersorders_updated_tsCompleted/canceled orders older than the cutoff will not appear (resting orders are unaffected)

Migration Guide

  1. Fetch the cutoff — call GET /historical/cutoff to get the current timestamps.
  2. Route queries accordingly — if the data you need is older than the relevant cutoff, use the corresponding GET /historical/... endpoint instead.
  3. Combine results if needed — for use cases like building a complete fill history, query both the live and historical endpoints and merge the results.
The historical endpoints support the same cursor-based pagination as their live counterparts.
For the time being, historical data is still available through the standard live endpoints. However, we are targeting March 6th, 2026 for the removal of historical data from the live API. Please migrate to the historical endpoints before this date.The initial cutoff timestamps are initially intended to be the same across *markets, trades, and orders, and to start with a 1 year lookback. Over time, the cutoff timestamps are intended to move up to approximately 2-3 months.