Skip to content

Commit f18e170

Browse files
Mlaz-codeclaude
andcommitted
docs: sync API reference with live endpoints
- Fix odds format from nested odds:{} to flat odds_american/odds_decimal/probability - Add /odds/delta endpoint documentation (since param, server_time, books_changed) - Add /teams endpoint documentation (sport/league/q filters, aliases) - Add sort, fields, min_odds, max_odds, group_by params to /odds - Add consensus_odds, market_hold to /odds/best; fix all_books format - Rewrite /odds/comparison: event required, nested markets/selections, hold per market - Add sportsbook_name field, fix limit max to 200, remove nonexistent main param - Update overview route count and endpoint tables Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 9433034 commit f18e170

8 files changed

Lines changed: 757 additions & 257 deletions

File tree

pages/api-reference/_meta.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,15 @@
1313
"title": "Odds"
1414
},
1515
"odds": "Odds Snapshot",
16+
"odds-delta": "Odds Delta",
1617
"odds-best": "Best Odds",
1718
"odds-comparison": "Odds Comparison",
1819
"odds-batch": "Batch Odds",
20+
"---Teams": {
21+
"type": "separator",
22+
"title": "Teams"
23+
},
24+
"teams": "Teams",
1925
"---Events": {
2026
"type": "separator",
2127
"title": "Events"

pages/api-reference/odds-best.mdx

Lines changed: 41 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Callout, Tabs } from 'nextra/components'
22

33
# Best Odds
44

5-
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 a sharp (Pinnacle) reference when available.
5+
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.
66

77
```
88
GET /api/v1/odds/best
@@ -13,7 +13,7 @@ GET /api/v1/odds/best
1313
Requires API key. Available to **all tiers**.
1414

1515
<Callout type="info">
16-
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 sharp reference).
16+
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).
1717
</Callout>
1818

1919
## Query Parameters
@@ -24,6 +24,7 @@ Best Odds is available on all tiers, including Free. The sportsbooks compared de
2424
| `league` | string | all | Filter by league (e.g., `nba`, `nfl`) |
2525
| `market` | string | all | Filter by market type (e.g., `moneyline`, `spread`, `total`) |
2626
| `event` | string | - | Filter by event ID |
27+
| `live` | boolean | false | Return only live/in-play events |
2728
| `limit` | integer | 50 | Max results per page (max 200) |
2829
| `offset` | integer | 0 | Pagination offset |
2930

@@ -47,7 +48,7 @@ const { data, meta } = await response.json();
4748
data.forEach(item => {
4849
console.log(
4950
`${item.selection}: Best ${item.best_odds.american} at ${item.best_book}` +
50-
(item.sharp_odds ? ` (Sharp: ${item.sharp_odds.american})` : '')
51+
` | Consensus: ${item.consensus_odds.american} | Hold: ${(item.market_hold * 100).toFixed(1)}%`
5152
);
5253
});
5354
```
@@ -66,8 +67,9 @@ result = response.json()
6667
for item in result['data']:
6768
best = item['best_odds']['american']
6869
book = item['best_book']
69-
sharp = item.get('sharp_odds', {}).get('american', 'N/A')
70-
print(f"{item['selection']}: Best {best} at {book} (Sharp: {sharp})")
70+
consensus = item['consensus_odds']['american']
71+
hold = item['market_hold'] * 100
72+
print(f"{item['selection']}: Best {best} at {book} (Consensus: {consensus}, Hold: {hold:.1f}%)")
7173
```
7274
</Tabs.Tab>
7375
</Tabs>
@@ -94,38 +96,42 @@ for item in result['data']:
9496
"probability": 0.512
9597
},
9698
"best_book": "fanduel",
99+
"consensus_odds": {
100+
"american": -108,
101+
"decimal": 1.926,
102+
"probability": 0.519
103+
},
104+
"market_hold": 0.042,
97105
"all_books": [
98106
{
99-
"sportsbook": "fanduel",
100-
"odds": { "american": -105, "decimal": 1.952, "probability": 0.512 },
107+
"book": "fanduel",
108+
"odds": { "american": -105, "decimal": 1.952 },
109+
"edge": 0.007,
101110
"line": -6.5,
102111
"timestamp": "2026-01-26T10:30:00.000Z"
103112
},
104113
{
105-
"sportsbook": "draftkings",
106-
"odds": { "american": -110, "decimal": 1.909, "probability": 0.524 },
114+
"book": "draftkings",
115+
"odds": { "american": -110, "decimal": 1.909 },
116+
"edge": 0.0,
107117
"line": -6.5,
108118
"timestamp": "2026-01-26T10:29:55.000Z"
109119
},
110120
{
111-
"sportsbook": "betmgm",
112-
"odds": { "american": -108, "decimal": 1.926, "probability": 0.519 },
121+
"book": "betmgm",
122+
"odds": { "american": -108, "decimal": 1.926 },
123+
"edge": 0.003,
113124
"line": -6.5,
114125
"timestamp": "2026-01-26T10:29:50.000Z"
115126
},
116127
{
117-
"sportsbook": "pinnacle",
118-
"odds": { "american": -108, "decimal": 1.926, "probability": 0.519 },
128+
"book": "pinnacle",
129+
"odds": { "american": -108, "decimal": 1.926 },
130+
"edge": 0.003,
119131
"line": -6.5,
120132
"timestamp": "2026-01-26T10:29:45.000Z"
121133
}
122134
],
123-
"sharp_odds": {
124-
"american": -108,
125-
"decimal": 1.926,
126-
"probability": 0.519
127-
},
128-
"sharp_book": "pinnacle",
129135
"timestamp": "2026-01-26T10:30:00.000Z"
130136
}
131137
],
@@ -197,17 +203,25 @@ X-Request-Id: req_best_789xyz
197203
| `best_odds.decimal` | number | Best decimal odds |
198204
| `best_odds.probability` | number | Implied probability of best odds |
199205
| `best_book` | string | Sportsbook ID with the best odds |
206+
| `consensus_odds` | object | Average odds across all books for this selection |
207+
| `consensus_odds.american` | number | Consensus American odds |
208+
| `consensus_odds.decimal` | number | Consensus decimal odds |
209+
| `consensus_odds.probability` | number | Consensus implied probability |
210+
| `market_hold` | number | Market hold (overround) as a decimal (e.g., `0.042` = 4.2%) |
200211
| `all_books` | array | All sportsbooks' odds for this selection |
201-
| `all_books[].sportsbook` | string | Sportsbook ID |
202-
| `all_books[].odds` | object | Odds object (american, decimal, probability) |
212+
| `all_books[].book` | string | Sportsbook ID |
213+
| `all_books[].odds` | object | Odds object (`american`, `decimal`) |
214+
| `all_books[].edge` | number | Edge over the worst available odds (as decimal) |
203215
| `all_books[].line` | number \| null | Line at this sportsbook |
204216
| `all_books[].timestamp` | string | When this book's odds were last updated |
205-
| `sharp_odds` | object \| null | Pinnacle (sharp) reference odds, `null` if unavailable |
206-
| `sharp_book` | string \| null | Sharp reference book (always `"pinnacle"` when present) |
207217
| `timestamp` | string | ISO 8601 timestamp of the best odds determination |
208218

209219
<Callout type="info">
210-
The `sharp_odds` and `sharp_book` fields are only populated when Pinnacle odds are available for your tier (Pro and above). On Free and Hobby tiers, these fields will be `null`.
220+
The `market_hold` field represents the bookmaker's built-in margin (overround). A hold of `0.042` means the combined implied probabilities across all outcomes sum to 104.2%. Lower hold = more efficient market.
221+
</Callout>
222+
223+
<Callout type="info">
224+
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.
211225
</Callout>
212226

213227
## Why Best Odds Matter
@@ -235,12 +249,13 @@ Over 1,000 bets at a 52% win rate:
235249
| -110 | **+$18 profit** |
236250
| -105 | **+$80 profit** |
237251

238-
### 3. Sharp Reference
252+
### 3. Consensus & Hold
239253

240-
Comparing soft book odds against the Pinnacle (sharp) line helps you identify when a sportsbook is offering +EV (positive expected value). If DraftKings has -105 while Pinnacle has -108, the DraftKings line may carry positive expected value.
254+
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.
241255

242256
## Related Endpoints
243257

244258
- [Odds Snapshot](/api-reference/odds) - Get raw odds from individual sportsbooks
259+
- [Odds Delta](/api-reference/odds-delta) - Get only odds that changed since a given timestamp
245260
- [Odds Comparison](/api-reference/odds-comparison) - Compare odds side by side across books
246261
- [Sportsbooks](/api-reference/sportsbooks) - See which books are available and their status

0 commit comments

Comments
 (0)