Kalshi

machina-sports/sports-skills/skills/kalshi

by machina-sports09eb7e8566f4MIT242 starsListed Oct 8, 2026Updated Oct 8, 2026Repository updated 3 days ago

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, 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 the sport-specific skill: football-data (soccer), nfl-data (NFL), nba-data (NBA), wnba-data (WNBA), nhl-data (NHL), mlb-data (MLB), tennis-data (tennis), golf-data (golf), cricket-data (cricket), cfb-data (college football), cbb-data (college basketball), or fastf1 (F1). 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.

Includes scripts

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:

bash
sports-skills kalshi search_markets --sport=nbasports-skills kalshi get_todays_events --sport=nbasports-skills kalshi get_sports_configsports-skills kalshi get_markets --series_ticker=KXNBA --status=open

Python SDK (alternative):

python
from sports_skills import kalshi
kalshi.search_markets(sport='nba')kalshi.search_markets(sport='nba', query='Lakers')kalshi.get_todays_events(sport='nba')kalshi.get_sports_config()kalshi.get_markets(series_ticker="KXNBA", status="open")

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:

WRONG: search_markets(query="Leeds")           → 0 resultsRIGHT: search_markets(sport='epl', query='Leeds') → returns all Leeds markets

Important Notes

  • On Kalshi, "Football" = NFL. For football/soccer (EPL, La Liga, etc.), use sport codes: epl, ucl, laliga, bundesliga, seriea, ligue1, mls, worldcup.
  • Formula 1 uses sport code f1 (drivers'/constructors' champion plus per-Grand-Prix race, podium, pole, fastest-lap, head-to-head and sprint series).
  • Market tickers are not always <event_ticker>-<suffix>. Kalshi mints some with a different stem, e.g. KXATP-26-SHA sits inside event KXATP-26USO (2026 US Open men's singles) next to KXATP-26USO-SIN. That is Kalshi's real ticker: pass it verbatim to get_market, and group markets by their event_ticker field, never by parsing the ticker.
  • 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.

CommandDescription
get_sports_configAvailable sport codes and series tickers
get_todays_eventsToday's events for a sport with nested markets
search_marketsFind markets by sport and/or keyword
get_esports_oddsEsports markets (cs2/lol/dota2): prices in cents (0-100) plus implied_probability (0-1) and decimal_odds
get_marketsMarket listing (raw API)
get_eventEvent details
get_marketMarket details
get_tradesRecent trades
get_market_candlesticksOHLC 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

Source and attribution

Source:machina-sports/sports-skillsinskills/kalshiat commit09eb7e8

License: MIT

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal

More from machina-sports/sports-skills

World Cup

machina-sports

Premium FIFA World Cup 2026 market & match intelligence — a hosted, read-only layer that fuses official match truth (fixtures, standings, squads, injuries, player performance) with live prediction markets (Kalshi + Polymarket: prices, order books, price history, movers, cross-venue edges) and AI-grounded context (prematch briefs, move explanations, fan/social pulse). Every entity carries a canonical machina URN cross-walked across api-football, sportradar, opta, entain and ESPN, so a market resolves to a fixture resolves to two teams. This skill is prompt-only and premium: it routes the agent to the hosted World Cup Intelligence project (a per-project Machina MCP server) via `machina-cli`. It runs no code locally and ships no API keys. Use when: the user wants World Cup 2026 odds + match context together, asks "what moved and why", wants a grounded market brief or fan-sentiment read on a fixture, or needs one stable id that joins markets ↔ fixtures ↔ teams across providers. Don't use when: the user wants fr

Awaiting classification242updated 3 days ago

Xctf Data

machina-sports

Fetches NCAA cross country and track & field athlete data from TFRRS and news from The Stride Report.

Includes scripts
Data & Analytics242updated 3 days ago

Sports Reporter

machina-sports

Generates original sports journalism articles from real-time data fetched through sports-skills CLI commands.

Includes scripts
Writing & Content242updated 3 days ago

Volleyball Data

machina-sports

Retrieves Dutch volleyball data from the Nevobo API: standings, schedules, results, clubs, tournaments and news.

Data & Analytics242updated 3 days ago

Polymarket

machina-sports

Read-only access to Polymarket sports prediction markets: odds, prices, order books, events and market search.

Includes scripts
Business & Finance242updated 3 days ago

Metadata

machina-sports

Looks up sports team logos, badges, player photos and stadium or club info via TheSportsDB, plus team and player name search.

Research & Analysis242updated 3 days ago