Kalshi prediction markets — events, series, markets, trades, and candlestick data. Public API, no auth required for reads. US-regulated exchange (CFTC). Covers soccer, basketball, baseball, tennis, NFL, hockey event contracts. Use when: user asks about Kalshi-specific markets, event contracts, CFTC-regulated prediction markets, or candlestick/OHLC price history on sports outcomes. Don't use when: user asks about actual match results, scores, or statistics — use football-data or fastf1 instead. Don't use for general "who will win" questions unless Kalshi is specifically mentioned — try polymarket first (broader sports coverage). Don't use for news — use sports-news instead.
Resources
2Install
npx skillscat add machina-sports/sports-skills/kalshi Install via the SkillsCat registry.
Kalshi — Prediction Markets
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=openPython SDK (alternative):
from sports_skills import kalshi
markets = kalshi.get_markets(series_ticker="KXNBA")
event = kalshi.get_event(event_ticker="KXNBA-26FEB14")Important Notes
- "Football" = NFL on Kalshi. Soccer is under "Soccer". Use
KXUCL,KXLALIGA, etc. for soccer leagues. - Prices are probabilities. A
last_priceof 20 means 20% implied probability. No conversion needed. - Always use
status="open"when querying markets, otherwise results include settled/closed markets. - Before complex fetches, run the parameter validator:
bash scripts/validate_params.sh <command> [args]
For detailed reference data, see the files in the references/ directory.
Workflows
Workflow: Sport Odds Discovery
get_events --series_ticker=<ticker> --status=open --with_nested_markets=True- Present events with prices (price = implied probability).
- For price history, use
get_market_candlesticks.
Workflow: Futures Market Check
get_markets --series_ticker=<ticker> --status=open- Sort by
last_pricedescending. - Present top contenders with probability and volume.
Workflow: Market Price History
- Get market ticker from
get_markets. get_market_candlesticks --series_ticker=<s> --ticker=<t> --start_ts=<start> --end_ts=<end> --period_interval=60- Present OHLC with volume.
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
Error Handling & Fallbacks
- If series ticker returns no results, call
get_series_list()to discover available tickers. Seereferences/series-tickers.md. - If markets are empty, use
status="open"to filter. Default includes settled/closed markets. - If "Football" returns NFL instead of soccer, Kalshi uses "Football" for NFL, "Soccer" for soccer. Use KXUCL, KXLALIGA, etc. for soccer.
- Never fabricate market prices or probabilities. If no market exists, state so.