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, orders, and market_positions. 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 viaGET /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 3 months.
Cutoff Timestamps
Resting (active) orders are unaffected and always appear in
GET /portfolio/orders, regardless of the cutoff. Likewise, unsettled positions always appear in GET /portfolio/positions.Historical Endpoints
Impacted Live Endpoints
The following live endpoints will no longer return data older than the corresponding cutoff:Migration Guide
- Fetch the cutoff: call
GET /historical/cutoffto get the current timestamps. - Route queries accordingly: if the data you need is older than the relevant cutoff, use the corresponding
GET /historical/...endpoint instead. - 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.