kalshi

|

INSTALLATION
npx skills add https://github.com/machina-sports/sports-skills --skill kalshi
Run in your project or agent environment. Adjust flags if your CLI version differs.

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
BrowserAct

Let your agent run on any real-world website

Bypass CAPTCHA & anti-bot for free. Start local, scale to cloud.

Explore BrowserAct Skills →

Stop writing automation&scrapers

Install the CLI. Run your first Skill in 30 seconds. Scale when you're ready.

Start free
free · no credit card