Skills kalshi

install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/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"
OpenClaw · Install into ~/.openclaw/skills/
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"
manifest: skills/antonelli182/sports-skills-kalshi/SKILL.md
source content

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
    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.

CommandDescription
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