TL;DR — fetch open markets from Kalshi
What this page covers
- What Kalshi is and how its markets work
- Ticker format and how to read market identifiers
- RSA-PSS authentication flow with working code
- Core REST endpoints for market data, orders, and portfolio
- Market response format and price interpretation
- Rate limits and fee structure
- Python SDK options and HTTP client patterns
- What Kalshi’s API does not provide out of the box
- How to layer AI analysis and trading signals on top of raw Kalshi data
Overview
Kalshi is the first CFTC-regulated prediction market exchange in the United States. It launched in 2021 and offers binary event contracts that settle to 0 (no). Traders buy and sell contracts representing the probability of real-world events. Markets cover a wide range of categories:
All API documentation lives at trading-api.kalshi.com. The base URL for all API requests is:
Ticker format
Every Kalshi market has a ticker that encodes the series and expiration:
A ticker like
KXBTC-26MAR14-100000 means: Bitcoin price series, expiring March 14, 2026, with a strike of $100,000.
You can list all active series by querying the events endpoint:
Authentication
Kalshi uses RSA-PSS signed request headers. There is no simple API key header; every request must be cryptographically signed.Step 1: Generate an RSA key pair
Step 2: Upload your public key
Log in to your Kalshi account at kalshi.com, go to Settings > API Keys, and upload the contents ofkalshi_public_key.pem. Kalshi gives you back an API Key ID (a UUID).
Step 3: Sign each request
Every API request includes three headers:
The signing message is the concatenation of
timestamp (as string), the HTTP method (GET, POST, etc.), and the request path (including query string for GET requests).
The signing path must match exactly what you send to the server. For GET requests with query parameters, sign the path without the query string. The
params are passed separately.Core API endpoints
List markets
Retrieve a paginated list of markets, filtered by status, series, or cursor.Get a single market
Get the order book
Place an order
Other portfolio endpoints
All portfolio endpoints use the same RSA-PSS authentication headers.
Market data format
A market object from the Kalshi API looks like this:Price interpretation
All prices are integers from 1 to 99 representing cents:- A YES bid of
61means someone is willing to pay $0.61 per contract - A YES ask of
63means someone is selling at $0.63 per contract - The spread is
63 - 61 = 2 cents - YES + NO prices always sum to approximately 100 (minus the spread)
- Contracts settle at 0.00 (NO wins)
Rate limits and fees
Rate limits
Kalshi enforces approximately 10 requests per second per API key. The limits are not published precisely, but exceeding them returns a429 status code. Back off with exponential retry when you see it.
Fee structure
The taker fee is maximized at the midpoint:
0.07 * 0.50 * 0.50 = $0.0175 per contract. It decreases as prices approach 0 or 100.
Example fees:
Deposits are made via ACH (free, 3-5 days) or wire (1. Withdrawals via ACH are free.
Python SDK options
There is no official first-party Python SDK from Kalshi. Here are your options:
Most production systems use
httpx with a reusable auth helper. Wrap the kalshi_auth_headers() function from the authentication section into a client class that handles signing automatically:
What Kalshi’s API does not provide
Kalshi gives you raw market data and order execution. It does not include:- Independent probability estimates. You get the market price, which reflects the crowd’s view. There is no built-in second opinion.
- Cross-platform data. You cannot compare Kalshi prices with Polymarket or Robinhood prices through the Kalshi API.
- Trading signals or recommendations. The API tells you what the market thinks, not whether you should trade.
- Position sizing. No guidance on how much to allocate to a given position based on edge and bankroll.
- Arbitrage detection. No way to find price divergences between platforms.
- Causal analysis. No breakdown of which real-world factors are driving a market’s price.
- Historical trend intelligence. Order book snapshots and trade history are available, but there is no analyzed trend data or price movement context.
Adding AI analysis to Kalshi data
Raw Kalshi data tells you what the market thinks. An intelligence layer tells you what the market might be missing. Here is a complete workflow: pull a market from Kalshi via Rekko’s normalized API, run an AI analysis, and get a trading signal with position sizing.Step 1: Look up the market
Rekko normalizes Kalshi data into a consistent format alongside Polymarket and Robinhood. Prices are returned as decimals (0.0 to 1.0) instead of raw cents.Step 2: Run an AI analysis
The analysis pipeline researches the market question, synthesizes findings from multiple sources, and produces an independent probability estimate. It runs for 30-90 seconds.Step 3: Get a trading signal with position sizing
A signal combines the analysis with Kelly criterion sizing to tell you how much to allocate.Full comparison: raw Kalshi data vs. Rekko intelligence
Error handling
Kalshi returns standard HTTP status codes:
Implement exponential backoff for
429 and 5xx responses. Most HTTP libraries (including httpx with httpx.HTTPTransport(retries=3)) can handle this automatically.
What’s next
Polymarket API guide
The same walkthrough for Polymarket’s crypto-native API.
Build a trading bot
End-to-end Python bot using Kalshi data with AI-powered signals.
API comparison
Side-by-side comparison of Kalshi, Polymarket, and Robinhood APIs.
Cross-platform arbitrage
Find price divergences across platforms and size trades with edge.
Rekko API reference
Full endpoint documentation with interactive playground.