Skip to content

Commit 8042a25

Browse files
Mlaz-codeclaude
andcommitted
docs(ev): document multi-book opportunities per selection
The EV runner now emits a separate opportunity for every soft book that passes quality checks, not just the single best. Updated docs to explain the multi-book behavior, added a second example entry showing the same selection at different books, and updated the OpenAPI spec sportsbook field description. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent c02d652 commit 8042a25

2 files changed

Lines changed: 46 additions & 6 deletions

File tree

content/en/api-reference/opportunities-ev.mdx

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ GET /api/v1/opportunities/ev
1616
This endpoint replaces the former `/positive-ev` and `/value-bets` endpoints. All scoring fields (`confidence_score`, `kelly_percent`, `fair_probability`) are now included in every response.
1717
</Callout>
1818

19+
<Callout type="info">
20+
**Multi-book results:** When multiple sportsbooks are +EV on the same selection, the API returns a separate opportunity for **each** book. For example, if DraftKings is +105, FanDuel is +103, and BetMGM is +101 on the same moneyline, you'll see three entries — each with its own `sportsbook`, `odds_american`, `ev_percentage`, `kelly_percent`, and `confidence_score`. Results are sorted by EV% descending by default, so the best-odds book appears first. Use the `sportsbook` filter to narrow to specific books.
21+
</Callout>
22+
1923
## Authentication
2024

2125
Requires API key. **Pro tier or higher required.** Your account must have the `ev` feature enabled.
@@ -132,6 +136,41 @@ for opp in data['data']:
132136
"oldest_odds_age_seconds": null,
133137
"warnings": [],
134138
"detected_at": "2026-02-08T14:22:10.456Z"
139+
},
140+
{
141+
"id": "ev_fd_nba_33483153_ml_PHO",
142+
"game_id": "evt_nba_phi_pho_20260208",
143+
"ev_percentage": 2.8,
144+
"odds_american": -108,
145+
"odds_decimal": 1.926,
146+
"no_vig_odds": -118,
147+
"fair_probability": 0.541,
148+
"market_width": 3.2,
149+
"devig_method": "power",
150+
"sharp_book": "pinnacle",
151+
"selection": "PHO Suns",
152+
"market": "moneyline",
153+
"line": null,
154+
"sportsbook": "fanduel",
155+
"game": "PHI 76ers vs PHO Suns",
156+
"sport": "basketball",
157+
"league": "nba",
158+
"home_team": "PHI 76ers",
159+
"away_team": "PHO Suns",
160+
"start_time": "2026-02-08T19:00:00Z",
161+
"is_live": false,
162+
"confidence_score": 82,
163+
"kelly_percent": 0.015,
164+
"book_count": 5,
165+
"arb_available": false,
166+
"arb_profit": null,
167+
"is_player_prop": false,
168+
"player_name": null,
169+
"stat_category": null,
170+
"possibly_stale": false,
171+
"oldest_odds_age_seconds": null,
172+
"warnings": [],
173+
"detected_at": "2026-02-08T14:22:10.456Z"
135174
}
136175
],
137176
"pagination": {
@@ -144,13 +183,13 @@ for opp in data['data']:
144183
"source": "redis",
145184
"last_update": "2026-02-08T14:22:10.456Z",
146185
"summary": {
147-
"count": 12,
186+
"count": 24,
148187
"avg_ev": 3.8,
149188
"max_ev": 7.1,
150189
"by_sportsbook": {
151-
"draftkings": 5,
152-
"fanduel": 4,
153-
"betmgm": 3
190+
"draftkings": 9,
191+
"fanduel": 8,
192+
"betmgm": 7
154193
},
155194
"by_sport": {
156195
"basketball": 12
@@ -242,7 +281,7 @@ X-Request-Id: req_abc123def456
242281
| `selection` | string | The selection (team name, Over/Under, player, etc.) |
243282
| `market` | string | Market type (`moneyline`, `point_spread`, `total_points`, etc.) |
244283
| `line` | number\|null | Spread/total line (e.g., `-3.5`, `220.5`) |
245-
| `sportsbook` | string | Sportsbook offering these odds |
284+
| `sportsbook` | string | Sportsbook offering these odds. Multiple entries may exist for the same selection if several books are +EV. |
246285
| `game` | string | Human-readable game name |
247286
| `sport` | string | Sport identifier (lowercase) |
248287
| `league` | string | League identifier |

public/openapi.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1461,7 +1461,7 @@
14611461
"get": {
14621462
"operationId": "listEVOpportunities",
14631463
"summary": "List +EV opportunities",
1464-
"description": "Returns positive expected value betting opportunities. Requires **Pro** tier or higher.\n\nEV is calculated by devigging sharp book lines (typically Pinnacle) and comparing\nagainst other sportsbook prices.\n\n**Sort options:** `ev` (default), `odds`, `confidence`, `start_time`, `kelly`.\n",
1464+
"description": "Returns positive expected value betting opportunities. Requires **Pro** tier or higher.\n\nEV is calculated by devigging sharp book lines (typically Pinnacle) and comparing\nagainst other sportsbook prices. When multiple sportsbooks are +EV on the same\nselection, a separate opportunity is returned for each book, ranked by EV%.\n\n**Sort options:** `ev` (default), `odds`, `confidence`, `start_time`, `kelly`.\n",
14651465
"tags": [
14661466
"Opportunities"
14671467
],
@@ -4667,6 +4667,7 @@
46674667
},
46684668
"sportsbook": {
46694669
"type": "string",
4670+
"description": "Sportsbook offering these odds. Multiple entries may exist for the same selection if several books are +EV.",
46704671
"example": "draftkings"
46714672
},
46724673
"game": {

0 commit comments

Comments
 (0)