Quick answer
Odds-API.io normalises Polymarket and Kalshi sports markets into the same format as bookmakers, so one /odds call returns all three as decimal odds; a 60¢ contract becomes 1.67 [1]. Convert each price to an Implied probability, strip the bookmaker Overround, and compare — while checking depth before trusting a gap.
What you need
What you need: The helpers from Live odds in Python, a sports event id, and Polymarket and Kalshi among your selected bookmakers [1].
Get a key: Odds-API.io Partner link
Partner link — we may earn a commission. See our affiliate disclosure.
Code status: The Python in this tutorial was run against the example responses published in the Odds-API.io docs (checked 3 November 2026), not against a live API key. Live responses can carry extra fields; the code only reads documented ones.
1. How the prices map
On prediction markets a contract costs 0–100 cents and pays $1, so price = implied probability; decimal odds = 1 / (price / 100) [1] [2]. Odds-API.io returns the top of the book (best prices) plus depth fields in USD, not the full Order book [1].
2. Fetch all three in one call
Ask /odds for Polymarket, Kalshi and a bookmaker. The snippet prints each source's implied probabilities and their sum, and the depth at the best price.
# reuses get() and ml_prices() from the Python tutorial
ev = get("/odds", eventId=EVENT_ID, bookmakers="Polymarket,Kalshi,Bet365", markets="ML")
prices = ml_prices(ev) # back prices, decimal
for book, p in prices.items():
implied = {side: 1 / o for side, o in p.items()}
total = sum(implied.values())
print(f"{book:11} sum {total:.1%} ", {s: f"{q:.1%}" for s, q in implied.items()})
for book in ("Polymarket", "Kalshi"): # depth: USD at the best back price
for m in ev["bookmakers"].get(book, []):
if m["name"] == "ML":
row = m["odds"][0]
print(book, {k: row[k] for k in row if k.startswith("depth")})On the docs' Leeds v Arsenal sample, Kalshi's back prices sum to 103.1% and Polymarket's to 102.1%: the excess over 100% is the spread, not a bookmaker margin.
3. Compare against a no-vig bookmaker line
Strip the bookmaker's margin first (as in the Implied probability & no-vig calculator), then subtract. Small gaps are normal; large ones with thin depth often vanish when you try to trade them.
def no_vig(p):
s = sum(1 / o for o in p.values())
return {side: (1 / o) / s for side, o in p.items()}
book_fair = no_vig(prices["Bet365"])
for pm in ("Polymarket", "Kalshi"):
if pm in prices:
gap = {side: (1 / prices[pm][side]) - book_fair[side] for side in book_fair if side in prices[pm]}
print(pm, "minus Bet365 no-vig (percentage points):",
{s: f"{g * 100:+.1f}" for s, g in gap.items()})
4. Read the result carefully
Prediction-market fees and spreads, settlement rules and resolution differ from bookmakers [3]. Coverage here is sports events only [1]. For a research angle, score both sources over time with the Brier score and Calibration.
Frequently asked questions
Does this cover election or crypto markets?
No. Odds-API.io covers sports events on Polymarket and Kalshi.
Why do prediction-market prices sum to more than 100%?
Back prices are the best asks; the gap to 100% reflects the bid-ask spread and fees.
What does depth mean?
The stake in USD available at the best price; small depth means a quoted price may not be tradable in size.
About this guide
Pred-Data publishes independent, source-linked explainers about prediction markets and the AI tools used around them. Every factual claim on this page links to a primary or reputable secondary source, checked on the date shown above. We do not run a trading venue, take bets, or give personal advice.
Author: Ken Lin · Corrections: if you spot an error, we review it and date-stamp the fix.
Affiliate disclosure
Some links on this site (marked “Partner link”) may be affiliate links: if you sign up through them we may earn a commission at no extra cost to you. Partner links use rel="sponsored nofollow" and never change our assessment. Platform links in our comparison tables are plain, non-affiliate links to official sites.
Sources
- Prediction Markets guide (Polymarket, Kalshi: back/lay, depth) — Odds-API.io docs, accessed 2 Nov 2026
- Prices & Orderbook — Polymarket Documentation, accessed 2 Nov 2026
- Resolution — Polymarket Documentation, accessed 2 Nov 2026