Valor de la Línea de Cierre (CLV)
Estadísticas agregadas de Valor de la Línea de Cierre para las predicciones +EV calificadas de SharpAPI. Para cada oportunidad +EV que el motor detecta, el sistema captura posteriormente la línea de cierre de la referencia sharp y califica la selección contra ella — este endpoint sirve esas calificaciones, agregadas según la dimensión que elijas (group_by), junto con los resultados realizados de victoria/derrota cuando se conoce el resultado del partido.
GET /api/v1/historical/clvSe requiere nivel Enterprise. Los endpoints agregados /api/v1/historical/* están restringidos por la funcionalidad history. Los niveles inferiores reciben 403 tier_restricted. Si estás en Pro o Sharp y quieres datos de líneas de cierre, usa Cuotas de cierre — precios de cierre brutos por evento, disponibles en tu nivel.
Cómo se calcula el CLV
Cuando un evento pasa de pre-match a en directo, la plataforma captura el último precio pre-match de cada casa como la línea de cierre de ese evento. El precio de cierre de la referencia sharp (devig_book — normalmente Pinnacle) se devigea con el método Power para obtener una probabilidad de cierre sin margen (no-vig), y cada predicción calificada se puntúa como:
CLV% = (closing_no_vig_prob × entry_decimal_odds − 1) × 100donde entry_decimal_odds es el precio en el momento en que SharpAPI detectó la oportunidad. Un CLV positivo significa que el precio detectado batió al cierre — podrías haber apostado a mejores cuotas que las que implicaba el valor justo final del mercado.
Los datos se sirven desde el almacén histórico ClickHouse. Los agregados se calculan sobre predicciones lógicas — los snapshots de precio repetidos de la misma selección (mismo evento, mercado, selección, casa, línea) se colapsan en una sola fila antes de contar, de modo que una selección re-observada a varios precios no se cuenta varias veces.
Parámetros de consulta
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
from | string | hace 7 días | Fecha de inicio (YYYY-MM-DD o ISO 8601). Limitada a la ventana de histórico de tu nivel. |
to | string | hoy | Fecha de fin (YYYY-MM-DD o ISO 8601). |
group_by | string | sportsbook | Dimensión de agregación. Una de: sportsbook, sport, league, market, day, devig_book. |
sport | string | todos | Filtrar por deporte(s), separados por comas (p. ej. basketball,baseball). |
league | string | todas | Filtrar por liga(s), separadas por comas (p. ej. nba,mlb). |
sportsbook | string | todas | Filtrar por casa(s) de apuestas, separadas por comas. |
devig_book | string | todas | Filtrar por la referencia sharp contra la que se valoró la selección (p. ej. pinnacle). |
Ventana de histórico por nivel
Los rangos de fechas se limitan a la ventana de retroceso de tu nivel (reflejada en meta.tier_window_days):
| Nivel | Ventana |
|---|---|
| Free | 7 días |
| Hobby | 30 días |
| Pro | 90 días |
| Sharp | 365 días |
| Enterprise | Ilimitada |
Filtra por devig_book=pinnacle para obtener la señal significativa. La validez del CLV está dominada por la referencia sharp contra la que se valoró la selección. El CLV referenciado a Pinnacle es la serie predictiva; las selecciones valoradas contra referencias de respaldo (p. ej. bookmaker) presentan un CLV estructuralmente negativo y no deben interpretarse como ventaja. Agrupa por devig_book para ver la diferencia.
Ejemplos de solicitudes
cURL
# CLV por casa de apuestas durante los últimos 7 días
curl -X GET "https://api.sharpapi.io/api/v1/historical/clv?group_by=sportsbook" \
-H "X-API-Key: YOUR_API_KEY"
# Solo CLV referenciado a Pinnacle, agrupado por deporte
curl -X GET "https://api.sharpapi.io/api/v1/historical/clv?devig_book=pinnacle&group_by=sport" \
-H "X-API-Key: YOUR_API_KEY"
# CLV día a día para las selecciones de DraftKings en un rango de fechas
curl -X GET "https://api.sharpapi.io/api/v1/historical/clv?sportsbook=draftkings&group_by=day&from=2026-06-01&to=2026-06-08" \
-H "X-API-Key: YOUR_API_KEY"Respuesta
Éxito (200)
{
"success": true,
"data": {
"date_range": {
"from": "2026-06-03T14:12:30.437",
"to": "2026-06-10T14:12:30.437"
},
"group_by": "sportsbook",
"groups": [
{
"group_key": "novig",
"total_graded": 1294,
"wins": 262,
"losses": 200,
"win_rate": 0.5670995670995671,
"avg_clv_percent": 0.673342797764432,
"avg_ev_percent": 1.613983921390446,
"total_predictions": 1555
},
{
"group_key": "prophetx",
"total_graded": 964,
"wins": 191,
"losses": 214,
"win_rate": 0.47160493827160493,
"avg_clv_percent": 0.07641414602522267,
"avg_ev_percent": 1.4343012769214647,
"total_predictions": 1331
}
]
},
"meta": {
"filters": {
"devig_book": null,
"group_by": "sportsbook",
"league": null,
"sport": null,
"sportsbook": null
},
"source": "clickhouse",
"tier_window_days": "unlimited",
"updated_at": "2026-06-10T14:12:58.75061216Z"
}
}Un array groups vacío es una respuesta válida cuando no existen predicciones calificadas para los filtros y el rango de fechas solicitados — no es un error.
Tres recuentos distintos — no mezcles denominadores. total_predictions cuenta todas las selecciones rastreadas (incluidas las que nunca se calificaron). total_graded cuenta las selecciones con una calificación de CLV (se capturó y comparó una línea de cierre). wins + losses cuenta el subconjunto, normalmente más pequeño, cuyo resultado del partido también está liquidado — y win_rate se calcula solo sobre ese subconjunto. Un grupo puede mostrar legítimamente total_graded: 1294 junto a wins + losses: 462. win_rate es null cuando un grupo no tiene apuestas liquidadas.
Respuestas de error
403 Tier Restricted
{
"error": {
"code": "tier_restricted",
"message": "This endpoint requires Enterprise tier or higher",
"docs": "https://sharpapi.io/pricing",
"tier": "pro",
"required_tier": "enterprise"
}
}400 Validation Error
{
"error": {
"code": "validation_error",
"message": "Invalid group_by. Must be one of: day, devig_book, league, market, sport, sportsbook"
}
}Campos de la respuesta
Objeto data
| Campo | Tipo | Descripción |
|---|---|---|
date_range | object | from/to reales utilizados tras la limitación por nivel |
group_by | string | La dimensión utilizada para la agregación |
groups | array | Array de filas de grupo |
Campos de la fila de grupo
| Campo | Tipo | Descripción |
|---|---|---|
group_key | string | El identificador del grupo (nombre de la casa de apuestas, deporte, liga, tipo de mercado, fecha YYYY-MM-DD o devig book) |
total_graded | integer | Predicciones lógicas con una calificación de CLV (línea de cierre capturada y comparada) |
wins | integer | Predicciones calificadas cuyo resultado del partido se liquidó como victoria |
losses | integer | Predicciones calificadas cuyo resultado del partido se liquidó como derrota |
win_rate | number | null | wins / (wins + losses). Calculado solo sobre el subconjunto liquidado; null cuando no existen apuestas liquidadas en el grupo |
avg_clv_percent | number | null | CLV% medio de las predicciones calificadas. Positivo = los precios detectados batieron al cierre en promedio. null cuando no es calculable |
avg_ev_percent | number | null | Valor esperado % medio en el momento de la detección para las predicciones del grupo. null cuando no es calculable |
total_predictions | integer | Todas las predicciones rastreadas en el grupo, incluidas las que (todavía) no han sido calificadas |
Objeto meta
| Campo | Tipo | Descripción |
|---|---|---|
filters | object | Eco de los filtros aplicados (sport, league, sportsbook, devig_book, group_by); null para los filtros no utilizados |
source | string | "clickhouse" — el almacén de analítica histórica |
tier_window_days | integer | string | Retroceso máximo para tu nivel (p. ej. 90), o "unlimited" |
updated_at | string | Marca de tiempo de la respuesta en formato ISO 8601 |
Interpretación del CLV
| CLV% | Interpretación |
|---|---|
| > +2% | Los precios detectados batieron sistemáticamente al cierre por un margen amplio — alto valor capturado |
| +0,5% a +2% | Los precios batieron modestamente al cierre — típico de las casas soft frente a una referencia sharp |
| -0,5% a +0,5% | Próximo al mercado — precios eficientes o resultados mixtos |
| < -0,5% | Los precios se ajustaron hacia el cierre — steam tardío o acción del lado sharp |
El CLV no es ROI — léelo con las salvedades adecuadas.
- La eficiencia del mercado varía. En los mercados más sharp y líquidos (por ejemplo los spreads y totales de la NBA, y los props de jugador de las grandes ligas), batir al cierre no se convierte de forma fiable en beneficio realizado — allí, batir la línea de cierre suele reflejar ruido en un mercado eficiente más que ventaja. En mercados más soft, un CLV positivo sigue siendo el mejor indicador adelantado de rentabilidad a largo plazo.
- Usa
win_ratejunto conavg_clv_percent. El endpoint devuelve resultados realizados exactamente por esta razón: un grupo con CLV positivo pero con un historial liquidado por debajo del punto de equilibrio sobre una muestra grande te está diciendo que el CLV ahí no se está convirtiendo. - Cuidado con el tamaño de la muestra. Los grupos con un
total_gradedpequeño o pocas apuestas liquidadas (wins + losses) son ruido — compara grupos solo con un volumen significativo. - La referencia sharp importa. Solo el CLV referenciado a una casa sharp (filtra
devig_book=pinnacle) tiene este significado; las filas referenciadas a respaldos no.
Endpoints relacionados
- Cuotas de cierre — Precios de cierre brutos por evento (nivel Pro y superiores)
- Cuotas de cierre por fecha — Precios de cierre históricos por evento para una fecha determinada
- Oportunidades +EV — Apuestas de valor esperado positivo en tiempo real
- Snapshot de cuotas — Cuotas pre-match y en directo actuales