Skip to main content

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

ConceptDetail
Price unitCents, 0–100
YES bid at P¢Equivalent to NO ask at (100 − P)¢
SettlementPays 100¢ if YES, 0¢ if NO
Multiple marketsEach asset has concurrent contracts at different strikes and expirations
ℹ️Info

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.

ParameterTypeRequiredDefaultDescription
symbolstringNoFilter by asset symbol (e.g. BTC, ETH, SOL)
limitintegerNo100Maximum number of contracts to return
offsetintegerNo0Number 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.

ParameterTypeRequiredDefaultDescription
symbolstringYesContract ticker (e.g. KXBTC-26MAR31-80000)
intervalstringYesData interval: 5m, 15m, 1h, 4h, 24h
startstringNoISO 8601 start time
endstringNoISO 8601 end time
limitintegerNo100Maximum records to return
offsetintegerNo0Number 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

FieldTypeDescription
yes_bidintegerBest bid for YES contracts (cents, 0–100)
yes_askintegerBest ask for YES contracts (cents, 0–100)
no_bidintegerBest bid for NO contracts (cents, 0–100)
no_askintegerBest ask for NO contracts (cents, 0–100)
mid_pricefloatMidpoint of yes_bid and yes_ask
spreadintegeryes_askyes_bid
volumeintegerNumber of contracts traded in the interval
open_interestintegerTotal outstanding contracts
taker_buy_ratiofloatFraction of volume from taker buy orders (0–1)
imbalancefloatOrder flow imbalance metric (−1 to 1, positive = buy pressure)
order_bookobjectFull order book: yes_bids, no_bids, yes_asks, no_asks arrays of [price, size]
depth_metricsobjectAggregated depth within 5 levels: yes_bid_depth_5, yes_ask_depth_5, etc.
⚠️Warning

The order_book field requires a Pro plan or higher. On Basic, this field is omitted from responses.

Available intervals

IntervalDescriptionMinimum plan
5m5-minute aggregatesFree
15m15-minute aggregatesFree
1hHourly aggregatesFree
4h4-hour aggregatesFree
24hDaily aggregatesFree

Limitations & notes

  • Prices are in cents, not dollars. A yes_bid of 72 means 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_book field containing the full depth arrays is only returned on Pro, Business, and Enterprise plans. depth_metrics aggregates 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/kalshi to 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_ratio and imbalance are interval-level metrics. They summarize order flow within the given interval, not cumulative values.