Skip to main content

Free Odds API in 2026: What Is Actually Free

Free Odds API in 2026: What Is Actually Free

If you searched for a free odds API, here is the straight answer for Odds-API.io in 2026: new free API keys are paused. This page explains why, what you can still use for free without a key, and the cheapest way to get real odds data.

Is there a free Odds-API.io key?

Not for new accounts. We paused new free keys on 27 August 2026. Free access was being abused at scale: networks of throwaway accounts on disposable email domains were scraping odds to rebuild competing sites, and that load came out of the capacity paying developers rely on. Free keys created before the pause keep working at 100 requests per hour.

We would rather say that plainly than advertise a free tier and quietly gate it. What follows is what is genuinely free today.

What you can use for free, without a key

Part of the API needs no key at all. It is enough to check whether we cover your sports, bookmakers and markets before you pay anything:

  • GET /v3/sports: all 34 sports we cover, with the slugs every other endpoint uses
  • GET /v3/bookmakers: the full bookmaker list, 415+ books, with an active flag on each
  • GET /v3/markets?sport=football: the exact market names for a sport, their shape and period, and whether each is available pre-match and live
curl 'https://api.odds-api.io/v3/sports'
curl 'https://api.odds-api.io/v3/bookmakers'
curl 'https://api.odds-api.io/v3/markets?sport=football'

A trimmed response from the markets endpoint:

{
  "sport": { "name": "Football", "slug": "football" },
  "markets": [
    { "name": "ML", "shape": "moneyline", "period": "match", "prematch": true, "live": true },
    { "name": "Spread", "shape": "line", "period": "match", "prematch": true, "live": true }
  ]
}

On the site, also free and with no account:

The cheapest way to real odds data

Odds and events need a key. The entry plan is Solo at £49 a month: 2 bookmakers of your choice, 5,000 requests per hour, pre-match and live odds across every sport and market. You can cancel at any time, and paying yearly gets you 2 months free (£490 a year).

Larger plans add bookmakers (Starter 5, Growth 10, Pro 15) at the same 5,000 requests per hour. The WebSocket feed, which pushes every price change instead of polling, is an add-on on any plan. Full details are on the pricing page.

Once you have a key, this is how the API works.

How the API works

Getting odds from the REST API takes three requests: leagues, then events, then odds. One thing worth knowing upfront: Odds-API.io uses a unified event ID system, so the same event ID works across all bookmakers and across both REST and WebSocket. You never have to map or reconcile IDs between sources. For WebSocket, see our docs here https://docs.odds-api.io/guides/websockets

Step 1: Get the league slug from /leagues

curl -X 'GET' \
  'https://api.odds-api.io/v3/leagues?apiKey=YOUR_KEY&sport=football&all=true' \
  -H 'accept: application/json'

This returns a list of all available leagues for that sport. Each one has a slug you'll use in the next step:

[
  {
    "name": "International - FIFA World Cup",
    "slug": "international-fifa-world-cup",
    "eventsCount": 48
  }
]

Step 2: Get events from /events

Pass the league slug to get upcoming events and their IDs:

curl -X 'GET' \
  'https://api.odds-api.io/v3/events?apiKey=YOUR_KEY&sport=football&league=international-fifa-world-cup&status=pending' \
  -H 'accept: application/json'
[
  {
    "id": 66456928,
    "home": "Brazil",
    "away": "Morocco",
    "date": "2026-06-13T22:00:00Z",
    "league": {
      "name": "International - FIFA World Cup",
      "slug": "international-fifa-world-cup"
    },
    "status": "pending"
  }
]

There are four variants of the events endpoint depending on what you need:

  • /events - returns upcoming events, requires a league slug. Accepts a bookmaker parameter so you can filter to only events available at a specific bookmaker
  • /events/live - returns all currently live events, no slug needed
  • /events/search - find events by team name
  • /events/{id} - returns a single event by its ID

Step 3: Get odds from /odds

Use the id from the events response to pull odds for that specific match:

curl -X 'GET' \
  'https://api.odds-api.io/v3/odds?apiKey=YOUR_KEY&eventId=66456928&bookmakers=Bet365' \
  -H 'accept: application/json'

Key parameters:

  • apiKey (required): your API key
  • eventId (required): the numeric ID from the /events response
  • bookmakers (optional): filter to specific bookmakers, e.g. Bet365, DraftKings, Kambi

What the response looks like

Here is a real response from the API, England vs Croatia in the FIFA World Cup 2026, from Bet365:

{
  "id": 66457042,
  "home": "England",
  "away": "Croatia",
  "date": "2026-06-17T20:00:00Z",
  "status": "pending",
  "sport": {
    "name": "Football",
    "slug": "football"
  },
  "league": {
    "name": "International - FIFA World Cup",
    "slug": "international-fifa-world-cup"
  },
  "urls": {
    "Bet365": "https://www.bet365.com/#/AC/B1/C1/D8/E185942637/F3/I1/P32778/H1/"
  },
  "bookmakers": {
    "Bet365": [
      {
        "name": "ML",
        "updatedAt": "2026-06-09T23:19:20.811Z",
        "odds": [{ "home": "1.727", "draw": "3.800", "away": "4.750" }]
      },
      {
        "name": "Spread",
        "updatedAt": "2026-06-07T11:59:56.863Z",
        "odds": [{ "hdp": -0.75, "home": "1.950", "away": "1.900" }]
      },
      {
        "name": "Totals",
        "updatedAt": "2026-06-09T23:32:07.48Z",
        "odds": [{ "hdp": 2.25, "over": "1.900", "under": "1.950" }]
      },
      {
        "name": "Both Teams To Score",
        "updatedAt": "2026-06-10T02:13:11.116Z",
        "odds": [{ "yes": "2.050", "no": "1.700" }]
      },
      {
        "name": "Anytime Goalscorer",
        "updatedAt": "2026-06-12T01:57:57.38Z",
        "odds": [
          { "label": "Harry Kane", "hdp": 0.5, "over": "2.300" },
          { "label": "Bukayo Saka", "hdp": 0.5, "over": "3.500" },
          { "label": "Jude Bellingham", "hdp": 0.5, "over": "4.333" }
        ]
      }
    ]
  }
}

A few things worth noting in that response:

urls.Bet365 is a direct link to that event on Bet365. If you're building an odds comparison tool or alert system, you can send users straight to the right page without any extra lookup.

updatedAt on each market tells you exactly when that line was last captured. For live betting applications, this matters: you can check freshness before displaying odds to a user.

hdp is the handicap value. On the Spread market above, -0.75 means England are giving Croatia a 0.75-goal head start. On Totals, 2.25 is the line for over/under goals. The same field name is used consistently across all handicap markets.

Market depth: this is a single event returning 14+ market types from one bookmaker, including player props (anytime goalscorer for 30+ players), corners, half-time lines, and European handicap at multiple lines. That's the same depth available on the free tier.

Building something with it

Here's a minimal Python script that fetches odds for a specific event and prints the moneyline and totals markets:

import requests

API_KEY = "your_api_key_here"
EVENT_ID = "66457042"  # England vs Croatia, World Cup 2026

url = "https://api.odds-api.io/v3/odds"
params = {
    "apiKey": API_KEY,
    "eventId": EVENT_ID,
    "bookmakers": "Bet365"
}

response = requests.get(url, params=params)
data = response.json()

event_name = f"{data['home']} vs {data['away']}"
print(f"\n{event_name} | {data['league']['name']}\n")

for bookmaker, markets in data["bookmakers"].items():
    print(f"Bookmaker: {bookmaker}")
    for market in markets:
        if market["name"] in ("ML", "Totals"):
            print(f"  {market['name']}: {market['odds']}")

That's all it takes to get structured odds into Python. From there you could:

  • Store results in a database and track line movement over time
  • Compare the same event across multiple bookmakers to spot discrepancies
  • Build a Telegram or Discord bot that alerts you when odds shift on specific markets
  • Power a web dashboard showing live odds for upcoming fixtures
  • Feed data into a model that tracks closing line value

What we cover

Every plan draws on the same feed (full list in the bookmaker directory):

  • 415+ bookmakers globally, including Bet365, DraftKings, William Hill, SingBet, Polymarket and regional books across Europe, Asia and the Americas
  • 34 sports and 12,000+ leagues: football, basketball, tennis, baseball, ice hockey, cricket, esports and more
  • 500+ market types: moneyline, Asian handicap, over/under, correct score, both teams to score, player props, corners, half-time markets and others
  • Pre-match and live odds on every paid plan

Common questions

Is there a free sports betting odds API?

Not from Odds-API.io for new accounts: new free keys have been paused since 27 August 2026. The sports, bookmakers and markets endpoints work without a key, so you can check coverage for free. Real odds start with the Solo plan at £49 a month.

Why did you stop giving out free keys?

Abuse. Throwaway accounts on disposable email domains were scraping odds at scale to rebuild competing sites. Pausing new free keys protects the capacity paying developers use.

Do existing free keys still work?

Yes. Free keys created before the pause keep working at 100 requests per hour.

What is the cheapest paid plan?

Solo: £49 a month, or £490 a year, for 2 bookmakers of your choice, 5,000 requests per hour and pre-match plus live odds on every sport and market. Cancel any time.

Useful resources

Get live and pre-match odds from 450+ bookmakers

OddsNotifier and OddsHub run on the same real-time feed you get with the API.

See what's built with Odds API →