Cuotas de cierre históricas
Obtén las cuotas de cierre capturadas para todos los eventos en una fecha específica — el último precio previo al partido de cada casa de apuestas antes de que el evento pasara a directo, con probabilidades sin margen (no-vig) devigadas mediante el método Power.
GET /api/v1/historical/odds/closingSe requiere nivel Sharp o superior. Los niveles Pro e inferiores recibirán un error 403 tier_restricted. Este endpoint está restringido por la funcionalidad closing_lines.
Ventana de datos de la Fase 1: Las líneas de cierre se capturan en tiempo real en las transiciones isLive false→true. Valkey retiene 30 días de datos. Solicitar una fecha anterior a 30 días devolverá un resultado vacío.
Autenticación
Requiere API key. Se requiere nivel Sharp o superior (funcionalidad closing_lines).
Parámetros de consulta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
date | string | Sí | Fecha en formato YYYY-MM-DD (UTC). |
sport | string | Sí | Identificador del deporte, p. ej. basketball, football, ice_hockey. |
league | string | Sí | Identificador de la liga, p. ej. nba, nfl, nhl. |
Los tres parámetros son obligatorios. La respuesta se filtra a los eventos que coinciden exactamente con el deporte y la liga en esa fecha UTC.
Ventana de fechas
El nivel Sharp permite hasta 30 días de retroceso. Solicitar una fecha más allá de la ventana de tu nivel devuelve un error 403 tier_restricted con el tamaño de ventana permitido.
Ejemplos de solicitudes
cURL
# Líneas de cierre de la NBA del 10 de abril
curl -X GET "https://api.sharpapi.io/api/v1/historical/odds/closing?date=2026-04-10&sport=basketball&league=nba" \
-H "X-API-Key: YOUR_API_KEY"
# Líneas de cierre de la NFL
curl -X GET "https://api.sharpapi.io/api/v1/historical/odds/closing?date=2026-04-06&sport=football&league=nfl" \
-H "X-API-Key: YOUR_API_KEY"Respuesta
Éxito (200)
{
"success": true,
"data": {
"date": "2026-04-10",
"sport": "basketball",
"league": "nba",
"events": [
{
"event_id": "evt_nba_bos_mia_20260410",
"sport": "basketball",
"league": "nba",
"home_team": "Boston Celtics",
"away_team": "Miami Heat",
"event_start_time": "2026-04-10T18:00:00Z",
"first_captured_at": "2026-04-10T17:58:12.000000000Z",
"books": [
{
"book": "pinnacle",
"captured_at": "2026-04-10T17:58:12.000000000Z",
"lines": [
{
"market_type": "moneyline",
"selection": "Boston Celtics",
"selection_type": "home",
"line": null,
"odds_american": -145,
"odds_decimal": 1.690,
"implied_probability": 0.5920,
"no_vig_probability": 0.5813
},
{
"market_type": "moneyline",
"selection": "Miami Heat",
"selection_type": "away",
"line": null,
"odds_american": 125,
"odds_decimal": 2.250,
"implied_probability": 0.4444,
"no_vig_probability": 0.4187
},
{
"market_type": "point_spread",
"selection": "Boston Celtics",
"selection_type": "home",
"line": -3.5,
"odds_american": -110,
"odds_decimal": 1.909,
"implied_probability": 0.5238,
"no_vig_probability": 0.5000
}
]
},
{
"book": "draftkings",
"captured_at": "2026-04-10T17:57:44.000000000Z",
"lines": [
{
"market_type": "moneyline",
"selection": "Boston Celtics",
"selection_type": "home",
"line": null,
"odds_american": -140,
"odds_decimal": 1.714,
"implied_probability": 0.5833,
"no_vig_probability": 0.5730
},
{
"market_type": "moneyline",
"selection": "Miami Heat",
"selection_type": "away",
"line": null,
"odds_american": 118,
"odds_decimal": 2.180,
"implied_probability": 0.4587,
"no_vig_probability": 0.4270
}
]
}
]
}
],
"total_events": 5,
"total_lines": 48
},
"meta": {
"source": "valkey:closing_line",
"tier_window_days": 30,
"filters": {
"sport": "basketball",
"league": "nba",
"date": "2026-04-10"
},
"updated_at": "2026-04-17T20:00:00.000000000Z"
}
}Respuestas de error
400 Error de validación
{
"error": {
"code": "validation_error",
"message": "date parameter is required in YYYY-MM-DD format"
}
}403 Nivel restringido (nivel incorrecto)
{
"error": {
"code": "tier_restricted",
"message": "The 'closing_lines' feature requires Sharp or higher.",
"required_tier": "sharp",
"docs": "https://docs.sharpapi.io/en/pricing"
}
}403 Nivel restringido (fecha demasiado antigua)
{
"error": {
"code": "tier_restricted",
"message": "Your sharp plan allows historical data up to 30 days back",
"tier": "sharp",
"docs": "https://sharpapi.io/pricing"
}
}Campos de respuesta
Objeto data
| Campo | Tipo | Descripción |
|---|---|---|
date | string | La fecha solicitada (YYYY-MM-DD) |
sport | string | Filtro de deporte aplicado |
league | string | Filtro de liga aplicado |
events | array | Eventos con líneas de cierre que coinciden con la fecha, deporte y liga |
total_events | integer | Número de eventos en la respuesta |
total_lines | integer | Número total de líneas de cierre individuales en todos los eventos y casas de apuestas |
Objeto Event
| Campo | Tipo | Descripción |
|---|---|---|
event_id | string | Identificador único del evento |
sport | string | Deporte |
league | string | Liga |
home_team | string | Nombre del equipo local |
away_team | string | Nombre del equipo visitante |
event_start_time | string | Hora de inicio programada en formato ISO 8601 |
first_captured_at | string | Marca temporal ISO 8601 de la primera captura de línea de cierre para este evento |
books | array | Cargas útiles de líneas de cierre por casa de apuestas |
Objeto Book
| Campo | Tipo | Descripción |
|---|---|---|
book | string | Identificador de la casa de apuestas |
captured_at | string | Marca temporal ISO 8601 de cuándo se capturó la línea de cierre de esta casa |
lines | array | Array de entradas de líneas de cierre para esta casa |
Entrada de línea de cierre
| Campo | Tipo | Descripción |
|---|---|---|
market_type | string | Tipo de mercado: moneyline, point_spread, total_points, etc. |
selection | string | Etiqueta de la selección (nombre del equipo, Over/Under, jugador) |
selection_type | string | home, away, over, under, etc. |
line | number|null | Valor del hándicap o total (-3.5, 220.5). null para moneylines. |
player_name | string | Nombre del jugador para apuestas de jugador (se omite en otros casos) |
stat_category | string | Tipo de estadística para apuestas de jugador (se omite en otros casos) |
odds_american | integer | Cuotas americanas al cierre |
odds_decimal | number | Cuotas decimales al cierre |
implied_probability | number | Probabilidad implícita en bruto (con margen) |
no_vig_probability | number|null | Probabilidad justa devigada mediante Power (0.0–1.0). Presente para mercados de 2 y 3 vías; null para mercados de selección única. |
timestamp | string | Marca temporal ISO 8601 del registro de cuotas utilizado para la captura |
Objeto meta
| Campo | Tipo | Descripción |
|---|---|---|
source | string | Siempre "valkey:closing_line" (backend de la Fase 1) |
tier_window_days | integer | Máximo de días de retroceso para tu nivel (Sharp = 30) |
updated_at | string | Marca temporal ISO 8601 de la respuesta |
Casos de uso
Análisis de CLV: Compara los valores de no_vig_probability entre casas de apuestas frente a Pinnacle. Una casa blanda con un no_vig_probability más alto sobre el favorito cerró más floja — CLV positivo para los apostantes que tomaron ese lado.
Auditoría de line shopping: Obtén las líneas de cierre de todas las casas de apuestas para entender dónde había valor disponible al cierre.
Calibración de modelos: Usa implied_probability y no_vig_probability como verdad histórica para calibrar tus propios modelos de probabilidad.
Endpoints relacionados
- Closing Line Value (CLV) — Agregados de CLV% agrupados por casa de apuestas, deporte, liga o día
- Snapshot de cuotas — Cuotas actuales en tiempo real
- Oportunidades +EV — Apuestas de valor esperado positivo en tiempo real