Oportunidades de Arbitraje
Encuentra oportunidades de arbitraje con beneficio garantizado entre casas de apuestas.
GET /api/v1/opportunities/arbitrageAutenticación
Requiere API key. Se requiere nivel Hobby o superior. Tu cuenta debe tener la función arbitrage habilitada.
Parámetros de Consulta
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
sport | string | all | Filtrar por deporte(s), separados por comas (p. ej. basketball, football) |
league | string | all | Filtrar por liga(s), separadas por comas (p. ej. nba, nfl, nhl) |
sportsbook | string | tier-allowed | Filtrar por casa(s) de apuestas, separadas por comas. Se aplican los límites del nivel. |
market | string | all | Filtrar por tipo(s) de mercado, separados por comas. Admite alias de categoría — consulta Odds: Alias de Categoría de Mercado. |
min_profit | number | 0.5 | Porcentaje mínimo de beneficio (p. ej. 1.0 = 1%) |
live | boolean | — | true = solo en vivo, false = solo prepartido, omitir = ambos |
format | string | json | Formato de respuesta: json o csv. El CSV se descarga como arbitrage_YYYY-MM-DD.csv. |
limit | integer | 50 | Resultados por página (máx. 200) |
offset | integer | 0 | Desplazamiento de paginación (máx. 5000) |
Límite de beneficio: Las oportunidades con un beneficio superior al 10% se filtran automáticamente. Casi siempre son arbitrajes fantasma causados por cuotas obsoletas o suspendidas, en lugar de oportunidades reales.
Cambio incompatible: El campo game_state (marcador/periodo/reloj) se eliminó de esta respuesta. El estado del partido en vivo ahora 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.
Filtrado de Múltiples Valores
Usa valores separados por comas para los filtros multi-selección:
?sport=basketball,football&league=nba,nflEjemplos de Solicitudes
cURL
curl -X GET "https://api.sharpapi.io/api/v1/opportunities/arbitrage?league=nba&min_profit=1" \
-H "X-API-Key: YOUR_API_KEY"Respuesta
Éxito (200)
{
"success": true,
"data": [
{
"id": "arb_dk_pin_nba_lal_bos_ml",
"event_id": "evt_nba_lal_bos_20260208",
"event_name": "Los Angeles Lakers @ Boston Celtics",
"sport": "basketball",
"league": "nba",
"market_type": "moneyline",
"line": null,
"profit_percent": 1.83,
"implied_total": 98.2,
"is_live": false,
"start_time": "2026-02-08T19:00:00Z",
"is_alternate_line": false,
"possibly_stale": false,
"oldest_odds_age_seconds": 8,
"warnings": [],
"ev_available": true,
"ev_percentage": 3.5,
"is_player_prop": false,
"player_name": null,
"stat_category": null,
"legs": [
{
"sportsbook": "draftkings",
"selection": "Los Angeles Lakers",
"odds_american": 145,
"odds_decimal": 2.45,
"implied_probability": 0.408,
"stake_percent": 41.5,
"timestamp": "2026-02-08T14:22:05.000Z",
"external_event_id": "33483153",
"selection_id": "sel_lal_ml",
"market_id": "mkt_ml_33483153"
},
{
"sportsbook": "pinnacle",
"selection": "Boston Celtics",
"odds_american": -135,
"odds_decimal": 1.74,
"implied_probability": 0.574,
"stake_percent": 58.5,
"timestamp": "2026-02-08T14:22:08.000Z",
"external_event_id": null,
"selection_id": null,
"market_id": null
}
],
"detected_at": "2026-02-08T14:22:10.456Z"
}
],
"pagination": {
"limit": 50,
"offset": 0,
"has_more": false,
"next_offset": null
},
"meta": {
"source": "cache",
"summary": {
"count": 3,
"avg_profit": 1.23,
"max_profit": 1.83,
"by_market": { "moneyline": 2, "point_spread": 1 },
"by_sport": { "basketball": 3 }
},
"filters": {
"sport": null,
"league": ["nba"],
"sportsbook": null,
"market": null,
"live": null,
"min_profit": 1.0
},
"books_analyzed": 8
}
}Cabeceras de Respuesta
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 297
X-RateLimit-Reset: 1707401000
X-Data-Delay: 0
X-Request-Id: req_arb789xyz012Respuestas de Error
401 Unauthorized
{
"error": {
"code": "unauthorized",
"message": "Invalid or missing API key",
"docs": "https://docs.sharpapi.io/en/authentication"
}
}403 Tier Required
{
"error": {
"code": "tier_restricted",
"message": "Arbitrage detection requires Hobby tier 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 la Respuesta
| Campo | Tipo | Descripción |
|---|---|---|
id | string | Identificador único del arbitraje (hash) |
event_id | string | Identificador del evento |
event_name | string | Nombre del evento legible para humanos |
sport | string | Identificador del deporte (en minúsculas) |
league | string | Identificador de la liga |
market_type | string | Tipo de mercado (moneyline, point_spread, total_points, etc.) |
line | number|null | Línea de hándicap/total (p. ej. -3.5) |
profit_percent | number | Beneficio garantizado como porcentaje (p. ej. 1.83 = 1,83%) |
implied_total | number | Suma de las probabilidades implícitas de todas las patas (por debajo de 100 = existe arbitraje) |
is_live | boolean | Indica si el evento está actualmente en vivo |
start_time | string|null | Hora de inicio del evento en ISO 8601 |
is_alternate_line | boolean | Indica si utiliza una línea no estándar |
possibly_stale | boolean | Indica si las cuotas pueden haberse movido desde la detección |
oldest_odds_age_seconds | number|null | Antigüedad de las cuotas de la pata más antigua, en segundos |
warnings | string[] | Indicadores de advertencia. Valores posibles: LIVE_GAME, LIVE_HIGH_PROFIT_SUSPICIOUS, LOW_IMPLIED_TOTAL, POTENTIALLY_STALE_ODDS, VERY_STALE_ODDS |
ev_available | boolean | Indica si existe una oportunidad de EV en este mercado |
ev_percentage | number|null | Porcentaje de EV si está disponible |
is_player_prop | boolean | Indica si se trata de un mercado de prop de jugador |
player_name | string|null | Nombre del jugador (si es prop de jugador) |
stat_category | string|null | Tipo de estadística (si es prop de jugador, p. ej. points, rebounds) |
legs | array | Array de patas de apuesta que forman el arbitraje |
detected_at | string | Marca de tiempo ISO 8601 de cuándo se detectó el arbitraje por primera vez |
Objeto Leg
| Campo | Tipo | Descripción |
|---|---|---|
sportsbook | string | Casa de apuestas para esta pata |
selection | string | La selección (nombre del equipo, Over/Under, etc.) |
odds_american | number | Cuotas americanas para esta pata |
odds_decimal | number | Cuotas decimales para esta pata |
implied_probability | number | Probabilidad implícita (de 0,0 a 1,0) |
stake_percent | number | Porcentaje del stake total a colocar en esta pata |
timestamp | string|null | Cuándo se capturaron estas cuotas (ISO 8601) |
external_event_id | string|null | ID nativo del evento en la casa de apuestas |
selection_id | string|null | ID de la selección/resultado en la casa de apuestas |
market_id | string|null | ID del mercado en la casa de apuestas |
Formato CSV
Cuando se usa ?format=csv, la respuesta se descarga como arbitrage_YYYY-MM-DD.csv con las siguientes columnas:
event,sport,market,line,profit%,implied_total,book1,selection1,odds1,stake1%,book2,selection2,odds2,stake2%,is_live,is_alternate_line,possibly_stale,warnings,detected_atCómo Funciona el Arbitraje
El arbitraje aprovecha las diferencias de precio entre casas de apuestas para garantizar un beneficio independientemente del resultado. Cuando las probabilidades implícitas combinadas de todas las patas de un mercado suman menos del 100%, existe una oportunidad de arbitraje.
El Principio Fundamental
Book A: Team X +150 (implied 40.0%)
Book B: Team Y -130 (implied 56.5%)
Total implied: 96.5% < 100% = ARBITRAGECuando el total está por debajo del 100%, puedes apostar de forma proporcional en todos los resultados y garantizar un beneficio.
Cálculo del Beneficio
Profit % = (100 / implied_total) - 100Usando el ejemplo anterior:
Profit % = (100 / 96.5) - 100 = 3.63%Esto significa que por cada 1.000 $ apostados, tienes garantizados aproximadamente 36,30 $ de beneficio.
Cálculo de los Stakes Óptimos
Para garantizar retornos iguales independientemente del resultado, asigna los stakes de forma proporcional:
// Decimal odds: Team X = 2.50, Team Y = 1.77
const impliedX = 1 / 2.50; // 0.400
const impliedY = 1 / 1.77; // 0.565
const total = impliedX + impliedY; // 0.965
const stakeX = impliedX / total; // 41.5% of bankroll
const stakeY = impliedY / total; // 58.5% of bankrollEjemplo Completo de Stake
Bankroll total para este arbitraje: 1.000 $
| Pata | Stake | Cuotas | Pago si gana |
|---|---|---|---|
| Team X @ DraftKings | 415 $ | +150 | 1.037,50 $ |
| Team Y @ Pinnacle | 585 $ | -130 | 1.035,00 $ |
Beneficio garantizado: ~35-38 $ (3,5-3,8%) independientemente del resultado.
Arbitraje a Tres Vías
Deportes como el fútbol y el hockey tienen mercados a tres vías (local/empate/visitante), que también pueden generar arbitrajes:
Home Win: +200 (33.3%)
Draw: +250 (28.6%)
Away Win: +180 (35.7%)
Total implied: 97.6% -> 2.4% arbitrage profitSe aplica el mismo cálculo de stake: divide la probabilidad implícita de cada pata entre el total para determinar la asignación del stake.
Por Qué Existen los Arbitrajes
- Diferencias de tiempo - Las casas de apuestas actualizan las cuotas a distintas velocidades
- Opiniones divergentes - Las casas tienen distintos modelos de riesgo y exposición
- Promociones - Las cuotas potenciadas de una casa crean huecos artificiales
- Errores - Ocasionalmente, una casa publica cuotas incorrectas
Buenas Prácticas
Riesgo de cuenta: Las casas de apuestas monitorizan activamente la actividad de arbitraje. Las cuentas que colocan exclusivamente apuestas de arbitraje pueden ser limitadas o restringidas. Considera mezclar las apuestas de arbitraje con actividad recreativa.
- Actúa rápido - Las ventanas de arbitraje suelen ser efímeras (segundos a minutos)
- Redondea tus stakes - Una apuesta de 47,32 $ resulta sospechosa; redondea a 50 $
- Usa stakes precalculados - El campo
stake_percentte da la asignación óptima - Verifica las cuotas antes de apostar - Confirma siempre que las cuotas en la casa de apuestas no se han movido
- Empieza con arbitrajes mayores - Céntrate en
min_profit=1o superior para tener en cuenta el movimiento de líneas - Sigue el
implied_total- Totales más bajos significan mayores beneficios garantizados - Diversifica casas de apuestas - Distribuir la actividad entre muchas casas reduce el riesgo individual de cada cuenta
Arbitraje vs Apuestas +EV
| Aspecto | Arbitraje | Apuestas +EV |
|---|---|---|
| Riesgo | Cero (beneficio garantizado) | Existe varianza |
| Beneficio por apuesta | 1-3% típico | 2-10% de ventaja |
| Riesgo de cuenta | Alto (limitaciones probables) | Menor |
| Capital requerido | Alto (apostar a ambos lados) | Menor |
| Sostenibilidad | Limitada por la salud de la cuenta | Viable a largo plazo |
Muchos apostadores experimentados prefieren las apuestas +EV al arbitraje porque las cuentas duran más y las ventajas esperadas suelen ser mayores. Consulta el endpoint de Oportunidades +EV para más detalles.
Endpoints Relacionados
- Oportunidades +EV - Apuestas con valor esperado positivo
- Middles - Oportunidades por discrepancia de líneas
- Conceptos de Arbitraje - Teoría detallada del arbitraje
- Ejemplo de Escáner de Arbitraje - Construye un escáner en tiempo real