One API call returns pre-computed arbitrage opportunities with stake allocation, profit percentage, and staleness flags. Pinnacle-anchored. Refreshed every 30 seconds.
50
Sportsbooks scanned
30s
Refresh cycle
0.5–3%
Typical edge range
{
"sport_key": "basketball_nba",
"event": "Lakers vs Celtics",
"market": "h2h",
"profit_pct": 1.8,
"likely_stale": false,
"legs": [
{
"outcome": "Lakers",
"bookmaker": "draftkings",
"price": +155,
"stake_pct": 39.2
},
{
"outcome": "Celtics",
"bookmaker": "pinnacle",
"price": -148,
"stake_pct": 60.8
}
],
"detected_at": "2026-04-30T02:14:07Z",
"age_seconds": 12
}
01
Every 30 seconds, odds from DraftKings, FanDuel, BetMGM, Pinnacle, Betfair, and 45 other books are pulled, normalized, and compared pairwise across all outcomes.
02
When combined implied probability across books drops below 100%, the arb is flagged.
Stake allocation and profit percentage are pre-calculated. Arbs above 5% are
flagged as likely_stale — almost always a book error.
03
Pull GET /intelligence/arbitrage?sport_key=basketball_nba
and receive ready-to-execute opportunities with book, price, and stake per leg.
No calculation required on your end.
Three lines to detect arbitrage. No odds math required.
import requests
response = requests.get(
"https://api.theoddsapi.com/v4/intelligence/arbitrage",
headers={"x-api-key": "YOUR_KEY"},
params={"sport_key": "basketball_nba"}
)
arbs = response.json()["data"]
for arb in arbs:
if not arb["likely_stale"]:
print(f"{arb['event']} — {arb['profit_pct']}% edge")
for leg in arb["legs"]:
print(f" {leg['bookmaker']}: {leg['outcome']} @ {leg['price']} — stake {leg['stake_pct']}%")
const res = await fetch(
"https://api.theoddsapi.com/v4/intelligence/arbitrage?sport_key=basketball_nba",
{ headers: { "x-api-key": "YOUR_KEY" } }
);
const { data: arbs } = await res.json();
arbs
.filter(a => !a.likely_stale)
.forEach(a => console.log(`${a.event} — ${a.profit_pct}% profit`));
| Manual (Browser Tabs) | TheOddsAPI | |
|---|---|---|
| Books scanned | 3–5 (open tabs) | 50 simultaneously |
| Time per scan | 5–10 minutes | 30 seconds (continuous) |
| Stake calculation | Spreadsheet / mental math | Pre-computed per leg |
| Stale detection | None — you eat the void | likely_stale flag on 5%+ arbs |
| Sports coverage | 1 sport at a time | 24 sports, all markets |
| Sharp anchor | None — comparing retail to retail | Pinnacle baseline included |
Not every price disagreement is a real arbitrage. The difference between 1.8% profit and a voided bet depends on detection quality.
likely_stale: true automaticallyPinnacle accepts unlimited action at under 2% margin. Their closing line is the most efficient price in the market. When a soft book disagrees with Pinnacle, that disagreement is signal — not noise.
Example: NFL Week 8 — Chiefs vs Ravens
Pinnacle
Chiefs -148
Sharp line (baseline)
DraftKings
Chiefs -155
7pt gap — soft book lagging
FanDuel
Chiefs -150
2pt gap — already adjusted
The DraftKings line is 7 points off Pinnacle. On the other side, if Ravens are +160 on another book while Pinnacle has them at +140, that's a cross-book arbitrage candidate. TheOddsAPI detects these automatically across all 50 books.
Intelligence endpoints — including arbitrage — run on every sport the scheduler refreshes. No hardcoded sport list.
NBA
h2h, spreads, totals
NFL
h2h, spreads, totals
MLB
h2h, spreads, totals
NHL
h2h, spreads, totals
EPL
h2h, spreads, totals
La Liga
h2h, spreads, totals
Champions League
h2h, spreads, totals
UFC / MMA
h2h
Bundesliga
h2h, spreads, totals
Serie A
h2h, spreads, totals
Tennis
h2h
+ 13 more
All markets
Arbitrage is not risk-free in practice. Knowing the limits protects your capital.
Soft sportsbooks (DraftKings, FanDuel, Caesars) limit winning accounts. Professional arbers rotate books, size bets below detection thresholds, and diversify across sports to extend account lifetime.
A 30-second refresh means you see opportunities within 30 seconds of detection. The window may close before you execute. Latency matters — build your execution pipeline to act within seconds of receiving the signal.
Books reserve the right to void bets on obvious pricing errors.
Arbs above 5% profit are almost always errors. The likely_stale
flag exists to protect you from these — filter them out.
Free tier includes 25 requests/day across NBA and MLB. Pro tier unlocks 24 sports, 50 books, and all intelligence endpoints.