> 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, 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-s

fetch
$curl "https://skillshub.wtf/machina-sports/sports-skills/kalshi?format=md"
SKILL.mdkalshi

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:

sports-skills kalshi search_markets --sport=nba
sports-skills kalshi get_todays_events --sport=nba
sports-skills kalshi get_sports_config
sports-skills kalshi get_markets --series_ticker=KXNBA --status=open

Python SDK (alternative):

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 results
RIGHT: 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.
  • 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_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

> related_skills --same-repo

> wnba-data

WNBA data via ESPN public endpoints — scores, standings, rosters, schedules, game summaries, play-by-play, win probability, injuries, transactions, futures, team/player stats, leaders, and news. Zero config, no API keys. Use when: user asks about WNBA scores, standings, team rosters, schedules, game stats, box scores, play-by-play, injuries, transactions, betting futures, team/player statistics, or WNBA news. Don't use when: user asks about NBA (use nba-data), college basketball (use cbb-data),

> volleyball-data

Dutch volleyball data (Eredivisie, Topdivisie, Superdivisie, and the full Dutch pyramid) via the Nevobo API. Standings, schedules, results, clubs, tournaments, and news. Zero config, no API keys. Use when: user asks about Dutch volleyball, Eredivisie volleyball, Nevobo, volleyball standings, volleyball match results, volleyball schedules, or Dutch volleyball clubs. Don't use when: user asks about other sports — use football-data (soccer), nfl-data (NFL), nba-data (NBA), wnba-data (WNBA), nhl-da

> tennis-data

ATP and WTA tennis data via ESPN public endpoints — tournament scores, season calendars, player rankings, player profiles, and news. Zero config, no API keys. Use when: user asks about tennis scores, match results, tournament draws, ATP/WTA rankings, tennis player info, or tennis news. Don't use when: user asks about other sports — use football-data (soccer), nfl-data (NFL), nba-data (NBA), wnba-data (WNBA), nhl-data (NHL), mlb-data (MLB), golf-data (golf), cfb-data (college football), cbb-data

> sports-news

Sports news via RSS/Atom feeds and Google News. Fetch headlines, search by query, filter by date. Covers football news, transfer rumors, match reports, and any sport via Google News. Use when: user asks for recent news, headlines, transfer rumors, or articles about any sport. Good for "what's the latest on [team/player]" questions. Supports any Google News query and curated RSS feeds (BBC Sport, ESPN, The Athletic, Sky Sports). Don't use when: user asks for structured data like standings, score

┌ stats

installs/wk0
░░░░░░░░░░
github stars55
██████████
first seenMar 23, 2026
└────────────

┌ repo

machina-sports/sports-skills
by machina-sports
└────────────