Pred-Data Get odds data

Hands-on tutorial

Compare prediction-market prices with bookmaker odds

Pull Polymarket, Kalshi and bookmaker prices for the same sports event from one API, convert them to implied probabilities, compare them with a no-vig bookmaker line and read order-book depth.

Last updated: · Written and reviewed by Ken Lin

Partner link Partner link — we may earn a commission. See our affiliate disclosure.

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

  1. Prediction Markets guide (Polymarket, Kalshi: back/lay, depth) — Odds-API.io docs, accessed 2 Nov 2026
  2. Prices & Orderbook — Polymarket Documentation, accessed 2 Nov 2026
  3. Resolution — Polymarket Documentation, accessed 2 Nov 2026