API Reference
Historical Kalshi data downloads as daily Parquet files.
Base API Endpoint: https://api.kacdata.com/v1
V1 Parquet API
https://api.kacdata.com/v1/kalshi/{data_type}/{YYYY}/{MM}/{DD}/{symbol}.parquetReturns one market's historical data for one data type and UTC date as a Parquet file. symbol is the Kalshi market_ticker for l2, trades and ticker, and markets_lifecycle for lifecycle (one file per day with every market).
See historical data details for availability and data schemas for file contents.
Authenticate with your API key in the api_key request header.
Path parameters
All path parameters are required.
| Name | Type | Description |
|---|---|---|
data_type | string | l2, trades, ticker or lifecycle. |
YYYY/MM/DD | string | Valid UTC date with a four-digit year and two-digit month and day, e.g. 2026/10/15. |
symbol | string | Kalshi market_ticker, or markets_lifecycle for lifecycle. Tickers are case-sensitive. |
Free accounts can download data older than 3 weeks (21 days). Data from the last 3 weeks needs Plus.
Example
Request one market's L2 data:
https://api.kacdata.com/v1/kalshi/l2/2026/10/15/KXBTC15M-26OCT150930-30.parquetRequest one day of lifecycle messages:
https://api.kacdata.com/v1/kalshi/lifecycle/2026/10/15/markets_lifecycle.parquetResponse
A successful request returns 200 OK with a Parquet file and consumes one download quota unit. Repeated downloads consume quota again.
Unavailable files return 404 Not Found and do not consume quota. A 404 for trades on a day the market has L2 data means it had no trades that day.
The endpoint returns the complete file; byte-range requests are not supported.
Errors
| Status | Meaning |
|---|---|
401 Unauthorized | The API key is missing, invalid, or expired. |
403 Forbidden | The account is blocked from downloading, or a free account requested data from the last 3 weeks. |
404 Not Found | The path or parameters are invalid, or the requested file is unavailable. |
429 Too Many Requests | The account's download quota has been used up. |
Error responses generally contain a JSON error field and may include a message. A free account requesting data from the last 3 weeks receives 403 Forbidden:
{
"error": "Data from the last 3 weeks is not included in the free tier. Please upgrade at https://kacdata.com/pricing"
}When a free account has insufficient download quota, the API returns 429 Too Many Requests:
{
"error": "You have used up all your free download quota. Please upgrade at https://kacdata.com/pricing",
"message": "You have used up all your free download quota. Please upgrade at https://kacdata.com/pricing"
}Paid accounts with insufficient download quota receive 429 Too Many Requests:
{
"error": "Too Many Requests",
"message": "Download quota has been used up."
}