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 per-book comparisons and edge calculations.

GET /api/v1/odds/best

AuthenticationPermalink for this section

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 ParametersPermalink for this section

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). Supports category aliases — see Odds: Market Category Aliases.
eventstringFilter by event ID(s), comma-separated
livebooleantrue = live only, false = prematch only, omit = both
is_main_linebooleantrue = main-line entries only (consensus line for each (event, market, selection) cohort plus no-line markets like moneyline); false = alt-line entries only; omit = both. See the is_main_line response field below for the cohort semantics.
min_oddsnumberMinimum American odds filter
max_oddsnumberMaximum American odds filter
limitinteger50Max results per page (max 200)
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 RequestsPermalink for this section

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

ResponsePermalink for this section

Success (200)Permalink for this section

{ "success": true, "data": [ { "event_id": "nba_celtics_lakers_2026-01-26_b3", "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, "odds_probability": 0.512 }, "best_book": "fanduel", "all_books": [ { "book": "fanduel", "odds": { "american": -105, "decimal": 1.952 }, "edge": 0.007, "line": -6.5 }, { "book": "draftkings", "odds": { "american": -110, "decimal": 1.909 }, "edge": 0.0, "line": -6.5 }, { "book": "betmgm", "odds": { "american": -108, "decimal": 1.926 }, "edge": 0.003, "line": -6.5 }, { "book": "pinnacle", "odds": { "american": -108, "decimal": 1.926 }, "edge": 0.003, "line": -6.5 } ], "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 HeadersPermalink for this section

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

Error ResponsesPermalink for this section

401 Unauthorized

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

429 Rate Limited

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

Best Odds Object SchemaPermalink for this section

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)
is_main_linebooleantrue for the consensus main line of this (event, market_type, selection) cohort and for no-line markets (moneyline, outright); false for alt-line entries and rows whose cohort hasn’t been published yet (cold start). Filterable via ?is_main_line=true. Mirrors the is_main_line field on /odds.
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
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
timestampstringISO 8601 time SharpAPI last refreshed this odd through its pipeline — advances every ingest cycle. A feed-freshness / liveness signal (matches OpticOdds’ timestamp); it is NOT when the price last changed.
player_namestring|undefinedPlayer name (player prop markets only)
stat_categorystring|undefinedStat category, e.g. points, rebounds (player prop markets only)

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 MatterPermalink for this section

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

1. Line Shopping Saves MoneyPermalink for this section

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 ImpactPermalink for this section

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

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

3. Edge ComparisonPermalink for this section

The edge field on each book in all_books shows how much better (or worse) that book’s odds are compared to the worst available line, helping you quantify the value of shopping across books.

Last updated on