Overview
Kalshi is a CFTC-regulated prediction exchange where traders buy and sell event contracts with binary yes/no outcomes. Unlike Polymarket (which operates on-chain), Kalshi is a centralized, regulated US exchange. Contracts are priced in cents from 0 to 100, where the price represents both the cost of a YES contract and the market's implied probability.
Kwery ingests Kalshi's order book, trade, and pricing data and exposes it through a normalized time-series interface.
What we ingest
- YES/NO bid-ask prices in cents (0–100)
- Order book snapshots with depth on both sides
- Volume and open interest per contract
- Taker flow metrics including buy ratio and order imbalance
Currently tracked assets: BTC, ETH, SOL.
Data semantics
| Concept | Detail |
|---|---|
| Price unit | Cents, 0–100 |
| YES bid at P¢ | Equivalent to NO ask at (100 − P)¢ |
| Settlement | Pays 100¢ if YES, 0¢ if NO |
| Multiple markets | Each asset has concurrent contracts at different strikes and expirations |
A YES bid of 72¢ means someone is willing to pay $0.72 for a contract that pays $1.00 if the event occurs — implying a 72% probability.
Available endpoints
List Kalshi markets
GET /v1/kalshi
Returns all tracked Kalshi event contracts and their metadata.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
symbol | string | No | — | Filter by asset symbol (e.g. BTC, ETH, SOL) |
limit | integer | No | 100 | Maximum number of contracts to return |
offset | integer | No | 0 | Number of records to skip |
curl "https://kwery-api.com/v1/kalshi?api-key=YOUR_KEY&symbol=BTC&limit=5"
{
"contracts": [
{
"symbol": "BTC",
"ticker": "KXBTC-26MAR31-80000",
"title": "Will BTC be above $80,000 on March 31?",
"status": "active",
"expiration": "2026-03-31T23:59:59Z",
"strike": 80000
}
],
"total": 18,
"limit": 5,
"offset": 0
}
Get contract data
GET /v1/kalshi/{symbol}
Returns time-series data for a specific Kalshi contract.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
symbol | string | Yes | — | Contract ticker (e.g. KXBTC-26MAR31-80000) |
interval | string | Yes | — | Data interval: 5m, 15m, 1h, 4h, 24h |
start | string | No | — | ISO 8601 start time |
end | string | No | — | ISO 8601 end time |
limit | integer | No | 100 | Maximum records to return |
offset | integer | No | 0 | Number of records to skip |
curl "https://kwery-api.com/v1/kalshi/KXBTC-26MAR31-80000?api-key=YOUR_KEY&interval=1h&limit=2"
{
"symbol": "KXBTC-26MAR31-80000",
"source": "kalshi",
"interval": "1h",
"data": [
{
"timestamp": "2026-03-09T12:00:00Z",
"yes_bid": 71,
"yes_ask": 73,
"no_bid": 27,
"no_ask": 29,
"mid_price": 72.0,
"spread": 2,
"volume": 4520,
"open_interest": 18340,
"taker_buy_ratio": 0.58,
"imbalance": 0.12,
"depth_metrics": {
"yes_bid_depth_5": 12400,
"yes_ask_depth_5": 10800,
"no_bid_depth_5": 10800,
"no_ask_depth_5": 12400
},
"order_book": {
"yes_bids": [[71, 3200], [70, 5400], [69, 7800]],
"no_bids": [[27, 2800], [26, 4600], [25, 6900]],
"yes_asks": [[73, 2900], [74, 5100], [75, 7200]],
"no_asks": [[29, 3200], [30, 5400], [31, 7800]]
}
},
{
"timestamp": "2026-03-09T11:00:00Z",
"yes_bid": 70,
"yes_ask": 72,
"no_bid": 28,
"no_ask": 30,
"mid_price": 71.0,
"spread": 2,
"volume": 3810,
"open_interest": 17920,
"taker_buy_ratio": 0.53,
"imbalance": 0.06,
"depth_metrics": {
"yes_bid_depth_5": 11800,
"yes_ask_depth_5": 10200,
"no_bid_depth_5": 10200,
"no_ask_depth_5": 11800
},
"order_book": {
"yes_bids": [[70, 3100], [69, 5200], [68, 7500]],
"no_bids": [[28, 2700], [27, 4400], [26, 6700]],
"yes_asks": [[72, 2800], [73, 5000], [74, 7100]],
"no_asks": [[30, 3100], [31, 5200], [32, 7500]]
}
}
],
"total": 720,
"limit": 2,
"offset": 0
}
Source-specific fields
| Field | Type | Description |
|---|---|---|
yes_bid | integer | Best bid for YES contracts (cents, 0–100) |
yes_ask | integer | Best ask for YES contracts (cents, 0–100) |
no_bid | integer | Best bid for NO contracts (cents, 0–100) |
no_ask | integer | Best ask for NO contracts (cents, 0–100) |
mid_price | float | Midpoint of yes_bid and yes_ask |
spread | integer | yes_ask − yes_bid |
volume | integer | Number of contracts traded in the interval |
open_interest | integer | Total outstanding contracts |
taker_buy_ratio | float | Fraction of volume from taker buy orders (0–1) |
imbalance | float | Order flow imbalance metric (−1 to 1, positive = buy pressure) |
order_book | object | Full order book: yes_bids, no_bids, yes_asks, no_asks arrays of [price, size] |
depth_metrics | object | Aggregated depth within 5 levels: yes_bid_depth_5, yes_ask_depth_5, etc. |
The order_book field requires a Pro plan or higher. On Basic, this field is omitted from responses.
Available intervals
| Interval | Description | Minimum plan |
|---|---|---|
5m | 5-minute aggregates | Free |
15m | 15-minute aggregates | Free |
1h | Hourly aggregates | Free |
4h | 4-hour aggregates | Free |
24h | Daily aggregates | Free |
Limitations & notes
- Prices are in cents, not dollars. A
yes_bidof72means 72¢ ($0.72), not $72. This is the native Kalshi denomination. - YES and NO are complementary. A YES bid at P¢ is economically equivalent to a NO ask at (100 − P)¢. Both sides of the book are provided for convenience.
- Order book requires Pro plan. The
order_bookfield containing the full depth arrays is only returned on Pro, Business, and Enterprise plans.depth_metricsaggregates are available on all plans. - Multiple contracts per asset. Like Polymarket, a single asset can have many active contracts at different strikes and expirations. Use
GET /v1/kalshito discover them. - Regulated exchange hours. Kalshi operates under CFTC oversight. While markets are generally available 24/7, certain contracts may have restricted trading windows or halt during settlement.
taker_buy_ratioandimbalanceare interval-level metrics. They summarize order flow within the given interval, not cumulative values.