$npx -y skills add machina-sports/sports-skills --skill kalshiKalshi 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 Kalsh
| 1 | # Kalshi — Prediction Markets |
| 2 | |
| 3 | Before writing queries, consult `references/api-reference.md` for sport codes, series tickers, and command parameters. |
| 4 | |
| 5 | ## Quick Start |
| 6 | |
| 7 | Prefer the CLI — it avoids Python import path issues: |
| 8 | ```bash |
| 9 | sports-skills kalshi search_markets --sport=nba |
| 10 | sports-skills kalshi get_todays_events --sport=nba |
| 11 | sports-skills kalshi get_sports_config |
| 12 | sports-skills kalshi get_markets --series_ticker=KXNBA --status=open |
| 13 | ``` |
| 14 | |
| 15 | Python SDK (alternative): |
| 16 | ```python |
| 17 | from sports_skills import kalshi |
| 18 | |
| 19 | kalshi.search_markets(sport='nba') |
| 20 | kalshi.search_markets(sport='nba', query='Lakers') |
| 21 | kalshi.get_todays_events(sport='nba') |
| 22 | kalshi.get_sports_config() |
| 23 | kalshi.get_markets(series_ticker="KXNBA", status="open") |
| 24 | ``` |
| 25 | |
| 26 | ## CRITICAL: Before Any Query |
| 27 | |
| 28 | CRITICAL: Before calling any market endpoint, verify: |
| 29 | - The `sport` parameter is always passed to `search_markets` and `get_todays_events` for single-game markets. |
| 30 | - Prices are on a 0-100 integer scale (20 = 20% implied probability) — do not treat as American odds. |
| 31 | - `status="open"` is used when querying markets to exclude settled/closed markets. |
| 32 | |
| 33 | Without the `sport` parameter: |
| 34 | ``` |
| 35 | WRONG: search_markets(query="Leeds") → 0 results |
| 36 | RIGHT: search_markets(sport='epl', query='Leeds') → returns all Leeds markets |
| 37 | ``` |
| 38 | |
| 39 | ## Important Notes |
| 40 | |
| 41 | - **On Kalshi, "Football" = NFL.** For football/soccer (EPL, La Liga, etc.), use sport codes: `epl`, `ucl`, `laliga`, `bundesliga`, `seriea`, `ligue1`, `mls`, `worldcup`. |
| 42 | - **Prices are probabilities.** A `last_price` of 20 means 20% implied probability. Scale is 0-100 (not 0-1 like Polymarket). |
| 43 | - **Always use `status="open"`** when querying markets, otherwise results include settled/closed markets. |
| 44 | - **Shared interface with Polymarket:** `search_markets(sport=...)`, `get_todays_events(sport=...)`, and `get_sports_config()` work the same way on both platforms. |
| 45 | |
| 46 | ## Workflows |
| 47 | |
| 48 | ### Sport Market Search (Recommended) |
| 49 | 1. `search_markets --sport=nba` — finds all open NBA markets. |
| 50 | 2. Optionally add `--query="Lakers"` to filter by keyword. |
| 51 | 3. Results include yes_bid, no_bid, volume for each market. |
| 52 | |
| 53 | ### Today's Events |
| 54 | 1. `get_todays_events --sport=nba` — open events with nested markets. |
| 55 | 2. Present events with prices (price = implied probability, 0-100 scale). |
| 56 | |
| 57 | ### Futures Market Check |
| 58 | 1. `get_markets --series_ticker=<ticker> --status=open` |
| 59 | 2. Sort by `last_price` descending. |
| 60 | 3. Present top contenders with probability and volume. |
| 61 | |
| 62 | ### Market Price History |
| 63 | 1. Get market ticker from `search_markets --sport=nba`. |
| 64 | 2. `get_market_candlesticks --series_ticker=<s> --ticker=<t> --start_ts=<start> --end_ts=<end> --period_interval=60` |
| 65 | 3. Present OHLC with volume. |
| 66 | |
| 67 | ## Commands |
| 68 | |
| 69 | See `references/api-reference.md` for the full command list with parameters. |
| 70 | |
| 71 | | Command | Description | |
| 72 | |---|---| |
| 73 | | `get_sports_config` | Available sport codes and series tickers | |
| 74 | | `get_todays_events` | Today's events for a sport with nested markets | |
| 75 | | `search_markets` | Find markets by sport and/or keyword | |
| 76 | | `get_esports_odds` | Esports markets (cs2/lol/dota2): prices in cents (0-100) plus `implied_probability` (0-1) and `decimal_odds` | |
| 77 | | `get_markets` | Market listing (raw API) | |
| 78 | | `get_event` | Event details | |
| 79 | | `get_market` | Market details | |
| 80 | | `get_trades` | Recent trades | |
| 81 | | `get_market_candlesticks` | OHLC price history | |
| 82 | |
| 83 | ## Examples |
| 84 | |
| 85 | Example 1: NBA market search |
| 86 | User says: "What NBA markets are on Kalshi?" |
| 87 | Actions: |
| 88 | 1. Call `search_markets(sport='nba')` |
| 89 | Result: All open NBA markets with yes/no prices and volume |
| 90 | |
| 91 | Example 2: EPL game markets |
| 92 | User says: "Show me Leeds vs Man City odds on Kalshi" |
| 93 | Actions: |
| 94 | 1. Call `search_markets(sport='epl', query='Leeds')` |
| 95 | Result: Leeds EPL markets across all EPL series with prices and volume |
| 96 | |
| 97 | Example 3: Today's EPL events |
| 98 | User says: "What EPL games are available on Kalshi?" |
| 99 | Actions: |
| 100 | 1. Call `get_todays_events(sport='epl')` |
| 101 | Result: Today's EPL events with nested markets |
| 102 | |
| 103 | Example 4: Champions League f |