Home › English › Odds-API.io
Sports odds data API · facts checked 2026-11-02

One API for live odds from 450+ bookmakers

Odds-API.io normalises pre-match, live and historical odds from hundreds of sportsbooks, exchanges and prediction markets such as Polymarket and Kalshi into one JSON format, over REST, WebSocket or MCP. Built for odds comparison sites, arbitrage and value-bet tools, backtests and AI assistants.

Plans from £49/month, cancel anytime · 18+ gamble responsibly

450+bookmakers
500+market types
34sports
12,000+leagues
<150msavg. response
99.9%uptime

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)

BookmakerSportsMarketsPre-matchLivePlayer propsTop sports by markets
Bet36516190✓✓✓Football 96 · Esports 31 · Basketball 30
Stake1372✓✓–Esports 36 · Volleyball 19 · Tennis 13
DraftKings1065✓✓✓Basketball 26 · Football 25 · Baseball 24
Unibet1061✓✓✓Football 49 · Ice Hockey 17 · Handball 14
Caesars550✓✓✓Football 24 · Basketball 21 · Am. Football 15
SingBet248✓✓–Football 33 · Basketball 27
Polymarket1546✓✓✓Am. Football 25 · Football 25 · Basketball 23
1xbet1334✓✓–Volleyball 20 · Football 13 · Ice Hockey 11
Betano927✓✓✓Basketball 14 · Football 13 · Ice Hockey 7
BetMGM826✓✓✓Football 20 · Basketball 14 · Am. Football 11
Betfair Exchange1524✓✓–Football 15 · Tennis 7 · Esports 4
FanDuel621✓✓✓Baseball 11 · Basketball 11 · Ice Hockey 11
Kalshi810✓✓✓Football 9 · Am. Football 8 · Baseball 4
William Hill74✓✓✓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

FootballBasketballTennisBaseballAmerican FootballIce HockeyEsportsDartsMMABoxingHandballVolleyballSnookerTable TennisRugbyCricketWaterpoloFutsalBeach VolleyAussie RulesFloorballSquashBeach SoccerLacrosseCurlingPadelBandyGaelic FootballBeach HandballAthleticsBadmintonCross-CountryGolfCycling

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.

EndpointPurposeKey parametersNotes
GET /sportsList sports—No auth
GET /bookmakersBookmakers with status (ok / degraded / down)—No auth
GET /marketsMarket catalogue: names, shape, period, pre-match/livesportNo auth
GET /leaguesLeagues for a sportsport
GET /eventsEvents (defaults to next 14 days)sport, league, status, from, to, limit≤5000, skip, bookmaker
GET /events/liveLive events with score and clocksport
GET /events/searchSearch by team/league (max 10)query (≥3 chars), status
GET /oddsOdds for one eventeventId, bookmakers≤30, markets≤40
GET /odds/multiUp to 10 events in one calleventIds≤10, bookmakers, marketsCounts as 1 request
GET /odds/updatedMarkets changed since a timestamp (delta)since (≤90s old), bookmaker, sport, marketsPolling fallback; WebSocket preferred
GET /odds/summaryBest/average/median/worst and fair price per lineeventId, markets, lines, includeExchangesGrowth plan and above
GET /odds/movementsLine history per market and bookmakereventId, bookmaker, market, marketLinePre-match; fixed set of books
GET /value-betsPrices above fair line with EVbookmaker, sport, league, includeEventDetails
GET /arbitrage-betsArbitrage with optimal stakesbookmakers, sport, league, markets, minProfit, allCombinations, limit≤500Pre-match; net of exchange fees
GET /dropping-oddsMarkets falling fast at sharp bookssport, league(s), markets, timeWindow, sort, minDrop, pagePaid plans
GET /historical/eventsFinished events and resultssport, league, from, to
GET /historical/oddsOdds snapshots for past eventseventId, bookmakers≤30, markets
GET /historical/closing-linesBulk closing linessport, leagues≤10, from, to (≤366 天/days), markets, bookmakersPaid plans
GET /settlementsSettlement records for up to 50 eventseventIds≤50Paid plans
POST /settlements/gradeGrade up to 50 selectionsJSON body: eventId, market, side, hdp, labelPaid plans
GET /mappingsNative id mappings (Polymarket / Kalshi)bookmaker, eventId(s) / marketId(s) / bulkPaid plans
GET /participantsTeams/players; /participants/{id}/logo returns a PNG crestsport, search
PUT /bookmakers/selected/selectSelect bookmakers via APIbookmakersclear: once per 12h
WS /v3/wsReal-time odds, scores and statusmarkets, channels, sport≤10, leagues≤20, eventIds≤50, status, lastSeqPaid 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.

  1. Pick a plan — Choose a plan at odds-api.io/pricing (from £49/month); the API key arrives by email.
  2. Try the no-auth endpoints — Call GET https://api.odds-api.io/v3/sports to list sports; no key needed.
  3. Fetch events — GET /v3/events?apiKey=YOUR_API_KEY&sport=football&limit=10 for upcoming football events.
  4. Fetch odds — GET /v3/odds?apiKey=YOUR_API_KEY&eventId=…&bookmakers=Bet365,Unibet&markets=ML,Spread,Totals.
  5. 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 events

4. 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" price

Further 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

£49/mo
yearly £490
  • 2 bookmakers
  • 5,000 requests/hour
  • Every sport and market
  • Pre-match + live
  • Email support

Starter

£99/mo
yearly £990
  • 5 bookmakers
  • 5,000 requests/hour
  • Every sport and market
  • Pre-match + live
  • Email support
Popular

Growth

£179/mo
yearly £1,790
  • 10 bookmakers
  • 5,000 requests/hour
  • Every sport and market
  • Pre-match + live
  • Priority support

Pro

£229/mo
yearly £2,290
  • 15 bookmakers
  • 5,000 requests/hour
  • Every sport and market
  • Pre-match + live
  • Dedicated support
ItemPrice / detail
EnterpriseCustom: choose bookmaker count, unlimited requests, dedicated infrastructure, custom feeds and SLAs
WebSocket add-onThe plan price again (2× total), e.g. +£49/mo on Solo
More requests10,000/h +£139/mo · 20,000/h +£229/mo · 30,000/h +£309/mo
CurrenciesShown in local currency incl. GBP, USD, EUR, BRL, CNY, JPY, KRW
PaymentVisa, Mastercard, Amex, Apple Pay, Google Pay, PayPal; crypto via CoinGate (10+ coins; annual is card only)
Free keysNew free keys paused; existing ones 100 requests/hour, 500/day

https://odds-api.io/pricing

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.

AspectOwn scrapersSingle-book APIOdds-API.io
IntegrationBuild and maintain per bookApply and integrate per bookOne key, one JSON format
Event/market matchingYou build itN/A (one book)Matched across books
CoverageDepends on effortThat book only450+ incl. exchanges and prediction markets
LatencyDepends on pollingVariesWebSocket push in milliseconds
HistoryYou collect itUsually noneHistorical odds, closing lines, movements
CostServers and staffVariesFrom £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.

ItemOdds-API.io (odds-api.io)The Odds API (the-odds-api.com)
Billing modelPlans with a flat 5,000 requests/hourMonthly credit allowance
Entry priceSolo £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+ leagues100+ sports, 100+ bookmakers
StreamingWebSocket (paid add-on)Not mentioned on the homepage
OtherMCP server, Python/TS SDKs, arbitrage/value endpointsGoogle 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).

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.

https://odds-api.io/partners

Get every bookmaker's odds from one API

From £49/month; pick your bookmakers in the dashboard after subscribing.

Get your API key →