Skip to Content
API ReferenceOdds Comparison

Odds Comparison

Compare odds for a specific event across multiple sportsbooks. Results are organized by market and selection, with hold calculations and best/worst book identification for each selection.

GET /api/v1/odds/comparison

Authentication

Requires API key. Available to all tiers.

The sportsbooks included in the comparison depend on your tier’s book access. Free tier compares DraftKings and FanDuel; higher tiers include more books. See Book Access by Tier.

Query Parameters

ParameterTypeDefaultDescription
eventstringrequiredEvent ID to compare odds for
marketstringallFilter by market type (e.g., moneyline, spread)
sportsbookstringallComma-separated sportsbook IDs to include

The event parameter is required. This endpoint returns a detailed comparison for a single event.

Example Requests

# Compare all odds for a specific NBA event curl -X GET "https://api.sharpapi.io/api/v1/odds/comparison?event=33483153" \ -H "X-API-Key: YOUR_API_KEY" # Compare only moneyline odds curl -X GET "https://api.sharpapi.io/api/v1/odds/comparison?event=33483153&market=moneyline" \ -H "X-API-Key: YOUR_API_KEY"

Response

Success (200)

{ "success": true, "data": { "event_id": "nba_suns_76ers_2026-01-26", "event_name": "PHO Suns @ PHI 76ers", "sport": "basketball", "league": "nba", "start_time": "2026-01-26T19:00:00Z", "is_live": false, "books_available": ["betmgm", "draftkings", "fanduel", "pinnacle"], "markets": [ { "market_type": "moneyline", "hold": { "best_available": 2.7, "by_book": { "draftkings": 3.5, "fanduel": 3.6, "betmgm": 4.7, "pinnacle": 3.9 } }, "selections": [ { "selection": "PHO Suns", "selection_type": "away", "line": null, "books": { "fanduel": { "odds_american": -145, "odds_decimal": 1.690, "timestamp": "2026-01-26T02:10:20.000Z" }, "draftkings": { "odds_american": -150, "odds_decimal": 1.667, "timestamp": "2026-01-26T02:10:24.000Z" }, "betmgm": { "odds_american": -155, "odds_decimal": 1.645, "timestamp": "2026-01-26T02:10:18.000Z" }, "pinnacle": { "odds_american": -148, "odds_decimal": 1.676, "timestamp": "2026-01-26T02:10:15.000Z" } }, "best_book": "fanduel", "best_odds": -145, "worst_book": "betmgm", "worst_odds": -155, "spread": 1.6 }, { "selection": "PHI 76ers", "selection_type": "home", "line": null, "books": { "draftkings": { "odds_american": 130, "odds_decimal": 2.300, "timestamp": "2026-01-26T02:10:24.000Z" }, "fanduel": { "odds_american": 125, "odds_decimal": 2.250, "timestamp": "2026-01-26T02:10:20.000Z" }, "betmgm": { "odds_american": 128, "odds_decimal": 2.280, "timestamp": "2026-01-26T02:10:18.000Z" }, "pinnacle": { "odds_american": 126, "odds_decimal": 2.260, "timestamp": "2026-01-26T02:10:15.000Z" } }, "best_book": "draftkings", "best_odds": 130, "worst_book": "fanduel", "worst_odds": 125, "spread": 0.9 } ] } ] }, "meta": { "market_filter": null, "updated_at": "2026-01-26T02:10:30.000Z" } }

Response Headers

X-RateLimit-Limit: 300 X-RateLimit-Remaining: 297 X-RateLimit-Reset: 1737853200 X-Data-Delay: 0 X-Request-Id: req_comp_456abc

Response Schema

The response data is a single event object (not an array) containing nested markets and selections.

Event Object

FieldTypeDescription
event_idstringEvent identifier
event_namestringEvent display name (e.g., "Away Team @ Home Team")
sportstringSport slug
leaguestringLeague slug
start_timestringISO 8601 event start time
is_livebooleanWhether the event is currently live
books_availablestring[]Sportsbook IDs with odds for this event
marketsarrayArray of market comparisons

Market Object

FieldTypeDescription
market_typestringMarket type (e.g., moneyline, spread, total)
holdobjectMarket hold (overround) calculations
hold.best_availablenumberHold percentage using best odds across all books per selection
hold.by_bookobjectHold percentage for each individual sportsbook (keyed by book ID)
selectionsarrayArray of selections within this market

Selection Object

FieldTypeDescription
selectionstringSelection name (e.g., team name, Over/Under)
selection_typestringhome, away, over, under
linenumber | nullLine value (for spreads/totals)
booksobjectOdds from each sportsbook (keyed by book ID)
best_bookstringSportsbook ID with the best odds
best_oddsnumberBest American odds value
worst_bookstringSportsbook ID with the worst odds
worst_oddsnumberWorst American odds value
spreadnumberDifference in implied probability (%) between best and worst book

Book Odds Object

Each entry in the books object:

FieldTypeDescription
odds_americannumberAmerican odds
odds_decimalnumberDecimal odds
timestampstringWhen this book’s odds were last updated

Understanding Hold

The hold field on each market shows the bookmaker’s built-in margin:

  • best_available: The hold (%) if you shop for the best odds on each selection. This is the “true” market efficiency from a bettor’s perspective.
  • by_book: The hold (%) at each individual sportsbook. Higher hold = more margin taken by the book.
Hold (%)Interpretation
< 2Very efficient market (sharp books)
2-5Normal market
5-8High margin (typical for props)
> 8Very high margin

Understanding the spread Field

The spread on each selection represents the difference in implied probability between the best and worst sportsbook for that selection. A higher spread indicates more variance across books.

SpreadInterpretation
< 1%Books are tightly aligned
1-3%Normal variance, moderate shopping value
> 3%Significant discrepancy, strong shopping value

Use Cases

Line Shopping

Find the best price before placing a bet by comparing all books:

curl "https://api.sharpapi.io/api/v1/odds/comparison?event=33483153&market=spread" \ -H "X-API-Key: YOUR_API_KEY"

Identifying Stale Lines

Look for books that haven’t updated recently by checking each book’s timestamp. A book with stale odds may be slow to adjust, creating temporary value.

Market Efficiency

Compare hold.best_available vs individual book holds. A large gap means line shopping is particularly valuable for this market.

  • Odds Snapshot - Get raw odds from individual sportsbooks
  • Best Odds - Get just the best odds with consensus and hold
  • Odds Delta - Get only odds that changed since a given timestamp
  • Batch Odds - Fetch comparison data for multiple events at once
Last updated on