Migrating from the-odds-api in 5 minutes

ParlayAPI is wire-compatible with the-odds-api v4 on the core /sports and /sports/{key}/odds surface. You change one base URL and your code keeps working for the shared endpoints. You also gain 22 additional bookmakers (Pinnacle, the exchange Novig, prediction markets Kalshi and Polymarket and Robinhood, DFS pick'em PrizePicks / Underdog / Sleeper, plus French and European books). Starter tier is 6x cheaper per credit; see the pricing table below for the honest comparison.

The whole migration: one URL change

If you're using the-odds-api.com directly, swap the base URL to parlay-api.com. That's it.

# Python (requests)
- BASE_URL = "https://api.the-odds-api.com/v4"
+ BASE_URL = "https://parlay-api.com/v1"

r = requests.get(
    f"{BASE_URL}/sports/baseball_mlb/odds",
    params={"markets": "h2h", "regions": "us"},
    headers={"X-API-KEY": "YOUR_PARLAYAPI_KEY"},
)

If you're using their official the-odds-api SDK, point it at our base URL via the SDK's config option, or migrate to plain requests / fetch. Most users do the latter; the response is identical.

// JavaScript (fetch)
- const BASE = "https://api.the-odds-api.com/v4";
+ const BASE = "https://parlay-api.com/v1";

const events = await fetch(
  `${BASE}/sports/baseball_mlb/odds?markets=h2h&regions=us`,
  { headers: { "X-API-KEY": YOUR_KEY } }
).then(r => r.json());

Endpoint compatibility

the-odds-apiParlayAPICompat
/v4/sports/v1/sportsIdentical
/v4/sports/{key}/odds/v1/sports/{key}/oddsIdentical + more bookmakers + prop markets
/v4/sports/{key}/events/v1/sports/{key}/eventsIdentical
/v4/historical/sports/{key}/odds/v1/historical/sports/{key}/oddsSame shape + deeper history (NFL 2005+, NBA 2017+). One difference: last_update and commence_time are nullable here and null on most rows. See Response timestamps below.
(none)/v1/sports/{key}/propsPlayer props from DK, FanDuel, BetMGM, Caesars, PrizePicks, Underdog, Sleeper, Novig, plus DFS-pick'em books
(none)/v1/ws/odds/{key}WebSocket streaming (push updates, no polling). Sport key is part of the path.
(none)/v1/sse/odds/{key}Server-Sent Events streaming (HTTP/2 friendly, EventSource-compatible)
(none)/v1/sports/{key}/compareSide-by-side bookmaker prices with the best line highlighted per outcome. Also reachable at /v1/sports/{key}/best-line.

Sport keys: 100% identical for US majors

You don't need to change a single sport_key string for these:

We add 60+ sport keys the-odds-api doesn't carry: French Ligue 2, Brazilian Serie B, Korean KBO baseball, Japanese NPB, Polish Ekstraklasa, Swiss Super League, Czech table tennis, esports leagues (CS2, LoL, Valorant, Dota 2), and more. Full list at /v1/sports?all=true.

Bookmaker keys

The authoritative list is GET /v1/bookmakers. Below is what's live today. If the key isn't in /v1/bookmakers, it isn't ingested; we do not maintain placeholder entries.

Shared with the-odds-api (same key string)

draftkings, fanduel, betmgm, caesars, betrivers, bovada, pinnacle, fanatics, bet365.

Some books the-odds-api lists (PointsBet US, William Hill US, Wynn, Unibet US) are not in our ingest. We avoid maintaining a dead key just for parity; if you depended on those, check the corresponding feed below or contact support.

Additional books we carry that the-odds-api does not

Pricing comparison

The honest per-credit math. Read the rightmost column. Bigger plans on the-odds-api are cheaper per credit than our equivalent tier; smaller plans (Free, Starter, Pro) are dramatically cheaper on ParlayAPI. Pick the row that matches your monthly volume.

Tierthe-odds-apiParlayAPIPer-credit comparison
Free500 credits/mo1,000 credits/mo2x more credits, same $0
Starter$30/mo (20K) = $1.50 per 1K$5/mo (20K) = $0.25 per 1K6x cheaper per credit
Pro$59/mo (100K) = $0.59 per 1K$20/mo (100K) = $0.20 per 1K3x cheaper per credit
Business$119/mo (5M) = $0.024 per 1K$40/mo (1M) = $0.040 per 1KTotal bill is lower on our plan but you get 5x fewer credits. If you need 5M credits/mo on ParlayAPI, jump to Scale ($200/mo for 50M = $0.004 per 1K, 6x cheaper than their Business per credit).
EnterpriseContact salesScale: $200/mo (50M)Self-serve; no sales call required

Credit costs per call vary by endpoint (1 credit for most reads, 5 credits for /v1/sports/{key}/compare and /v1/clv). Hit /v1/usage on your account to see your actual burn rate before migrating.

Hit your credit limit mid-Sunday?

Every September the same thing happens: an app that ran fine all summer dies during the 1 o'clock NFL window with a quota error. The cause is credit math, not traffic: a credit is not a request. Per the-odds-api's own usage docs (read 2026-08-25), one call to their /odds endpoint costs [markets specified] × [regions specified] credits, and player props are only reachable through per-event calls billed on the markets each event returns.

The worked example

Polling markets=h2h,spreads,totals&regions=us is 3 × 1 = 3 credits per poll, not 1. Add player props on a typical 13-game Sunday main slate — 13 per-event calls, each returning ~5 prop markets in one region — and each full sweep of the slate costs ~65 credits.

# One NFL Sunday, ~1:00 pm to ~11:30 pm ET (630 minutes), on the-odds-api
Game lines every 60s:    630 polls  x 3 credits   =  1,890 credits
Props every 2 minutes:   315 sweeps x ~65 credits = ~20,475 credits
                                            total   ~22,365 credits
# Their 20,000-credit month is gone before Sunday Night Football ends.

Their 20K plan size per their pricing page (read 2026-08-25). In fairness: their per-event billing counts only markets actually returned, so a thin slate costs less than this worst case.

The same Sunday here

What you pollthe-odds-apiParlayAPI
Game lines (h2h,spreads,totals, one region), one poll3 credits (3×1)3 credits (3×1) — same formula, no trick
Full-slate player props, one sweep~65 credits (13 per-event calls × ~5 markets)3 credits flat — one /v1/sports/americanfootball_nfl/props call returns every event, book, and market
Game lines every 60s, all Sunday~1,890 credits~1,890 credits
Props every 2 minutes, all Sunday~20,475 credits945 credits
The whole Sunday above~22,365 credits2,835 credits — roughly 8x less, entirely from the flat-rate props endpoint

What those credit allowances cost is on /pricing — and note the game-line formula is identical here, so if props aren't your problem, migrating changes what a credit costs you, not how many each poll burns. Historical odds are 10 × markets × regions on both APIs. Every paid response here carries an x-requests-last header reporting the exact credit charge for that call, and streaming endpoints (/v1/ws, /v1/sse) can replace polling outright on tiers that include them — see /pricing.

The free fix first: if you're only polling game lines, you may not need to migrate at all. Cache responses for 30–60 seconds, drop to the markets and single region you actually read, and poll pre-game slates less often than live ones — that halves your burn on any credit-metered API, theirs and ours alike.

The 60-second migration checklist

  1. Sign up — key issued in ~30 seconds, no card, 1,000 free credits to validate with.
  2. Swap the base URL: https://api.the-odds-api.com/v4https://parlay-api.com/v1. Same X-API-KEY header, your new key.
  3. Keep your sport keys and markets/regions params — identical for US majors (americanfootball_nfl et al.).
  4. Delete the per-event props loop; replace it with one GET /v1/sports/americanfootball_nfl/props (flat 3 credits).
  5. Watch x-requests-last on each response and /v1/usage for the running total — no surprise math.
  6. Run both feeds through one slate, diff the responses, then cut over.
Down right now, mid-slate? Migrating under pressure is how bugs ship. Swap the URL on your hottest endpoint only, leave everything else on the old feed, and do the full diff on Monday.

What's actually different (the honest part)

Things you gain

Things to know

Migration safety: Run both APIs side-by-side. Diff the responses for the matchups you care about. Switch over only when you're satisfied. Email [email protected] if you want a 24-hour Pro trial to validate.

Common gotchas

Authentication header

Both APIs accept X-API-KEY as a header. We also accept ?apiKey= as a query param for compatibility with code that uses the-odds-api's older docs. Either works.

Rate limits

None on paid tiers. Burst at whatever rate your client wants; you're metered on monthly credits, not per-second throughput. Free trial keeps a 60 req/s cap purely for anti-abuse during evaluation. If you need >10,000 req/s sustained from a single key (almost always a misconfigured retry loop), contact support to shard across keys.

Response timestamps

Same commence_time ISO-8601 UTC format. Same last_update per bookmaker on the live odds endpoints. No code change needed there.

One exception, on /v1/historical/sports/{key}/odds only: last_update and commence_time are nullable, and are null on most rows today. We serve the archive row's real capture time where we have one and null where we do not, rather than a placeholder; last_update_source tells you which (archive_snapshot, unavailable, or error_no_capture_column). Measured 2026-08-14: 68 of 397 bookmaker blocks stamped on a representative MLB date, and none on blocks carrying a moneyline. Guard both fields before parsing them on the historical route.

Bookmaker filter

Same ?bookmakers= comma-separated key list. We support all keys the-odds-api does plus the additional ones above.

Ready?

Sign up gets you an API key in 30 seconds. No credit card. Free tier supports real testing volume (1,000 credits/month).