Key facts (TL;DR)
Odds-API.io is a sports betting odds data API. Every fact below comes from odds-api.io or its official docs, checked 2026-11-02.
- Covers 450+ bookmakers, 34 sports, 12,000+ leagues and 500+ market types. [source]
- Delivery: REST (JSON, base URL https://api.odds-api.io/v3), WebSocket (wss://api.odds-api.io/v3/ws) and an official MCP server. [source]
- Odds: pre-match, live and historical, plus scores, match clock, closing lines and settlement/grading endpoints. [source]
- Pricing: Solo £49/mo (2 bookmakers), Starter £99 (5), Growth £179 (10), Pro £229 (15); annual = 10× monthly. [source]
- Every plan: 5,000 requests/hour (no monthly cap), every sport and market; add-ons to 10k/20k/30k per hour. [source]
- WebSocket is a paid add-on priced at the plan price again (2× in total). [source]
- New free API keys are paused; /sports, /bookmakers and /markets need no key. [source]
- Built-in /value-bets, /arbitrage-bets and /dropping-odds endpoints. [source]
- Official Python (pip install odds-api-io) and TypeScript (npm i odds-api-io) SDKs; MCP server with 25 tools. [source]
- Pay by card, Apple Pay, Google Pay, PayPal, or 10+ cryptocurrencies including BTC, ETH and USDC. [source]
What is Odds-API.io? (sports odds API overview)
Odds-API.io is a developer odds feed: it collects publicly displayed odds from 450+ bookmakers, matches events, teams and markets across them, and serves one JSON format over REST and WebSocket.
- For books with no public API (Bet365, for example) it is a reliable way to get their lines programmatically.
- The same match returns the same event id and market names at every bookmaker, so prices compare directly.
- Beyond raw odds it ships ready-made value bets, arbitrage, dropping odds, closing lines and bet grading.
For background, see the official sports betting API overview and what an odds API is. Books without a public API, such as Bet365, are the classic case: the Bet365 odds API integration is how most developers get those lines.
Features
Twelve core capabilities: one schema, streaming, props, analytics endpoints, history, settlement, consensus price, prediction markets, bet links, esports, SDKs and MCP.
One schema
Events, teams and markets are matched across books, so Bet365 and Betano DE return the same event id and market names. No per-book parsers.
WebSocket streaming
The recommended way to get odds: changes pushed within milliseconds, pre-match and live, with scores, clock and status on the same stream; reconnect with lastSeq for replay (24-hour retention).
Player props
Shots, shots on target, assists, goalscorers and NBA player lines; 104 bookmakers with props according to the site.
Value, arbitrage, dropping odds
Ready-made /value-bets, /arbitrage-bets and /dropping-odds endpoints, so you can ship a tool before building a model.
History & closing lines
Historical events and results, odds snapshots, closing lines (up to 10 leagues and 366 days per call) and per-market movements for backtests and CLV.
Scores & bet grading
/settlements returns settlement records for up to 50 events; POST /settlements/grade grades up to 50 selections (won/lost/void/half_won/half_lost…).
ON Sharp consensus
A synthetic reference price: sharp books de-vigged, blended and re-priced at a fixed margin (2% two-way, 2.5% three-way); pre-match, paid plans.
Prediction markets
Polymarket and Kalshi odds, plus /mappings to native ids (conditionId, CLOB token id, Kalshi ticker).
Direct bet links
Each event carries deep links to the bookmaker's page, ready for affiliate traffic.
Esports
CS2, Valorant, League of Legends, Dota 2 and more, with kill and map markets where priced; events carry game, league, region and best-of format.
Official SDKs
Python (sync and async) and Node.js/TypeScript (ESM and CommonJS) clients.
MCP & AI-ready docs
Official MCP server with 25 tools for Claude, Codex and Cursor; docs as llms.txt, llms-full.txt and an OpenAPI spec.
Several of these have their own official pages: the player props odds API, the bet settlement API, the esports odds API and Polymarket and Kalshi odds data.
Coverage: Bet365, DraftKings and 450+ bookmakers, sports and regions
34 sports, 12,000+ leagues and 450+ bookmakers including exchanges and prediction markets; most books are covered pre-match and live.
Major bookmakers (from each book's page on odds-api.io)
| Bookmaker | Sports | Markets | Pre-match | Live | Player props | Top sports by markets |
|---|---|---|---|---|---|---|
| Bet365 | 16 | 190 | ✓ | ✓ | ✓ | Football 96 · Esports 31 · Basketball 30 |
| Stake | 13 | 72 | ✓ | ✓ | – | Esports 36 · Volleyball 19 · Tennis 13 |
| DraftKings | 10 | 65 | ✓ | ✓ | ✓ | Basketball 26 · Football 25 · Baseball 24 |
| Unibet | 10 | 61 | ✓ | ✓ | ✓ | Football 49 · Ice Hockey 17 · Handball 14 |
| Caesars | 5 | 50 | ✓ | ✓ | ✓ | Football 24 · Basketball 21 · Am. Football 15 |
| SingBet | 2 | 48 | ✓ | ✓ | – | Football 33 · Basketball 27 |
| Polymarket | 15 | 46 | ✓ | ✓ | ✓ | Am. Football 25 · Football 25 · Basketball 23 |
| 1xbet | 13 | 34 | ✓ | ✓ | – | Volleyball 20 · Football 13 · Ice Hockey 11 |
| Betano | 9 | 27 | ✓ | ✓ | ✓ | Basketball 14 · Football 13 · Ice Hockey 7 |
| BetMGM | 8 | 26 | ✓ | ✓ | ✓ | Football 20 · Basketball 14 · Am. Football 11 |
| Betfair Exchange | 15 | 24 | ✓ | ✓ | – | Football 15 · Tennis 7 · Esports 4 |
| FanDuel | 6 | 21 | ✓ | ✓ | ✓ | Baseball 11 · Basketball 11 · Ice Hockey 11 |
| Kalshi | 8 | 10 | ✓ | ✓ | ✓ | Football 9 · Am. Football 8 · Baseball 4 |
| William Hill | 7 | 4 | ✓ | ✓ | ✓ | Basketball 4 · Am. Football 3 · Baseball 3 |
Counts as shown on odds-api.io on 2026-11-02; they change over time. The 29 Oct 2026 changelog says all 48 ADM-licensed Italian sportsbooks are covered. https://odds-api.io/sportsbooks
34 sports
Browse bookmakers by region
By bookmaker: DraftKings odds and player props in Python, Betfair Exchange back, lay and depth prices, SBOBET odds API. By sport: the football odds API.
Betting odds API endpoint reference (REST v3)
Base URL https://api.odds-api.io/v3; pass the key as the apiKey query parameter; responses are gzipped JSON. /sports, /bookmakers and /markets need no key.
| Endpoint | Purpose | Key parameters | Notes |
|---|---|---|---|
GET /sports | List sports | — | No auth |
GET /bookmakers | Bookmakers with status (ok / degraded / down) | — | No auth |
GET /markets | Market catalogue: names, shape, period, pre-match/live | sport | No auth |
GET /leagues | Leagues for a sport | sport | |
GET /events | Events (defaults to next 14 days) | sport, league, status, from, to, limit≤5000, skip, bookmaker | |
GET /events/live | Live events with score and clock | sport | |
GET /events/search | Search by team/league (max 10) | query (≥3 chars), status | |
GET /odds | Odds for one event | eventId, bookmakers≤30, markets≤40 | |
GET /odds/multi | Up to 10 events in one call | eventIds≤10, bookmakers, markets | Counts as 1 request |
GET /odds/updated | Markets changed since a timestamp (delta) | since (≤90s old), bookmaker, sport, markets | Polling fallback; WebSocket preferred |
GET /odds/summary | Best/average/median/worst and fair price per line | eventId, markets, lines, includeExchanges | Growth plan and above |
GET /odds/movements | Line history per market and bookmaker | eventId, bookmaker, market, marketLine | Pre-match; fixed set of books |
GET /value-bets | Prices above fair line with EV | bookmaker, sport, league, includeEventDetails | |
GET /arbitrage-bets | Arbitrage with optimal stakes | bookmakers, sport, league, markets, minProfit, allCombinations, limit≤500 | Pre-match; net of exchange fees |
GET /dropping-odds | Markets falling fast at sharp books | sport, league(s), markets, timeWindow, sort, minDrop, page | Paid plans |
GET /historical/events | Finished events and results | sport, league, from, to | |
GET /historical/odds | Odds snapshots for past events | eventId, bookmakers≤30, markets | |
GET /historical/closing-lines | Bulk closing lines | sport, leagues≤10, from, to (≤366 天/days), markets, bookmakers | Paid plans |
GET /settlements | Settlement records for up to 50 events | eventIds≤50 | Paid plans |
POST /settlements/grade | Grade up to 50 selections | JSON body: eventId, market, side, hdp, label | Paid plans |
GET /mappings | Native id mappings (Polymarket / Kalshi) | bookmaker, eventId(s) / marketId(s) / bulk | Paid plans |
GET /participants | Teams/players; /participants/{id}/logo returns a PNG crest | sport, search | |
PUT /bookmakers/selected/select | Select bookmakers via API | bookmakers | clear: once per 12h |
WS /v3/ws | Real-time odds, scores and status | markets, channels, sport≤10, leagues≤20, eventIds≤50, status, lastSeq | Paid add-on; 2 connections per key |
- Rate-limit headers: x-ratelimit-limit, x-ratelimit-remaining, x-ratelimit-reset.
- Status codes: 200, 400 (bad params), 401 (invalid key), 403 (not in plan), 404, 429 (rate limited), 500.
- Best practice from the docs: batch with /odds/multi; cache event lists 5–10 min and pre-match odds 30–60 s; use WebSocket for live; back off exponentially on 429.
https://docs.odds-api.io/llms-full.txt · https://docs.odds-api.io/api-reference/openapi.json
Full parameters are in the odds API docs quickstart. For Python, follow the sports betting API Python guide; for comparison sites, see the odds comparison API: 30 bookmakers in one request.
Live odds API: WebSocket streaming
WebSocket is the recommended way to get odds: connect to wss://api.odds-api.io/v3/ws, subscribe by market, and receive odds, scores and status on one connection. It is a paid add-on (2× the plan price in total).
- Required: markets (e.g. ML,Spread,Totals); optional channels=odds,scores,status.
- Filters: sport (max 10), leagues (max 20), eventIds (max 50), status=live or prematch.
- Reconnect with lastSeq to replay missed messages (24-hour retention); replayComplete=true adds an end-of-replay marker.
- Up to 2 connections per key; the client must support permessage-deflate or it gets HTTP 426.
- Message types: welcome, created, updated, deleted, no_markets, score, status, resync_required. An updated message replaces that book's markets for the event; do not merge.
// npm i ws (permessage-deflate is on by default in ws)
import WebSocket from "ws";
let lastSeq;
function connect() {
const q = new URLSearchParams({ apiKey: process.env.ODDS_API_KEY,
markets: "ML,Spread,Totals", sport: "football", status: "live" });
if (lastSeq) q.set("lastSeq", lastSeq);
const ws = new WebSocket("wss://api.odds-api.io/v3/ws?" + q);
ws.on("message", (raw) => {
const msg = JSON.parse(raw);
if (msg.seq) lastSeq = msg.seq;
if (msg.type === "updated") {
// replace this bookmaker's stored markets for the event; do not merge
}
});
ws.on("close", () => setTimeout(connect, 2000));
}
connect();https://docs.odds-api.io/guides/websockets
Live odds API: polling vs WebSocket compares the three refresh strategies. In-play betting odds are the most latency-sensitive; the WebSocket live odds stream tutorial has complete code.
Quick start: first odds in 5 steps
Subscribe to get a key, call the no-auth /sports, find events with /events and fetch prices with /odds; move to WebSocket when you need low latency.
- Pick a plan — Choose a plan at odds-api.io/pricing (from £49/month); the API key arrives by email.
- Try the no-auth endpoints — Call GET https://api.odds-api.io/v3/sports to list sports; no key needed.
- Fetch events — GET /v3/events?apiKey=YOUR_API_KEY&sport=football&limit=10 for upcoming football events.
- Fetch odds — GET /v3/odds?apiKey=YOUR_API_KEY&eventId=…&bookmakers=Bet365,Unibet&markets=ML,Spread,Totals.
- Go real-time — For low latency add WebSocket and connect to wss://api.odds-api.io/v3/ws?apiKey=…&markets=ML,Spread,Totals.
# No key needed
curl -s --compressed "https://api.odds-api.io/v3/sports"
# Upcoming football events
curl -s --compressed "https://api.odds-api.io/v3/events?apiKey=$ODDS_API_KEY&sport=football&limit=10"
# Odds for one event from two books
curl -s --compressed "https://api.odds-api.io/v3/odds?apiKey=$ODDS_API_KEY&eventId=123456&bookmakers=Bet365,Unibet&markets=ML,Spread,Totals"import os, requests
BASE = "https://api.odds-api.io/v3"
KEY = os.environ["ODDS_API_KEY"]
events = requests.get(f"{BASE}/events", params={
"apiKey": KEY, "sport": "football", "league": "england-premier-league", "limit": 10}).json()
ids = ",".join(str(ev["id"]) for ev in events[:10])
# Up to 10 events in one request
odds = requests.get(f"{BASE}/odds/multi", params={
"apiKey": KEY, "eventIds": ids, "bookmakers": "Bet365,Unibet", "markets": "ML"}).json()
for ev in odds:
for book, markets in ev["bookmakers"].items():
ml = next((m for m in markets if m["name"] == "ML"), None)
if ml:
o = ml["odds"][0]
print(ev["home"], "v", ev["away"], book, o["home"], o.get("draw"), o["away"])# pip install odds-api-io
from odds_api import OddsAPIClient
client = OddsAPIClient(api_key="YOUR_API_KEY")
events = client.get_events(sport="football", league="england-premier-league")
odds = client.get_event_odds(event_id=events[0]["id"], bookmakers="Bet365,SingBet,FanDuel"){
"mcpServers": {
"odds-api": {
"command": "npx",
"args": ["-y", "odds-api-mcp-server"],
"env": { "ODDS_API_KEY": "YOUR_API_KEY" }
}
}
}Worked examples: arbitrage betting, value bets, closing line odds and odds comparison (with code)
All four examples use only endpoints and fields from the official docs. Replace YOUR_API_KEY with your own key and keep it in an environment variable.
1. Arbitrage scan
/arbitrage-bets returns opportunities whose legs are all within your bookmakers, net of exchange fees, with the optimal split of a 1000-unit stake.
import os, requests
r = requests.get("https://api.odds-api.io/v3/arbitrage-bets", params={
"apiKey": os.environ["ODDS_API_KEY"],
"bookmakers": "Bet365,SingBet,Unibet",
"sport": "football", "minProfit": 1, "includeEventDetails": "true"})
r.raise_for_status()
for arb in r.json()[:10]:
ev = arb.get("event", {})
print(f'{arb["profitMargin"]:.2f}% {ev.get("home")} v {ev.get("away")} {arb["market"]["name"]}')
for s in arb["optimalStakes"]: # split of totalStake (1000); scale to your bankroll
print(f' {s["bookmaker"]:<10} {s["side"]:<5} stake {s["stake"]:.2f} -> {s["potentialReturn"]:.2f}')2. Value-bet filter
/value-bets returns prices above the fair line at one bookmaker; EV = probability × odds − 1. This keeps the top 10 with EV ≥ 3%.
import os, requests
bets = requests.get("https://api.odds-api.io/v3/value-bets", params={
"apiKey": os.environ["ODDS_API_KEY"], "bookmaker": "Bet365",
"sport": "football", "includeEventDetails": "true"}).json()
top = sorted((b for b in bets if b["expectedValue"] >= 0.03),
key=lambda b: b["expectedValue"], reverse=True)[:10]
for b in top:
side = b["betSide"]
print(f'EV {b["expectedValue"]*100:.1f}% {b["event"]["home"]} v {b["event"]["away"]}'
f' {b["market"]["name"]} {side} @ {b["bookmakerOdds"][side]}')3. Closing-line backtest (margin comparison)
/historical/closing-lines returns closing odds for up to 10 leagues and 366 days per call (paid plans). This computes the average 1X2 margin of two books in the Premier League.
import os, requests, statistics
r = requests.get("https://api.odds-api.io/v3/historical/closing-lines", params={
"apiKey": os.environ["ODDS_API_KEY"], "sport": "football",
"leagues": "england-premier-league",
"from": "2026-01-01T00:00:00Z", "to": "2026-05-31T23:59:59Z",
"markets": "ML", "bookmakers": "Bet365,Unibet", "limit": 100})
margins = {}
for ev in r.json(): # each item is shaped like /historical/odds
for book, markets in ev.get("bookmakers", {}).items():
ml = next((m for m in markets if m["name"] == "ML"), None)
if not ml: continue
o = ml["odds"][0]
overround = sum(1 / float(o[k]) for k in ("home", "draw", "away")) - 1
margins.setdefault(book, []).append(overround)
for book, xs in margins.items():
print(f"{book}: {len(xs)} matches, average closing margin {statistics.mean(xs)*100:.2f}%")
# page through with skip=100, 200, ... for more events4. Best-price comparison
/odds/summary gives best, average, median, worst and de-vigged fair prices per line (Growth plan and above), ideal for a comparison table.
curl -s --compressed "https://api.odds-api.io/v3/odds/summary?apiKey=$ODDS_API_KEY&eventId=123456&markets=ML,Totals"
# per line: best / average / median / worst price and a de-vigged "fair" priceFurther reading: what arbitrage betting is, the arbitrage calculator, build an arbitrage bot in Python, the value bets API and closing line value tutorial and Bet365 historical odds and closing lines.
SDKs, MCP and AI tooling
Official Python and TypeScript SDKs plus a 25-tool MCP server; the docs also publish llms.txt, llms-full.txt and an OpenAPI spec for AI coding assistants.
Python SDK
pip install odds-api-io
Node.js / TypeScript
npm i odds-api-io
MCP server
npx -y odds-api-mcp-server
https://docs.odds-api.io/guides/sdks · https://docs.odds-api.io/ai-vibe-coding · https://docs.odds-api.io/llms.txt
The odds MCP server lets Claude and other assistants query odds directly; there is an official Claude + MCP live odds tutorial, and the official SDK docs cover installation.
Pricing (checked 2026-11-02)
The four plans differ only in bookmaker count; all include 5,000 requests/hour, every sport and market, pre-match and live. Annual billing costs 10× the monthly price.
Solo
- 2 bookmakers
- 5,000 requests/hour
- Every sport and market
- Pre-match + live
- Email support
Starter
- 5 bookmakers
- 5,000 requests/hour
- Every sport and market
- Pre-match + live
- Email support
Growth
- 10 bookmakers
- 5,000 requests/hour
- Every sport and market
- Pre-match + live
- Priority support
Pro
- 15 bookmakers
- 5,000 requests/hour
- Every sport and market
- Pre-match + live
- Dedicated support
| Item | Price / detail |
|---|---|
| Enterprise | Custom: choose bookmaker count, unlimited requests, dedicated infrastructure, custom feeds and SLAs |
| WebSocket add-on | The plan price again (2× total), e.g. +£49/mo on Solo |
| More requests | 10,000/h +£139/mo · 20,000/h +£229/mo · 30,000/h +£309/mo |
| Currencies | Shown in local currency incl. GBP, USD, EUR, BRL, CNY, JPY, KRW |
| Payment | Visa, Mastercard, Amex, Apple Pay, Google Pay, PayPal; crypto via CoinGate (10+ coins; annual is card only) |
| Free keys | New free keys paused; existing ones 100 requests/hour, 500/day |
New free keys are paused; see the official free odds API page and the free odds API in 2026 explainer. The official pricing page linked above is authoritative for current plans.
How it compares with other ways to get odds
There are three common routes: scraping bookmaker sites yourself, a single bookmaker's own API where one exists, or an aggregated API like Odds-API.io, which connects many books at once with events already matched.
| Aspect | Own scrapers | Single-book API | Odds-API.io |
|---|---|---|---|
| Integration | Build and maintain per book | Apply and integrate per book | One key, one JSON format |
| Event/market matching | You build it | N/A (one book) | Matched across books |
| Coverage | Depends on effort | That book only | 450+ incl. exchanges and prediction markets |
| Latency | Depends on polling | Varies | WebSocket push in milliseconds |
| History | You collect it | Usually none | Historical odds, closing lines, movements |
| Cost | Servers and staff | Varies | From £49/mo |
Public facts vs The Odds API
Each column quotes only that service's own website as shown on 2026-11-02; not independently tested.
| Item | Odds-API.io (odds-api.io) | The Odds API (the-odds-api.com) |
|---|---|---|
| Billing model | Plans with a flat 5,000 requests/hour | Monthly credit allowance |
| Entry price | Solo £49/mo (2 bookmakers) | Free 500 credits/mo; paid from $30/mo (20K credits) |
| Higher tiers | £99 / £179 / £229 per month | $59 (100K) / $119 (5M) / $249 (15M) per month |
| Coverage (self-reported) | 450+ bookmakers, 34 sports, 12,000+ leagues | 100+ sports, 100+ bookmakers |
| Streaming | WebSocket (paid add-on) | Not mentioned on the homepage |
| Other | MCP server, Python/TS SDKs, arbitrage/value endpoints | Google Sheets and Excel add-ons; decimal and American odds |
https://odds-api.io/pricing · https://the-odds-api.com/
odds-api.io also publishes its own The Odds API alternative comparison, OpticOdds comparison, BetsAPI comparison and a post on Pinnacle API shutdown alternatives (these comparisons are self-reported).
Glossary
Fourteen terms you meet when working with odds data.
- Decimal odds
- Total return per 1 unit staked, stake included. odds-api.io returns decimal prices as strings, e.g. "2.10".
- Implied probability
- 1 ÷ decimal odds. 2.00 means 50%.
- Overround (vig)
- How far the implied probabilities of all outcomes exceed 100%: the bookmaker's margin.
- De-vig / fair price
- Scaling implied probabilities so they sum to 100%. The fair field in /odds/summary uses the median de-vigged probability.
- Expected value (EV)
- Docs definition: EV = probability × odds − 1; positive EV marks a value bet.
- Arbitrage (surebet)
- When the best prices across books imply a total under 100%, so a stake split locks in a return; impliedProbability < 1 in /arbitrage-bets.
- Closing line
- The last price before kick-off, often treated as the most efficient market price.
- Closing line value (CLV)
- The gap between your price and the closing price; a measure of whether you beat the market.
- Sharp book
- A high-limit book that leads price discovery; a soft book is the opposite.
- Exchange
- A venue where users back and lay against each other (e.g. Betfair Exchange) and the venue charges commission.
- Dropping odds
- A fast price fall, often money or information arriving; /dropping-odds measures drops since opening, 12h, 24h and 48h.
- Asian handicap
- A handicap without the draw, including quarter lines; in odds-api.io it lives under the Spread market.
- Player props
- Markets on one player's output such as shots, assists or points.
- In-play / live
- Markets priced during the match; prices move fast, so WebSocket suits them.
More terms and tools: implied probability, value betting, Asian handicap API guide, the odds converter and the bookmaker margin calculator.
FAQ
Eighteen common questions about Odds-API.io, answered from the official site and docs.
What is Odds-API.io?
A sports betting odds API that normalises pre-match, live and historical odds from 450+ bookmakers into one JSON format, delivered over REST, WebSocket or MCP.
Is there a free trial?
New free keys are paused (existing free keys keep working at 100 requests/hour, capped at 500/day). The cheapest plan is Solo at £49/month, cancel any time. /sports, /bookmakers and /markets need no key.
How do the plans differ?
Only by the number of bookmakers: Solo 2, Starter 5, Growth 10, Pro 15. All include 5,000 requests/hour, every sport and market, pre-match and live. /odds/summary needs Growth or above.
How much is WebSocket?
It is an add-on priced at the plan price again, 2× in total, e.g. +£49/month on Solo.
Is there a request cap?
5,000 requests/hour on every plan with no monthly cap; raise to 10,000 (+£139/mo), 20,000 (+£229/mo) or 30,000 (+£309/mo) per hour.
Which sports are covered?
34 sports including football, basketball, tennis, American football, ice hockey, baseball, cricket, esports (CS2, LoL, Dota 2, Valorant…), darts, snooker and golf.
Does it include Bet365?
Yes: pre-match and live, player props, corners and cards. The site notes Bet365 has no public API. On 2026-11-02 its page listed 16 sports and 190 markets.
Are live (in-play) odds available?
Yes. Most bookmakers are covered live and pre-match, with scores, clock and status.
REST or WebSocket?
The docs recommend WebSocket for most apps (lowest latency, less bandwidth); REST suits scripts, lookups and backfills. Suggested caching: pre-match odds 30–60 s, event lists 5–10 min.
Is historical data available for backtesting?
Yes: /historical/events, /historical/odds, /historical/closing-lines (paid; up to 10 leagues and 366 days per call) and /odds/movements.
How does the arbitrage endpoint work?
Pass your bookmakers to GET /arbitrage-bets; it returns opportunities whose legs are all within them, sorted by profitMargin, net of exchange fees and respecting reported stake limits. Pre-match only, refreshed every few seconds.
Can I use the data commercially?
You can display it in your own site, app or tool, including paid products; reselling or redistributing the raw feed needs an enterprise agreement.
Can I change bookmakers later?
Yes. Pick them in the dashboard and swap later with the same key, or use PUT /bookmakers/selected/select.
Are prediction markets supported?
Yes, including Polymarket and Kalshi; /mappings links prices to Polymarket conditionId/CLOB token ids or Kalshi tickers (paid plans).
Does it work with AI assistants?
Yes. The official MCP server (npm odds-api-mcp-server) gives Claude, Codex and Cursor 25 tools; docs also ship llms.txt, llms-full.txt and an OpenAPI spec.
Can I pay with crypto?
Yes. Choose Crypto at checkout: BTC, ETH, USDC, TRX, SOL, LTC and more (10+ coins) via CoinGate; renewals arrive as invoices with a payment link.
How is the API key passed?
As the apiKey query parameter. The docs advise keeping it in environment variables and calling from a backend only.
What if I hit 429?
429 means rate-limited. Every response carries x-ratelimit-limit / remaining / reset headers; back off exponentially and use /odds/multi (10 events = 1 request).
Popular topics
Common searches, grouped: the first two groups jump to the matching section on this page; the last goes to official odds-api.io pages.
By need
By strategy
Official pages
Partner program
The odds-api.io partner program pays 30% lifetime recurring commission; referred customers get 30% off their first 3 months; 90-day cookie; paid monthly via Dub by bank transfer or USDC.
Get every bookmaker's odds from one API
From £49/month; pick your bookmakers in the dashboard after subscribing.
Get your API key →Sources
Sources for every number on this page (accessed 2026-11-02):
- Homepage: https://odds-api.io/
- Pricing: https://odds-api.io/pricing
- Bookmakers: https://odds-api.io/sportsbooks
- Bet365 page: https://odds-api.io/sportsbooks/bet365
- Partner program: https://odds-api.io/partners
- Docs: https://docs.odds-api.io/
- Quickstart: https://docs.odds-api.io/quickstart
- SDK guide: https://docs.odds-api.io/guides/sdks
- WebSocket guide: https://docs.odds-api.io/guides/websockets
- AI setup guide: https://docs.odds-api.io/ai-vibe-coding
- Changelog: https://docs.odds-api.io/changelog
- llms-full.txt: https://docs.odds-api.io/llms-full.txt
- The Odds API homepage (comparison): https://the-odds-api.com/