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/comparisonAuthentication
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
| Parameter | Type | Default | Description |
|---|---|---|---|
event | string | required | Event ID to compare odds for |
market | string | all | Filter by market type (e.g., moneyline, spread) |
sportsbook | string | all | Comma-separated sportsbook IDs to include |
The event parameter is required. This endpoint returns a detailed comparison for a single event.
Example Requests
cURL
# 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_456abcResponse Schema
The response data is a single event object (not an array) containing nested markets and selections.
Event Object
| Field | Type | Description |
|---|---|---|
event_id | string | Event identifier |
event_name | string | Event display name (e.g., "Away Team @ Home Team") |
sport | string | Sport slug |
league | string | League slug |
start_time | string | ISO 8601 event start time |
is_live | boolean | Whether the event is currently live |
books_available | string[] | Sportsbook IDs with odds for this event |
markets | array | Array of market comparisons |
Market Object
| Field | Type | Description |
|---|---|---|
market_type | string | Market type (e.g., moneyline, spread, total) |
hold | object | Market hold (overround) calculations |
hold.best_available | number | Hold percentage using best odds across all books per selection |
hold.by_book | object | Hold percentage for each individual sportsbook (keyed by book ID) |
selections | array | Array of selections within this market |
Selection Object
| Field | Type | Description |
|---|---|---|
selection | string | Selection name (e.g., team name, Over/Under) |
selection_type | string | home, away, over, under |
line | number | null | Line value (for spreads/totals) |
books | object | Odds from each sportsbook (keyed by book ID) |
best_book | string | Sportsbook ID with the best odds |
best_odds | number | Best American odds value |
worst_book | string | Sportsbook ID with the worst odds |
worst_odds | number | Worst American odds value |
spread | number | Difference in implied probability (%) between best and worst book |
Book Odds Object
Each entry in the books object:
| Field | Type | Description |
|---|---|---|
odds_american | number | American odds |
odds_decimal | number | Decimal odds |
timestamp | string | When 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 |
|---|---|
| < 2 | Very efficient market (sharp books) |
| 2-5 | Normal market |
| 5-8 | High margin (typical for props) |
| > 8 | Very 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.
| Spread | Interpretation |
|---|---|
| < 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.
Related Endpoints
- 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