API Documentation

Every endpoint for the SportsbookOdds sports odds API — live odds, +EV, arbitrage and sharp fair lines. The Odds API v4 compatible.

Getting started

The SportsbookOdds API serves real-time odds from 25+ sportsbooks plus pre-computed +EV, arbitrage and sharp fair lines. It's drop-in compatible with The Odds API v4 — swap the host, keep your code.

Base URL
https://sportsbookodds.p.rapidapi.com
Host header
sportsbookodds.p.rapidapi.com
Format
JSON over HTTPS
Auth
RapidAPI key (header)
Your first request
curl "https://sportsbookodds.p.rapidapi.com/api/v4/sports/baseball_mlb/odds" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: sportsbookodds.p.rapidapi.com"
No key yet? Grab a free one on RapidAPI — no card required.

Authentication

Every request must include your RapidAPI key and the host, sent as headers:

X-RapidAPI-Key:  YOUR_KEY
X-RapidAPI-Host: sportsbookodds.p.rapidapi.com

Keep your key server-side. Requests without a valid key return 401/403.

Conventions

  • Decimal odds by default (oddsFormat=american for American).
  • Markets: h2h (moneyline), spreads, totals.
  • Sport keys follow The Odds API scheme: baseball_mlb, basketball_nba, americanfootball_nfl, soccer_epl, etc. Get the full list from /api/v4/sports.
  • Times are ISO 8601 UTC unless dateFormat=unix.

Core odds

GET/api/v4/sports

List every sport with active markets right now.

Parameters
NameInTypeDescription
allquerybooleanInclude out-of-season sports. Default false.
Request
curl "https://sportsbookodds.p.rapidapi.com/api/v4/sports" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: sportsbookodds.p.rapidapi.com"
Response 200
[
  { "key": "baseball_mlb", "group": "Baseball", "title": "MLB", "active": true, "has_outrights": false },
  { "key": "basketball_nba", "group": "Basketball", "title": "NBA", "active": true }
]
GET/api/v4/sports/{sport}/odds

All odds for a sport across every book. Drop-in compatible with The Odds API v4.

Parameters
NameInTypeDescription
sport requiredpathstringSport key, e.g. baseball_mlb.
marketsquerystringComma-separated: h2h, spreads, totals. Default h2h.
regionsquerystringus, uk, eu, au. Default us.
bookmakersquerystringComma-separated book keys to filter, e.g. draftkings,fanduel.
oddsFormatquerystringdecimal or american. Default decimal.
dateFormatquerystringiso or unix. Default iso.
Request
curl "https://sportsbookodds.p.rapidapi.com/api/v4/sports/{sport}/odds?markets=h2h,totals&oddsFormat=decimal" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: sportsbookodds.p.rapidapi.com"
Response 200
[
  {
    "id": "a1b2c3",
    "sport_key": "baseball_mlb",
    "commence_time": "2026-07-18T23:10:00Z",
    "home_team": "Los Angeles Dodgers",
    "away_team": "San Francisco Giants",
    "bookmakers": [
      { "key": "pinnacle", "title": "Pinnacle", "markets": [
        { "key": "h2h", "outcomes": [
          { "name": "Los Angeles Dodgers", "price": 1.87 },
          { "name": "San Francisco Giants", "price": 2.05 } ] } ] }
    ]
  }
]
GET/api/v4/sports/{sport}/events

Upcoming events for a sport (no odds — lighter payload).

Parameters
NameInTypeDescription
sport requiredpathstringSport key.
Request
curl "https://sportsbookodds.p.rapidapi.com/api/v4/sports/{sport}/events" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: sportsbookodds.p.rapidapi.com"
Response 200
[
  { "id": "a1b2c3", "sport_key": "baseball_mlb", "commence_time": "2026-07-18T23:10:00Z",
    "home_team": "Los Angeles Dodgers", "away_team": "San Francisco Giants" }
]
GET/api/v4/sports/{sport}/events/{eventId}/markets

Every market and book for a single event.

Parameters
NameInTypeDescription
sport requiredpathstringSport key.
eventId requiredpathstringEvent id from /events.
Request
curl "https://sportsbookodds.p.rapidapi.com/api/v4/sports/{sport}/events/{eventId}/markets" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: sportsbookodds.p.rapidapi.com"
Response 200
{
  "id": "a1b2c3", "home_team": "Los Angeles Dodgers", "away_team": "San Francisco Giants",
  "bookmakers": [ { "key": "draftkings", "markets": [
    { "key": "h2h", "outcomes": [ { "name": "Los Angeles Dodgers", "price": 1.83 } ] },
    { "key": "totals", "outcomes": [ { "name": "Over", "price": 1.95, "point": 8.5 } ] } ] } ]
}
GET/api/v4/historical/sports/{sport}/odds

Historical odds snapshots for backtesting and line-movement analysis.

Parameters
NameInTypeDescription
sport requiredpathstringSport key.
datequerystringISO timestamp of the snapshot to return.
Request
curl "https://sportsbookodds.p.rapidapi.com/api/v4/historical/sports/{sport}/odds?date=2026-07-15T20:00:00Z" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: sportsbookodds.p.rapidapi.com"
Response 200
{
  "timestamp": "2026-07-15T20:00:00Z",
  "data": [ { "id": "x1", "home_team": "...", "bookmakers": [ ] } ]
}

Computed edges

GET/api/ev

Pre-computed +EV bets: every price better than the no-vig consensus fair line, ranked by edge.

Parameters
NameInTypeDescription
limitqueryintegerMax results. Default 50.
Request
curl "https://sportsbookodds.p.rapidapi.com/api/ev?limit=10" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: sportsbookodds.p.rapidapi.com"
Response 200
{
  "generated_at": "2026-07-18T23:04:11Z",
  "opps": [
    {
      "home": "Los Angeles Dodgers", "away": "San Francisco Giants",
      "market": "h2h", "outcome": "home", "point": null,
      "book": "draftkings", "price": 2.12,
      "fair_price": 1.98, "fair_prob": 0.505,
      "ev_pct": 0.041, "kelly_frac": 0.021
    }
  ]
}
GET/api/v4/arb

Cross-book arbitrage opportunities with the exact stake split per leg.

Parameters
NameInTypeDescription
sportquerystringFilter by sport key.
marketsquerystringComma-separated market filter.
min_edge_pctquerynumberMinimum edge % to include. Default 0.
limitqueryintegerMax results. Default 100.
Request
curl "https://sportsbookodds.p.rapidapi.com/api/v4/arb?min_edge_pct=1" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: sportsbookodds.p.rapidapi.com"
Response 200
{
  "generated_at": "2026-07-18T23:04:11Z",
  "count": 3,
  "arbs": [
    {
      "home": "New York Yankees", "away": "Boston Red Sox",
      "market": "totals", "point": 8.5, "arb_edge_pct": 2.4,
      "legs": [
        { "book": "betmgm",  "outcome": "over",  "price": 2.05, "stake_pct": 49.4 },
        { "book": "fanduel", "outcome": "under", "price": 2.10, "stake_pct": 50.6 }
      ]
    }
  ]
}
GET/api/v4/crypto-arb

Arbitrage between crypto books (Cloudbet) and fiat retail, where lines diverge most.

Parameters
NameInTypeDescription
min_edge_pctquerynumberMinimum edge %. Default 0.
limitqueryintegerMax results.
Request
curl "https://sportsbookodds.p.rapidapi.com/api/v4/crypto-arb" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: sportsbookodds.p.rapidapi.com"
Response 200
{
  "count": 1,
  "arbs": [ { "home": "...", "away": "...", "arb_edge_pct": 3.1, "is_crypto_arb": true, "legs": [ ] } ]
}
GET/api/v4/sharp-consensus/{eventId}

The sharp-weighted, no-vig fair line for an event — the market's true probability.

Parameters
NameInTypeDescription
eventId requiredpathstringEvent id.
Request
curl "https://sportsbookodds.p.rapidapi.com/api/v4/sharp-consensus/{eventId}" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: sportsbookodds.p.rapidapi.com"
Response 200
{
  "home": "Los Angeles Dodgers", "away": "San Francisco Giants",
  "fair_prob": { "home": 0.531, "away": 0.469 },
  "fair_odds": { "home": 1.883, "away": 2.132 },
  "sharp_books": ["pinnacle", "sbobet", "smarkets"],
  "vig_removed": true
}
GET/api/v4/efficiency-ranking

Events ranked by how far apart the books price them — where the softest lines are.

Parameters
NameInTypeDescription
sportquerystringFilter by sport key.
min_booksqueryintegerMin books quoting. Default 3.
limitqueryintegerMax results. Default 20.
Request
curl "https://sportsbookodds.p.rapidapi.com/api/v4/efficiency-ranking" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: sportsbookodds.p.rapidapi.com"
Response 200
{
  "ranking": [
    { "home": "...", "away": "...", "spread_pct": 6.2, "books": 8, "sport": "baseball_mlb" }
  ]
}
GET/api/books/status

Live per-book freshness and latency so you never trade on a stale line.

Request
curl "https://sportsbookodds.p.rapidapi.com/api/books/status" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: sportsbookodds.p.rapidapi.com"
Response 200
{
  "books": [ { "book": "pinnacle", "ok": true, "quotes": 1240, "age_sec": 41 } ]
}

Public track record

GET/api/v4/track

Our auto-graded paper track record: record, ROI, closing-line value and a Monte-Carlo skill-vs-luck breakdown.

Request
curl "https://sportsbookodds.p.rapidapi.com/api/v4/track" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: sportsbookodds.p.rapidapi.com"
Response 200
{
  "generated_at": "2026-07-18T23:00:00Z",
  "stats": {
    "graded": 810, "wins": 410, "losses": 400,
    "roi": 0.0545, "clv_beat_pct": 71.6,
    "clv_buckets": [ { "bucket": "\u2265 +5%", "bets": 329, "roi": 0.114 } ],
    "monte_carlo": { "percentile": 55, "pct_losing_months": 10.4, "sims": 10000 }
  }
}
GET/api/v4/track/ledger

The bet-by-bet paper ledger — losers included, CLV on every bet.

Parameters
NameInTypeDescription
statusquerystringFilter: won | lost | void | open.
sportquerystringFilter by sport key.
limitqueryintegerPage size, max 500. Default 100.
offsetqueryintegerPage offset. Default 0.
Request
curl "https://sportsbookodds.p.rapidapi.com/api/v4/track/ledger?status=won&limit=50" \
  -H "X-RapidAPI-Key: YOUR_KEY" \
  -H "X-RapidAPI-Host: sportsbookodds.p.rapidapi.com"
Response 200
{
  "count": 50, "total": 410,
  "bets": [
    { "placed_at": "2026-07-15T18:10:00Z", "sport": "baseball_mlb",
      "home": "...", "away": "...", "market": "h2h", "outcome": "home",
      "book": "draftkings", "price": 2.12, "closing_price": 2.00,
      "clv_pct": 0.06, "status": "won", "pnl": 44.0 }
  ]
}

Status codes

CodeMeaning
200OK
400Bad request — invalid parameter
401 / 403Missing or invalid API key
429Rate limit / quota exceeded
5xxTemporary server error — retry with backoff

Rate limits & plans

Quotas and rate limits are set per plan on RapidAPI. The Free tier lets you try every endpoint; Pro / Ultra / Mega raise limits and unlock the computed-edge endpoints as you scale.

Each response includes the usual RapidAPI quota headers so you can track usage in code.
Get your API key →