Skip to main content
Partially verified. As of v0.8.7+, Kalshi now targets the modern host (api.elections.kalshi.com) and uses RSA-PSS API key authentication. Pass the key ID as api_key and the PEM-encoded private key as password on the Kalshi(...) config. Order, cancel, fill polling, and position fetching have been updated for the new fixed-point dollar string field format. Has not been tested against a live Kalshi account, so verify the behavior matches expectations before deploying significant size.
Kalshi is a CFTC-regulated prediction market in the United States. Horizon supports the Kalshi REST API with bearer token authentication and automatic retry on 401.

Quick Setup

Credentials

Kalshi Configuration

Demo Environment

Kalshi provides a demo environment for testing:
Use the demo environment to test your strategy with real market data but fake money. You can also override the URL via the KALSHI_API_URL environment variable.

Ticker Mapping

Kalshi markets use tickers (e.g., KXBTC-25FEB16) instead of slugs. When mode="live", Horizon automatically sets the ticker from the market ID:
Or set it explicitly:

Side Mapping

Kalshi uses two separate concepts for order direction: This means “buy yes”, “sell yes”, “buy no”, and “sell no” are all valid combinations.

Authentication

Kalshi uses bearer token authentication:
  1. On first request, the client authenticates with API key (or email/password)
  2. Receives a bearer token
  3. Token is included in subsequent requests via Authorization: Bearer <token>
  4. On 401 response, the client automatically re-authenticates and retries (loop-based, not recursive)

Fill Polling

Kalshi fills are polled from the /portfolio/fills endpoint. Each cycle:
  1. Queries recent fills with tracked order IDs
  2. Deduplicates against previously seen fill IDs
  3. Maps Kalshi’s price format (cents) and timestamps to Horizon’s format

Feature Support Matrix

The oracle ensemble runs all 6 signal extractors on Kalshi, but signals that depend on Polymarket on-chain data (smart money flow, microstructure, holder concentration) return neutral (0.5). The remaining signals (momentum, volume profile, temporal patterns) also return neutral since Kalshi has no public trade-level data. LLM forecasting and resolution analysis work fully on both exchanges.

Intelligence Suite with Kalshi

All intelligence tools accept an exchange parameter:

MCP Server

MCP tools also accept the exchange parameter:
  • analyze_resolution(market_id, exchange="kalshi")
  • llm_scan(exchange="kalshi")
  • sniper_scan(exchange="kalshi")
  • oracle_forecast(market_id, exchange="kalshi")
  • oracle_edges(exchange="kalshi")