Developer guide
Prediction market odds API: Kalshi, Polymarket
Kalshi, Polymarket, and Polymarket US prices as American odds beside sportsbooks: implied-probability math, liquidity_usd, settlement, and Python.
TheRundown returns Kalshi, Polymarket, and Polymarket US prices in the same JSON schema as its sportsbooks: American odds in the same price field, beside DraftKings, FanDuel, Pinnacle, and the rest, with the exchanges ProphetX and Novig alongside. They are affiliate IDs 25, 26, 31, 29, and 30 among the 25 books the API covers, and they start on Starter ($49 a month); the Free plan covers only DraftKings, FanDuel, and BetMGM. This prediction market odds API guide covers how to read an American-odds price as an implied probability, what each venue listed on a live NFL game, what liquidity_usd means on a prediction market versus Pinnacle, a curl request and Python script that compares Kalshi and Polymarket with sportsbooks on the same game, settlement and availability caveats, and which plan you need.
Prediction markets and exchanges in the API
TheRundown’s Kalshi and Polymarket pages group five venues apart from the sportsbooks:
| Venue | Affiliate ID | Type |
|---|---|---|
| Kalshi | 25 | Prediction market |
| Polymarket | 26 | Prediction market |
| Polymarket US | 31 | Prediction market |
| ProphetX | 29 | Exchange |
| Novig | 30 | Exchange |
Each comes back in the same events, markets, participants, lines, and prices structure as every other book (the developer guide walks through it), keyed by its affiliate ID. Filter to one venue with affiliate_ids=25, or list several IDs to get prediction markets and sportsbooks in one response. GET /affiliates lists every book’s ID.
Polymarket and Polymarket US are separate affiliates with their own prices. Polymarket’s own documentation describes Polymarket as its international, crypto-based product and Polymarket US as a US platform operating as a designated contract market under CFTC oversight. They don’t always list the same markets, as the coverage check below shows.
Kalshi vs. Polymarket vs. Polymarket US
How the three prediction markets compare on the points this guide covers (coverage counts from checks on October 6, 2026):
| Kalshi | Polymarket | Polymarket US | |
|---|---|---|---|
| Price in the API | American odds | American odds | American odds |
liquidity_usd in the docs |
Approximate resting order-book depth | Approximate resting order-book depth | Not defined in the docs |
| Market types, Buccaneers at Cowboys | 13 | 7 | 33 |
| NFL futures boards | 19 | 17 | 18 |
The Kalshi and Polymarket pages advise showing prediction-market prices beside sportsbook odds and keeping them out of best-price and consensus math; the comparison script below keeps all five venues out of its sportsbook reference, since they are prediction markets and exchanges, not sportsbooks. Each venue’s contracts settle under its own rules, covered below.
American odds and implied probability
Every venue’s price in the API is American odds, the same as every sportsbook’s, so the usual formula reads it as an implied probability:
positive odds: 100 / (odds + 100)
negative odds: |odds| / (|odds| + 100)
For example, −150 is 150 / 250 = 60%, and +150 is 100 / 250 = 40%. You can check any price with the odds converter.
def american_to_probability(american):
"""American odds -> implied probability (0-1)."""
if american > 0:
return 100 / (american + 100)
return -american / (-american + 100)
for odds in (-400, -150, -100, 150, 300):
print(f"{odds:+d} -> {american_to_probability(odds):.1%}")
-400 -> 80.0%
-150 -> 60.0%
-100 -> 50.0%
+150 -> 40.0%
+300 -> 25.0%
An API price is a reported snapshot, not a live quote; use updated_at to see how recent it is.
What each venue lists
On the Buccaneers at Cowboys game of October 8, 2026, checked on October 6, each venue priced these market types (alternate lines included):
| Venue | Market types | Coverage |
|---|---|---|
| Kalshi | 13 | Game lines; 1st-half spread and total; team totals; passing, rushing, and receiving yards, receptions, and passing TDs; anytime and 2+ touchdown scorers |
| Polymarket | 7 | Game lines; 1st-half moneyline, spread, and total; team totals |
| Polymarket US | 33 | Including game lines; lines for each half and quarter; team totals for the game and each half; passing, rushing, and receiving yards and passing TDs; first team to score, winning margin, and overtime |
| ProphetX | 20 | Game lines; 1st-half lines and 2nd-half spread and total; player yards, receptions, completions, attempts, and passing TDs; first, anytime, and last touchdown scorer |
| Novig | 16 | Game lines; 1st-half lines; team totals; player yards, receptions, and passing TDs; first, anytime, 2+, and 3+ touchdown scorers |
Futures differ more. On the NFL futures endpoint the same day, Kalshi priced 19 boards, Polymarket US 18, and Polymarket 17 — division, conference, and Super Bowl winners, MVP and other awards, plus (Kalshi and Polymarket US only) team win-total and make-the-playoffs boards covering every team — while Novig priced one (the Super Bowl winner) and ProphetX none. Futures need Ultra.
Coverage varies by league and game. The Polymarket odds API page lists the market types Polymarket has posted across football, basketball, baseball, hockey, soccer, tennis, and MMA, and the Kalshi odds API page lists Kalshi’s for the NFL, NBA, MLB, and NHL, each with market IDs and the plan each needs. On the slates from October 5 to 11 that the Polymarket page covers, for example, its only player-prop market was UFC method of victory.
liquidity_usd: order-book depth vs. max stake
A price can carry liquidity_usd, a reading in US dollars. TheRundown’s docs FAQ defines it per affiliate: on Kalshi (25) and Polymarket (26) it is approximate resting order-book depth, and on Pinnacle (3) it is the book’s max stake for that price (full schema in the data model reference). On this game’s Cowboys moneyline, Pinnacle’s reading was $10,000 and Kalshi’s about $1.1 million. One is a limit on a single bet at Pinnacle and the other a measure of the venue’s order book, so don’t rank them against each other. The Pinnacle API alternative guide covers the Pinnacle side.
Three details matter when you code against it:
- Branch on affiliate ID first. The same field name carries a different meaning on a prediction market than on Pinnacle.
- It can be absent. The field is omitted, never null and never zero, when no current reading is available, so read it with
price.get("liquidity_usd")in Python. It also varies by market type within one venue. - Use it only where it’s defined. The docs define it for Kalshi (25), Polymarket (26), and Pinnacle (3). On Kalshi and Polymarket, treat it as approximate order-book depth, not a guaranteed fill.
Prediction market vs. sportsbook odds: comparing in one request
Get a key on the odds API page and keep it in an environment variable (THERUNDOWN_API_KEY below) rather than in source control. Every request sends it in the X-TheRundown-Key header to https://therundown.io/api/v2.
One request for every venue
Because the venues share the schema, a comparison is one request with every affiliate ID you want. Pinnacle (3), DraftKings (19), and FanDuel (23) as sportsbooks, plus the five prediction markets and exchanges, for NFL moneylines (market_ids=1) on October 8, 2026:
curl -s "https://therundown.io/api/v2/sports/2/events/2026-10-08?market_ids=1&affiliate_ids=3,19,23,25,26,31,29,30&main_line=true&offset=240" \
-H "X-TheRundown-Key: $THERUNDOWN_API_KEY"
Replace 2026-10-08 with an upcoming game date; the Pinnacle API alternative guide shows how to find the next one with /sports/dates; because this request uses offset=240, convert that guide’s timestamps to an Eastern calendar date (for example TZ=America/New_York date -d @<timestamp> +%F) rather than a UTC one. offset=240 sets the date boundary to US Eastern time, so the date includes the Thursday night game (use offset=300 once daylight saving time ends on November 1). On a Free key the same request returns DraftKings and FanDuel only.
The response held one game for 18 data points. Trimmed to one side and two sportsbooks:
{
"event_id": "9883b364768181727afd4158333ee8b4",
"event_date": "2026-10-09T00:15:00Z",
"markets": [
{
"market_id": 1,
"name": "moneyline",
"participants": [
{
"name": "Dallas Cowboys",
"lines": [
{
"prices": {
"3": {
"price": -439,
"is_main_line": true,
"updated_at": "2026-10-06T03:40:12Z",
"liquidity_usd": 10000
},
"19": {
"price": -470,
"is_main_line": true,
"updated_at": "2026-10-06T03:45:14Z"
}
}
}
]
}
]
}
]
}
Prediction-market prices use the same fields, plus source_id: Kalshi’s Cowboys price on this game carried its market ticker, KXNFLGAME-26OCT08TBDAL-DAL, and Polymarket’s prices carry the contract ID in the same field.
No-vig comparison in Python
This script pulls the same slate and, for each venue, converts both sides of the moneyline to implied probabilities and rescales them to sum to 100% to get a no-vig probability. It then compares each prediction market’s and exchange’s no-vig figure with the average of the three sportsbooks’:
import os
import requests
API = "https://therundown.io/api/v2"
HEADERS = {"X-TheRundown-Key": os.environ["THERUNDOWN_API_KEY"]}
SPORTSBOOKS = {"3": "Pinnacle", "19": "DraftKings", "23": "FanDuel"}
VENUES = {
"25": "Kalshi",
"26": "Polymarket",
"31": "Polymarket US",
"29": "ProphetX",
"30": "Novig",
}
BOOKS = {**SPORTSBOOKS, **VENUES}
def implied(american):
"""American odds -> implied probability (0-1)."""
if american > 0:
return 100 / (american + 100)
return -american / (-american + 100)
resp = requests.get(
f"{API}/sports/2/events/2026-10-08",
params={
"market_ids": "1", # moneyline
"affiliate_ids": ",".join(BOOKS),
"main_line": "true",
"offset": "240", # US Eastern day boundary (300 after DST ends)
},
headers=HEADERS,
timeout=30,
)
resp.raise_for_status()
print("Data points used:", resp.headers.get("X-Datapoints"))
for event in resp.json().get("events") or []:
market = next((m for m in event["markets"] if m["market_id"] == 1), None)
if market is None or len(market["participants"]) != 2:
continue
side_a, side_b = market["participants"]
prices_a = side_a["lines"][0]["prices"] if side_a["lines"] else {}
prices_b = side_b["lines"][0]["prices"] if side_b["lines"] else {}
team_a = side_a["name"].split()[-1]
rows = {}
for book in BOOKS:
a, b = prices_a.get(book), prices_b.get(book)
if not a or not b or 0.0001 in (a["price"], b["price"]):
continue # not priced, or off the board
rows[book] = implied(a["price"]) / (implied(a["price"]) + implied(b["price"]))
# Reference: the average no-vig probability across the sportsbooks only
fair = [rows[book] for book in SPORTSBOOKS if book in rows]
reference = sum(fair) / len(fair) if fair else None
print(f"\n{side_a['name']} vs {side_b['name']}, {event['event_date']}")
print(f"{'':14} {team_a + ' no-vig':>15} {'vs books':>9}")
for book, no_vig in rows.items():
gap = ""
if book in VENUES and reference is not None:
gap = f"{(no_vig - reference) * 100:+.1f} pts"
print(f"{BOOKS[book]:14} {no_vig:>15.1%} {gap:>9}")
if reference is not None:
print(f"{'Sportsbook avg':14} {reference:>15.1%}")
Run on October 6, 2026, it printed:
Data points used: 18
Dallas Cowboys vs Tampa Bay Buccaneers, 2026-10-09T00:15:00Z
Cowboys no-vig vs books
Pinnacle 78.5%
DraftKings 79.1%
FanDuel 79.9%
Kalshi 79.5% +0.3 pts
Polymarket 80.5% +1.3 pts
Polymarket US 80.6% +1.4 pts
ProphetX 80.3% +1.2 pts
Novig 80.1% +0.9 pts
Sportsbook avg 79.2%
Reading the columns:
- no-vig divides the Cowboys’ implied probability by the sum of both sides’ implied probabilities, which removes any margin. It is the same proportional method the closing line value guide and the expected value guide walk through, and the math behind the no-vig calculator.
- vs books is a venue’s no-vig Cowboys probability minus the sportsbooks’ average, 79.2%. In this snapshot every prediction market and exchange had the Cowboys 0.3 to 1.4 points higher than the sportsbooks did.
Before you read anything into a gap, check two things:
- Timestamps. Each price carries its own
updated_at. In this snapshot, venues’updated_atvalues were hours apart, so part of a gap can simply be time. - Settlement. The contracts settle under each venue’s rules, below, which can differ from a sportsbook’s on ties and postponements.
The script reads one live snapshot in memory and keeps nothing between runs. A gap between two venues is a difference in prices at one moment, not a forecast of the result.
Spreads and totals
Moneylines have no line value, so every venue’s price lands in one prices map. Spreads and totals merge only where venues post the same number, and prediction markets often don’t: on this game’s main lines, at the time of our check on October 6, Pinnacle, DraftKings, FanDuel, Polymarket, and ProphetX had the Cowboys at −9.5, Kalshi and Novig had them at −7.5, and Polymarket US had them at −8.5. Match on market, participant, and line value across line objects, or drop main_line=true to pull in alternates where the numbers overlap. The Pinnacle guide shows the same matching for sportsbooks.
A note on arbitrage
When separate venues price the same game, their prices on opposite sides can occasionally imply a combined probability under 100%, the setup behind arbitrage. Different settlement rules (a $0.50 payout on a tie isn’t a sportsbook push), stake and depth limits, and prices moving before both sides are filled can each erase it or turn it into a loss, so read each venue’s terms before acting. The arbitrage betting guide covers the math and the risks.
Settlement and availability caveats
Settlement rules differ by venue
A price in the API is a price on that venue’s contract or bet, settled under that venue’s rules:
- Kalshi: its NFL game contract terms include overtime, pay Yes and No holders $0.50 each if a game ends tied and no Tie outcome is listed, and resolve a game postponed and not started within 48 hours of its scheduled date at the last fair market price as determined by Kalshi.
- Polymarket US: its sports FAQ settles a winner contract without a tie outcome at $0.50 on a tie, counts overtime except in soccer league matches, and settles a game canceled and not rescheduled before the contract’s expiration at last fair market prices.
- Polymarket: markets resolve through the UMA Optimistic Oracle, and each market states its own resolution source, end date, and edge cases. Polymarket’s docs advise: “Always read the resolution rules before trading.”
- Sportsbooks grade bets under their own house rules.
Read the rules for the market you’re comparing before treating two prices as the same bet.
Availability varies by jurisdiction
Where each venue can be used depends on the venue and on where its user is, and it is changing. Polymarket’s geographic restrictions list the United States as close-only on its international product. Polymarket US describes itself as a CFTC-regulated exchange. Kalshi’s help center states that Kalshi “is subject to U.S. regulatory oversight by the CFTC,” and federal appeals courts have split on whether states can also regulate sports event contracts under their gambling laws; on September 25, 2026, the Sixth Circuit ruled that Ohio and Tennessee can. Check each venue’s own terms for where it operates. This guide is not legal advice.
Which plan includes prediction markets
Prices and limits below are current as of October 2026; see API pricing for the live numbers.
| Plan | Price | Prediction markets and exchanges | Delay | Notes |
|---|---|---|---|---|
| Free | $0, no card | No | 5 min | DraftKings, FanDuel, and BetMGM pre-match lines only |
| Starter | $49/month | Yes | 60 sec | Every published book and market except futures, 7-day history; internal or personal use |
| Pro | $149/month | Yes | 30 sec | Opening and closing lines, 30-day history, commercial end-user display |
| Ultra | $399/month | Yes, plus futures | Real-time | WebSocket (1 connection), futures, 90-day history |
Starter is the lowest plan with Kalshi, Polymarket, Polymarket US, ProphetX, and Novig. Pro adds opening and closing lines and lets you show odds to your own users, and Ultra adds real-time delivery, the WebSocket stream, and futures.
Where to go next
- Prediction markets need Starter or above — compare plans on API pricing.
- Get a key on the odds API page, then follow the quickstart.
- See each venue’s market types by league on the Kalshi odds API and Polymarket sports odds API pages.
- Compare with a sharp sportsbook in the Pinnacle API alternative guide.
- Score prices against the close with the closing line value API guide.
- Learn the full data model and ID tables in how to pull sports betting odds from an API.
Questions
- Does TheRundown have Kalshi and Polymarket odds?
- Yes. Kalshi is affiliate ID 25, Polymarket 26, and Polymarket US 31, alongside the exchanges ProphetX (29) and Novig (30). All five return in the same JSON schema as the sportsbooks among the 25 books the API covers, on Starter ($49 a month) and up. Request them with affiliate_ids, alone or next to sportsbook IDs.
- How are prediction market prices shown in the API?
- As American odds in the same price field every sportsbook uses, with the Kalshi market ticker or Polymarket contract ID in source_id and, where a reading exists, liquidity_usd. To read a price as a probability, use 100 ÷ (odds + 100) for positive odds and |odds| ÷ (|odds| + 100) for negative odds.
- Which plan includes prediction market odds?
- Starter ($49 a month) and up, with a 60-second delay. Pro ($149) cuts the delay to 30 seconds and adds opening and closing lines, and Ultra ($399) is real-time and adds futures. The Free plan covers only DraftKings, FanDuel, and BetMGM pre-match lines.
- Are Polymarket and Polymarket US different?
- Yes. They are separate venues with separate affiliate IDs and their own prices: Polymarket (26) is Polymarket’s international product, and Polymarket US (31) is its US exchange, regulated by the CFTC. They can list different markets; on one NFL game checked on October 6, 2026, Polymarket priced 7 market types and Polymarket US 33.
- Kalshi vs. Polymarket odds: how do they differ in the API?
- Both return American odds in the same price field — Kalshi is affiliate ID 25 and Polymarket 26 — but coverage differs: on the Buccaneers at Cowboys game checked October 6, 2026, Kalshi priced 13 market types to Polymarket’s 7, and on the NFL futures endpoint the same day Kalshi listed 19 boards to Polymarket’s 17.
- What does liquidity_usd mean for a prediction market?
- On Kalshi and Polymarket it is approximate resting order-book depth in US dollars. On Pinnacle the same field is the book’s max stake, so branch on affiliate ID before you read it. The field is omitted, never null or zero, when no reading is available.
- Can I compare Kalshi or Polymarket with sportsbooks?
- Yes. Put the sportsbook and prediction-market IDs in one affiliate_ids list, convert each price to implied probability, normalize both sides to sum to 100%, and compare. Keep prediction markets and exchanges out of sportsbook consensus and best-price math, and remember each venue settles under its own rules.
- Does the API include Kalshi and Polymarket futures?
- Yes, on Ultra ($399 a month) and up, through GET /sports/{sport_id}/futures. On October 6, 2026, Kalshi priced 19 NFL futures boards, Polymarket US 18, and Polymarket 17, including division, conference, and Super Bowl winners, MVP, and (Kalshi and Polymarket US only) team win totals and make-the-playoffs.
- Are prediction market prices the same as sportsbook odds?
- No. They are expressed the same way, but each venue settles under its own rules, which can differ from a sportsbook’s: Kalshi and Polymarket US both pay $0.50 a contract on a tied game when no tie outcome is listed. Treat a comparison as a price comparison, not proof the two are the same bet.
Prediction markets start on Starter, $49 a month.
Starter returns Kalshi, Polymarket, Polymarket US, ProphetX, and Novig beside every sportsbook, with a 60-second delay. Futures start on Ultra. Free covers only DraftKings, FanDuel, and BetMGM pre-match lines.