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.
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.
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.
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.
Kalshi is one source key - kalshi - inside the same platform that
aggregated 45+ sportsbooks and sources in the last 24 hours across 90+ sports.
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
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
/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
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}
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.
{
"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"
}
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.
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 "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 "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"
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.
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.
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.
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.
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.
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.
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.