Kalshi odds API: exchange prices and sportsbook odds in one call

Kalshi quotes contracts in cents. Sportsbooks quote American odds. ParlayAPI returns Kalshi prices already converted - cent quotes, American odds, and implied probability in one row - from the same API that serves odds from 30+ sportsbooks. One key, one schema, free tier with no card required.

45+
Sources, last 24h
1
Credit per snapshot call
0
Credits - search, in beta
1,000
Free credits / month

Why bridge Kalshi and sportsbooks at all?

An event contract at 57¢ and a moneyline at −133 are the same probability wearing different clothes. If you model, scan for value, or just want a second opinion on a line, you end up converting between the two - and matching venues, teams, and market phrasing by hand.

What you'd build yourself

Kalshi auth + pagination, cents-to-odds conversion, a second client for every sportsbook feed, entity matching between "Will the Yankees win?" and h2h prices, and a de-vig step so the comparison is fair.

What one ParlayAPI row gives you

yes_bid/yes_ask in cents, american_odds, implied_probability, volume and open interest - served from the same API, same key, and same sport keys as our sportsbook odds, props, consensus, and EV endpoints.

What the API covers for Kalshi

Kalshi is one source key - kalshi - inside the same platform that aggregated 45+ sportsbooks and sources in the last 24 hours across 90+ sports.

SnapshotsKalshi prices by sport

One row per Kalshi market from the last hour, normalized to American odds and implied probability. Responses are cached server-side for 30 seconds and the X-Cache header tells you HIT or MISS. 1 credit per call. The measured live example (published at /v1/bookmakers/kalshi) is MLB as of 2026-08-25.

GET /v1/prediction-markets/{sport_key}?sources=kalshi

Search · betaFree-text market discovery

Politics, awards, specials, and anything else that doesn't fit a sport schema: search Kalshi (plus Polymarket and Novig) by plain text and get source-native prices back - real yes_bid/yes_ask straight from the venue payloads, with a match-confidence score. When we measured on 2026-08-25 the searchable Kalshi surface spanned 13,000+ series. 0 credits while in beta.

GET /v1/prediction-markets/search?q=...&sources=kalshi

Bridge toolsDe-vig & fair value

/v1/calc/edge is a free no-vig calculator: pass a two-sided market (American or decimal prices) and get the fair probability and your edge back. And /v1/sports/{sport_key}/consensus accepts include_prediction_markets=true to fold Kalshi into the same probability-space rollup as the sportsbooks - off by default, on when you want it.

GET /v1/calc/edge GET /v1/sports/{sport_key}/consensus

CryptoKalshi BTC price ladders

Every open Kalshi BTC prediction market in one call - one contract per strike (e.g. KXBTCD-26AUG0117-T53499.99) plus price-range markets, each with yes/no bid/ask, mid-market implied probability, volume, and open interest. Refreshes within ~5 seconds of the collector poll; a historical endpoint serves replay (ETH lives in that archive too).

GET /v1/prediction-markets/crypto/btc GET /v1/historical/prediction-markets/crypto/{asset}

The response shape tells you what we actually saw

A detail we're stubborn about: if the collector observed only one side of a Kalshi quote, the other side is null, and price_basis names which side american_odds was computed from. The bid is what you can sell at, the ask is what you can buy at - the API never copies one into the other to fake a two-sided quote.

GET /v1/prediction-markets/baseball_mlb?sources=kalshi - row shape (values illustrative)
{
  "source": "kalshi",
  "ticker": "KXMLB-...",          // Kalshi's own market ticker
  "team": "New York Yankees",
  "yes_bid": 57,                  // cents, as quoted
  "yes_ask": null,                // null = the exchange didn't show us one
  "price_basis": "yes_bid",       // which side american_odds came from
  "american_odds": -133,          // normalized for sportsbook comparison
  "implied_probability": 0.57,
  "volume": 1204,
  "open_interest": 863,
  "last_update": "2026-08-25T17:40:11Z"
}

When Kalshi's own API is the better pick

Kalshi publishes an official API (docs.kalshi.com, read 2026-08-25), and for some jobs it is simply the right tool: placing and managing orders, full order-book depth, their own streaming feeds, and exchange-authoritative data straight from the venue, at no cost. If you are trading on Kalshi, build against theirs. ParlayAPI earns its keep when Kalshi is one signal among many - you want its prices normalized next to 30+ sportsbooks without writing a second client, a converter, and an entity matcher.

Quickstart

Endpoint shapes below are the real ones from the API docs. Auth is either an X-API-Key header or the-odds-api-style apiKey= query param.

curl - free-text Kalshi search (0 credits in beta)
curl "https://parlay-api.com/v1/prediction-markets/search?q=bitcoin&sources=kalshi&limit=2"

# real response, captured 2026-08-25 (trimmed):
{
  "source": "kalshi",
  "market_id": "KXBTCMAXY-26DEC31-99999.99",
  "title": "Will Bitcoin be above $99,999.99 by Dec 31, 2026 at 11:59 PM ET?",
  "status": "active",
  "volume": 1361241.78,
  "prices": { "yes_bid": 0.34, "yes_ask": 0.35, "no_bid": 0.65, "no_ask": 0.66, "last": 0.35 },
  "url": "https://kalshi.com/markets/KXBTCMAXY-26DEC31",
  "match_confidence": 0.99
}
curl - Kalshi snapshots for a sport (1 credit)
curl "https://parlay-api.com/v1/prediction-markets/baseball_mlb?sources=kalshi" \
  -H "X-API-Key: YOUR_KEY"

# BTC price ladder - every open Kalshi BTC market
curl "https://parlay-api.com/v1/prediction-markets/crypto/btc?market_type=price_above" \
  -H "X-API-Key: YOUR_KEY"
Python - Kalshi implied probability vs the sportsbook consensus
import requests

BASE = "https://parlay-api.com"
H = {"X-API-Key": "YOUR_KEY"}

# Kalshi rows, already normalized to American odds + implied probability
kalshi = requests.get(f"{BASE}/v1/prediction-markets/baseball_mlb",
                      params={"sources": "kalshi"}, headers=H).json()

# Sportsbook consensus in probability space, with Kalshi folded in if you want
consensus = requests.get(f"{BASE}/v1/sports/baseball_mlb/consensus",
                         params={"include_prediction_markets": "true"}, headers=H).json()

# Free no-vig fair line: is a book's price +EV against a two-sided market?
edge = requests.get(f"{BASE}/v1/calc/edge", params={
    "odds": "-110",               # the price you can bet (American or decimal)
    "sharp_over_odds": "-133",    # e.g. odds derived from a Kalshi yes-price
    "sharp_under_odds": "+115",
}).json()

Building with an AI agent instead? There's an official MCP server with 22 tools: pip install parlayapi-mcp.

Kalshi odds API - frequently asked

Does ParlayAPI replace the official Kalshi API?

No, and it isn't trying to. Kalshi's own API (docs.kalshi.com) is the right tool for trading: order placement, full order-book depth, exchange-authoritative data, and their own WebSocket feeds, straight from the venue. ParlayAPI is read-only market intelligence - Kalshi prices normalized to American odds and implied probability, served in the same API as odds from 30+ sportsbooks, with one key and one schema.

How are Kalshi contract prices converted to odds?

Kalshi quotes contracts in cents, which is an implied probability. Each row carries the observed yes_bid and/or yes_ask in cents, the implied probability, and american_odds computed from the quoted side. A price_basis field names which side american_odds came from, and a side we did not observe is null - the API never invents a bid/ask spread that the exchange did not show.

What does the Kalshi odds API cost?

GET /v1/prediction-markets/{sport_key} costs 1 credit per call. The free-text market search endpoint is 0 credits while in beta. The free tier includes 1,000 credits per month with no credit card required, and the no-vig fair-line calculator at /v1/calc/edge is free. Current paid tiers are listed at /pricing.

How fresh is the Kalshi data?

The snapshot endpoint returns one row per market from the last hour, and responses are cached server-side for 30 seconds - the X-Cache header says HIT or MISS so you can see which you got. The Kalshi BTC price-ladder endpoint refreshes within about 5 seconds of the underlying collector poll.

Which sports have Kalshi prices?

Coverage follows what Kalshi actually lists, which changes over time. The API publishes a live, measured example path at /v1/bookmakers/kalshi - as of 2026-08-25 that example is /v1/prediction-markets/baseball_mlb?sources=kalshi. For anything outside the sport schema - politics, crypto, awards, specials - use the free-text search endpoint instead.

One schema. Every venue.

Sign up free - 1,000 credits a month, no card required - and have Kalshi prices flowing next to sportsbook odds in minutes. The search endpoint is free to try in beta before you even make a key.