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-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.
How do I install this agent skill?
npx skills add https://github.com/machina-sports/sports-skills --skill kalshiIs this agent skill safe to install?
- Gen Agent Trust Hubpass
The skill is safe to use but has an exposure to indirect prompt injection from the external Kalshi API data it retrieves, which is a common characteristic of data-fetching tools.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
- Runlayerpass
5 files scanned · No issues
- ZeroLeakspass
Score: 93/100 · 2 sections analyzed
What does this agent skill do?
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
sportparameter is always passed tosearch_marketsandget_todays_eventsfor 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,worldcup. - Prices are probabilities. A
last_priceof 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=...), andget_sports_config()work the same way on both platforms.
Workflows
Sport Market Search (Recommended)
search_markets --sport=nba— finds all open NBA markets.- Optionally add
--query="Lakers"to filter by keyword. - Results include yes_bid, no_bid, volume for each market.
Today's Events
get_todays_events --sport=nba— open events with nested markets.- Present events with prices (price = implied probability, 0-100 scale).
Futures Market Check
get_markets --series_ticker=<ticker> --status=open- Sort by
last_pricedescending. - Present top contenders with probability and volume.
Market Price History
- Get market ticker from
search_markets --sport=nba. get_market_candlesticks --series_ticker=<s> --ticker=<t> --start_ts=<start> --end_ts=<end> --period_interval=60- 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:
- 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:
- 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:
- 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:
- Call
search_markets(sport='ucl')orget_markets(series_ticker="KXUCL", status="open") - Sort by
last_pricedescending (price = implied probability) Result: Top UCL contenders withyes_sub_title,last_price(%), and volume
Example 5: Market price history User says: "Show me the price history for this NBA game" Actions:
- Get market ticker from
search_markets(sport='nba') - 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
— does not exist. Useget_oddssearch_marketsorget_marketsto find market prices.— does not exist. Kalshi has markets, not schedules. Use the sport-specific skill for schedules.get_team_schedule/get_scores— does not exist. Kalshi is a prediction market. Use the sport-specific skill.get_results
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
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/machina-sports/sports-skills/kalshi">View kalshi on skillZs</a>