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=open
Python 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_price of 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_price descending.
- 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_price descending -- price = implied probability (e.g., 20 = 20%)
- Present top teams with
yes_sub_title, last_price, and volume
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. See references/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.
1---2name: kalshi3description: 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.4license: MIT5---67# Kalshi — Prediction Markets89## Quick Start1011Prefer the CLI — it avoids Python import path issues:12```bash13sports-skills kalshi get_markets --series_ticker=KXNBA14sports-skills kalshi get_events --series_ticker=KXNBA --status=open15```1617Python SDK (alternative):18```python19from sports_skills import kalshi2021markets = kalshi.get_markets(series_ticker="KXNBA")22event = kalshi.get_event(event_ticker="KXNBA-26FEB14")23```2425## Important Notes2627- **"Football" = NFL on Kalshi.** Soccer is under "Soccer". Use `KXUCL`, `KXLALIGA`, etc. for soccer leagues.28- **Prices are probabilities.** A `last_price` of 20 means 20% implied probability. No conversion needed.29- **Always use `status="open"`** when querying markets, otherwise results include settled/closed markets.30- Before complex fetches, run the parameter validator: `bash scripts/validate_params.sh <command> [args]`3132*For detailed reference data, see the files in the `references/` directory.*3334## Workflows3536### Workflow: Sport Odds Discovery371. `get_events --series_ticker=<ticker> --status=open --with_nested_markets=True`382. Present events with prices (price = implied probability).393. For price history, use `get_market_candlesticks`.4041### Workflow: Futures Market Check421. `get_markets --series_ticker=<ticker> --status=open`432. Sort by `last_price` descending.443. Present top contenders with probability and volume.4546### Workflow: Market Price History471. Get market ticker from `get_markets`.482. `get_market_candlesticks --series_ticker=<s> --ticker=<t> --start_ts=<start> --end_ts=<end> --period_interval=60`493. Present OHLC with volume.5051## Examples5253User: "What NBA markets are on Kalshi?"541. Call `get_events(series_ticker="KXNBA", status="open", with_nested_markets=True)`552. Present events with their nested markets, yes/no prices, and volume5657User: "Who will win the Champions League?"581. Call `get_markets(series_ticker="KXUCL", status="open")`592. Sort by `last_price` descending -- price = implied probability (e.g., 20 = 20%)603. Present top teams with `yes_sub_title`, `last_price`, and `volume`6162User: "Show me the price history for this NBA game"631. Get the market ticker from `get_markets(series_ticker="KXNBA")`642. Call `get_market_candlesticks(series_ticker="KXNBA", ticker="...", start_ts=..., end_ts=..., period_interval=60)`653. Present OHLC data with volume6667## Error Handling & Fallbacks6869- If series ticker returns no results, call `get_series_list()` to discover available tickers. See `references/series-tickers.md`.70- If markets are empty, use `status="open"` to filter. Default includes settled/closed markets.71- If "Football" returns NFL instead of soccer, Kalshi uses "Football" for NFL, "Soccer" for soccer. Use KXUCL, KXLALIGA, etc. for soccer.72- **Never fabricate market prices or probabilities.** If no market exists, state so.