Splits de Apuestas
Obtén splits de apuestas públicas (handle % y bet %) de DraftKings, Circa Sports y BetMGM.
GET /api/v1/splitsAutenticación
Requiere API key. Requiere plan Pro (229 $/mes) o superior.
¿Qué son los splits de apuestas?
Handle % es el porcentaje del dinero total apostado en cada lado. Bet % es el porcentaje del total de tickets (apuestas realizadas) en cada lado.
La diferencia entre bet % y handle % revela el dinero sharp. Si el 30 % de los tickets concentra el 60 % del dinero, los apostantes sharp están en ese lado.
Fuentes de Datos
| Fuente | Tipo | Qué incluye | Frecuencia de Actualización |
|---|---|---|---|
| DraftKings | Casa recreativa (~35 % de cuota del mercado de EE. UU.) | Handle % y bet % | Cada 5 minutos |
| Circa Sports | Casa orientada a sharps (atrae profesionales) | Handle % y bet % | Cada 5 minutos |
| BetMGM | Casa recreativa — derivada de su propio campo de porcentaje de apuestas públicas | Solo bet % — los valores de handle_pct son null | Intermitente |
Comparar los splits de DraftKings (recreativa) frente a Circa (sharp) revela dónde el dinero profesional diverge del público.
La cobertura está fijada en estas tres casas. No crece con el cupo de casas de apuestas de tu plan: seleccionar más casas, o subir de nivel, no añade fuentes de splits. Ninguna otra casa publica splits de apuestas y no hay más previstas. Como BetMGM solo aporta un porcentaje de tickets, la brecha bet %/handle % que revela el dinero sharp únicamente puede calcularse en las filas de DraftKings y Circa. El historial incluye muestras de DraftKings, Circa y BetMGM capturadas durante las 48 horas de retención. BetMGM solo publica porcentajes de tickets; sus porcentajes de dinero siguen siendo null.
consensus es una etiqueta, no una casa de apuestas. Cuando todas las fuentes que cubren un evento publican cifras idénticas, esas filas se fusionan en una sola con "sportsbook": "consensus". La API la aplica de forma sintética: nunca aparece en /api/v1/sportsbooks, aunque /splits?sportsbook=consensus sí filtra por ella. Un filtro sportsbook=draftkings no devuelve las filas fusionadas.
Parámetros de Consulta
| Parámetro | Tipo | Descripción |
|---|---|---|
sport | string | Filtra por deporte (separado por comas). Ejemplo: basketball |
league | string | Filtra por liga (separado por comas). Ejemplo: nba,ncaab |
sportsbook | string | Filtra por fuente de splits. Ejemplo: draftkings,circa. También acepta el valor sintético consensus. |
event_id | string | Filtra por ID canónico de evento (separado por comas) |
market | string | Filtra eventos que incluyan un mercado de splits dado (separado por comas). Uno o más de spread, total, moneyline. |
limit | integer | Resultados máximos (predeterminado 100, máximo 200) |
offset | integer | Desplazamiento de paginación (predeterminado 0) |
Respuesta
{
"data": [
{
"event_id": "mlb_guardians_orioles_2026-04-16",
"sport": "baseball",
"league": "mlb",
"sportsbook": "draftkings",
"away_team": "Baltimore Orioles",
"home_team": "Cleveland Guardians",
"spread": {
"away_odds": -1.5,
"home_odds": 1.5,
"handle_pct": { "away": 0.22, "home": 0.78 },
"bets_pct": { "away": 0.20, "home": 0.80 }
},
"total": {
"line": 8,
"handle_pct": { "over": 0.53, "under": 0.47 },
"bets_pct": { "over": 0.57, "under": 0.43 }
},
"moneyline": {
"away_odds": 104,
"home_odds": -126,
"handle_pct": { "away": 0.28, "home": 0.72 },
"bets_pct": { "away": 0.33, "home": 0.67 }
},
"fetched_at": "2026-04-16T19:25:28.363825+00:00",
"available_metrics": ["bets_pct", "handle_pct"]
}
],
"pagination": {
"limit": 100,
"offset": 0,
"count": 1,
"total": 41,
"has_more": false,
"next_offset": null
},
"updated_at": "2026-04-16T19:29:38.920698424Z"
}En la respuesta de /splits el spread incluye los valores de line dentro de las claves away_odds/home_odds (p. ej., -1.5 / +1.5) — esta nomenclatura es una inconsistencia conocida. El endpoint histórico utiliza away_line/home_line para los mismos datos.
Campos de Respuesta
| Campo | Tipo | Descripción |
|---|---|---|
event_id | string | ID canónico de evento — úsalo para hacer join con los datos de /odds |
sport | string | Nombre de deporte normalizado por Atlas |
league | string | Nombre de liga normalizado por Atlas |
sportsbook | string | Casa de apuestas fuente de los datos de splits (draftkings, circa, betmgm o el valor sintético consensus) |
away_team | string | Nombre del equipo visitante |
home_team | string | Nombre del equipo local |
spread.away_odds | number | Valor de line del spread visitante (p. ej., -1.5) — consulta el aviso anterior |
spread.home_odds | number | Valor de line del spread local (p. ej., +1.5) |
spread.handle_pct | object | % de dinero en cada lado (away, home; 0.0-1.0) |
spread.bets_pct | object | % de tickets en cada lado (away, home; 0.0-1.0) |
total.line | number | Línea de over/under (p. ej., 225.5) |
total.handle_pct | object | % de dinero (over, under; 0.0-1.0) |
total.bets_pct | object | % de tickets (over, under; 0.0-1.0) |
moneyline.away_odds | number | Cuotas de moneyline del visitante (formato americano) |
moneyline.home_odds | number | Cuotas de moneyline del local (formato americano) |
moneyline.handle_pct | object | % de dinero en cada lado (away, home; 0.0-1.0) |
moneyline.bets_pct | object | % de tickets en cada lado (away, home; 0.0-1.0) |
fetched_at | string | Marca de tiempo ISO 8601 de la última extracción de datos |
available_metrics | array | Qué métricas de split llega a publicar la casa de apuestas de esta fila — bets_pct, handle_pct o ambas, siempre en ese orden. Es una afirmación sobre la casa, no sobre los valores de esta fila. Se omite cuando la casa no está declarada — véase más abajo. |
Qué valores pueden ser null, y cuáles pueden faltar. Las claves de porcentaje y de cuotas anteriores siempre están presentes, aunque algunas llevan null en lugar de un número. Dos claves pueden faltar en vez de llevar null: total.line se omite en un evento para el que la casa no ha publicado un total, y available_metrics se omite para una casa que SharpAPI no ha declarado — léelas con un valor por defecto en lugar de dar por hecho que la clave existe.
handle_pct.away / .home (y .over / .under en los totales) son null en todas las filas betmgm, porque BetMGM solo publica un porcentaje de tickets — no hay cifra de handle que informar. Los valores de bets_pct son null cuando la fuente aún no ha publicado un porcentaje para ese mercado; el feed de BetMGM es intermitente, así que ahí es donde aparece. moneyline.away_odds / .home_odds son null cuando una casa ha retirado la línea de dinero de un evento pero sigue publicando sus porcentajes de splits — esto también ocurre en filas de DraftKings y Circa, no solo de BetMGM. La especificación OpenAPI declara todo esto como nullable, de modo que un cliente generado los aceptará.
El campo event_id utiliza el mismo formato de ID canónico que el endpoint /odds, por lo que puedes hacer join de splits con datos de cuotas directamente.
Por ejemplo, obtén las cuotas de un partido específico y compáralas con sus splits:
GET /api/v1/odds?event_id=nba_thunder_timberwolves_2026-03-15
GET /api/v1/splits?event_id=nba_thunder_timberwolves_2026-03-15/odds no incluye el bet % público por fila.
Los splits de apuestas (% de dinero y % de tickets) solo están disponibles a través de este endpoint (/splits) y su versión histórica (/splits/history). No existe el campo public_bet_pct en las filas de /odds.
Cómo leer available_metrics
Una fila de splits puede incluir available_metrics, un array que nombra las métricas de split que la casa de apuestas de esa fila llega a publicar. Describe la casa, no la fila: una casa que publica el porcentaje de dinero sigue listando handle_pct aunque los miembros handle_pct de esa fila sean null.
Solo pueden aparecer dos nombres, siempre en este orden, y cada uno es exactamente una clave dentro de los objetos spread, total y moneyline, de modo que un nombre aquí apunta a un campo que puede consultar:
bets_pct— porcentaje de tickets (apuestas realizadas), 0.0-1.0handle_pct— porcentaje de dinero (handle), 0.0-1.0
El campo se omite por completo cuando SharpAPI no ha declarado qué publica una casa. Su ausencia significa no declarado, nunca no publica nada.
Lea la lista junto con el valor. Tomando handle_pct como ejemplo:
available_metrics | Miembros de handle_pct | Qué significa |
|---|---|---|
presente, lista handle_pct | números | La casa publica el porcentaje de dinero y lo tenemos. |
presente, lista handle_pct | null | La casa publica el porcentaje de dinero y nos falta — una carencia de nuestro lado, no una limitación de la casa. |
presente, no lista handle_pct | null | La casa no publica el porcentaje de dinero. No hay nada roto. |
presente, no lista handle_pct | números | No debería ocurrir; trátelo como una declaración desactualizada y confíe en el valor. |
| ausente | números o null | No se declara nada sobre esta casa. No deduzca en ningún sentido — lea los valores por sí mismos y no registre la casa como que no publica nada. |
Una fila consensus lleva la intersección. Una fila fusionada con "sportsbook": "consensus" agrupa varias casas, así que su afirmación debe cumplirse para todas ellas: lista solo las métricas que declaran todas las casas contribuyentes, y omite el campo por completo si alguna de ellas no está declarada.
Ejemplos
Todos los Splits NBA
curl "https://api.sharpapi.io/api/v1/splits?league=nba" \
-H "X-API-Key: YOUR_API_KEY"Historial de Splits
Realiza un seguimiento de cómo cambian los splits a lo largo del tiempo para un evento concreto.
GET /api/v1/splits/history?event_id={event_id}Parámetros de Consulta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
event_id | string | Sí | ID canónico de evento |
sportsbook | string | No | Filtra por casa (separadas por comas), antes de paginar. |
start_time | string | No | Límite inferior. RFC 3339 (2026-04-16T13:00:00Z) o segundos Unix (1776344602). |
end_time | string | No | Límite superior, mismos formatos. |
limit | integer | No | Entradas máximas (predeterminado 100, máximo 200). |
cursor | string | No | Token de continuación de meta.next_cursor; conserva los filtros de evento, casa y tiempo. |
La retención es de solo 48 horas. No hay archivo a largo plazo ni recuperación de muestras fuera de esa ventana. Sigue meta.next_cursor mientras meta.has_more sea true. meta.total, books, oldest y newest describen la página actual; meta.limit es el tamaño efectivo (100 por defecto, máximo 200; los valores mayores se limitan a 200). Mantén el mismo end_time en todas las páginas para un intervalo fijo. Las fechas no válidas o los cursores incompatibles devuelven 400; los fallos temporales del almacén devuelven 503.
Respuesta
Las entradas se ordenan de la más antigua a la más reciente. Este endpoint emite el envoltorio de éxito (success/data/meta) — distinto de /splits, que emite data/pagination/updated_at.
El payload del historial usa book (no sportsbook) y el spread incluye away_line/home_line (no away_odds/home_odds). Ambas son inconsistencias conocidas frente a /splits. Cada entrada incluye además available_metrics, con el mismo significado que en /splits: las métricas que llega a publicar la casa de esa entrada. Se omite para una casa que SharpAPI no ha declarado.
Los valores del historial pueden no estar disponibles. Los porcentajes pueden ser null; BetMGM nunca publica porcentajes de dinero. Las líneas y cuotas pueden faltar o ser null. Consulta available_metrics para saber qué métricas publica la casa y comprueba los valores ausentes o nulos de cada mercado.
{
"success": true,
"data": [
{
"available_metrics": ["bets_pct", "handle_pct"],
"book": "circa",
"ts": "2026-04-16T13:03:21.071966+00:00",
"timestamp": 1776344602.36,
"spread": {
"away_line": -1.5,
"home_line": 1.5,
"handle_pct": { "away": 0.37, "home": 0.63 },
"bets_pct": { "away": 0.27, "home": 0.73 }
},
"total": {
"line": 8,
"handle_pct": { "over": 0.43, "under": 0.57 },
"bets_pct": { "over": 0.55, "under": 0.45 }
},
"moneyline": {
"away_odds": 104,
"home_odds": -126,
"handle_pct": { "away": 0.35, "home": 0.65 },
"bets_pct": { "away": 0.35, "home": 0.65 }
}
}
],
"meta": {
"event_id": "mlb_guardians_orioles_2026-04-16",
"total": 1,
"books": ["circa"],
"limit": 100,
"has_more": false,
"next_cursor": "",
"oldest": "2026-04-16T13:03:22.360588312Z",
"newest": "2026-04-16T13:03:22.360588312Z",
"updated_at": "2026-04-16T19:28:50.525875452Z"
}
}Los datos se recopilan cada ~5 minutos y se conservan durante 48 horas mediante un sorted set de Valkey (splits_history:{event_id}) puntuado por timestamp Unix.
Historial Completo
curl "https://api.sharpapi.io/api/v1/splits/history?event_id=nba_thunder_timberwolves_2026-03-15" \
-H "X-API-Key: YOUR_API_KEY"Interpretación de los Splits
| Señal | Qué significa |
|---|---|
| Bet % alto, Handle % bajo | Lado público — muchas apuestas pequeñas |
| Bet % bajo, Handle % alto | Lado sharp — menos apuestas pero más grandes |
| DK y Circa coinciden | Consenso de mercado — público y sharp alineados |
| DK y Circa divergen | Brecha sharp-público — Circa (sharp) discrepa de DK (público) |
Los splits provienen únicamente de tres casas — DraftKings y BetMGM (recreativas) y Circa (cercana al perfil sharp). Ninguna casa verdaderamente sharp publica splits, y no hay más fuentes previstas. Utiliza los splits como una señal más junto con el movimiento de líneas y el análisis de +EV, no de forma aislada.