kalshi
Kalshi prediction markets — events, series, markets, trades, and candlestick data. Public API, no auth required for reads. US-regulated exchange (CFTC). Covers football (EPL, UCL, La Liga), basketball, baseball, tennis, NFL, hockey event contracts. Use when: user asks about Kalshi-specific markets,
By machina-sports · 913 installs
npx skills add machina-sports/sports-skills --skill kalshi
Source repository · Upstream listing
Kalshi — Prediction Markets
Before writing queries, consult references/api reference.md for sport codes, series tickers, and command parameters.
Quick Start
Prefer the CLI — it avoids Python import path issues:
Python SDK (alternative):
CRITICAL: Before Any Query
CRITICAL: Before calling any market endpoint, verify:
The sport parameter is always passed to search markets and get todays events for single game markets.
Prices are on a 0 100 integer scale (20 = 20% implied probability) — do not treat as American odds.
status="open" is used when querying markets to exclude settled/closed markets.
Without the sport parameter:
Important Notes
On Kalshi, "Football" = NFL. For football/soccer (EPL, La Liga, etc.), use sport codes: epl , ucl , laliga , bundesliga , seriea , ligue1 , mls , worldcup .
Prices are probabilities. A last price of 20 means 20% implied probability. Scale is 0 100 (not 0 1 like Polymarket).
Always use status="open" when querying markets, otherwise results include settled/closed markets.
Shared interface with Polymarket: search markets(sport=...) , get todays events(sport=...) , and get sports config() work the same way on both platforms.
Workflows
Sport Market Search (Recommended)
1. search markets sport=nba — finds all open NBA markets.
2. Optionally add query="Lakers" to filter by keyword.
3. Results include yes bid, no bid, volume for each market.
Today's Events
1. get todays events sport=nba — open events with nested markets.
2. Present events with prices (price = implied probability, 0 100 scale).
Futures Market Check
1. get markets series ticker=<ticker status=open
2. Sort by last price descending.
3. Present top contenders with probability and volume.
Market Price History
1. Get market ticker from search markets sport=nba .
2. get market candlesticks series ticker=<s ticker=<t start ts=<start end ts=<end period interval=60
3. Present OHLC with volume.
Commands
See references/api reference.md for the full command list with parameters.
Command Description
get sports config Available sport codes and series tickers
get todays events Today's events for a sport with nested markets
search markets Find markets by sport and/or keyword
get esports odds Esports markets (cs2/lol/dota2): prices in cents (0 100) plus implied probability (0 1) and decimal odds
get markets Market listing (raw API)
get event Event details
get market Market details
get trades Recent trades
get market candlesticks OHLC price history
Examples
Example 1: NBA market search
User says: "What NBA markets are on Kalshi?"
Actions:
1. Call search markets(sport='nba')
Result: All open NBA markets with yes/no prices and volume
Example 2: EPL game markets
User says: "Show me Leeds vs Man City odds on Kalshi"
Actions:
1. Call search markets(sport='epl', query='Leeds')
Result: Leeds EPL markets across all EPL series with prices and volume
Example 3: Today's EPL events
User says: "What EPL games are available on Kalshi?"
Actions:
1. Call get todays events(sport='epl')
Result: Today's EPL events with nested markets
Example 4: Champions League futures
User says: "Who will win the Champions League?"
Actions:
1. Call search markets(sport='ucl') or get markets(series ticker="KXUCL", status="open")
2. Sort by last price descending (price = implied probability)
Result: Top UCL contenders with yes sub title , last price (%), and volume
Example 5: Market price history
User says: "Show me the price history for this NBA game"
Actions:
1. Get market ticker from search markets(sport='nba')
2. Call get market candlesticks(series ticker="KXNBA", ticker="...", start ts=..., end ts=..., period interval=60)
Result: OHLC price data with volume
Commands that DO NOT exist — never call these
~~ get odds ~~ — does not exist. Use search markets or get markets to find market prices.
~~ get team schedule ~~ — does not exist. Kalshi has markets, not schedules. Use the sport specific skill for schedules.
~~ get scores ~~ / ~~ get results ~~ — does not exist. Kalshi is a prediction market. Use the sport specific skill.
If a command is not listed in references/api reference.md , it does not exist.
Troubleshooting
Error: search markets returns 0 results
Cause: The sport parameter is missing — without it, search only returns high volume futures and misses single game markets
Solution: Always pass sport='<code ' to search markets . Check references/api reference.md for valid sport codes
Error: Markets returned include settled/expired contracts
Cause: status parameter is not set
Solution: Always pass status="open" to filter to open markets only
Error: Series ticker returns no results
Cause: The series ticker may be incorrect or have no open markets
Solution: Call get series list() to discover available tickers, or check references/series tickers.md
Error: Football/soccer markets not found when searching "Football"
Cause: On Kalshi, "Football" refers to NFL — soccer uses league specific codes
Solution: Use sport='epl' , sport='ucl' , sport='laliga' , etc. for soccer leagues