Kalshi API endpoint
Returns candlesticks for the markets in a Kalshi event, grouped by market, for `event_ticker`. `start_ts` defaults to 7 days ago, `end_ts` to now, `period_interval` to 1440 minutes, and `series_ticker` to the ticker prefix before the last dash. Each candle has price, yes bid and ask, volume and open interest. Ranges are capped at 366 days.
/kalshi/event/{event_ticker}/historyPath parameters:
event_ticker: required Kalshi event ticker, for example KXELONMARS-99.Query parameters:
series_ticker: optional Kalshi series ticker, for example KXELONMARS. Defaults to the event ticker prefix before the last dash.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.include_latest_before_start: optional boolean.Notable response behavior:
market_tickers and market_candlesticks arrays; the response normalizes each market into the same candlestick object used by market history.| Field | Filled in, of 1 checked | Values in the sample |
|---|---|---|
| ticker | 1 | “KXELONMARS-99” |
| series_ticker | 1 | “KXELONMARS” |
| start_ts | 1 | 2024-01-01 |
| end_ts | 1 | 2024-01-02 |
| period_interval | 1 | 1,440 |
| candlesticks | 0 | |
| source_url | 1 | external-api.kalshi.com |
| fetched_at | 1 | 2026-10-13 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| event_ticker (path) | string | Yes | Kalshi event ticker | KXELONMARS-99 | |
| series_ticker | string | No | the event ticker prefix before the last dash | Kalshi series ticker. Defaults to the event ticker prefix before the last dash. | |
| 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. | ||
| include_latest_before_start | boolean | No | Include the latest candle before start_ts when supported upstream. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/kalshi/event/KXELONMARS-99/history?include_latest_before_start=true" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"event_ticker": "KXELONMARS-99",
"series_ticker": "KXELONMARS",
"market_tickers": [
"KXELONMARS-99"
],
"start_ts": 1780286400,
"end_ts": 1780804800,
"period_interval": 1440,
"markets": [
{
"ticker": "KXELONMARS-99",
"series_ticker": "KXELONMARS",
"candlesticks": [
{
"end_period_ts": 1780286400,
"end_period_at": "2026-06-01T00:00:00Z",
"open_interest": 32980.77,
"volume": 7,
"price": {
"close": 0.08
}
}
]
}
]
}
}Request schema
No body schema
Response schema
#/definitions/kalshi.eventHistoryResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | kalshi.EventHistoryResponse | No | ||||
| data.adjusted_end_ts | integer | No | 1780804800 | End of the range after Kalshi adjusted it, in Unix seconds. | ||
| data.end_ts | integer | No | 1780804800 | End of the requested range, in Unix seconds. | ||
| data.event_ticker | string | No | KXELONMARS-99 | Ticker of the Kalshi event the history is for. | ||
| 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.market_tickers | array | No | KXELONMARS-99 | Tickers of the markets in the event that have history. | ||
| data.markets | array | No | Candlestick history for each market in the event. | |||
| data.markets[].candlesticks | array | No | Price candlesticks for the market, one per period. | |||
| data.markets[].candlesticks[].end_period_at | string | No | 2026-06-01T00:00:00Z | End of the candlestick period, in UTC (RFC 3339). | ||
| data.markets[].candlesticks[].end_period_ts | integer | No | 1780286400 | End of the candlestick period, in Unix seconds. | ||
| data.markets[].candlesticks[].open_interest | number | No | 32980.77 | Number of contracts open at the end of the period. | ||
| data.markets[].candlesticks[].price | object | No | Open, high, low, close, mean and previous trade price for the period, in US dollars per contract. | |||
| data.markets[].candlesticks[].price.close | number | No | 0.08 | Value at the end of the period, in US dollars per contract. | ||
| data.markets[].candlesticks[].price.high | number | No | 0.11 | Highest value during the period, in US dollars per contract. | ||
| data.markets[].candlesticks[].price.low | number | No | 0.08 | Lowest value during the period, in US dollars per contract. | ||
| data.markets[].candlesticks[].price.mean | number | No | 0.1014 | Average value over the period, in US dollars per contract. | ||
| data.markets[].candlesticks[].price.open | number | No | 0.11 | Value at the start of the period, in US dollars per contract. | ||
| data.markets[].candlesticks[].price.previous | number | No | 0.08 | Last value from before the period, in US dollars per contract. | ||
| data.markets[].candlesticks[].volume | number | No | 7 | Number of contracts traded during the period. | ||
| data.markets[].candlesticks[].yes_ask | object | No | Open, high, low, close, mean and previous Yes ask price for the period, in US dollars per contract. | |||
| data.markets[].candlesticks[].yes_ask.close | number | No | 0.08 | Value at the end of the period, in US dollars per contract. | ||
| data.markets[].candlesticks[].yes_ask.high | number | No | 0.11 | Highest value during the period, in US dollars per contract. | ||
| data.markets[].candlesticks[].yes_ask.low | number | No | 0.08 | Lowest value during the period, in US dollars per contract. | ||
| data.markets[].candlesticks[].yes_ask.mean | number | No | 0.1014 | Average value over the period, in US dollars per contract. | ||
| data.markets[].candlesticks[].yes_ask.open | number | No | 0.11 | Value at the start of the period, in US dollars per contract. | ||
| data.markets[].candlesticks[].yes_ask.previous | number | No | 0.08 | Last value from before the period, in US dollars per contract. | ||
| data.markets[].candlesticks[].yes_bid | object | No | Open, high, low, close, mean and previous Yes bid price for the period, in US dollars per contract. | |||
| data.markets[].candlesticks[].yes_bid.close | number | No | 0.08 | Value at the end of the period, in US dollars per contract. | ||
| data.markets[].candlesticks[].yes_bid.high | number | No | 0.11 | Highest value during the period, in US dollars per contract. | ||
| data.markets[].candlesticks[].yes_bid.low | number | No | 0.08 | Lowest value during the period, in US dollars per contract. | ||
| data.markets[].candlesticks[].yes_bid.mean | number | No | 0.1014 | Average value over the period, in US dollars per contract. | ||
| data.markets[].candlesticks[].yes_bid.open | number | No | 0.11 | Value at the start of the period, in US dollars per contract. | ||
| data.markets[].candlesticks[].yes_bid.previous | number | No | 0.08 | Last value from before the period, in US dollars per contract. | ||
| data.markets[].end_ts | integer | No | 1780804800 | End of the requested range, in Unix seconds. | ||
| data.markets[].fetched_at | string | No | 2026-06-07T14:00:00Z | Time the data was fetched, in UTC (RFC 3339). | ||
| data.markets[].include_latest_before_start | boolean | No | false | Whether the latest candle before `start_ts` was requested. | ||
| data.markets[].period_interval | integer | No | 1440 | Length of each candlestick period, in minutes. | ||
| data.markets[].series_ticker | string | No | KXELONMARS | Ticker of the series the market belongs to. | ||
| data.markets[].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.markets[].start_ts | integer | No | 1780286400 | Start of the requested range, in Unix seconds. | ||
| data.markets[].ticker | string | No | KXELONMARS-99 | Ticker of the Kalshi market the history is for. | ||
| data.period_interval | integer | No | 1440 | Length of each candlestick period, in minutes. | ||
| data.series_ticker | string | No | KXELONMARS | Ticker of the series the event belongs to. | ||
| data.source_url | string | No | https://external-api.kalshi.com/trade-api/v2/series/KXELONMARS/events/KXELONMARS-99/candlesticks | URL the data was read from. | ||
| data.start_ts | integer | No | 1780286400 | Start of the requested range, in Unix seconds. | ||
| 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/event/KXELONMARS-99/history?include_latest_before_start=true" \
-H "x-api-key: $CRAWLORA_API_KEY"