Kalshi — Prediction Markets
Setup
Before first use, check if the CLI is available:
which sports-skills || pip install sports-skills
If pip install fails with a Python version error, the package requires Python 3.10+. Find a compatible Python:
python3 --version # check version # If < 3.10, try: python3.12 -m pip install sports-skills # On macOS with Homebrew: /opt/homebrew/bin/python3.12 -m pip install sports-skills
No API keys required.
Quick Start
Prefer the CLI — it avoids Python import path issues:
sports-skills kalshi get_markets --series_ticker=KXNBA sports-skills kalshi get_events --series_ticker=KXNBA --status=open
Python SDK (alternative):
from sports_skills import kalshi markets = kalshi.get_markets(series_ticker="KXNBA") event = kalshi.get_event(event_ticker="KXNBA-26FEB14")
Commands
get_exchange_status
Get exchange status (trading active, maintenance). No params.
get_exchange_schedule
Get exchange operating schedule. No params.
get_series_list
Get all available series.
- •
category(str, optional): Filter by category - •
tags(str, optional): Filter by tags
get_series
Get details for a specific series.
- •
series_ticker(str, required): Series ticker (see table below)
get_events
Get events with optional filtering.
- •
limit(int, optional): Max results (default: 100, max: 200) - •
cursor(str, optional): Pagination cursor - •
status(str, optional): Filter by status ("open", "closed", "settled") - •
series_ticker(str, optional): Filter by series ticker - •
with_nested_markets(bool, optional): Include nested markets
get_event
Get details for a specific event.
- •
event_ticker(str, required): Event ticker - •
with_nested_markets(bool, optional): Include nested markets
get_markets
Get markets with optional filtering.
- •
limit(int, optional): Max results (default: 100) - •
cursor(str, optional): Pagination cursor - •
event_ticker(str, optional): Filter by event - •
series_ticker(str, optional): Filter by series - •
status(str, optional): Filter ("unopened", "open", "closed", "settled") - •
tickers(str, optional): Comma-separated market tickers
get_market
Get details for a specific market.
- •
ticker(str, required): Market ticker
get_trades
Get recent trades.
- •
limit(int, optional): Max results (default: 100, max: 1000) - •
cursor(str, optional): Pagination cursor - •
ticker(str, optional): Filter by market ticker - •
min_ts(int, optional): After Unix timestamp - •
max_ts(int, optional): Before Unix timestamp
get_market_candlesticks
Get OHLC candlestick data.
- •
series_ticker(str, required): Series ticker - •
ticker(str, required): Market ticker - •
start_ts(int, required): Start Unix timestamp - •
end_ts(int, required): End Unix timestamp - •
period_interval(int, required): Interval in minutes (1, 60, or 1440)
get_sports_filters
Get available sports filter categories. No params.
Common Series Tickers
IMPORTANT: On Kalshi, "Football" = American Football (NFL). Soccer is under "Soccer".
| Sport | Series Ticker | Notes |
|---|---|---|
| NBA | KXNBA | Games + futures |
| NFL | KXNFL | Games + futures |
| MLB | KXMLB | Games + futures |
| Champions League | KXUCL | Futures (winner) |
| La Liga | KXLALIGA | Futures (winner) |
| Bundesliga | KXBUNDESLIGA | Futures (winner) |
| Serie A | KXSERIEA | Futures (winner) |
| Ligue 1 | KXLIGUE1 | Futures (winner) |
| FA Cup | KXFACUP | Futures |
| Europa League | KXUEL | Futures |
| Conference League | KXUECL | Futures |
Not all soccer leagues have futures/winner markets. EPL has match-day games but no title winner market. Use get_sports_filters() to discover all available competitions.
Examples
User: "What NBA markets are on Kalshi?"
- •Call
get_events(series_ticker="KXNBA", status="open", with_nested_markets=True) - •Present events with their nested markets, yes/no prices, and volume
User: "Who will win the Champions League?"
- •Call
get_markets(series_ticker="KXUCL", status="open") - •Sort by
last_pricedescending — price = implied probability (e.g., 20 = 20%) - •Present top teams with
yes_sub_title,last_price, andvolume
User: "Show me the price history for this NBA game"
- •Get the market ticker from
get_markets(series_ticker="KXNBA") - •Call
get_market_candlesticks(series_ticker="KXNBA", ticker="...", start_ts=..., end_ts=..., period_interval=60) - •Present OHLC data with volume
Troubleshooting
- •
sports-skillscommand not found: Package not installed. Runpip install sports-skills. If pip fails with a Python version error, you need Python 3.10+ — see Setup section. - •
ModuleNotFoundError: No module named 'sports_skills': Same as above — install the package. Prefer the CLI over Python imports to avoid path issues. - •Empty market results: Use
status="open"to filter for active markets. Default returns all statuses including settled/closed. - •Series ticker unknown: Check the Common Series Tickers table above. Use
get_sports_filters()to discover categories, but note: "Football" = NFL, "Soccer" = football/soccer. Not all soccer leagues have futures markets. - •"Football" returned NFL, not soccer: Kalshi categorizes American Football as "Football" and soccer as "Soccer". Use
KXUCL,KXLALIGA, etc. for soccer — see tickers table. - •Pagination: Default limit is 100. If results are truncated, use the
cursorvalue from the response to fetch the next page. - •Candlestick timestamps:
start_tsandend_tsmust be Unix timestamps (seconds).period_intervalis in minutes: 1 (1-min), 60 (1-hour), or 1440 (1-day).
API
- •Base URL:
https://api.elections.kalshi.com/trade-api/v2 - •All endpoints are public, read-only. No authentication required.