SKILL.md
$2b
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.
| 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_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