Betting odds API

Current point spread, moneyline and total for one game, plus a history of line changes recorded each time the line moved. Data is aggregated from public sources and is typically 20-30 seconds behind live play (about 1 second after our source). There is no SLA.

Paths and parameters

GET/api/v1/sports/{sport}/leagues/{league}/events/{eventId}/odds

Get current odds. Current spread, moneyline and total from a single source book. `data` is null (with a `message`) when no odds are available.

  • sport (path, required): Sport slug: football, basketball, baseball, hockey, soccer.
  • league (path, required): League slug, e.g. nfl, college-football, nba, mens-college-basketball, mlb, nhl, eng.1, usa.1.
  • eventId (path, required): Event (game) id, as returned by the events endpoints.

GET/api/v1/sports/{sport}/leagues/{league}/events/{eventId}/odds/history

Get odds history. Snapshots recorded each time the line changed, newest first.

  • sport (path, required): Sport slug: football, basketball, baseball, hockey, soccer.
  • league (path, required): League slug, e.g. nfl, college-football, nba, mens-college-basketball, mlb, nhl, eng.1, usa.1.
  • eventId (path, required): Event (game) id, as returned by the events endpoints.
  • limit (query): Maximum snapshots to return (default 100).

Live example

Request

curl -H "Authorization: Bearer $RSA_API_KEY" \
  "https://www.realtimesportsapi.com/api/v1/sports/football/leagues/nfl/events/401872979/odds"

Response captured from live data at 2026-10-05 02:07 UTC (refreshed every few minutes). Long arrays are trimmed; meta.rateLimit values are illustrative for a Free key. Line history for this game has 2+ recorded snapshots at /odds/history.

Response

{
  "success": true,
  "data": {
    "spread": {
      "line": -1.5,
      "home": -115,
      "away": -105
    },
    "moneyline": {
      "home": -130,
      "away": 110
    },
    "overUnder": {
      "total": 47.5,
      "over": -115,
      "under": -105
    },
    "provider": "DraftKings",
    "updatedAt": "2026-10-05T02:07:21.458Z"
  }
}

Fields

FieldTypeNotes
providerstringName of the single source book.
spreadobject
moneylineobject
overUnderobject
updatedAtstring

League support

Checked against live data on 2026-10-04: 15 available, 0 limited, 14 seasonal or not verified, 0 not available.

Available
NBA

Preseason or off-season when checked; no odds were returned for the games available.

Seasonal / not verified
Men's College Basketball

Preseason or off-season when checked; no odds were returned for the games available.

Seasonal / not verified
Available
Available
Available
U.S. Open Cup

No upcoming games to check when verified.

Not verified
Available
FA Cup

No upcoming games to check when verified.

Not verified
Available
Available
Available
FIFA World Cup

No upcoming games to check when verified.

Not verified
Women's Super League

No upcoming games to check when verified.

Not verified
Women's Champions League

No upcoming games to check when verified.

Not verified
English League Cup

No upcoming games to check when verified.

Not verified
Available
Available
NWSL

No upcoming games to check when verified.

Not verified
World Cup Qualifying (UEFA)

No upcoming games to check when verified.

Not verified
World Cup Qualifying (CONMEBOL)

No upcoming games to check when verified.

Not verified
World Cup Qualifying (AFC)

No upcoming games to check when verified.

Not verified
World Cup Qualifying (CAF)

No upcoming games to check when verified.

Not verified
World Cup Qualifying (CONCACAF)

No upcoming games to check when verified.

Not verified

Code samples

curl

curl -H "Authorization: Bearer $RSA_API_KEY" \
  "https://www.realtimesportsapi.com/api/v1/sports/football/leagues/nfl/events/401872979/odds"

JavaScript (fetch)

const res = await fetch("https://www.realtimesportsapi.com/api/v1/sports/football/leagues/nfl/events/401872979/odds", {
  headers: { Authorization: `Bearer ${process.env.RSA_API_KEY}` }
});
const { success, data, meta } = await res.json();
console.log(data, meta.rateLimit);

Python (requests)

import os, requests

res = requests.get(
    "https://www.realtimesportsapi.com/api/v1/sports/football/leagues/nfl/events/401872979/odds",
    headers={"Authorization": f"Bearer {os.environ['RSA_API_KEY']}"},
    timeout=10,
)
body = res.json()
print(body["data"])

MCP prompt (Claude, Cursor, ChatGPT)

Using the Realtime Sports MCP server (https://www.realtimesportsapi.com/api/mcp), call get_odds with sport "football" and league "nfl" and pick an upcoming game from get_events and show the spread, moneyline and total for NFL.

Connect the hosted MCP server first: setup guide. Each tool call counts as one API call.

Rate limits and pricing

PlanPriceCallsRateWebSocketWebhooks
Free$0125/mo (1,000 first 30 days)1/s500 msgs/moNo
Starter$29/mo ($290/yr)10,000/mo5/sShares monthly poolShares monthly pool
Growth$49/mo ($490/yr)25,000/mo10/sShares monthly poolShares monthly pool
Pro$99/mo ($990/yr)50,000/mo20/s100,000 msgs/mo25,000/mo
Scale$299/mo ($2,990/yr)500,000/mo100/s500,000 msgs/mo100,000/mo

Every successful REST call counts as one call. Over the limit you get HTTP 429 with a Retry-After header. No SLA. Full pricing.

FAQ

What does the odds endpoint return?
Current point spread, moneyline and total for one game, plus a history of line changes recorded each time the line moved.
Which leagues support odds?
Verified on 2026-10-04: NFL, College Football, MLB, NHL, MLS, Premier League, Champions League, Europa League, LaLiga, Serie A, Liga MX, Conference League, Bundesliga, Ligue 1, EFL Championship. Seasonal or not verified: NBA, Men's College Basketball, U.S. Open Cup, FA Cup, FIFA World Cup, Women's Super League, Women's Champions League, English League Cup, NWSL, World Cup Qualifying (UEFA), World Cup Qualifying (CONMEBOL), World Cup Qualifying (AFC), World Cup Qualifying (CAF), World Cup Qualifying (CONCACAF).
Is it free to try?
Yes. The Free plan is $0 with 125 calls per month (1,000 in the first 30 days) at 1 request per second, no card required. Every successful call counts as one call.
How fresh is the data?
Data is aggregated from public sources and is typically 20-30 seconds behind live play (about 1 second after our source). There is no SLA.
Can I get updates pushed instead of polling?
Webhooks are included on every paid plan (Starter, Growth, Pro, Scale). WebSocket is included on paid plans, and the Free plan gets a 500-message monthly preview.