Odds API for Prediction Market Arbitrage
Compare Kalshi and Polymarket prices against sportsbook odds in one schema to find exchange-vs-book arbitrage and mispricing across prediction markets and books in one API.
- 1Pull exchange and book prices together
Request an event with oddsAvailable=true and read each market's byBookmaker map, where Kalshi and Polymarket prices sit next to sportsbooks like Pinnacle and DraftKings, with no separate exchange API to join.
- 2Convert each price to implied probability
Convert each byBookmaker entry's odds to a probability and sum the two sides; when an exchange price on one side and a book price on the other combine below 100%, that is a cross-market arbitrage to act on after checking fees and limits.
- 3Benchmark against fairOdds to catch mispricing
Compare a single Kalshi or Polymarket price to the market's no-vig fairOdds to spot one-sided mispricing, where an exchange prices an outcome away from the sharp consensus.
A prediction market arbitrage API returns prediction-market contract prices and sportsbook odds for the same outcome side by side, so a tool can convert each to implied probability and flag where an exchange and a book disagree enough to lock in an edge. SportsGameOdds puts both in one feed: Kalshi and Polymarket land in the same byBookmaker object as sportsbooks, keyed kalshi and polymarket next to pinnacle and draftkings, across 85+ books, with a no-vig fairOdds consensus to benchmark every price against. You query one feed instead of reconciling an exchange API against a separate odds API.
Why build your prediction market arbitrage on SportsGameOdds
- Exchanges and books share one schema. Kalshi and Polymarket prices sit under the same
byBookmakermap aspinnacle,draftkings, andfanduel, all keyed to one normalizedoddID, so an exchange contract and a sportsbook line for the same outcome collapse onto one row without any cross-API matching. fairOddsis a built-in benchmark. Each market shipsfairOdds(the no-vig consensus) andbookOdds(consensus with vig), so you can measure how far a Kalshi or Polymarket price sits from where the sharp market lands. That gap is the core signal behind exchange-vs-sportsbook mispricing.- One
oddIDaligns every side. The formatstatID-statEntityID-periodID-betTypeID-sideID(e.g.points-home-game-ml-home) identifies the same outcome across an exchange and a book, so converting eachbyBookmakerentry to implied probability and summing the two sides is a few lines, not a normalization project. - Prices, availability, and timing per entry. Every
byBookmakerentry carriesodds, anavailableflag, andlastUpdatedAt, so your tool can skip stale or unavailable contracts before it ever calls something an arbitrage. - Predictable per-event-object pricing. One event is one object no matter how many books, exchanges, or markets you pull, so scanning Kalshi and Polymarket against every sportsbook on a slate doesn't multiply your bill.
- Five official SDKs plus an MCP server. JavaScript/TypeScript, Python, Ruby, Go, and Java wrap the identical feed, plus an MCP server for AI-assisted development in Claude Code, Cursor, and VS Code.
How exchange-vs-sportsbook arbitrage works with our data
Cross-market arbitrage rarely comes down to the math. The challenge is getting an exchange contract and a sportsbook line into the same shape, at the same moment, for the same outcome. SportsGameOdds pre-assembles that: one oddID, one byBookmaker object, exchanges and books together. Here is how each step maps to concrete fields.
Pull exchange and book prices together
Request an event with oddsAvailable=true and read each market under event.odds. The byBookmaker object holds pinnacle, draftkings, and fanduel alongside kalshi and polymarket, every price for that outcome in one place. There is no separate Kalshi odds API or Polymarket sports API to call and join; the exchange contracts arrive in the same payload as the sportsbook lines.
Convert each price to implied probability
Arbitrage and mispricing both reduce to one comparison: implied probability. Convert each byBookmaker entry's odds to a probability, do the same for the opposing side, and sum them. When the combined implied probability of an exchange price on one side and a book price on the other falls below 100%, the two markets disagree enough to cover both outcomes. That is exchange-vs-sportsbook arbitrage. Use available and lastUpdatedAt to discard anything stale before you trust the number.
Benchmark against fairOdds to catch mispricing
Not every edge is a two-sided arb. Comparing a single exchange price to the market's fairOdds (the no-vig consensus) tells you when Kalshi or Polymarket is simply pricing an outcome away from where the sharp books land, a one-sided mispricing you can act on. bookOdds keeps the vig-inclusive consensus for display, while fairOdds is the clean baseline your edge is measured against.
Example request
Pull an NBA event with odds attached so exchange and book prices arrive together:
curl "https://api.sportsgameodds.com/v2/events?leagueID=NBA&oddsAvailable=true&limit=1" \
-H "x-api-key: YOUR_API_KEY"
A trimmed moneyline market shows Kalshi and Polymarket priced next to Pinnacle and DraftKings, with a no-vig fairOdds to benchmark against:
{
"eventID": "LAL_at_BOS_2026...",
"odds": {
"points-home-game-ml-home": {
"oddID": "points-home-game-ml-home",
"betTypeID": "ml",
"sideID": "home",
"periodID": "game",
"fairOdds": "-135",
"bookOdds": "-142",
"byBookmaker": {
"pinnacle": { "odds": "-138", "available": true },
"draftkings": { "odds": "-145", "available": true },
"kalshi": { "odds": "-120", "available": true },
"polymarket": { "odds": "-128", "available": true }
}
}
}
}
Here Kalshi's -120 on the home side converts to a ~54.5% implied probability versus the no-vig fairOdds of -135 (~57.4%), a one-sided mispricing. To check for a true two-sided arb, pair that -120 against the best available away price and sum the implied probabilities; if the total falls below 100%, you can cover both outcomes. Treat any result as a candidate, not a guarantee. Exchange fees, contract resolution, liquidity limits, and line moves all erode it, so hedge rather than assume risk-free. See the docs and the arbitrage calculator example for the full implied-probability and stake-sizing math.
SportsGameOdds vs building it yourself
| What you need | SportsGameOdds | Integrate Kalshi + Polymarket + an odds API yourself |
|---|---|---|
| Exchanges + books together | Kalshi & Polymarket in the same byBookmaker object as sportsbooks | Separate exchange APIs plus a separate odds API to reconcile |
| Outcome alignment | Shared oddID lines every side up | Match each market and team by hand across sources |
| No-vig benchmark | fairOdds consensus included | De-vig every book yourself, per market |
| Freshness / availability | available + lastUpdatedAt per entry | Track each source's update timing separately |
| Price normalization | One schema across exchanges and books | Map each source's contract and odds format |
| Coverage | 85+ books from one call | One integration, auth, and rate limit per source |
| Billing | Per event object, so books don't multiply cost | Per-source pricing and quotas stacked together |
Wiring the sources together yourself makes sense if you want full control over how exchange contracts map to sportsbook outcomes. The real trade-off is the plumbing: separate Kalshi and Polymarket integrations, a third odds source, and the ongoing work of normalizing contract formats, matching outcomes, and de-vigging, all before you compute a single implied probability. SportsGameOdds collapses that into one byBookmaker object so you spend your time on the edge, not the ETL.
Frequently asked questions
Related use cases
- Prediction Market API: the full Kalshi and Polymarket data feed across every league.
- Odds API for Arbitrage Betting: find book-vs-book arbitrage across the same
byBookmakerprices. - Odds API for Positive EV Betting: turn no-vig
fairOddsinto expected-value edges. - Kalshi odds: coverage and markets for the Kalshi exchange.
- Arbitrage calculator example: the implied-probability and stake-sizing math in Python.
- Pricing: per-event-object plans, including a free Amateur tier.
Find prediction-market arbitrage
Free plan available. Set up in 5 minutes. No credit card required.