Kalshi API endpoint
Returns candlesticks for one settled Kalshi market by `ticker`. `start_ts` defaults to 7 days ago, `end_ts` to now and `period_interval` to 1440 minutes. Each candle has end time, price, yes bid and ask, volume and open interest. Ranges are capped at 366 days.
/kalshi/historical/market/{ticker}/historyPath parameters:
ticker: required Kalshi historical market ticker, for example KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557.Query parameters:
start_ts: optional Unix start timestamp in seconds. Defaults to 7 days ago.end_ts: optional Unix end timestamp in seconds. Defaults to now.period_interval: optional candlestick interval in minutes. Default: 1440.Notable response behavior:
| Field | Filled in, of 16 checked | Values in the sample |
|---|---|---|
| end_period_ts | 16 | 2026-01-02 to 2026-01-17 |
| end_period_at | 16 | 2026-01-02 to 2026-01-17 |
| open_interest | 16 | 12 to 54,954, median 17,014 |
| volume | 16 | 0 to 32,808, median 1,977 |
| price | 16 | |
| yes_ask | 16 | |
| yes_bid | 16 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| ticker (path) | string | Yes | Kalshi historical market ticker | KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557 | |
| start_ts | integer | No | 7 days ago | Unix start timestamp in seconds. Defaults to 7 days ago. | |
| end_ts | integer | No | now | Unix end timestamp in seconds. Defaults to now. | |
| period_interval | integer | No | Candlestick interval in minutes. Default: 1440. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/kalshi/historical/market/KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557/history" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"ticker": "KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557",
"start_ts": 1775602800,
"end_ts": 1775606400,
"period_interval": 60,
"candlesticks": [
{
"end_period_ts": 1775606400,
"end_period_at": "2026-04-07T23:00:00Z",
"open_interest": 183,
"volume": 183,
"price": {
"close": 0.259
}
}
]
}
}Request schema
No body schema
Response schema
#/definitions/kalshi.marketHistoryResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | kalshi.MarketHistoryResponse | No | ||||
| data.candlesticks | array | No | Price candlesticks for the market, one per period. | |||
| data.candlesticks[].end_period_at | string | No | 2026-06-01T00:00:00Z | End of the candlestick period, in UTC (RFC 3339). | ||
| data.candlesticks[].end_period_ts | integer | No | 1780286400 | End of the candlestick period, in Unix seconds. | ||
| data.candlesticks[].open_interest | number | No | 32980.77 | Number of contracts open at the end of the period. | ||
| data.candlesticks[].price | object | No | Open, high, low, close, mean and previous trade price for the period, in US dollars per contract. | |||
| data.candlesticks[].price.close | number | No | 0.08 | Value at the end of the period, in US dollars per contract. | ||
| data.candlesticks[].price.high | number | No | 0.11 | Highest value during the period, in US dollars per contract. | ||
| data.candlesticks[].price.low | number | No | 0.08 | Lowest value during the period, in US dollars per contract. | ||
| data.candlesticks[].price.mean | number | No | 0.1014 | Average value over the period, in US dollars per contract. | ||
| data.candlesticks[].price.open | number | No | 0.11 | Value at the start of the period, in US dollars per contract. | ||
| data.candlesticks[].price.previous | number | No | 0.08 | Last value from before the period, in US dollars per contract. | ||
| data.candlesticks[].volume | number | No | 7 | Number of contracts traded during the period. | ||
| data.candlesticks[].yes_ask | object | No | Open, high, low, close, mean and previous Yes ask price for the period, in US dollars per contract. | |||
| data.candlesticks[].yes_ask.close | number | No | 0.08 | Value at the end of the period, in US dollars per contract. | ||
| data.candlesticks[].yes_ask.high | number | No | 0.11 | Highest value during the period, in US dollars per contract. | ||
| data.candlesticks[].yes_ask.low | number | No | 0.08 | Lowest value during the period, in US dollars per contract. | ||
| data.candlesticks[].yes_ask.mean | number | No | 0.1014 | Average value over the period, in US dollars per contract. | ||
| data.candlesticks[].yes_ask.open | number | No | 0.11 | Value at the start of the period, in US dollars per contract. | ||
| data.candlesticks[].yes_ask.previous | number | No | 0.08 | Last value from before the period, in US dollars per contract. | ||
| data.candlesticks[].yes_bid | object | No | Open, high, low, close, mean and previous Yes bid price for the period, in US dollars per contract. | |||
| data.candlesticks[].yes_bid.close | number | No | 0.08 | Value at the end of the period, in US dollars per contract. | ||
| data.candlesticks[].yes_bid.high | number | No | 0.11 | Highest value during the period, in US dollars per contract. | ||
| data.candlesticks[].yes_bid.low | number | No | 0.08 | Lowest value during the period, in US dollars per contract. | ||
| data.candlesticks[].yes_bid.mean | number | No | 0.1014 | Average value over the period, in US dollars per contract. | ||
| data.candlesticks[].yes_bid.open | number | No | 0.11 | Value at the start of the period, in US dollars per contract. | ||
| data.candlesticks[].yes_bid.previous | number | No | 0.08 | Last value from before the period, in US dollars per contract. | ||
| data.end_ts | integer | No | 1780804800 | End of the requested range, in Unix seconds. | ||
| data.fetched_at | string | No | 2026-06-07T14:00:00Z | Time the data was fetched, in UTC (RFC 3339). | ||
| data.include_latest_before_start | boolean | No | false | Whether the latest candle before `start_ts` was requested. | ||
| data.period_interval | integer | No | 1440 | Length of each candlestick period, in minutes. | ||
| data.series_ticker | string | No | KXELONMARS | Ticker of the series the market belongs to. | ||
| data.source_url | string | No | https://external-api.kalshi.com/trade-api/v2/series/KXELONMARS/markets/KXELONMARS-99/candlesticks | URL the data was read from. | ||
| data.start_ts | integer | No | 1780286400 | Start of the requested range, in Unix seconds. | ||
| data.ticker | string | No | KXELONMARS-99 | Ticker of the Kalshi market the history is for. | ||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/kalshi/historical/market/KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557/history" \
-H "x-api-key: $CRAWLORA_API_KEY"