Skills kalshi
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/antonelli182/sports-skills-kalshi" ~/.claude/skills/openclaw-skills-kalshi && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/antonelli182/sports-skills-kalshi" ~/.openclaw/skills/openclaw-skills-kalshi && rm -rf "$T"
skills/antonelli182/sports-skills-kalshi/SKILL.mdKalshi — 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
parameter is always passed tosport
andsearch_markets
for single-game markets.get_todays_events - Prices are on a 0-100 integer scale (20 = 20% implied probability) — do not treat as American odds.
is used when querying markets to exclude settled/closed markets.status="open"
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
of 20 means 20% implied probability. Scale is 0-100 (not 0-1 like Polymarket).last_price - Always use
when querying markets, otherwise results include settled/closed markets.status="open" - Shared interface with Polymarket:
,search_markets(sport=...)
, andget_todays_events(sport=...)
work the same way on both platforms.get_sports_config()
Workflows
Sport Market Search (Recommended)
— finds all open NBA markets.search_markets --sport=nba- Optionally add
to filter by keyword.--query="Lakers" - Results include yes_bid, no_bid, volume for each market.
Today's Events
— open events with nested markets.get_todays_events --sport=nba- Present events with prices (price = implied probability, 0-100 scale).
Futures Market Check
get_markets --series_ticker=<ticker> --status=open- Sort by
descending.last_price - 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 |
|---|---|
| Available sport codes and series tickers |
| Today's events for a sport with nested markets |
| Find markets by sport and/or keyword |
| Market listing (raw API) |
| Event details |
| Market details |
| Recent trades |
| OHLC price history |
Examples
Example 1: NBA market search User says: "What NBA markets are on Kalshi?" Actions:
- Call
Result: All open NBA markets with yes/no prices and volumesearch_markets(sport='nba')
Example 2: EPL game markets User says: "Show me Leeds vs Man City odds on Kalshi" Actions:
- Call
Result: Leeds EPL markets across all EPL series with prices and volumesearch_markets(sport='epl', query='Leeds')
Example 3: Today's EPL events User says: "What EPL games are available on Kalshi?" Actions:
- Call
Result: Today's EPL events with nested marketsget_todays_events(sport='epl')
Example 4: Champions League futures User says: "Who will win the Champions League?" Actions:
- Call
orsearch_markets(sport='ucl')get_markets(series_ticker="KXUCL", status="open") - Sort by
descending (price = implied probability) Result: Top UCL contenders withlast_price
,yes_sub_title
(%), and volumelast_price
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
Result: OHLC price data with volumeget_market_candlesticks(series_ticker="KXNBA", ticker="...", start_ts=..., end_ts=..., period_interval=60)
Commands that DO NOT exist — never call these
— does not exist. Useget_odds
orsearch_markets
to find market prices.get_markets— 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