Skip to Content
API ReferenceBest Odds

Best Odds

Get the best available odds for each selection across all sportsbooks. This endpoint compares odds from every book available on your tier and returns the most favorable line for each selection, along with consensus odds and market hold calculations.

GET /api/v1/odds/best

Authentication

Requires API key. Available to all tiers.

Best Odds is available on all tiers, including Free. The sportsbooks compared depend on your tier’s book access (Free compares DraftKings and FanDuel; Pro+ includes Pinnacle).

Query Parameters

ParameterTypeDefaultDescription
sportstringallFilter by sport(s), comma-separated (e.g., basketball, football)
leaguestringallFilter by league(s), comma-separated (e.g., nba, nfl)
marketstringallFilter by market type(s), comma-separated (e.g., moneyline, spread, total)
eventstringFilter by event ID(s), comma-separated
livebooleantrue = live only, false = prematch only, omit = both
min_oddsnumberMinimum American odds filter
max_oddsnumberMaximum American odds filter
limitinteger50Max results per page (max 500)
offsetinteger0Pagination offset (max 5000)

Stale odds (older than 5 minutes for pre-game, 1 minute for live) are automatically excluded from best-odds comparisons to prevent misleading results.

Example Requests

curl -X GET "https://api.sharpapi.io/api/v1/odds/best?league=nba&market=spread" \ -H "X-API-Key: YOUR_API_KEY"

Response

Success (200)

{ "success": true, "data": [ { "event_id": "evt_nba_lal_bos_20260126", "event_name": "Los Angeles Lakers @ Boston Celtics", "sport": "basketball", "league": "nba", "market_type": "spread", "selection": "Boston Celtics", "line": -6.5, "best_odds": { "american": -105, "decimal": 1.952, "probability": 0.512 }, "best_book": "fanduel", "consensus_odds": { "american": -108, "decimal": 1.926, "probability": 0.519 }, "market_hold": 4.2, "all_books": [ { "book": "fanduel", "odds": { "american": -105, "decimal": 1.952 }, "edge": 0.007, "line": -6.5, "timestamp": "2026-01-26T10:30:00.000Z" }, { "book": "draftkings", "odds": { "american": -110, "decimal": 1.909 }, "edge": 0.0, "line": -6.5, "timestamp": "2026-01-26T10:29:55.000Z" }, { "book": "betmgm", "odds": { "american": -108, "decimal": 1.926 }, "edge": 0.003, "line": -6.5, "timestamp": "2026-01-26T10:29:50.000Z" }, { "book": "pinnacle", "odds": { "american": -108, "decimal": 1.926 }, "edge": 0.003, "line": -6.5, "timestamp": "2026-01-26T10:29:45.000Z" } ], "timestamp": "2026-01-26T10:30:00.000Z" } ], "meta": { "count": 1, "total": 48, "pagination": { "limit": 50, "offset": 0, "has_more": false, "next_offset": null }, "updated_at": "2026-01-26T10:30:05.000Z", "filters": { "league": "nba", "market": "spread" } } }

Response Headers

X-RateLimit-Limit: 300 X-RateLimit-Remaining: 298 X-RateLimit-Reset: 1737853200 X-Data-Delay: 0 X-Request-Id: req_best_789xyz

Error Responses

401 Unauthorized

{ "error": { "code": "unauthorized", "message": "Invalid or missing API key", "docs": "https://sharpapi.io/docs/authentication" } }

429 Rate Limited

{ "error": { "code": "rate_limited", "message": "Rate limit exceeded. Retry after 30 seconds.", "docs": "https://sharpapi.io/docs/authentication#rate-limits" } }

Best Odds Object Schema

FieldTypeDescription
event_idstringEvent identifier
event_namestringEvent display name (e.g., “Lakers @ Celtics”)
sportstringSport slug
leaguestringLeague slug
market_typestringMarket type (e.g., moneyline, spread, total)
selectionstringSelection name (team name, Over/Under)
linenumber | nullLine value (for spreads/totals)
best_oddsobjectBest odds available across all books
best_odds.americannumberBest American odds
best_odds.decimalnumberBest decimal odds
best_odds.probabilitynumberImplied probability of best odds
best_bookstringSportsbook ID with the best odds
consensus_oddsobjectAverage odds across all books for this selection
consensus_odds.americannumberConsensus American odds
consensus_odds.decimalnumberConsensus decimal odds
consensus_odds.probabilitynumberConsensus implied probability
market_holdnumberMarket hold (overround) as a percentage (e.g., 4.2 = 4.2%)
all_booksarrayAll sportsbooks’ odds for this selection
all_books[].bookstringSportsbook ID
all_books[].oddsobjectOdds object (american, decimal)
all_books[].edgenumberEdge over the worst available odds (percentage points)
all_books[].linenumber | nullLine at this sportsbook
all_books[].timestampstringWhen this book’s odds were last updated
timestampstringISO 8601 timestamp of the best odds determination
player_namestring|undefinedPlayer name (player prop markets only)
stat_categorystring|undefinedStat category, e.g. points, rebounds (player prop markets only)

The market_hold field represents the bookmaker’s built-in margin (overround) as a percentage. A hold of 4.2 means the combined implied probabilities across all outcomes sum to 104.2%. Lower hold = more efficient market.

Pinnacle is commonly used as the sharp reference. When Pinnacle is available in all_books, you can identify it by book: "pinnacle" and compare its odds to soft books to find +EV opportunities.

Why Best Odds Matter

Finding the best available odds is the foundation of profitable sports betting:

1. Line Shopping Saves Money

The difference between -105 and -110 may seem small, but it compounds dramatically over time:

Odds$100 Bet WinBreakeven Win Rate
-115+$8753.5%
-110+$9152.4%
-105+$9551.2%
+100+$10050.0%

2. Long-term Impact

Over 1,000 bets at a 52% win rate:

Consistent OddsNet Result
-115-$44 loss
-110+$18 profit
-105+$80 profit

3. Consensus & Hold

The consensus_odds field shows the market average, helping you identify when a book is offering better-than-market odds. The market_hold tells you how efficient the market is — lower hold means the odds are closer to “true” probabilities.

Last updated on