Skip to main content
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 1(yes)or1 (yes) or 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:
Prices on Kalshi are expressed in cents (integers from 1 to 99), representing the implied probability. A YES price of 62 means the market prices the event at roughly 62% likely.

Ticker format

Every Kalshi market has a ticker that encodes the series and expiration:
Common series prefixes: 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 of kalshi_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.
Query parameters:

Get a single market

Get the order book

Returns the full order book with bids and asks at each price level. Useful for assessing liquidity before placing larger orders.

Place an order

Order parameters:
Kalshi requires a funded account to place orders. Deposits are made via ACH bank transfer or wire from the Kalshi web app.

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:
Key fields:

Price interpretation

All prices are integers from 1 to 99 representing cents:
  • A YES bid of 61 means someone is willing to pay $0.61 per contract
  • A YES ask of 63 means 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 1.00(YESwins)or1.00 (YES wins) or 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 a 429 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:
Maker orders (limit orders that don’t immediately fill) are free. If you can wait for your price, you pay zero fees. This is a significant advantage for algorithmic traders.
Deposits are made via ACH (free, 3-5 days) or wire (25,sameday).Minimumdepositis25, same-day). Minimum deposit is 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.
These gaps are where an intelligence layer adds the most value.

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.
See the quickstart for the full trigger-poll-get pattern in all three languages.

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.