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

AuthenticationPermalink for this section

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

ParameterTypeDefaultDescription
eventstringrequiredEvent ID to compare odds for
marketstringallFilter by market type (e.g., moneyline, spread). Supports category aliases — see Odds: Market Category Aliases.
sportsbookstringallComma-separated sportsbook IDs to include

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

Example RequestsPermalink for this section

# 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"

ResponsePermalink for this section

Success (200)Permalink for this section

{ "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 HeadersPermalink for this section

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

Response SchemaPermalink for this section

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

Event ObjectPermalink for this section

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

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

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

Each entry in the books object:

FieldTypeDescription
odds_americannumberAmerican odds
odds_decimalnumberDecimal odds
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. See understanding the timestamp field.

Understanding HoldPermalink for this section

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

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

Line ShoppingPermalink for this section

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

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

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