Skip to Content
Referencia de la APIOportunidades +EV

Oportunidades +EV

Encuentra oportunidades de apuesta con valor esperado positivo en todas las casas de apuestas.

GET /api/v1/opportunities/ev

Este endpoint sustituye a los antiguos endpoints /positive-ev y /value-bets. Todos los campos de puntuación (confidence_score, kelly_percent, fair_probability) se incluyen ahora en cada respuesta.

Resultados multi-casa: Cuando varias casas de apuestas son +EV en la misma selección, la API devuelve una oportunidad independiente por cada casa. Por ejemplo, si DraftKings tiene +105, FanDuel +103 y BetMGM +101 en la misma línea de moneyline, verás tres entradas, cada una con su propio sportsbook, odds_american, ev_percentage, kelly_percent y confidence_score. Los resultados se ordenan por EV% descendente de forma predeterminada, por lo que la casa con las mejores cuotas aparece primero. Utiliza el filtro sportsbook para acotar a casas concretas.

Estado del partido en directo: Las filas de EV no incluyen marcador, periodo ni reloj. El estado del partido en directo se sirve exclusivamente desde el endpoint Game State y el canal de stream gamestate. Une las filas con el estado del partido mediante event_id.

Autenticación

Requiere API key. Se requiere nivel Pro o superior. Tu cuenta debe tener la funcionalidad ev habilitada.

Parámetros de consulta

ParámetroTipoPredeterminadoDescripción
sportstringtodosFiltra por deporte(s), separados por comas (p. ej. basketball, football, ice_hockey)
leaguestringtodasFiltra por liga(s), separadas por comas (p. ej. nba, nfl, nhl)
sportsbookstringpermitidas según nivelFiltra por casa(s) de apuestas, separadas por comas. Se aplican los límites del nivel.
marketstringtodosFiltra por tipo(s) de mercado, separados por comas. Admite alias de categoría (main, spread, total, props) o tipos exactos (point_spread, player_points).
eventstringtodosFiltra por ID(s) de partido/evento, separados por comas
min_evnumber0Umbral mínimo de porcentaje de EV
max_evnumberUmbral máximo de porcentaje de EV
livebooleantrue = solo en directo, false = solo prepartido, omitir = ambos
min_oddsnumberCuotas americanas mínimas (p. ej. -200)
max_oddsnumberCuotas americanas máximas (p. ej. +500)
min_market_widthnumberAnchura mínima de mercado (indicador de vig). Menor anchura = mercado más sharp.
max_market_widthnumberAnchura máxima de mercado
max_holdnumber5.0Porcentaje máximo de hold (vig) de la casa. Descarta oportunidades en las que el hold del mercado supere este umbral.
min_kellynumberPorcentaje mínimo de Kelly (p. ej. 2 = 2% de asignación de bankroll)
max_kellynumberPorcentaje máximo de Kelly
min_confidencenumberPuntuación mínima de confianza (0–100)
max_confidencenumberPuntuación máxima de confianza (0–100)
max_odds_agenumberAntigüedad máxima de las cuotas en segundos. Filtra oportunidades obsoletas en las que las cuotas subyacentes superen este umbral.
is_player_propbooleantrue = solo player props, false = solo mercados a nivel de partido
is_alternate_linebooleantrue = solo líneas alternativas, false = solo línea principal
arb_availablebooleantrue = solo oportunidades que también tienen una referencia cruzada de arbitraje
player_namestringFiltra por un jugador concreto (alias: player). Coincidencia exacta no sensible a mayúsculas sobre el nombre canónico (p. ej. Aaron Judge).
stat_categorystringFiltra por una categoría estadística de player prop (p. ej. points, rebounds, passing_yards)
selectionstringFiltra por un nombre de selección concreto (coincidencia exacta no sensible a mayúsculas)
devig_bookstringSustituye la casa sharp ancla utilizada para el devigging. Por defecto es Pinnacle.
date_rangestringFiltra por fecha del evento: today, tomorrow o week. Las fechas se evalúan en hora del este de EE. UU. (ET).
sortstring-evCampo de ordenación. Opciones: ev, confidence/confidence_score, kelly/kelly_percent, time/start_time, book_count/books. Antepón - para orden descendente.
limitinteger50Resultados por página (máx. 200)
offsetinteger0Desplazamiento de paginación (máx. 5000)

Filtrado de múltiples valores

Utiliza valores separados por comas para los filtros multi-selección:

?sportsbook=draftkings,fanduel&league=nba,nfl

Ejemplos de solicitud

# Oportunidades EV básicas para la NBA curl -X GET "https://api.sharpapi.io/api/v1/opportunities/ev?league=nba&min_ev=2" \ -H "X-API-Key: YOUR_API_KEY"

Respuesta

Éxito (200)

{ "success": true, "data": [ { "id": "ev_dk_nba_33483153_ml_PHO", "game_id": "evt_nba_phi_pho_20260208", "ev_percentage": 4.2, "odds_american": -105, "odds_decimal": 1.952, "no_vig_odds": -118, "fair_probability": 0.541, "market_width": 3.2, "devig_method": "power", "sharp_book": "pinnacle", "selection": "PHO Suns", "market": "moneyline", "line": null, "sportsbook": "draftkings", "game": "PHI 76ers vs PHO Suns", "sport": "basketball", "league": "nba", "home_team": "PHI 76ers", "away_team": "PHO Suns", "start_time": "2026-02-08T19:00:00Z", "is_live": false, "confidence_score": 87, "kelly_percent": 2.1, "book_count": 5, "arb_available": false, "arb_profit": null, "is_player_prop": false, "player_name": null, "stat_category": null, "possibly_stale": false, "oldest_odds_age_seconds": null, "warnings": [], "detected_at": "2026-02-08T14:22:10.456Z" }, { "id": "ev_fd_nba_33483153_ml_PHO", "game_id": "evt_nba_phi_pho_20260208", "ev_percentage": 2.8, "odds_american": -108, "odds_decimal": 1.926, "no_vig_odds": -118, "fair_probability": 0.541, "market_width": 3.2, "devig_method": "power", "sharp_book": "pinnacle", "selection": "PHO Suns", "market": "moneyline", "line": null, "sportsbook": "fanduel", "game": "PHI 76ers vs PHO Suns", "sport": "basketball", "league": "nba", "home_team": "PHI 76ers", "away_team": "PHO Suns", "start_time": "2026-02-08T19:00:00Z", "is_live": false, "confidence_score": 82, "kelly_percent": 1.5, "book_count": 5, "arb_available": false, "arb_profit": null, "is_player_prop": false, "player_name": null, "stat_category": null, "possibly_stale": false, "oldest_odds_age_seconds": null, "warnings": [], "detected_at": "2026-02-08T14:22:10.456Z" } ], "pagination": { "limit": 50, "offset": 0, "has_more": false, "next_offset": null }, "meta": { "source": "redis", "last_update": "2026-02-08T14:22:10.456Z", "summary": { "count": 24, "avg_ev": 3.8, "max_ev": 7.1, "by_sportsbook": { "draftkings": 9, "fanduel": 8, "betmgm": 7 }, "by_sport": { "basketball": 12 }, "by_market": { "moneyline": 5, "point_spread": 4, "player_points": 3 } }, "filters": { "sport": null, "league": ["nba"], "sportsbook": null, "market": null, "min_ev": 2.0, "max_ev": null, "live": null, "sort": "-ev", "include": null } } }

Cabeceras de respuesta

X-RateLimit-Limit: 300 X-RateLimit-Remaining: 298 X-RateLimit-Reset: 1707401000 X-Data-Delay: 0 X-Request-Id: req_abc123def456

Respuestas de error

401 Unauthorized

{ "error": { "code": "unauthorized", "message": "Invalid or missing API key", "docs": "https://docs.sharpapi.io/en/authentication" } }

403 Feature Required

{ "error": { "code": "feature_required", "message": "The 'ev' feature is required. Upgrade to Pro or higher.", "docs": "https://docs.sharpapi.io/en/pricing" } }

429 Rate Limited

{ "error": { "code": "rate_limited", "message": "Rate limit exceeded", "docs": "https://docs.sharpapi.io/en/api-reference/overview" } }

Campos de respuesta

Campos principales

CampoTipoDescripción
idstringIdentificador único de la oportunidad (hash)
game_idstring|nullIdentificador del partido/evento asociado
external_event_idstring|nullID nativo del evento en la casa de apuestas
selection_idstring|nullID nativo del resultado/selección en la casa de apuestas (para deep linking al boleto)
ev_percentagenumberValor esperado expresado como porcentaje (p. ej. 4.2 = 4,2 % de EV). Alias obsoleto: ev_percent.
odds_americannumberCuotas americanas actuales en la casa de apuestas
odds_decimalnumberCuotas decimales (p. ej. 1.952)
no_vig_oddsnumber|nullCuotas americanas justas (sin vig) derivadas de la línea sharp
fair_probabilitynumber|nullProbabilidad justa sin vig (devigged) (de 0,0 a 1,0)
market_widthnumber|nullAnchura del mercado (indicador de vig)
devig_methodstringMétodo de devig empleado (p. ej. power)
sharp_bookstringCasa sharp utilizada como referencia (p. ej. pinnacle). Alias obsoleto: devig_book.
selectionstringLa selección (nombre del equipo, Over/Under, jugador, etc.)
marketstringTipo de mercado (moneyline, point_spread, total_points, etc.)
linenumber|nullLínea de spread/total (p. ej. -3.5, 220.5)
sportsbookstringCasa de apuestas que ofrece estas cuotas. Pueden existir varias entradas para la misma selección si varias casas son +EV.
gamestringNombre del partido legible para humanos
sportstringIdentificador del deporte (en minúsculas)
leaguestringIdentificador de la liga
home_teamstring|nullNombre del equipo local
away_teamstring|nullNombre del equipo visitante
start_timestring|nullHora de inicio del evento en ISO 8601
is_livebooleanIndica si el evento está actualmente en directo
confidence_scorenumberPuntuación de confianza multifactor (0-100)
kelly_percentnumber|nullPorcentaje óptimo del bankroll según Kelly completo (0–100, p. ej. 2.1 = 2,1 % del bankroll). La mayoría de profesionales aplican un multiplicador de Kelly fraccional (¼ o ½) antes de dimensionar — véase Criterio de Kelly más abajo.
book_countnumberNúmero de casas de apuestas que ofrecen este mercado
arb_availablebooleanIndica si existe un arbitraje en este mercado
arb_profitnumber|nullPorcentaje de beneficio del arbitraje, si está disponible
is_player_propbooleanIndica si se trata de un mercado de player prop
player_namestring|nullNombre del jugador (si es un player prop)
stat_categorystring|nullTipo de estadística (si es un player prop, p. ej. points, rebounds)
possibly_stalebooleantrue si las cuotas subyacentes pueden haberse movido desde la detección
oldest_odds_age_secondsnumber|nullAntigüedad de las cuotas más obsoletas utilizadas en el cálculo de EV (segundos)
warningsstring[]Avisos de calidad de datos (p. ej. POTENTIALLY_STALE_ODDS, LIVE_STALE_ODDS)
detected_atstringMarca temporal ISO 8601 del momento en que se detectó por primera vez la oportunidad +EV

Campos del resumen de Meta

CampoTipoDescripción
summary.countnumberTotal de oportunidades que coinciden con los filtros
summary.avg_evnumberEV promedio de todos los resultados
summary.max_evnumberEV más alto encontrado
summary.by_sportsbookobjectRecuento de oportunidades por casa de apuestas
summary.by_sportobjectRecuento de oportunidades por deporte
summary.by_marketobjectRecuento de oportunidades por tipo de mercado

Cómo entender el valor esperado

El valor esperado (EV) mide el beneficio o pérdida promedio por apuesta a lo largo del tiempo. Una apuesta de EV positivo (+EV) significa que tienes una ventaja matemática sobre la casa de apuestas.

EV% = (fair_probability x decimal_odds - 1) x 100

Donde:

  • fair_probability = Probabilidad sin vig derivada de la casa sharp (Pinnacle)
  • decimal_odds = Las cuotas decimales ofrecidas por la casa soft

Cómo calcula SharpAPI el EV

SharpAPI utiliza Pinnacle (una casa sharp con cuotas eficientes) como fuente de verdad para la probabilidad justa.

Paso 1: Obtener las cuotas de la casa sharp

Pinnacle: Team A -115 / Team B +105

Paso 2: Eliminar el vig para hallar la probabilidad justa (método Power)

// Implied probabilities (with vig) probA = 1 / 1.87 = 0.535 // -115 in decimal = 1.87 probB = 1 / 2.05 = 0.488 // +105 in decimal = 2.05 total = 1.023 // 2.3% vig // Power devig: solve for k where probA^k + probB^k = 1 // k ≈ 1.036 for this market fairProbA = 0.535^1.036 = 0.522 (52.2%) fairProbB = 0.488^1.036 = 0.478 (47.8%)

Paso 3: Comparar con una casa soft

DraftKings: Team A -105 (decimal 1.952) Fair probability: 52.3% EV% = (0.523 x 1.952 - 1) x 100 EV% = +2.1%

Un EV de +2,1 % significa que esperas obtener un beneficio de 2,10 $ por cada 100 $ apostados en esta apuesta a lo largo del tiempo.

Por qué funciona

Tipo de casaCaracterísticas
Sharp (Pinnacle)Vig bajo, cuotas eficientes, probabilidades precisas
Soft (DraftKings, FanDuel, BetMGM)Vig más alto, más lentas en ajustarse, explotables

Cuando las casas soft tardan en actualizar sus cuotas tras un movimiento del mercado, su probabilidad implícita se desvía de la realidad, creando una oportunidad +EV.

Umbrales de EV

EV %CalidadAcción sugerida
< 0%EV negativoEvitar
0 - 2%MarginalSolo viable con alto volumen
2 - 5%BuenoUmbral rentable estándar
5%+ExcelenteOportunidades de alta confianza

Recomendamos establecer min_ev=2 para la mayoría de casos de uso. El EV marginal (por debajo del 2 %) puede verse erosionado por el movimiento de la línea antes de que coloques la apuesta.

Criterio de Kelly

El campo kelly_percent es el porcentaje óptimo de tu bankroll (0–100) que debes apostar según el criterio de Kelly completo. Un valor de 2.1 significa que Kelly completo recomienda el 2,1 % del bankroll; un valor de 34.4 significa el 34,4 %.

Kelly% = (fair_prob × decimal_odds - 1) / (decimal_odds - 1) × 100

Esto es Kelly completo, calculado a partir de la probabilidad justa del modelo sin ningún ajuste por calidad de la señal. Kelly completo es matemáticamente óptimo solo cuando la probabilidad real se conoce con exactitud. En la práctica, las anclas sharp conllevan incertidumbre (referencia sharp única, cuotas en directo que llegan tarde, baja validación cruzada) y Kelly completo puede generar sugerencias de stake peligrosamente grandes. Consulta confidence_score, cross_ref_count y warnings (p. ej. SINGLE_SHARP_REF, LIVE_STALE_ODDS) antes de dimensionar.

Utiliza un multiplicador de Kelly fraccional: la mayoría de profesionales aplican ¼ o ½ de Kelly (kelly_percent × 0.25 o × 0.5). Limita cualquier apuesta individual al 1–2 % del bankroll independientemente de lo que indique kelly_percent, especialmente cuando warnings no esté vacío o confidence_score < 80.

Guía de dimensionamiento Kelly

kelly_percentNivel de riesgoRecomendación
< 1BajoVentaja pequeña, considera saltarla
1 – 3ModeradoTamaño de apuesta estándar — cuarto de Kelly = 0,25–0,75 % del bankroll
3 – 5AgresivoVentaja fuerte — cuarto de Kelly = 0,75–1,25 % del bankroll
5+Muy agresivoVentaja excelente o artefacto de señal sharp; limita al 1–2 % del bankroll en cualquier caso

Aviso sobre la varianza: El +EV no garantiza beneficios en cada apuesta. A lo largo de 100 apuestas con un 5 % de EV, los resultados reales pueden variar ampliamente. La ventaja solo se materializa a lo largo de cientos o miles de apuestas. Nunca apuestes más de lo que puedas permitirte perder.

Buenas prácticas

  1. Establece un umbral mínimo de EV - Utiliza min_ev=2 o superior para centrarte en ventajas significativas
  2. Usa el dimensionamiento de Kelly - kelly_percent es un porcentaje (p. ej. 2.1 = 2,1 % del bankroll). Aplica un multiplicador de Kelly fraccional (¼ o ½) antes de dimensionar
  3. Filtra por confianza - Utiliza confidence_score para priorizar las oportunidades de alta confianza
  4. Monitoriza market_width - Los mercados estrechos (anchura baja) indican una fijación de precios más eficiente y cálculos de EV más fiables
  5. Actúa rápido - Las oportunidades +EV son fugaces; las líneas se mueven rápido
  6. Registra tus resultados - Anota cada apuesta y compara el ROI real con el EV esperado a lo largo del tiempo
  7. Usa Kelly fraccional - La mayoría de profesionales utilizan un cuarto o medio Kelly para reducir la varianza

Endpoints relacionados

Last updated on