@@ -10,17 +10,21 @@ GET /api/v1/opportunities/arbitrage
1010
1111## Authentication
1212
13- Requires API key. ** Pro tier or higher required.**
13+ Requires API key. ** Hobby tier or higher required.** Your account must have the ` arbitrage ` feature enabled.
1414
1515## Query Parameters
1616
1717| Parameter | Type | Default | Description |
1818| -----------| ------| ---------| -------------|
19- | ` sport ` | string | all | Filter by sport (e.g., ` basketball ` , ` football ` ) |
20- | ` league ` | string | all | Filter by league (e.g., ` nba ` , ` nfl ` , ` nhl ` ) |
21- | ` min_profit ` | number | 0.5 | Minimum profit percentage (e.g., ` 1.0 ` = 1%) |
22- | ` limit ` | integer | 50 | Results per page (max 200) |
23- | ` offset ` | integer | 0 | Pagination offset |
19+ | ` sport ` | string | all | Filter by sport(s), comma-separated (e.g. ` basketball ` , ` football ` ) |
20+ | ` league ` | string | all | Filter by league(s), comma-separated (e.g. ` nba ` , ` nfl ` , ` nhl ` ) |
21+ | ` sportsbook ` | string | tier-allowed | Filter by sportsbook(s), comma-separated. Tier limits enforced. |
22+ | ` market ` | string | all | Filter by market type(s), comma-separated |
23+ | ` min_profit ` | number | 0.5 | Minimum profit percentage (e.g. ` 1.0 ` = 1%) |
24+ | ` live ` | boolean | — | ` true ` = live only, ` false ` = prematch only, omit = both |
25+ | ` format ` | string | ` json ` | Response format: ` json ` or ` csv ` . CSV downloads as ` arbitrage_YYYY-MM-DD.csv ` . |
26+ | ` limit ` | integer | 50 | Results per page (max 500) |
27+ | ` offset ` | integer | 0 | Pagination offset (max 5000) |
2428
2529### Filtering Multiple Values
2630
@@ -82,45 +86,80 @@ for arb in data['data']:
8286{
8387 "data" : [
8488 {
89+ "id" : " arb_dk_pin_nba_lal_bos_ml" ,
8590 "event_id" : " evt_nba_lal_bos_20260208" ,
8691 "event_name" : " Los Angeles Lakers @ Boston Celtics" ,
8792 "sport" : " basketball" ,
93+ "league" : " nba" ,
8894 "market_type" : " moneyline" ,
95+ "line" : null ,
8996 "profit_percent" : 1.83 ,
9097 "implied_total" : 98.2 ,
98+ "is_live" : false ,
99+ "start_time" : " 2026-02-08T19:00:00Z" ,
100+ "is_alternate_line" : false ,
101+ "possibly_stale" : false ,
102+ "oldest_odds_age_seconds" : 8 ,
103+ "warnings" : [],
104+ "game_state" : null ,
105+ "ev_available" : true ,
106+ "ev_percentage" : 3.5 ,
107+ "is_player_prop" : false ,
108+ "player_name" : null ,
109+ "stat_category" : null ,
91110 "legs" : [
92111 {
93112 "sportsbook" : " draftkings" ,
94113 "selection" : " Los Angeles Lakers" ,
95- "odds" : 145 ,
96- "decimal_odds" : 2.45 ,
97- "stake_percent" : 41.5
114+ "odds_american" : 145 ,
115+ "odds_decimal" : 2.45 ,
116+ "implied_probability" : 0.408 ,
117+ "stake_percent" : 41.5 ,
118+ "timestamp" : " 2026-02-08T14:22:05.000Z" ,
119+ "external_event_id" : " 33483153" ,
120+ "selection_id" : " sel_lal_ml" ,
121+ "market_id" : " mkt_ml_33483153"
98122 },
99123 {
100124 "sportsbook" : " pinnacle" ,
101125 "selection" : " Boston Celtics" ,
102- "odds" : -135 ,
103- "decimal_odds" : 1.74 ,
104- "stake_percent" : 58.5
126+ "odds_american" : -135 ,
127+ "odds_decimal" : 1.74 ,
128+ "implied_probability" : 0.574 ,
129+ "stake_percent" : 58.5 ,
130+ "timestamp" : " 2026-02-08T14:22:08.000Z" ,
131+ "external_event_id" : null ,
132+ "selection_id" : null ,
133+ "market_id" : null
105134 }
106135 ],
107136 "detected_at" : " 2026-02-08T14:22:10.456Z"
108137 }
109138 ],
110- "meta" : {
111- "count" : 3 ,
139+ "pagination" : {
140+ "limit" : 50 ,
141+ "offset" : 0 ,
112142 "total" : 3 ,
113- "pagination" : {
114- "limit" : 50 ,
115- "offset" : 0 ,
116- "has_more" : false ,
117- "next_offset" : null
143+ "maxOffset" : 5000
144+ },
145+ "meta" : {
146+ "source" : " cache" ,
147+ "summary" : {
148+ "count" : 3 ,
149+ "avg_profit" : 1.23 ,
150+ "max_profit" : 1.83 ,
151+ "by_market" : { "moneyline" : 2 , "point_spread" : 1 },
152+ "by_sport" : { "basketball" : 3 }
118153 },
119- "updated_at" : " 2026-02-08T14:22:10.456Z" ,
120154 "filters" : {
121- "league" : " nba" ,
122- "min_profit" : 1
123- }
155+ "sport" : null ,
156+ "league" : [" nba" ],
157+ "sportsbook" : null ,
158+ "market" : null ,
159+ "live" : null ,
160+ "min_profit" : 1.0
161+ },
162+ "books_analyzed" : 8
124163 }
125164}
126165```
@@ -154,7 +193,7 @@ X-Request-Id: req_arb789xyz012
154193{
155194 "error" : {
156195 "code" : " tier_restricted" ,
157- "message" : " Arbitrage detection requires Pro tier or higher" ,
196+ "message" : " Arbitrage detection requires Hobby tier or higher" ,
158197 "docs" : " https://sharpapi.io/docs/pricing"
159198 }
160199}
@@ -175,12 +214,27 @@ X-Request-Id: req_arb789xyz012
175214
176215| Field | Type | Description |
177216| -------| ------| -------------|
217+ | ` id ` | string | Unique arbitrage identifier (hash) |
178218| ` event_id ` | string | Event identifier |
179219| ` event_name ` | string | Human-readable event name |
180- | ` sport ` | string | Sport identifier |
181- | ` market_type ` | string | Market type (` moneyline ` , ` spread ` , ` total ` ) |
220+ | ` sport ` | string | Sport identifier (lowercase) |
221+ | ` league ` | string | League identifier |
222+ | ` market_type ` | string | Market type (` moneyline ` , ` point_spread ` , ` total_points ` , etc.) |
223+ | ` line ` | number\| null | Spread/total line (e.g., ` -3.5 ` ) |
182224| ` profit_percent ` | number | Guaranteed profit as a percentage (e.g., ` 1.83 ` = 1.83%) |
183225| ` implied_total ` | number | Sum of implied probabilities across all legs (below 100 = arb exists) |
226+ | ` is_live ` | boolean | Whether the event is currently live |
227+ | ` start_time ` | string\| null | ISO 8601 event start time |
228+ | ` is_alternate_line ` | boolean | Whether this uses a non-standard line |
229+ | ` possibly_stale ` | boolean | Whether odds may have moved since detection |
230+ | ` oldest_odds_age_seconds ` | number\| null | Age of the stalest leg's odds in seconds |
231+ | ` warnings ` | string[ ] | Warning flags (e.g., ` POTENTIALLY_STALE_ODDS ` ) |
232+ | ` game_state ` | object\| null | Live game state (` period ` , ` clock ` , ` score_home ` , ` score_away ` ) |
233+ | ` ev_available ` | boolean | Whether an EV opportunity exists on this market |
234+ | ` ev_percentage ` | number\| null | EV percentage if available |
235+ | ` is_player_prop ` | boolean | Whether this is a player prop market |
236+ | ` player_name ` | string\| null | Player name (if player prop) |
237+ | ` stat_category ` | string\| null | Stat type (if player prop, e.g., ` points ` , ` rebounds ` ) |
184238| ` legs ` | array | Array of bet legs that form the arbitrage |
185239| ` detected_at ` | string | ISO 8601 timestamp when the arb was first detected |
186240
@@ -190,9 +244,22 @@ X-Request-Id: req_arb789xyz012
190244| -------| ------| -------------|
191245| ` sportsbook ` | string | Sportsbook for this leg |
192246| ` selection ` | string | The selection (team name, Over/Under, etc.) |
193- | ` odds ` | number | American odds for this leg |
194- | ` decimal_odds ` | number | Decimal odds for this leg |
247+ | ` odds_american ` | number | American odds for this leg |
248+ | ` odds_decimal ` | number | Decimal odds for this leg |
249+ | ` implied_probability ` | number | Implied probability (0.0 to 1.0) |
195250| ` stake_percent ` | number | Percentage of total stake to place on this leg |
251+ | ` timestamp ` | string\| null | When these odds were captured (ISO 8601) |
252+ | ` external_event_id ` | string\| null | Sportsbook's native event ID |
253+ | ` selection_id ` | string\| null | Sportsbook's selection/outcome ID |
254+ | ` market_id ` | string\| null | Sportsbook's market ID |
255+
256+ ### CSV Format
257+
258+ When ` ?format=csv ` , the response downloads as ` arbitrage_YYYY-MM-DD.csv ` with columns:
259+
260+ ```
261+ event,sport,market,line,profit%,implied_total,book1,selection1,odds1,stake1%,book2,selection2,odds2,stake2%,is_live,is_alternate_line,possibly_stale,warnings,detected_at
262+ ```
196263
197264---
198265
0 commit comments