Kalshi API endpoint
Returns one settled Kalshi market from historical storage by `ticker`. The response has the title, subtitle, event ticker, status, result, open, close and expiration times, last and previous price, yes and no bid and ask, volume, open interest, liquidity and primary rules text. Invalid tickers are rejected.
/kalshi/historical/market/{ticker}Path parameters:
ticker: required Kalshi historical market ticker, for example KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557.Query parameters:
Notable response behavior:
| Field | In the sample | Value in the sample |
|---|---|---|
| market.ticker | Has a value | “KXEPLGAME-26JAN17MUNMCI-MUN” |
| market.event_ticker | Has a value | “KXEPLGAME-26JAN17MUNMCI” |
| market.title | Has a value | “Manchester United vs Manchester City Winner?” |
| market.sub_title | Has a value | “Manchester United” |
| market.status | Has a value | “finalized” |
| market.market_type | Has a value | “binary” |
| market.open_time | Has a value | 2026-01-01 |
| market.close_time | Has a value | 2026-01-17 |
| market.expiration_time | Has a value | 2026-01-31 |
| market.last_price | Has a value | 0.99 |
| market.previous_price | Has a value | 0.99 |
| market.yes_bid | Has a value | 0 |
| market.yes_ask | Has a value | 1 |
| market.no_bid | Has a value | 0 |
| market.no_ask | Has a value | 1 |
| market.volume | Has a value | 549,202 |
| market.volume_24h | Has a value | 0 |
| market.open_interest | Has a value | 0 |
| market.result | Has a value | “yes” |
| market.rules_primary | Has a value | 246 characters |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| ticker (path) | string | Yes | Kalshi historical market ticker | KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/kalshi/historical/market/KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"market": {
"ticker": "KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557",
"event_ticker": "KXMVECROSSCATEGORY-S2026144E784A147",
"title": "yes Yes,yes MIN Wild",
"status": "finalized",
"last_price": 0.259,
"volume": 183,
"result": "no"
}
}
}Request schema
No body schema
Response schema
#/definitions/kalshi.historicalMarketResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | kalshi.HistoricalMarketResponse | No | ||||
| data.fetched_at | string | No | 2026-06-07T14:00:00Z | Time the data was fetched, in UTC (RFC 3339). | ||
| data.market | object | No | The historical Kalshi market that was requested. | |||
| data.market.close_time | string | No | 2099-08-01T04:59:00Z | Time trading closes, in UTC (RFC 3339). | ||
| data.market.event_ticker | string | No | KXELONMARS-99 | Ticker of the event the market belongs to. | ||
| data.market.expiration_time | string | No | 2099-08-08T15:00:00Z | Time the market expires, in UTC (RFC 3339). | ||
| data.market.last_price | number | No | 0.08 | Price of the most recent trade, in US dollars per contract. | ||
| data.market.liquidity | number | No | 0 | Market liquidity, in US dollars. | ||
| data.market.market_type | string | No | binary | Market type, such as `binary`. | ||
| data.market.no_ask | number | No | 0.92 | Lowest price asked for a No contract, in US dollars. | ||
| data.market.no_bid | number | No | 0.9 | Highest price offered for a No contract, in US dollars. | ||
| data.market.open_interest | number | No | 32773.57 | Number of contracts currently open in the market. | ||
| data.market.open_time | string | No | 2025-08-28T20:45:00Z | Time trading opened, in UTC (RFC 3339). | ||
| data.market.previous_price | number | No | 0.1 | Earlier reference price of the market, in US dollars per contract. | ||
| data.market.response_price_unit | string | No | usd_cent | Price unit label Kalshi attaches to the market, such as `usd_cent`. | ||
| data.market.result | string | No | Outcome the market settled on. Empty or omitted until it settles. | |||
| data.market.rules_primary | string | No | Primary rules text that governs how the market settles. | |||
| data.market.status | string | No | active | Market status as Kalshi reports it, such as `active`. | ||
| data.market.sub_title | string | No | Mars | Short label of the outcome the market covers, shown under the title. | ||
| data.market.ticker | string | No | KXELONMARS-99 | Kalshi ticker that identifies the market. | ||
| data.market.title | string | No | Will Elon Musk visit Mars before Aug 1, 2099? | Market title as shown on Kalshi. | ||
| data.market.volume | number | No | 94840.88 | Total number of contracts traded in the market. | ||
| data.market.volume_24h | number | No | 16 | Number of contracts traded in the last 24 hours. | ||
| data.market.yes_ask | number | No | 0.1 | Lowest price asked for a Yes contract, in US dollars. | ||
| data.market.yes_bid | number | No | 0.08 | Highest price offered for a Yes contract, in US dollars. | ||
| data.source_url | string | No | https://external-api.kalshi.com/trade-api/v2/historical/markets/KXMVECROSSCATEGORY-S2026144E784A147-ED367B84557 | URL the data was read from. | ||
| 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" \
-H "x-api-key: $CRAWLORA_API_KEY"