Odds API MCP
Lee eventos deportivos y de carreras, probabilidades de casas de apuestas, resultados y movimientos de líneas a través de 32 herramientas MCP de solo lectura.
Documentación
Documentación de Odds API
Realiza primero una solicitud del lado del servidor. Luego avanza por cobertura, eventos, actualizaciones en streaming, límites, caché y grupos de endpoints según sea necesario.
Paso 1
Elige un plan
Elige un plan mensual en USD para acceso a la API y volumen de producción.
Paso 2
Obtén tu clave de API
Usa tu clave en la documentación o en tus propias solicitudes.
Paso 3
Llama a la API
Comienza con meta, eventos, odds, apuestas y resultados.
curl -H "X-API-Key: $ODDS_API_KEY" \
"https://api.odds-api.net/v1/events?sport=basketball&league=NBA&limit=25"
Cómo usar esta documentación
Usa las páginas de guía para decisiones de integración. Usa las páginas de endpoints para parámetros en vivo, códigos de respuesta, ejemplos de cuerpo de respuesta, formatos de streaming y ejemplos de solicitud generados a partir del esquema OpenAPI actual.
Explora la API global de odds de apuestas deportivas Construye un pipeline de modelos pandas validado Compara los libros de órdenes de Kalshi y Polymarket
Cobertura
Descubre qué existe antes de solicitar odds.
Construye filtros a partir de endpoints de cobertura y metadatos. Esto mantiene honestos los filtros de la interfaz y evita que los trabajos en segundo plano consulten combinaciones no compatibles.
/v1/coverage
Instantánea de cobertura
Úsala para vistas de cobertura orientadas al comprador o internas en casas de apuestas, deportes, ligas y mercados.
/v1/sports and /v1/leagues
Filtros de deportes y ligas
Cárgalos antes de las solicitudes de eventos para que tu interfaz y tus trabajos solo soliciten competiciones compatibles.
/v1/bookmakers
Filtros de casas de apuestas
Inspecciona las claves de casas de apuestas, nombres mostrados, países y disponibilidad antes de solicitar odds.
Guías regionales de API
Usa las guías por país para claves regionales de casas de apuestas, ejemplos de mercados y rutas de solicitud.
Eventos y odds
Pagina listas de eventos y luego carga instantáneas de odds.
Mantén ventanas de eventos estrechas, procesa la paginación de forma idempotente y almacena los campos de frescura de las instantáneas de odds para que los precios obsoletos sean visibles.
/v1/events
Próximos eventos deportivos
Usa filtros de deporte, liga, hora de inicio, estado, límite y cursor. Mantén ventanas estrechas en producción.
/v1/racing/events
Eventos de carreras
Usa la lista de eventos actual como fuente de verdad. La cobertura general de casas de apuestas en el Reino Unido, Irlanda u otra región no garantiza cobertura de carreras allí.
/v1/events/{event_id}/odds/snapshot
Estado inicial de odds
Comienza cada vista de evento activo con una instantánea antes de consultar deltas o abrir un streaming.
Descubre carreras actuales primero
No reutilices un ID de evento o filtro de casa de apuestas de un ejemplo. Lista las carreras actuales, copia un event_id, carga su instantánea de odds sin filtrar y luego reconéctate con el token de reanudación de la instantánea.
GET /v1/racing/events?status=fetching&limit=25
GET /v1/racing/events/$RACE_EVENT_ID/odds
GET /v1/racing/events/$RACE_EVENT_ID/odds/stream?since=$RACE_RESUME_TOKEN&catchup=true
1
Autentica del lado del servidor
Envía X-API-Key desde tu backend. No expongas claves en código visible en el navegador.
2
Descubre cobertura
Construye filtros a partir de rutas de cobertura, deportes, ligas, casas de apuestas y países de casas de apuestas.
3
Pagina eventos
Llama a las rutas de eventos con una ventana de tiempo estrecha, límite y cursor hasta que next_cursor esté vacío.
4
Carga instantáneas de odds
Obtén una instantánea de odds del evento para el estado inicial y almacena as_of_ts_ms, ttl_seconds, next_cursor y resume.
5
Transmite actualizaciones activas
Para productos en tiempo real, conéctate a streams SSE o WebSocket después de la instantánea y reanuda con since al reconectarte.
6
Consulta historial y resultados
Usa endpoints de historial para movimiento de líneas y rutas de resultados después de que terminen los eventos. Retrocede cuando los datos estén establecidos.
SSE y WebSocket
Usa streams después de la instantánea inicial.
Los streams son mejores para vistas de odds activas y productos de alertas. Primero la instantánea, aplica deltas y resincroniza cuando el stream te indique que el token de reanudación ya no está disponible.
GET /v1/events/{event_id}/odds/snapshot
GET /v1/events/{event_id}/odds/stream?since=<resume>&catchup=true
GET /v1/events/{event_id}/odds/ws?since=<resume>&catchup=true
Compara entrega REST, SSE y WebSocket Construye un feed de mercado de predicciones deportivas
- Obtén primero una instantánea y persiste el token
resume\con el estado del evento en caché. - Conéctate a
/stream\con Server-Sent Events o a/ws\con WebSockets. Usa los mismos filtros que la instantánea. - Maneja
delta\aplicando cambios de forma idempotente. Almacena elresume\más reciente después de cada mensaje aceptado. - Trata
heartbeat\como una señal de actividad. Si no llega heartbeat o datos dentro de tu tiempo de espera, reconéctate. - Al desconectarte, reconéctate con
since=<last\_resume\>\ycatchup=true\usando retroceso exponencial con jitter. - Ante
resync\, recarga la instantánea porque el token de reanudación ya no está disponible.
Límites de tasa
Consulta más lento por defecto y trata los 429 como una señal de control.
Prefiere streams para odds en tiempo real. Cuando sea necesario consultar, mantén filtros estrechos y deja que los encabezados de límite de tasa den forma al comportamiento del trabajador.
| Superficie | Intervalo inicial | Notas de producción |
|---|---|---|
| Deportes, ligas, casas de apuestas | 6-24 horas | La cobertura cambia lentamente. Actualiza a diario a menos que estés sincronizando una nueva vista de catálogo. |
| Listas de eventos deportivos | 5-15 minutos | Usa consultas más frecuentes de 1-5 minutos solo para ligas activas o ventanas cercanas al inicio. |
| Listas de eventos de carreras | 1-5 minutos | Los horarios de carreras cambian cerca del inicio. Mantén la ventana de tiempo estrecha. |
| Instantáneas de odds | 60-120 segundos | Usa 15-30 segundos solo para eventos prioritarios cuando no haya streams disponibles. |
| Instantáneas de oportunidades de apuesta | 30-120 segundos | Consulta más rápido solo para productos de alertas con controles estrictos de cuota. |
| Resultados | 1-5 minutos después del inicio | Después de que aparezca el estado final, detén las consultas frecuentes o pasa a una actualización de retención larga. |
Retroceso ante 429
- Ante HTTP 429, espera
Retry-After\cuando esté presente antes de enviar otra solicitud a esa ruta/clave. - Cuando
Retry-After\esté ausente, comienza alrededor de 2 segundos y duplica hasta unos 60 segundos con jitter aleatorio. - Usa
X-RateLimit-Limit\,X-RateLimit-Remaining\yX-RateLimit-Bucket\cuando estén presentes para ajustar a los llamadores. - Si
/usage\muestra que la cuota mensual de créditos de API está agotada, detén los bucles de reintento y alerta al propietario de la cuenta. - Reduce primero la amplitud de consultas: ligas más estrechas, menos eventos, menos casas de apuestas y tamaños de página más pequeños.
Caché y páginas
Almacena en caché por forma de solicitud y haz que los cursores sean duraderos.
Usa odds conocidas y recientes con marcas de tiempo para superficies de interfaz, y solo avanza los puntos de control de paginación después de que una página se procese correctamente.
Estrategia de caché
Clave de caché por forma de solicitud
Incluye la ruta del endpoint, ID de evento, filtros normalizados, cursor de página y contexto de producto de API en la clave de caché.
Respeta los campos de frescura
Usa ttl\_seconds\ cuando esté presente. Siempre muestra o almacena as\_of\_ts\_ms\ para que las odds obsoletas sean evidentes.
Usa streams para actualizar cachés activas
Aplica deltas de stream a la instantánea en caché, pero recurre a una instantánea nueva después de resync\ o un error de análisis.
Prefiere stale-while-revalidate para la interfaz
Muestra la última instantánea buena con una marca de tiempo visible mientras actualizas en segundo plano.
Paginación
- Pasa
limit\dentro de los límites de respuesta de/limits\. - Mantén todos los filtros idénticos entre páginas.
- Pasa
next\_cursor\al parámetrocursor\de la siguiente solicitud. - Detente cuando
next\_cursor\falte, sea null, esté vacío o sea0\. - Persiste el último cursor completado solo después de que la página se procese correctamente.
Historial y errores
Separa el análisis histórico de las odds actuales.
El movimiento de líneas es útil para auditoría y backtesting. Las odds actuales aún pueden estar obsoletas, suspendidas, limitadas o no disponibles.
Consultas de historial
- Habilita History Lite o History Pro antes de llamar a endpoints de historial en claves de API con precio v2.
- Comienza desde una instantánea de odds actual y copia el
selection\_key\exacto para la línea que quieras graficar. - Usa ventanas ISO8601 UTC de
from\_ts\yto\_ts\para consultas de historial acotadas. - Usa
bookmakers\,market\_group\_id\,price\_type\ylimit\_points\_per\_bookmaker\para mantener respuestas pequeñas. - Almacena el historial por separado de las cachés en vivo porque es una vista de auditoría/backtesting, no el precio negociable actual. Planifica una integración de historial de odds →
Modos de fallo
400 Corrige filtros, cursores, marcas de tiempo o forma de solicitud inválidos.
401 La clave de API falta o es inválida. Rota o reconfigura la clave.
403 La clave es válida pero no tiene acceso al plan, producto, casa de apuestas, streaming, carreras o estrategia.
404 El evento, carrera, resultado o selección no está disponible en la superficie pública actual.
429 Retrocede, respeta Retry-After\, verifica /usage\ y reduce el volumen de solicitudes.
5xx Reintenta con retroceso y mantén los últimos datos buenos en caché marcados con su marca de tiempo.
Stream close Reconéctate con since\; recarga la instantánea si el stream envía resync\.
Empty or stale data Muestra estado no disponible/obsoleto en lugar de tratar odds faltantes como precios válidos.
Grupo de endpoints
Comienza aquí
Identidad de API, URL base, autenticación y enlaces de referencia.
URL base https://api.odds-api.net/v1 Versión 1.0.0 Fuente OpenAPI en vivo
GET Metadatos de API /v1/
Devuelve el nombre de la API, versión, URL del documento OpenAPI y URL de referencia alojada.
Endpoint público Maneja HTTP 429 con retroceso y evita bucles de consulta frecuentes.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/"
Respuestas
200 Respuesta exitosa
application/json · objeto
Ejemplo generado
{
"name": "Odds API",
"version": "1.0.0",
"openapi": "/v1/openapi.json",
"reference": "/v1/reference"
}
400 Parámetros de solicitud o cuerpo inválidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o inválidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de tasa excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando el limitador los proporciona.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket activo del limitador cuando se proporciona.
X-RateLimit-Remaining
integer
Aproximación de solicitudes restantes en el bucket activo del limitador cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Estado
Disponibilidad de API orientada al comprador, latencia, salud de streams y salud de límites de tasa.
URL base https://api.odds-api.net/v1 Versión 1.0.0 Fuente OpenAPI en vivo
GET Resumen de salud pública /v1/status
Devuelve un resumen de estado público saneado para páginas orientadas al comprador. La respuesta incluye disponibilidad reciente de componentes, percentiles de latencia, tasa de errores 5xx, salud de streams y salud de límites de tasa sin exponer nombres de servicios internos, métricas de infraestructura, detalles de casas de apuestas, volumen de tráfico bruto o historial de incidentes.
Endpoint público Maneja HTTP 429 con retroceso y evita bucles de consulta frecuentes.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/status"
Respuestas
200 Respuesta exitosa
application/json · objeto
Estado de API: Resumen de salud pública
{
"status": "operational",
"as_of": "2026-04-29T10:25:00Z",
"window_seconds": 300,
"components": [
{
"id": "rest_api",
"name": "REST API",
"status": "operational",
"metrics": {
"uptime_pct": 100.0,
"p50_ms": 24.0,
"p95_ms": 410.0,
"p99_ms": 846.0,
"error_rate_pct": 0.02
}
}
],
"rate_limits": {
"status": "operational",
"throttled_pct": 0.4
},
"source": {
"fresh": true,
"age_seconds": 18
}
}
400 Parámetros de solicitud o cuerpo inválidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o inválidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de tasa excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando el limitador los proporciona.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket activo del limitador cuando se proporciona.
X-RateLimit-Remaining
integer
Aproximación de solicitudes restantes en el bucket activo del limitador cuando se proporciona.
X-RateLimit-Bucket
string Nombre del bucket del limitador que produjo la respuesta cuando se proporcionó.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Account
Identidad actual de la API, contadores de uso y límites del contrato.
URL base https://api.odds-api.net/v1 Versión 1.0.0 Fuente OpenAPI en vivo
GET Identidad actual /v1/me
Devuelve la identidad autenticada de la API y las capacidades de producto habilitadas para la clave proporcionada.
Auth: X-API-Key Maneja HTTP 429 con backoff y evita bucles de sondeo intensivos.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/me"
Respuestas
200 Respuesta exitosa
application/json · objeto
Ejemplo generado
{
"method": "api_key",
"client_id": "string",
"capabilities": {},
"membership_tier": 123
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de tasa excedido.
application/json · valor
Retry-After
entero
Segundos a esperar antes de reintentar cuando lo proporciona el limitador.
X-RateLimit-Limit
entero
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
entero
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
cadena
Nombre del bucket del limitador que produjo la respuesta cuando se proporcionó.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Uso /v1/usage
Devuelve la cuota y los contadores de uso para la clave de API proporcionada. El nuevo precio de odds-api.net utiliza créditos de API en lugar de recuentos brutos de solicitudes. Los clientes de producción deben verificar este endpoint cuando persistan las respuestas 429 para que el agotamiento de la cuota no se convierta en un bucle de reintentos infinito.
Auth: X-API-Key Maneja HTTP 429 con backoff y evita bucles de sondeo intensivos.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/usage"
Respuestas
200 Respuesta exitosa
application/json · objeto
Account: Uso
{
"period_start_utc": "2026-05-01T00:00:00Z",
"period_end_utc": "2026-06-01T00:00:00Z",
"plan": "live",
"pricing_model": "odds_api_net_v2",
"api_credits_used": 18420,
"api_credits_limit": 20000000,
"stream_hours_used": 438.25,
"stream_hours_limit": 6000,
"stream_logical_bytes_used": 187654321,
"stream_logical_bytes_limit": 536870912000,
"stream_concurrent_units_used": 7,
"stream_concurrent_units_limit": 25,
"exceeded": false
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de tasa excedido.
application/json · valor
Retry-After
entero
Segundos a esperar antes de reintentar cuando lo proporciona el limitador.
X-RateLimit-Limit
entero
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
entero
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
cadena
Nombre del bucket del limitador que produjo la respuesta cuando se proporcionó.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Límites /v1/limits
Devuelve los límites a nivel de contrato de créditos de API, solicitudes, streams, complementos y respuestas que los clientes deben respetar. Úsalo para limitar los tamaños de página, los tamaños de instantáneas, la configuración de latidos de streams y los tamaños de lote de streams antes de comenzar trabajos de alto volumen.
Auth: X-API-Key Maneja HTTP 429 con backoff y evita bucles de sondeo intensivos.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/limits"
Respuestas
200 Respuesta exitosa
application/json · objeto
Account: Límites
{
"responses": {
"events_limit_max": 1000,
"odds_snapshot_limit_max": 25000,
"bets_snapshot_limit_max": 20000
},
"sse": {
"heartbeat_sec_min": 5,
"heartbeat_sec_max": 120,
"max_batch_default": 500
},
"streams": {
"metering": "all authenticated API-key SSE and WebSocket connections",
"formula": "stream_units * open_seconds / 3600",
"enforcement_interval_seconds": 5
}
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de tasa excedido.
application/json · valor
Retry-After
entero
Segundos a esperar antes de reintentar cuando lo proporciona el limitador.
X-RateLimit-Limit
entero
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
entero
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
cadena
Nombre del bucket del limitador que produjo la respuesta cuando se proporcionó.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Catalog
Deportes, ligas, casas de apuestas y cobertura aproximada de mercados admitidos.
URL base https://api.odds-api.net/v1 Versión 1.0.0 Fuente OpenAPI en vivo
GET Deportes /v1/sports
Enumera los deportes con cobertura de eventos y cuotas.
Auth: X-API-Key Maneja HTTP 429 con backoff y evita bucles de sondeo intensivos.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/sports"
Respuestas
200 Respuesta exitosa
application/json · objeto
Ejemplo generado
{
"items": [
"string"
]
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de tasa excedido.
application/json · valor
Retry-After
entero
Segundos a esperar antes de reintentar cuando lo proporciona el limitador.
X-RateLimit-Limit
entero
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
entero
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
cadena
Nombre del bucket del limitador que produjo la respuesta cuando se proporcionó.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Ligas /v1/leagues
Enumera las ligas disponibles. Pasa sport\ para reducir la respuesta.
Auth: X-API-Key Maneja HTTP 429 con backoff y evita bucles de sondeo intensivos.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/leagues?sport=basketball"
Parámetros
Consulta
sport
cadena
Filtro de deporte. Usa /sports\ para descubrir los valores admitidos.
Respuestas
200 Respuesta exitosa
application/json · objeto
Ejemplo generado
{
"items": [
"string"
]
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de tasa excedido.
application/json · valor
Retry-After
entero
Segundos a esperar antes de reintentar cuando lo proporciona el limitador.
X-RateLimit-Limit
entero
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
entero
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
cadena
Nombre del bucket del limitador que produjo la respuesta cuando se proporcionó.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Casas de apuestas /v1/bookmakers
Enumera las casas de apuestas activas aceptadas por los filtros de casas de apuestas en los endpoints de cuotas y apuestas. Cada elemento incluye los códigos de país donde esa casa de apuestas está disponible. Pasa country\_code=AU\ o country\_code=AU,UK\ para filtrar el catálogo.
Auth: X-API-Key Maneja HTTP 429 con backoff y evita bucles de sondeo intensivos.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/bookmakers"
Parámetros
Consulta
country_code
cadena
Filtro de código de país separado por comas, por ejemplo AU\ o AU,UK\.
Respuestas
200 Respuesta exitosa
application/json · objeto
Catalog: Casas de apuestas
{
"items": [
{
"bookmaker": "bet365",
"country_codes": [
"AU",
"UK"
]
},
{
"bookmaker": "pinnacle",
"country_codes": [
"US"
]
}
]
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de tasa excedido.
application/json · valor
Retry-After
entero
Segundos a esperar antes de reintentar cuando lo proporciona el limitador.
X-RateLimit-Limit
entero
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
entero
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
cadena
Nombre del bucket del limitador que produjo la respuesta cuando se proporcionó.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Países de casas de apuestas /v1/bookmakers/countries
Enumera los códigos de país representados en el catálogo activo de casas de apuestas y las casas de apuestas disponibles en cada país.
Auth: X-API-Key Maneja HTTP 429 con backoff y evita bucles de sondeo intensivos.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/bookmakers/countries"
Respuestas
200 Respuesta exitosa
application/json · objeto
Catalog: Países de casas de apuestas
{
"items": [
{
"country_code": "AU",
"country": "Australia",
"bookmakers": [
"bet365",
"sportsbet"
]
},
{
"country_code": "UK",
"country": "United Kingdom",
"bookmakers": [
"bet365"
]
}
]
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de tasa excedido.
application/json · valor
Retry-After
entero
Segundos a esperar antes de reintentar cuando lo proporciona el limitador.
X-RateLimit-Limit
entero
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
entero
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
cadena
Nombre del bucket del limitador que produjo la respuesta cuando se proporcionó.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Cobertura /v1/coverage
Devuelve la cobertura pública de casas de apuestas, deportes, ligas y mercados observados recientemente. Los registros de mercados son aproximados y se basan en líneas de cuotas normalizadas vistas en la ventana de retroceso configurada, no una garantía de que cada mercado esté disponible para cada evento en el momento de la solicitud.
Endpoint público Maneja HTTP 429 con backoff y evita bucles de sondeo intensivos.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/coverage?sport=basketball&league=NBA"
Parámetros
Consulta
bookmaker
string
Filtro canónico de casa de apuestas. Usa /bookmakers\ o /coverage\ para descubrir las claves admitidas.
sport
string
Filtro de deporte. Usa /sports\ para descubrir los valores admitidos.
league
string
Filtro de liga. Usa /leagues?sport=...\ para descubrir los valores admitidos.
country_code
string
Filtro de código de país separado por comas, por ejemplo AU\ o AU,UK\.
lookback_days
integer
Número de días de cobertura aproximada de mercado observada recientemente para incluir. El máximo es 90.
Respuestas
200 Respuesta exitosa
application/json · objeto
Catálogo: Cobertura
{
"as_of": "2026-04-29T10:25:00Z",
"bookmakers": [
{
"bookmaker": "bet365",
"country_codes": [
"AU",
"UK"
]
},
{
"bookmaker": "sportsbet",
"country_codes": [
"AU"
]
}
],
"sports": [
"basketball",
"rugby league"
],
"leagues": [
{
"sport": "basketball",
"league": "NBA"
},
{
"sport": "rugby league",
"league": "NRL"
}
],
"markets": [
{
"bookmaker": "bet365",
"sport": "basketball",
"league": "NBA",
"bet_type": "moneyline",
"last_seen_at": "2026-04-29T10:20:00Z",
"sample_event_id": "3704597661"
},
{
"bookmaker": "sportsbet",
"sport": "rugby league",
"league": "NRL",
"bet_type": "total",
"metric": "tries",
"last_seen_at": "2026-04-29T10:18:00Z",
"sample_event_id": "3704597662"
}
],
"source": {
"markets_are_approximate": true,
"lookback_days": 30
}
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de velocidad excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando lo proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Solicitudes restantes aproximadas en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Widgets
Feeds de widgets integrables seguros para el público, para clientes de API aprobados.
URL base https://api.odds-api.net/v1 Versión 1.0.0 Fuente OpenAPI en vivo
GET Ticker de probabilidades /v1/widgets/odds-ticker
Devuelve un payload de ticker de probabilidades pequeño y seguro para el público, para un widget de sitio web integrable. La respuesta se proyecta desde las mismas probabilidades deportivas de línea principal respaldadas por Redis que usa la API, pero omite IDs de eventos, payloads sin procesar, metadatos de fuente, enlaces, precios sin vig, probabilidades justas, IDs de depuración y metadatos de logotipos de equipos. Las claves de API marcadas como widgets\_only=true\ pueden acceder a esta ruta más las rutas de cuenta solamente.
Autenticación: X-API-Key Maneja HTTP 429 con retroceso y evita bucles de sondeo ajustados.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/widgets/odds-ticker?league=NBA&bookmakers=bet365&widget_id=string&limit=25"
Parámetros
Consulta
league requerido
string
Filtro de liga. Usa /leagues?sport=...\ para descubrir los valores admitidos.
bookmakers requerido
string
Lista de permitidos de casas de apuestas separada por comas. Usa /bookmakers\ para descubrir las claves admitidas.
widget_id requerido
string
Identificador de widget estable configurado en el registro del cliente de API.
markets
string
Lista de mercados de widget separada por comas. Los valores admitidos son moneyline, handicap y total; los alias incluyen h2h, 1x2, spread y over_under.
limit
integer
Máximo de elementos a devolver. Respeta los límites devueltos por /limits\.
window_hours
integer
Respuestas
200 Respuesta exitosa
application/json · objeto
Widgets: Ticker de probabilidades
{
"league": "EPL",
"widget_id": "homepage-ticker",
"last_updated": "2026-07-09T01:02:03Z",
"events": [
{
"league": "EPL",
"event_name": "Arsenal vs Chelsea",
"start_time": 1783558800,
"last_updated": "2026-07-09T01:02:03Z",
"markets": [
{
"market": "moneyline 3w",
"bookmakers": [
{
"label": "tab",
"selections": [
{
"selection": "home",
"price": 2.2
},
{
"selection": "away",
"price": 2.9
},
{
"selection": "draw",
"price": 3.4
}
]
}
]
}
]
}
]
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de velocidad excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando lo proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Solicitudes restantes aproximadas en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Eventos deportivos
Eventos deportivos próximos y en vivo, más metadatos de eventos.
URL base https://api.odds-api.net/v1 Versión 1.0.0 Fuente OpenAPI en vivo
GET Búsqueda /v1/events
Busca eventos deportivos por deporte, liga, equipo, ventana de tiempo, estado, cobertura de casas de apuestas y cursor de paginación. Para sondeo de producción, usa ventanas de tiempo acotadas, mantén los filtros estables entre páginas y pasa next\_cursor\ de vuelta como cursor\ hasta que no haya un cursor siguiente.
Autenticación: X-API-Key Maneja HTTP 429 con retroceso y evita bucles de sondeo ajustados.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events?sport=basketball&league=NBA&limit=25"
Parámetros
Consulta
sport
string
Filtro de deporte. Usa /sports\ para descubrir los valores admitidos.
league
string
Filtro de liga. Usa /leagues?sport=...\ para descubrir los valores admitidos.
start_from
integer
Límite inferior en segundos Unix para la hora de inicio del evento. Usa ventanas acotadas en el sondeo de producción.
start_to
integer
Límite superior en segundos Unix para la hora de inicio del evento. Mantén las ventanas estrechas para trabajos de sincronización en caliente.
cursor
string
Cursor de paginación del next\_cursor\ anterior. Mantén los filtros idénticos entre páginas.
limit
integer
Máximo de elementos a devolver. Respeta los límites devueltos por /limits\.
include_bookmaker_ids
boolean
Cuando es true, incluye IDs de casa de apuestas a datos de probabilidades y mapas de IDs de vista previa en las respuestas de eventos.
include_source
boolean
Cuando es true, incluye metadatos de procedencia y captura por línea/casa de apuestas. Los campos de frescura de nivel superior siempre se conservan.
include_opportunity_counts
boolean
not_started_only
boolean
not_started_buffer_seconds
integer
event_states
string
Filtro de ciclo de vida. Solicitar in_play aplica automáticamente la ventana de retroceso de en vivo.
live_candidates
boolean
Incluye eventos ya iniciados que siguen siendo candidatos para juego en vivo; esto no es confirmación de juego actual.
Respuestas
200 Respuesta exitosa
application/json · objeto
Eventos deportivos: Búsqueda
{
"items": [
{
"event_id": "3704597661",
"sport": "rugby-league",
"league": "NRL",
"start_time": 1760000000,
"home_team": "Home",
"away_team": "Away",
"bookmakers": {
"bet365": "odds-doc-id"
}
}
],
"next_cursor": null,
"count": 1
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de velocidad excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando lo proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Solicitudes restantes aproximadas en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET GET eventos en vivo /v1/events/live
Operación pública de Odds API. Autentica con X-API-Key\. Verifica las marcas de tiempo antes de mostrar precios y maneja mercados vacíos, obsoletos o suspendidos.
Autenticación: X-API-Key Maneja HTTP 429 con retroceso y evita bucles de sondeo ajustados.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/live?sport=basketball&league=NBA&limit=25"
Parámetros
Consulta
sport
string
Filtro de deporte. Usa /sports\ para descubrir los valores admitidos.
league
string
Filtro de liga. Usa /leagues?sport=...\ para descubrir los valores admitidos.
cursor
string
Cursor de paginación del next\_cursor\ anterior. Mantén los filtros idénticos entre páginas.
limit
integer
Máximo de elementos a devolver. Respeta los límites devueltos por /limits\.
include_bookmaker_ids
boolean
Cuando es true, incluye IDs de casa de apuestas a datos de probabilidades y mapas de IDs de vista previa en las respuestas de eventos.
include_source
boolean
Cuando es true, incluye metadatos de procedencia y captura por línea/casa de apuestas. Los campos de frescura de nivel superior siempre se conservan.
include_opportunity_counts
boolean
Respuestas
200 Respuesta exitosa
application/json · objeto
Ejemplo generado
{
"items": [
{
"event_id": "3704597661",
"sport": "basketball",
"league": "NBA",
"start_time": 123,
"home_team": "string",
"away_team": "string",
"event_state": "string",
"event_state_certainty": "string",
"event_state_source": "string",
"state_observed_at": 123
}
],
"next_cursor": "string",
"count": 123
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de velocidad excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando lo proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Solicitudes restantes aproximadas en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Detalles del evento /v1/events/{event_id}
Devuelve el registro de evento actual para un ID de evento deportivo canónico.
Autenticación: X-API-Key Maneja HTTP 429 con retroceso y evita bucles de sondeo ajustados.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661"
Parámetros
Ruta
event_id requerido
string
Identificador canónico de evento o carrera de una respuesta de lista de eventos.
Consulta
include_links
boolean
Cuando es true, incluye campos de casa de apuestas/enlace profundo, como enlaces de partidos y enlaces de carreras.
include_raw_payload
boolean
Cuando es true, incluye objetos de payload/datos almacenados sin procesar donde el endpoint los expone.
include_source
boolean
Cuando es true, incluye metadatos de procedencia y captura por línea/casa de apuestas. Los campos de frescura de nivel superior siempre se conservan.
include_bookmaker_ids
boolean
Cuando es true, incluye IDs de casa de apuestas a datos de probabilidades y mapas de IDs de vista previa en las respuestas de eventos.
include_debug_ids
boolean
Cuando es true, incluye IDs internos/de subgrupo/opuestos útiles para la reconciliación.
Respuestas
200 Respuesta exitosa
application/json · objeto
Ejemplo generado
{
"event_id": "3704597661",
"data": {}
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de velocidad excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando lo proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Solicitudes restantes aproximadas en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string Nombre del bucket del limitador que produjo la respuesta cuando se proporcionó.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Cobertura de casas de apuestas /v1/events/{event_id}/bookmakers
Lista las casas de apuestas actualmente asociadas a un evento deportivo.
Autenticación: X-API-Key Maneja HTTP 429 con retroceso y evita bucles de sondeo intensivos.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/bookmakers"
Parámetros
Ruta
event_id obligatorio
string
Identificador canónico del evento o carrera de una respuesta de lista de eventos.
Respuestas
200 Respuesta exitosa
application/json · objeto
Ejemplo generado
{
"event_id": "3704597661",
"items": [
"string"
]
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de velocidad excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando lo proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Solicitudes restantes aproximadas en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporcionó.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Probabilidades deportivas
Instantáneas de probabilidades deportivas, movimiento de líneas, Server-Sent Events y actualizaciones por WebSocket.
URL base https://api.odds-api.net/v1 Versión 1.0.0 Fuente OpenAPI en vivo
GET Instantánea /v1/events/{event_id}/odds/snapshot
Devuelve las líneas de probabilidades actuales para un evento. Usa filtros para acotar casas de apuestas, tipos de mercado, claves de mercado y períodos. Un filtro explícito bookmakers\ devuelve todas las líneas coincidentes para esas casas de apuestas en una respuesta, hasta el límite de seguridad de 25,000 elementos. Sin un filtro de casas de apuestas, las páginas contienen casas de apuestas completas, por lo que los mercados coincidentes de una casa de apuestas nunca se dividen entre páginas. Sigue el cursor opaco next\_cursor\ hasta complete=true\. Almacena en caché según la forma de la solicitud. as\_of\_ts\_ms\ es cuando la API aceptó la última instantánea de evento exitosa o el subconjunto autoritativo de casas de apuestas; usa bookmaker\_as\_of\_ts\_ms\ para frescura específica de la casa de apuestas y compáralo con target\_refresh\_interval\_seconds\. Respeta ttl\_seconds\ cuando esté presente y persiste resume\ si planeas suscribirte a actualizaciones. Pasa price\_fields=odds,fair\ para incluir probabilidades justas compuestas anulables junto con las probabilidades de la casa de apuestas. Los libros de órdenes de intercambio están excluidos de esta superficie de probabilidades estilo casa de apuestas.
Autenticación: X-API-Key Maneja HTTP 429 con retroceso y evita bucles de sondeo intensivos.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/odds/snapshot?limit=25&bookmakers=bet365&types=moneyline&market_keys=moneyline"
Parámetros
Ruta
event_id obligatorio
string
Identificador canónico del evento o carrera de una respuesta de lista de eventos.
Consulta
limit
integer
Objetivo de elementos suave cuando se omite bookmakers\. Las páginas contienen casas de apuestas completas y pueden superar este objetivo. Con un filtro explícito de casas de apuestas, todas las líneas coincidentes se devuelven hasta el límite de seguridad de 25,000 elementos.
cursor
string
Cursor de página de casas de apuestas opaco de la next\_cursor\ anterior. Úsalo solo cuando se omite bookmakers\ y mantén todos los filtros idénticos entre páginas.
bookmakers
string
Lista de permitidos de casas de apuestas separada por comas. Las casas de apuestas solicitadas explícitamente se devuelven completas en una respuesta, hasta el límite de seguridad de 25,000 elementos. Usa /bookmakers\ para descubrir claves compatibles.
types
string
Lista de permitidos de tipos de mercado separada por comas para filtros de probabilidades.
market_keys
string
Lista de permitidos de claves de mercado separada por comas para filtros de probabilidades.
periods
string
Lista de permitidos de períodos separada por comas para filtros de probabilidades.
price_fields
string
odds\, odds,novig\, odds,fair\ o all\. Los clientes compactos usan odds\ por defecto; los clientes existentes usan los campos de precios completos actuales por defecto.
include_source
boolean
Cuando es verdadero, incluye metadatos de procedencia y captura por línea/casa de apuestas. Los campos de frescura de nivel superior siempre se mantienen.
include_debug_ids
boolean
Cuando es verdadero, incluye IDs internos/subgrupo/opuestos útiles para conciliación.
include_unavailable
boolean
Cuando es verdadero, incluye filas no disponibles o suspendidas donde el endpoint las admite.
Respuestas
200 Respuesta exitosa
application/json · objeto
Probabilidades del evento: Instantánea
{
"event_id": "3704597661",
"as_of_ts_ms": 1760000000000,
"snapshot_capture_ts_ms": 1759999999800,
"bookmaker_as_of_ts_ms": {
"bet365": 1760000000000
},
"oldest_bookmaker_as_of_ts_ms": 1760000000000,
"target_refresh_interval_seconds": 60,
"ttl_seconds": 1800,
"items": [
{
"id": "bet365::moneyline::moneyline::0::::home::",
"event_id": "3704597661",
"bookmaker": "bet365",
"market_key": "moneyline",
"bet_type": "moneyline",
"period": "full time",
"side": "home",
"selection_name": "Home",
"odds": 2.1,
"fair_odds": 1.98,
"is_available": true
}
],
"next_cursor": null,
"complete": true,
"bookmakers_included": [
"bet365"
],
"bookmaker_counts": {
"bet365": 1
},
"resume": "1760000000000-0"
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
413 La instantánea completa de casa de apuestas solicitada excede el límite de seguridad de respuesta. 429 Límite de velocidad excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando lo proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Solicitudes restantes aproximadas en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporcionó.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Transmisión (SSE) /v1/events/{event_id}/odds/stream
Fuente de Server-Sent Events para cambios de probabilidades en un evento. Suscríbete después de leer la instantánea y pasa el valor resume\ de la instantánea como since\ para recibir cambios de recuperación cuando estén disponibles. Maneja lotes semánticos ordenados delta\ de forma idempotente y persiste el resume\ de cada lote; un heartbeat\ lleva frescura actual incluso cuando los precios no cambiaron. Recarga la instantánea después de resync\. Los cambios del libro de órdenes de intercambio se sirven solo desde la transmisión del libro de órdenes de intercambio.
Autenticación: X-API-Key Maneja HTTP 429 con retroceso y evita bucles de sondeo intensivos.
Ejemplo de solicitud
curl -N -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/odds/stream?bookmakers=bet365&types=moneyline&market_keys=moneyline&since=1760000000000-0"
Parámetros
Ruta
event_id obligatorio
string
Identificador canónico del evento o carrera de una respuesta de lista de eventos.
Consulta
bookmakers
string
Lista de permitidos de casas de apuestas separada por comas. Usa /bookmakers\ para descubrir claves compatibles.
types
string
Lista de permitidos de tipos de mercado separada por comas para filtros de probabilidades.
market_keys
string
Lista de permitidos de claves de mercado separada por comas para filtros de probabilidades.
periods
string
Lista de permitidos de períodos separada por comas para filtros de probabilidades.
price_fields
string
odds\, odds,novig\, odds,fair\ o all\. Los clientes compactos usan odds\ por defecto; los clientes existentes usan los campos de precios completos actuales por defecto.
include_source
boolean
Cuando es verdadero, incluye metadatos de procedencia y captura por línea/casa de apuestas. Los campos de frescura de nivel superior siempre se mantienen.
include_debug_ids
boolean
Cuando es verdadero, incluye IDs internos/subgrupo/opuestos útiles para conciliación.
include_unavailable
boolean
Cuando es verdadero, incluye filas no disponibles o suspendidas donde el endpoint las admite.
since
string
Token de reanudación de una instantánea o mensaje de transmisión anterior. Pásalo después de reconectar.
catchup
boolean
Cuando es verdadero, devuelve eventos de transmisión perdidos disponibles después de since\ antes de esperar nuevos eventos.
heartbeat_sec
integer
Intervalo de latido en segundos para la vitalidad de la transmisión. Rango válido: 5-120.
max_batch
integer
Máximo de mensajes de transmisión para leer por lote. El valor predeterminado es 500; usa lotes más pequeños para clientes de baja latencia.
Respuestas
200 Transmisión de Server-Sent Events. Cada mensaje tiene un nombre de evento y carga útil de datos JSON.
text/event-stream · objeto
Mensaje delta decodificado
event: delta
data: {
"event_id": "3704597661",
"resume": "1760000000000-0",
"snapshot_id": "capture-123:3704597661",
"batch_index": 1,
"batch_count": 1,
"changes": []
}
Mensaje de latido decodificado
event: heartbeat
data: {}
Mensaje de resincronización decodificado
event: resync
data: {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de velocidad excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando lo proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Solicitudes restantes aproximadas en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporcionó.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Transmisión (WebSocket) /v1/events/{event_id}/odds/ws
Fuente WebSocket para cambios de probabilidades en un evento. Los mensajes usan las mismas cargas útiles delta\, heartbeat\ y resync\ que la transmisión SSE. Reconecta con retroceso exponencial con jitter y since=<last\_resume\>\.
Autenticación: X-API-Key Maneja HTTP 429 con retroceso y evita bucles de sondeo intensivos.
Ejemplo de solicitud
wscat -c "wss://api.odds-api.net/v1/events/3704597661/odds/ws?bookmakers=bet365&types=moneyline&market_keys=moneyline&since=1760000000000-0&api_key=$ODDS_API_KEY"
Parámetros
Ruta
event_id obligatorio
string
Identificador canónico del evento o carrera de una respuesta de lista de eventos.
Consulta
bookmakers
string
Lista de permitidos de casas de apuestas separada por comas. Usa /bookmakers\ para descubrir claves compatibles.
types
string
Lista de permitidos de tipos de mercado separada por comas para filtros de probabilidades.
market_keys
string
Lista de permitidos de claves de mercado separada por comas para filtros de probabilidades.
periods
string
Lista de permitidos de períodos separada por comas para filtros de probabilidades.
price_fields
string
odds\, odds,novig\, odds,fair\ o all\. Los clientes compactos usan odds\ por defecto; los clientes existentes usan los campos de precios completos actuales por defecto.
include_source
boolean
Cuando es verdadero, incluye metadatos de procedencia y captura por línea/casa de apuestas. Los campos de frescura de nivel superior siempre se mantienen.
include_debug_ids
boolean
Cuando es verdadero, incluye IDs internos/subgrupo/opuestos útiles para conciliación.
include_unavailable
boolean
Cuando es verdadero, incluye filas no disponibles o suspendidas donde el endpoint las admite.
since
string
Token de reanudación de una instantánea o mensaje de transmisión anterior. Pásalo después de reconectar.
catchup
boolean
Cuando es verdadero, devuelve eventos de transmisión perdidos disponibles después de since\ antes de esperar nuevos eventos.
heartbeat_sec
integer
Intervalo de latido en segundos para la vitalidad de la transmisión. Rango válido: 5-120.
max_batch
integer
Máximo de mensajes de transmisión para leer por lote. El valor predeterminado es 500; usa lotes más pequeños para clientes de baja latencia.
Respuestas
101 Conexión WebSocket establecida. Los mensajes son objetos JSON.
application/json · objeto
Mensaje delta
{
"event": "delta",
"data": {
"event_id": "3704597661",
"resume": "1760000000000-0",
"snapshot_id": "capture-123:3704597661",
"batch_index": 1,
"batch_count": 1,
"changes": []
}
}
Mensaje de latido
{
"event": "heartbeat",
"data": {}
}
Mensaje de resincronización
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
200 Esquema de respuesta de compatibilidad con herramientas OpenAPI. Las conexiones WebSocket en tiempo de ejecución se actualizan con 101.
application/json · objeto
Mensaje delta
{
"event": "delta",
"data": {
"event_id": "3704597661",
"resume": "1760000000000-0",
"snapshot_id": "capture-123:3704597661",
"batch_index": 1,
"batch_count": 1,
"changes": []
}
}
Mensaje de latido
{
"event": "heartbeat",
"data": {}
}
Mensaje de resincronización
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten acceder a este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 No se encontró el recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de velocidad excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando los proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Snapshot /v1/events/{event_id}/odds/history
Devuelve el movimiento de líneas para una selección individual entre casas de apuestas y un rango de tiempo. Usa selection\_key\ de una respuesta de snapshot de cuotas, acota consultas con from\_ts\ y to\_ts\, y reduce por casa de apuestas o mercado al crear gráficos o backtests.
Autenticación: X-API-Key Maneja HTTP 429 con backoff y evita bucles de sondeo frecuentes.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/odds/history?selection_key=moneyline%3Ahome&bookmakers=bet365"
Parámetros
Ruta
event_id obligatorio
string
Identificador canónico de evento o carrera de una respuesta de lista de eventos.
Consulta
selection_key obligatorio
string
Identificador de selección estable de una línea de snapshot de cuotas, usado para historial y movimiento de líneas.
market_group_id
string
Filtro opcional de agrupación de mercado para consultas de historial.
bookmakers
string
Lista de casas de apuestas permitidas separadas por comas. Usa /bookmakers\ para descubrir claves compatibles.
from_ts
string
Marca de tiempo de inicio UTC en formato ISO8601 para una consulta de historial acotada.
to_ts
string
Marca de tiempo de fin UTC en formato ISO8601 para una consulta de historial acotada.
price_type
string
Tipo de precio de historial a devolver, por ejemplo odds.
price_fields
string
odds\, odds,novig\, odds,fair\ o all\. Los clientes compactos usan odds\ por defecto; los clientes existentes usan los campos de precios completos actuales por defecto.
include_source
boolean
Cuando es true, incluye metadatos de procedencia y captura por línea/casa de apuestas. Los campos de frescura de nivel superior siempre se conservan.
include_debug_ids
boolean
Cuando es true, incluye IDs internos/subgrupo/opuestos útiles para conciliación.
include_unavailable
boolean
Cuando es true, incluye filas no disponibles o suspendidas donde el endpoint lo admite.
limit_points_per_bookmaker
integer
Máximo de puntos de historial por casa de apuestas. Úsalo para mantener acotados los payloads de gráficos/backtests.
Respuestas
200 Respuesta exitosa
application/json · objeto
Historial de cuotas del evento: Snapshot
{
"event_id": "3704597661",
"selection_key": "moneyline:home",
"price_type": "odds",
"series": [
{
"bookmaker_name": "bet365",
"points": [
{
"tick_ts": "2026-04-29T08:00:00Z",
"is_available": true,
"odds": 2.08
},
{
"tick_ts": "2026-04-29T08:05:00Z",
"is_available": true,
"odds": 2.1
}
]
}
],
"meta": {
"from_ts": "2026-04-29T08:00:00Z",
"to_ts": "2026-04-29T09:00:00Z",
"available_price_types": [
"odds",
"odds_no_vig",
"fair_odds"
]
}
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten acceder a este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 No se encontró el recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de velocidad excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando los proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (SSE) /v1/events/{event_id}/odds/history/stream
Fuente de eventos enviados por el servidor para el movimiento de líneas en una selección. Es útil para gráficos que deben actualizarse mientras un mercado de eventos está en movimiento.
Autenticación: X-API-Key Maneja HTTP 429 con backoff y evita bucles de sondeo frecuentes.
Ejemplo de solicitud
curl -N -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/odds/history/stream?selection_key=moneyline%3Ahome&bookmakers=bet365&since=1760000000000-0&catchup=true"
Parámetros
Ruta
event_id obligatorio
string
Identificador canónico de evento o carrera de una respuesta de lista de eventos.
Consulta
selection_key obligatorio
string
Identificador de selección estable de una línea de snapshot de cuotas, usado para historial y movimiento de líneas.
market_group_id
string
Filtro opcional de agrupación de mercado para consultas de historial.
bookmakers
string
Lista de casas de apuestas permitidas separadas por comas. Usa /bookmakers\ para descubrir claves compatibles.
price_type
string
Tipo de precio de historial a devolver, por ejemplo odds.
price_fields
string
odds\, odds,novig\, odds,fair\ o all\. Los clientes compactos usan odds\ por defecto; los clientes existentes usan los campos de precios completos actuales por defecto.
include_source
boolean
Cuando es true, incluye metadatos de procedencia y captura por línea/casa de apuestas. Los campos de frescura de nivel superior siempre se conservan.
include_debug_ids
boolean
Cuando es true, incluye IDs internos/subgrupo/opuestos útiles para conciliación.
include_unavailable
boolean
Cuando es true, incluye filas no disponibles o suspendidas donde el endpoint lo admite.
since
string
Token de reanudación de un snapshot o mensaje de stream anterior. Pásalo después de reconectar.
catchup
boolean
Cuando es true, devuelve los eventos de stream perdidos disponibles después de since\ antes de esperar nuevos eventos.
heartbeat_sec
integer
Intervalo de latido en segundos para la actividad del stream. Rango válido: 5-120.
max_batch
integer
Máximo de mensajes de stream a leer por lote. El valor predeterminado es 500; usa lotes más pequeños para clientes de baja latencia.
Respuestas
200 Stream de eventos enviados por el servidor. Cada mensaje tiene un nombre de evento y un payload de datos JSON.
text/event-stream · objeto
Mensaje delta decodificado
event: delta
data: {
"event_id": "3704597661",
"selection_key": "moneyline:home",
"resume": "1760000000000-0",
"points": []
}
Mensaje de latido decodificado
event: heartbeat
data: {}
Mensaje de resincronización decodificado
event: resync
data: {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten acceder a este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 No se encontró el recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de velocidad excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando los proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (WebSocket) /v1/events/{event_id}/odds/history/ws
Fuente WebSocket para el movimiento de líneas en una selección. Los mensajes reflejan los payloads del stream SSE de historial.
Autenticación: X-API-Key Maneja HTTP 429 con backoff y evita bucles de sondeo frecuentes.
Ejemplo de solicitud
wscat -c "wss://api.odds-api.net/v1/events/3704597661/odds/history/ws?selection_key=moneyline%3Ahome&bookmakers=bet365&since=1760000000000-0&catchup=true&api_key=$ODDS_API_KEY"
Parámetros
Ruta
event_id obligatorio
string
Identificador canónico de evento o carrera de una respuesta de lista de eventos.
Consulta
selection_key obligatorio
string
Identificador de selección estable de una línea de snapshot de cuotas, usado para historial y movimiento de líneas.
market_group_id
string
Filtro opcional de agrupación de mercado para consultas de historial.
bookmakers
string
Lista de casas de apuestas permitidas separadas por comas. Usa /bookmakers\ para descubrir claves compatibles.
price_type
string
Tipo de precio de historial a devolver, por ejemplo odds.
price_fields
string
odds\, odds,novig\, odds,fair\ o all\. Los clientes compactos usan odds\ por defecto; los clientes existentes usan los campos de precios completos actuales por defecto.
include_source
boolean
Cuando es true, incluye metadatos de procedencia y captura por línea/casa de apuestas. Los campos de frescura de nivel superior siempre se conservan.
include_debug_ids
boolean
Cuando es true, incluye IDs internos/subgrupo/opuestos útiles para conciliación.
include_unavailable
boolean
Cuando es true, incluye filas no disponibles o suspendidas donde el endpoint lo admite.
since
string
Token de reanudación de un snapshot o mensaje de stream anterior. Pásalo después de reconectar.
catchup
boolean
Cuando es true, devuelve los eventos de stream perdidos disponibles después de since\ antes de esperar nuevos eventos.
heartbeat_sec
integer
Intervalo de latido en segundos para la actividad del stream. Rango válido: 5-120.
max_batch
integer
Máximo de mensajes de stream a leer por lote. El valor predeterminado es 500; usa lotes más pequeños para clientes de baja latencia.
Respuestas
101 Conexión WebSocket establecida. Los mensajes son objetos JSON.
application/json · objeto
Mensaje delta
{
"event": "delta",
"data": {
"event_id": "3704597661",
"selection_key": "moneyline:home",
"resume": "1760000000000-0",
"points": []
}
}
Mensaje de latido
{
"event": "heartbeat",
"data": {}
}
Mensaje de resincronización
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
200 Esquema de respuesta de compatibilidad con herramientas OpenAPI. Las conexiones WebSocket en tiempo de ejecución se actualizan con 101.
application/json · objeto
Mensaje delta
{
"event": "delta",
"data": {
"event_id": "3704597661",
"selection_key": "moneyline:home",
"resume": "1760000000000-0",
"points": []
}
}
Mensaje de latido
{
"event": "heartbeat",
"data": {}
}
Mensaje de resincronización
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten acceder a este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 No se encontró el recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de velocidad excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando los proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Sports exchange
Libros de órdenes de intercambio de apuestas deportivas con escaleras back/lay, liquidez y actualizaciones en vivo.
URL base https://api.odds-api.net/v1 Versión 1.0.0 Fuente OpenAPI en vivo
GET Snapshot /v1/events/{event_id}/exchange/orderbook/snapshot
Devuelve los libros de órdenes de las casas de apuestas de intercambio para un evento. Las casas de intercambio compatibles son betdaq, betfair, smarkets y matchbook. Cada selección incluye niveles de precios de back y lay con tamaño disponible, además de campos de resumen de primer nivel como best_back_price y best_lay_price. Se conservan la identidad del mercado, la identidad del equipo, la fuente y las marcas de tiempo de observación, la moneda, el total igualado, el total disponible, el volumen negociado y el volumen negociado por precio cuando los proporciona la fuente de intercambio. El volumen de Smarkets se informa en GBP e incluye su native double_stake_volume cuando está disponible. Use depth\ para limitar los niveles de escalera ejecutables y almacene en caché solo brevemente porque la liquidez del intercambio puede moverse rápidamente.
Autenticación: X-API-Key Maneje HTTP 429 con backoff y evite bucles de sondeo intensivos.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/exchange/orderbook/snapshot?market_keys=moneyline"
Parámetros
Ruta
event_id obligatorio
string
Identificador canónico de evento o carrera de una respuesta de lista de eventos.
Consulta
exchanges
string
Lista de permitidos de casas de intercambio separada por comas. Los valores admitidos son betdaq\, betfair\, smarkets\ y matchbook\.
market_keys
string
Lista de permitidos de claves de mercado separada por comas para filtros de cuotas.
selection_keys
string
Identificadores de selección estables separados por comas de un libro de órdenes de intercambio o una instantánea de cuotas.
depth
integer
Número de niveles de precios de intercambio por lado back/lay. Use valores más pequeños para menor latencia y tamaño de carga útil.
include_source
boolean
Cuando sea true, incluya la procedencia por línea/por casa de apuestas y los metadatos de captura. Los campos de frescura de nivel superior siempre se conservan.
include_unavailable
boolean
Cuando sea true, incluya filas no disponibles o suspendidas donde el endpoint las admita.
refresh
boolean
Solicite una recopilación de Betfair limitada y basada en la demanda antes de devolver.
refresh_timeout_seconds
number
Respuestas
200 Respuesta exitosa
application/json · object
Libro de órdenes de intercambio de eventos: Instantánea
{
"event_id": "3704597661",
"as_of_ts_ms": 1760000000000,
"ttl_seconds": 30,
"items": [
{
"id": "betfair::1.23456789::moneyline",
"event_id": "3704597661",
"exchange": "betfair",
"exchange_market_id": "1.23456789",
"market_key": "moneyline",
"market_name": "Match Odds",
"bet_type": "moneyline",
"period": "full time",
"home_team": "Home",
"away_team": "Away",
"status": "open",
"in_play": false,
"total_matched": 24567.12,
"total_available": 204.8,
"total_available_source": "displayed_ladders",
"currency": "AUD",
"observed_at": "2026-08-22T08:00:00Z",
"selections": [
{
"selection_key": "moneyline:home",
"exchange_selection_id": "12345",
"selection_name": "Home",
"last_traded_price": 2.08,
"traded_volume_by_price": [
{
"price": 2.08,
"size": 300.0
}
],
"available_to_back": [
{
"price": 2.08,
"size": 120.5
}
],
"available_to_lay": [
{
"price": 2.1,
"size": 84.3
}
],
"best_back_price": 2.08,
"best_back_size": 120.5,
"best_lay_price": 2.1,
"best_lay_size": 84.3
}
]
}
],
"next_cursor": null,
"resume": "1760000000000-0"
}
400 Parámetros o cuerpo de solicitud no válidos.
application/json · object
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · object
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · object
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 No se encontró el recurso.
application/json · object
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Se excedió el límite de velocidad.
application/json · value
Retry-After
integer
Segundos de espera antes de reintentar cuando los proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Solicitudes restantes aproximadas en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · object
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (SSE) /v1/events/{event_id}/exchange/orderbook/stream
Fuente de eventos enviados por el servidor para cambios en el libro de órdenes de intercambio deportivo en un evento. Suscríbase después de leer la instantánea y pase el valor resume\ de la instantánea como since\ para recibir cambios de recuperación cuando estén disponibles. Maneje delta\, heartbeat\ y resync\; recargue la instantánea después de resync\.
Autenticación: X-API-Key Maneje HTTP 429 con backoff y evite bucles de sondeo intensivos.
Ejemplo de solicitud
curl -N -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/exchange/orderbook/stream?market_keys=moneyline&since=1760000000000-0&catchup=true"
Parámetros
Ruta
event_id obligatorio
string
Identificador canónico de evento o carrera de una respuesta de lista de eventos.
Consulta
exchanges
string
Lista de permitidos de casas de intercambio separada por comas. Los valores admitidos son betdaq\, betfair\, smarkets\ y matchbook\.
market_keys
string
Lista de permitidos de claves de mercado separada por comas para filtros de cuotas.
selection_keys
string
Identificadores de selección estables separados por comas de un libro de órdenes de intercambio o una instantánea de cuotas.
depth
integer
Número de niveles de precios de intercambio por lado back/lay. Use valores más pequeños para menor latencia y tamaño de carga útil.
include_source
boolean
Cuando sea true, incluya la procedencia por línea/por casa de apuestas y los metadatos de captura. Los campos de frescura de nivel superior siempre se conservan.
include_unavailable
boolean
Cuando sea true, incluya filas no disponibles o suspendidas donde el endpoint las admita.
since
string
Token de reanudación de una instantánea o mensaje de stream anterior. Páselo después de reconectarse.
catchup
boolean
Cuando sea true, devuelva los eventos de stream perdidos disponibles después de since\ antes de esperar nuevos eventos.
heartbeat_sec
integer
Intervalo de latido en segundos para la actividad del stream. El rango válido es 5-120.
max_batch
integer
Máximo de mensajes de stream para leer por lote. El valor predeterminado es 500; use lotes más pequeños para clientes de baja latencia.
Respuestas
200 Stream de eventos enviados por el servidor. Cada mensaje tiene un nombre de evento y una carga útil de datos JSON.
text/event-stream · object
Mensaje delta decodificado
event: delta
data: {
"event_id": "3704597661",
"resume": "1760000000000-0",
"changes": []
}
Mensaje de latido decodificado
event: heartbeat
data: {}
Mensaje de resincronización decodificado
event: resync
data: {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
400 Parámetros o cuerpo de solicitud no válidos.
application/json · object
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · object
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · object
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 No se encontró el recurso.
application/json · object
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Se excedió el límite de velocidad.
application/json · value
Retry-After
integer
Segundos de espera antes de reintentar cuando los proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Solicitudes restantes aproximadas en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · object
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (WebSocket) /v1/events/{event_id}/exchange/orderbook/ws
Fuente WebSocket para cambios en el libro de órdenes de intercambio deportivo en un evento. Los mensajes reflejan las cargas útiles del stream SSE del libro de órdenes de intercambio.
Autenticación: X-API-Key Maneje HTTP 429 con backoff y evite bucles de sondeo intensivos.
Ejemplo de solicitud
wscat -c "wss://api.odds-api.net/v1/events/3704597661/exchange/orderbook/ws?market_keys=moneyline&since=1760000000000-0&catchup=true&api_key=$ODDS_API_KEY"
Parámetros
Ruta
event_id obligatorio
string
Identificador canónico de evento o carrera de una respuesta de lista de eventos.
Consulta
exchanges
string
Lista de permitidos de casas de intercambio separada por comas. Los valores admitidos son betdaq\, betfair\, smarkets\ y matchbook\.
market_keys
string
Lista de permitidos de claves de mercado separada por comas para filtros de cuotas.
selection_keys
string
Identificadores de selección estables separados por comas de un libro de órdenes de intercambio o una instantánea de cuotas.
depth
integer
Número de niveles de precios de intercambio por lado back/lay. Use valores más pequeños para menor latencia y tamaño de carga útil.
include_source
boolean
Cuando sea true, incluya la procedencia por línea/por casa de apuestas y los metadatos de captura. Los campos de frescura de nivel superior siempre se conservan.
include_unavailable
boolean
Cuando sea true, incluya filas no disponibles o suspendidas donde el endpoint las admita.
since
string
Token de reanudación de una instantánea o mensaje de stream anterior. Páselo después de reconectarse.
catchup
boolean
Cuando sea true, devuelva los eventos de stream perdidos disponibles después de since\ antes de esperar nuevos eventos.
heartbeat_sec
integer
Intervalo de latido en segundos para la actividad del stream. El rango válido es 5-120.
max_batch
integer
Máximo de mensajes de stream para leer por lote. El valor predeterminado es 500; use lotes más pequeños para clientes de baja latencia.
Respuestas
101 Conexión WebSocket establecida. Los mensajes son objetos JSON.
application/json · object
Mensaje delta
{
"event": "delta",
"data": {
"event_id": "3704597661",
"resume": "1760000000000-0",
"changes": []
}
}
Mensaje de latido
{
"event": "heartbeat",
"data": {}
}
Mensaje de resincronización
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
200 Esquema de respuesta de compatibilidad de herramientas OpenAPI. Las conexiones WebSocket en tiempo de ejecución se actualizan con 101.
application/json · object
Mensaje delta
{
"event": "delta",
"data": {
"event_id": "3704597661",
"resume": "1760000000000-0",
"changes": []
}
}
Mensaje de latido
{
"event": "heartbeat",
"data": {}
}
Mensaje de resincronización
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
400 Parámetros o cuerpo de solicitud no válidos.
application/json · object
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · object
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · object
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 No se encontró el recurso.
application/json · object
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Se excedió el límite de velocidad.
application/json · value
Retry-After
integer
Segundos de espera antes de reintentar cuando los proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Solicitudes restantes aproximadas en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · object
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Descubrir mercados /v1/events/{event_id}/exchange/markets
Enumera los mercados de Betfair disponibles en todos los deportes, incluidos fútbol y críquet. Proporcione un ID de evento de WagerWise o id_type=betfair con un ID de evento nativo de Betfair. Filtre usando market_types; MATCH_ODDS se ordena primero. Use los valores opacos de market_id devueltos con el WebSocket multiplexado; no envíe nombres o IDs de mercado de Betfair.
Autenticación: X-API-Key Maneje HTTP 429 con backoff y evite bucles de sondeo intensivos.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/exchange/markets"
Parámetros
Ruta
event_id obligatorio
string
Identificador canónico de evento o carrera de una respuesta de lista de eventos.
Consulta
exchange
string
id_type
string
Espacio de nombres de event_id; los IDs de Betfair son IDs de evento numéricos, no IDs de mercado.
market_types
string
Tipos de mercado de Betfair opcionales separados por comas, p. ej. MATCH_ODDS,OVER_UNDER_25.
refresh
boolean
Respuestas
200 Respuesta exitosa
application/json · object
Ejemplo generado
{
"score_subscription": {
"websocket_url": "string",
"command": {},
"max_events_per_connection": 123
},
"event_id": "3704597661",
"exchange": "string",
"count": 123,
"available_market_types": [
"string"
],
"markets": [
{
"market_id": "string",
"event_id": "3704597661",
"wagerwise_event_id": "3704597661",
"betfair_event_id": "3704597661",
"exchange": "string",
"sport": "basketball",
"market_key": "moneyline",
"bet_type": "string",
"metric": "string",
"period": "0"
}
],
"subscription": {
"websocket_url": "string",
"command": {},
"max_markets_per_connection": 123
}
}
400 Parámetros o cuerpo de solicitud no válidos.
application/json · object
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · object
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · object
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 No se encontró el recurso.
application/json · object
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Se excedió el límite de velocidad.
application/json · value
Retry-After
integer
Segundos de espera antes de reintentar cuando los proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Solicitudes restantes aproximadas en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · object
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Discover by Betfair event ID /v1/exchange/betfair/events/{betfair_event_id}/markets
Operación de Public Odds API. Autentícate con X-API-Key\. Verifica las marcas de tiempo antes de mostrar precios y maneja mercados vacíos, obsoletos o suspendidos.
Auth: X-API-Key Maneja HTTP 429 con backoff y evita bucles de polling demasiado frecuentes.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/exchange/betfair/events/3704597661/markets"
Parámetros
Ruta
betfair_event_id obligatorio
string
Consulta
market_types
string
refresh
boolean
Respuestas
200 Respuesta exitosa
application/json · objeto
Ejemplo generado
{
"score_subscription": {
"websocket_url": "string",
"command": {},
"max_events_per_connection": 123
},
"event_id": "3704597661",
"exchange": "string",
"count": 123,
"available_market_types": [
"string"
],
"markets": [
{
"market_id": "string",
"event_id": "3704597661",
"wagerwise_event_id": "3704597661",
"betfair_event_id": "3704597661",
"exchange": "string",
"sport": "basketball",
"market_key": "moneyline",
"bet_type": "string",
"metric": "string",
"period": "0"
}
],
"subscription": {
"websocket_url": "string",
"command": {},
"max_markets_per_connection": 123
}
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de tasa excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando lo proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Multiplexed WebSocket /v1/exchange/orderbooks/ws
Un WebSocket aprobado por soporte puede suscribirse y cancelar suscripción dinámicamente a hasta cinco IDs de mercado opacos. Envía {op: subscribe, market_ids: [...], depth: 3}; el servidor confirma inmediatamente, envía una imagen en caché cuando está disponible, luego deltas y heartbeats. Cada libro de órdenes incluye in_play. El handshake usa un crédito de API; el tiempo de conexión y los bytes lógicos usan las cuotas de stream del plan.
Auth: X-API-Key Maneja HTTP 429 con backoff y evita bucles de polling demasiado frecuentes.
Ejemplo de solicitud
wscat -c "wss://api.odds-api.net/v1/exchange/orderbooks/ws?api_key=$ODDS_API_KEY"
Respuestas
101 Conexión WebSocket establecida. Envía comandos JSON de suscripción/cancelación.
application/json · objeto
Ejemplo generado
{
"type": "subscribed",
"event_id": "3704597661",
"resume": "1760000000000-0",
"market_ids": [
"string"
],
"changes": [
{}
]
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de tasa excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando lo proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Multiplexed WebSocket /v1/exchange/tennis/scores/ws
Requiere X-API-Key con tennis_scores_enabled=true. Descubre primero los IDs de eventos de tenis usando el descubrimiento de mercados de intercambio. Envía comandos de suscripción/cancelación con event_ids (máximo 10), o ping. Abrir solo no inicia ninguna recopilación. El primer marcador es una imagen; el delta contiene un marcador de reemplazo completo. Los heartbeats de cinco segundos indican solo la vivacidad del socket. Los marcadores son efímeros: sin historial ni reproducción. received_at es nuestro tiempo de recepción; source_timestamp es null. Los marcadores y precios son observaciones independientes y pueden estar retrasados o ser inexactos. Los campos anulables no se infieren. Maneja unknown_event_ids, event_limit_exceeded, warming_timeout, score_unavailable, stale y upstream_unavailable. El agotamiento de cuota cierra con 4429; la autenticación y disponibilidad usan los códigos de cierre de stream estándar. Reconecta y suscríbete de nuevo después de la desconexión; los números de secuencia están limitados al proceso del router activo.
Auth: X-API-Key Maneja HTTP 429 con backoff y evita bucles de polling demasiado frecuentes.
Ejemplo de solicitud
wscat -c "wss://api.odds-api.net/v1/exchange/tennis/scores/ws?api_key=$ODDS_API_KEY"
Respuestas
101 WebSocket establecido; suscríbete a los IDs de eventos de tenis descubiertos.
application/json · objeto
Ejemplo generado
{
"type": "image",
"event_id": "3704597661",
"stream_id": "string",
"sequence": 123,
"update_kind": "initial",
"score": {
"sport": "basketball",
"provider": "string",
"home": {
"name": "string",
"sets": 123,
"games": 123,
"points": "string",
"is_serving": true,
"game_sequence": [
123
]
},
"away": {
"name": "string",
"sets": 123,
"games": 123,
"points": "string",
"is_serving": true,
"game_sequence": [
123
]
},
"current_set": 123,
"current_game": 123,
"match_status": "string",
"tie_break": true,
"received_at": "string",
"source_timestamp": null
},
"freshness": {
"state": "live",
"age_ms": 123,
"poll_interval_ms": 123
}
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Se requiere derecho de acceso a marcadores de tenis. 404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de tasa excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando lo proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Mercados de predicción
Libros de órdenes de mercados de predicción vinculados a eventos con escaleras de probabilidad, liquidez y actualizaciones en vivo.
URL base https://api.odds-api.net/v1 Versión 1.0.0 Fuente OpenAPI en vivo
GET Snapshot /v1/events/{event_id}/prediction-markets/orderbook/snapshot
Devuelve libros de órdenes de Polymarket y Kalshi vinculados a un evento deportivo canónico de WagerWise. Cada contrato contiene escaleras de probabilidad de oferta y demanda ejecutables, probabilidad y tamaño de mejor oferta/demanda, la probabilidad de la operación más reciente cuando está disponible, probabilidades decimales brutas y ajustadas por tarifas estimadas, metadatos de liquidez y frescura de la fuente. Usa providers\, market\_keys\ y contract\_ids\ para reducir la respuesta y depth\ para limitar cada escalera. La disponibilidad del mercado está curada según la oferta deportiva compatible de WagerWise.
Auth: X-API-Key Maneja HTTP 429 con backoff y evita bucles de polling demasiado frecuentes.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/prediction-markets/orderbook/snapshot?market_keys=moneyline"
Parámetros
Ruta
event_id obligatorio
string
Identificador canónico de evento o carrera de una respuesta de lista de eventos.
Consulta
providers
string
Lista de permitidos de proveedores de mercados de predicción separados por comas: polymarket\, kalshi\.
market_keys
string
Lista de permitidos de claves de mercado separadas por comas para filtros de probabilidades.
contract_ids
string
Lista de permitidos de IDs de contrato separados por comas de un snapshot de mercado de predicción.
depth
integer
Número de niveles de precio de probabilidad por lado de oferta/demanda. Usa valores más pequeños para menor latencia y tamaño de payload.
include_source
boolean
Cuando es true, incluye metadatos de procedencia y captura por línea/libro de apuestas. Los campos de frescura de nivel superior siempre se mantienen.
include_unavailable
boolean
Cuando es true, incluye filas no disponibles o suspendidas donde el endpoint las admite.
Respuestas
200 Respuesta exitosa
application/json · objeto
Libro de órdenes de mercado de predicción: Snapshot
{
"event_id": "3704597661",
"as_of_ts_ms": 1760000000000,
"ttl_seconds": 30,
"items": [
{
"id": "polymarket::nba-example::moneyline",
"event_id": "3704597661",
"provider": "polymarket",
"provider_market_id": "nba-example",
"market_key": "moneyline",
"market_name": "Home vs Away",
"bet_type": "moneyline",
"period": "full time",
"home_team": "Home",
"away_team": "Away",
"status": "open",
"currency": "USD",
"size_unit": "contracts",
"total_liquidity": 4200.0,
"fee_model": "polymarket_sports_taker",
"fee_estimated": true,
"observed_at": "2026-08-26T08:00:00Z",
"contracts": [
{
"contract_id": "home-contract",
"contract_name": "Home",
"outcome": "yes",
"side": "home",
"status": "open",
"probability_bids": [
{
"price": 0.51,
"size": 120.0
}
],
"probability_asks": [
{
"price": 0.52,
"size": 95.0
}
],
"best_bid_probability": 0.51,
"best_bid_size": 120.0,
"best_ask_probability": 0.52,
"best_ask_size": 95.0,
"gross_decimal_odds": 1.92307692,
"fee_adjusted_decimal_odds": 1.88,
"projection_eligible": true
}
]
}
],
"next_cursor": null,
"resume": "1760000000000-0"
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de tasa excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando lo proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (SSE) /v1/events/{event_id}/prediction-markets/orderbook/stream
Fuente de eventos enviados por el servidor para cambios en libros de órdenes de mercados de predicción en un evento. Lee primero el snapshot, luego reconecta con su token resume\ como since\. Maneja delta\, heartbeat\ y resync\; recarga el snapshot después de resync\.
Auth: X-API-Key Maneja HTTP 429 con backoff y evita bucles de polling demasiado frecuentes.
Ejemplo de solicitud
curl -N -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/prediction-markets/orderbook/stream?market_keys=moneyline&since=1760000000000-0&catchup=true"
Parámetros
Ruta
event_id obligatorio
string
Identificador canónico de evento o carrera de una respuesta de lista de eventos.
Consulta
providers
string
Lista de permitidos de proveedores de mercados de predicción separados por comas: polymarket\, kalshi\.
market_keys
string
Lista de permitidos de claves de mercado separadas por comas para filtros de probabilidades.
contract_ids
string
Lista de permitidos de IDs de contrato separados por comas de un snapshot de mercado de predicción.
depth
integer
Número de niveles de precio de probabilidad por lado de oferta/demanda. Usa valores más pequeños para menor latencia y tamaño de payload.
include_source
boolean
Cuando es true, incluye metadatos de procedencia y captura por línea/libro de apuestas. Los campos de frescura de nivel superior siempre se mantienen.
include_unavailable
boolean
Cuando es true, incluye filas no disponibles o suspendidas donde el endpoint las admite.
since
string
Token de reanudación de un snapshot o mensaje de stream anterior. Pásalo después de reconectar.
catchup
boolean
Cuando es true, devuelve eventos de stream perdidos disponibles después de since\ antes de esperar nuevos eventos.
heartbeat_sec
integer
Intervalo de heartbeat en segundos para la vivacidad del stream. Rango válido es 5-120.
max_batch
integer
Máximo de mensajes de stream a leer por lote. El valor predeterminado es 500; usa lotes más pequeños para clientes de baja latencia.
Respuestas
200 Stream de eventos enviados por el servidor. Cada mensaje tiene un nombre de evento y payload de datos JSON.
text/event-stream · objeto
Mensaje delta decodificado
event: delta
data: {
"event_id": "3704597661",
"resume": "1760000000000-0",
"changes": []
}
Mensaje heartbeat decodificado
event: heartbeat
data: {}
Mensaje de resincronización decodificado
event: resync
data: {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de tasa excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando lo proporciona el limitador.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string Nombre del bucket del limitador que produjo la respuesta cuando se proporcionó.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (WebSocket) /v1/events/{event_id}/prediction-markets/orderbook/ws
Fuente WebSocket para cambios en el libro de órdenes de mercados de predicción en un evento. Los mensajes reflejan las cargas útiles del flujo SSE de mercados de predicción y usan los mismos filtros y semántica de reanudación.
Autenticación: X-API-Key Maneja HTTP 429 con backoff y evita bucles de sondeo cerrados.
Ejemplo de solicitud
wscat -c "wss://api.odds-api.net/v1/events/3704597661/prediction-markets/orderbook/ws?market_keys=moneyline&since=1760000000000-0&catchup=true&api_key=$ODDS_API_KEY"
Parámetros
Ruta
event_id obligatorio
string
Identificador canónico del evento o carrera de una respuesta de lista de eventos.
Consulta
providers
string
Lista de proveedores de mercados de predicción permitidos separados por comas: polymarket\, kalshi\.
market_keys
string
Lista de claves de mercado permitidas separadas por comas para filtros de cuotas.
contract_ids
string
Lista de ID de contratos permitidos separados por comas de una instantánea de mercado de predicción.
depth
integer
Número de niveles de precios de probabilidad por lado de oferta/demanda. Usa valores más pequeños para menor latencia y tamaño de carga útil.
include_source
boolean
Cuando es true, incluye metadatos de procedencia y captura por línea/casa de apuestas. Los campos de frescura de nivel superior siempre se conservan.
include_unavailable
boolean
Cuando es true, incluye filas no disponibles o suspendidas donde el endpoint las admite.
since
string
Token de reanudación de una instantánea o mensaje de flujo anterior. Pásalo después de reconectar.
catchup
boolean
Cuando es true, devuelve los eventos de flujo perdidos disponibles después de since\ antes de esperar nuevos eventos.
heartbeat_sec
integer
Intervalo de latido en segundos para la actividad del flujo. El rango válido es 5-120.
max_batch
integer
Máximo de mensajes de flujo a leer por lote. El valor predeterminado es 500; usa lotes más pequeños para clientes de baja latencia.
Respuestas
101 Conexión WebSocket establecida. Los mensajes son objetos JSON.
application/json · objeto
Mensaje delta
{
"event": "delta",
"data": {
"event_id": "3704597661",
"resume": "1760000000000-0",
"changes": []
}
}
Mensaje de latido
{
"event": "heartbeat",
"data": {}
}
Mensaje de resincronización
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
200 Esquema de respuesta de compatibilidad con herramientas OpenAPI. Las conexiones WebSocket en tiempo de ejecución se actualizan con 101.
application/json · objeto
Mensaje delta
{
"event": "delta",
"data": {
"event_id": "3704597661",
"resume": "1760000000000-0",
"changes": []
}
}
Mensaje de latido
{
"event": "heartbeat",
"data": {}
}
Mensaje de resincronización
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
400 Parámetros o cuerpo de solicitud no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de velocidad excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando el limitador lo proporciona.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Solicitudes restantes aproximadas en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporcionó.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Eventos de carreras
Descubrimiento de eventos de carreras y actualizaciones de carreras en vivo.
URL base https://api.odds-api.net/v1 Versión 1.0.0 Fuente OpenAPI en vivo
GET Search /v1/racing/events
Busca eventos de carreras de caballos, galgos y arneses próximos y en vivo en Australia (AU\), Nueva Zelanda (NZ\), Gran Bretaña (GB\) e Irlanda (IE\). Usa tipos de carrera canónicos horse-racing\, greyhound-racing\ y harness-racing\; la abreviatura heredada se normaliza para compatibilidad hacia atrás. Las combinaciones devueltas dependen del calendario en vivo. El sondeo de carreras debe usar ventanas de tiempo estrechas, cursores estables e intervalos más cortos cerca del salto. Omite el estado para descubrir carreras tempranas: status=fetching excluye eventos aún marcados como abiertos, incluso cuando existen cuotas tempranas. El estado del ciclo de vida del evento es distinto del estado de la instantánea de cuotas de cada casa de apuestas. Los conteos de corredores prefieren el campo completo de Betfair consciente de rasguños, recurren a otra casa de apuestas o al calendario, y exponen metadatos de fuente, marca de tiempo y completitud. Las cuotas de carreras no se filtran por la selección de casas de apuestas de oportunidades de apuestas de la clave API.
Autenticación: X-API-Key Maneja HTTP 429 con backoff y evita bucles de sondeo cerrados.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/racing/events?status=fetching&limit=25"
Parámetros
Consulta
race_type
string
Filtros de tipo de carrera canónicos separados por comas: horse-racing\, greyhound-racing\ o harness-racing\. Los alias heredados como horse\, thoroughbred\, greyhound\, dog\, dogs\ y harness\ se normalizan para compatibilidad hacia atrás.
race_state
string
Filtros de estado de carrera separados por comas.
race_country
string
Filtros de país de carrera separados por comas: AU\, NZ\, GB\ o IE\. Las combinaciones devueltas dependen del calendario de carreras en vivo.
status
string
Estados del ciclo de vida del evento separados por comas. Omítelo para descubrimiento temprano: fetching solo excluye carreras abiertas que ya pueden tener precios. Esto no es el estado de la instantánea de cuotas de la casa de apuestas.
start_from
integer
Límite inferior en segundos Unix para la hora de inicio del evento. Usa ventanas acotadas en el sondeo de producción.
start_to
integer
Límite superior en segundos Unix para la hora de inicio del evento. Mantén las ventanas estrechas para trabajos de sincronización en caliente.
cursor
string
Cursor de paginación del next\_cursor\ anterior. Mantén los filtros idénticos entre páginas.
limit
integer
Máximo de elementos a devolver. Respeta los límites devueltos por /limits\.
include_links
boolean
Cuando es true, incluye campos de casa de apuestas/enlace profundo como enlaces de partidos y enlaces de carreras.
include_source
boolean
Cuando es true, incluye metadatos de procedencia y captura por línea/casa de apuestas. Los campos de frescura de nivel superior siempre se conservan.
Respuestas
200 Respuesta exitosa
application/json · objeto
Eventos de carreras: Búsqueda
{
"items": [
{
"event_id": "race-1001",
"race_type": "horse-racing",
"race_country": "AU",
"race_state": "QLD",
"status": "open",
"race_start_time": 1760000000,
"race_venue": "Doomben",
"active_runners": 7,
"total_runners": 8,
"scratched_runners": 1,
"runner_count_source": "betfair",
"runner_count_updated_at_ts": 1759999700,
"runner_count_complete": true
}
],
"next_cursor": null,
"count": 1
}
400 Parámetros o cuerpo de solicitud no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de velocidad excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando el limitador lo proporciona.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Solicitudes restantes aproximadas en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporcionó.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (SSE) /v1/racing/events/stream
Fuente de eventos enviados por el servidor para inserciones, actualizaciones y eliminaciones de eventos de carreras. Almacena tokens de reanudación y recarga la lista de eventos si un flujo pide al cliente resincronizar.
Autenticación: X-API-Key Maneja HTTP 429 con backoff y evita bucles de sondeo cerrados.
Ejemplo de solicitud
curl -N -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/racing/events/stream"
Parámetros
Consulta
include_links
boolean
Cuando es true, incluye campos de casa de apuestas/enlace profundo como enlaces de partidos y enlaces de carreras.
include_raw_payload
boolean
Cuando es true, incluye objetos de datos/carga útil almacenados sin procesar donde el endpoint los expone.
include_source
boolean
Cuando es true, incluye metadatos de procedencia y captura por línea/casa de apuestas. Los campos de frescura de nivel superior siempre se conservan.
since
string
Token de reanudación de una instantánea o mensaje de flujo anterior. Pásalo después de reconectar.
catchup
boolean
Cuando es true, devuelve los eventos de flujo perdidos disponibles después de since\ antes de esperar nuevos eventos.
heartbeat_sec
integer
Intervalo de latido en segundos para la actividad del flujo. El rango válido es 5-120.
max_batch
integer
Máximo de mensajes de flujo a leer por lote. El valor predeterminado es 500; usa lotes más pequeños para clientes de baja latencia.
Respuestas
200 Flujo de eventos enviados por el servidor. Cada mensaje tiene un nombre de evento y una carga útil de datos JSON.
text/event-stream · objeto
Mensaje delta decodificado
event: delta
data: {
"resume": "1760000000000-0",
"changes": []
}
Mensaje de latido decodificado
event: heartbeat
data: {}
Mensaje de resincronización decodificado
event: resync
data: {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
400 Parámetros o cuerpo de solicitud no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de velocidad excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando el limitador lo proporciona.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Solicitudes restantes aproximadas en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporcionó.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (WebSocket) /v1/racing/events/ws
Fuente WebSocket para inserciones, actualizaciones y eliminaciones de eventos de carreras. Los mensajes reflejan la fuente SSE de eventos de carreras.
Autenticación: X-API-Key Maneja HTTP 429 con backoff y evita bucles de sondeo cerrados.
Ejemplo de solicitud
wscat -c "wss://api.odds-api.net/v1/racing/events/ws?api_key=$ODDS_API_KEY"
Parámetros
Consulta
include_links
boolean
Cuando es true, incluye campos de casa de apuestas/enlace profundo como enlaces de partidos y enlaces de carreras.
include_raw_payload
boolean
Cuando es true, incluye objetos de datos/carga útil almacenados sin procesar donde el endpoint los expone.
include_source
boolean
Cuando es true, incluye metadatos de procedencia y captura por línea/casa de apuestas. Los campos de frescura de nivel superior siempre se conservan.
since
string
Token de reanudación de una instantánea o mensaje de flujo anterior. Pásalo después de reconectar.
catchup
boolean
Cuando es true, devuelve los eventos de flujo perdidos disponibles después de since\ antes de esperar nuevos eventos.
heartbeat_sec
integer
Intervalo de latido en segundos para la actividad del flujo. El rango válido es 5-120.
max_batch
integer
Máximo de mensajes de flujo a leer por lote. El valor predeterminado es 500; usa lotes más pequeños para clientes de baja latencia.
Respuestas
101 Conexión WebSocket establecida. Los mensajes son objetos JSON.
application/json · objeto
Mensaje delta
{
"event": "delta",
"data": {
"resume": "1760000000000-0",
"changes": []
}
}
Mensaje de latido
{
"event": "heartbeat",
"data": {}
}
Mensaje de resincronización
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
200 Esquema de respuesta de compatibilidad con herramientas OpenAPI. Las conexiones WebSocket en tiempo de ejecución se actualizan con 101.
application/json · objeto
Mensaje delta
{
"event": "delta",
"data": {
"resume": "1760000000000-0",
"changes": []
}
}
Mensaje de latido
{
"event": "heartbeat",
"data": {}
}
Mensaje de resincronización
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
400 Parámetros de solicitud o cuerpo inválidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o inválidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de velocidad excedido.
application/json · valor
Retry-After
entero
Segundos a esperar antes de reintentar cuando el limitador lo proporciona.
X-RateLimit-Limit
entero
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
entero
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
cadena
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Detalles del evento /v1/racing/events/{event_id}
Devuelve el registro actual del evento de carrera para un ID de carrera canónico.
Autenticación: X-API-Key Maneja HTTP 429 con retroceso y evita bucles de sondeo ajustados.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/racing/events/RACE_EVENT_ID"
Parámetros
Ruta
event_id obligatorio
cadena
Identificador canónico de evento o carrera de una respuesta de lista de eventos.
Consulta
include_links
booleano
Cuando es verdadero, incluye campos de casa de apuestas/enlaces profundos como enlaces de partidos y enlaces de carreras.
include_raw_payload
booleano
Cuando es verdadero, incluye objetos de datos/carga útil almacenados en bruto donde el endpoint los expone.
include_source
booleano
Cuando es verdadero, incluye metadatos de procedencia y captura por línea/casa de apuestas. Los campos de frescura de nivel superior siempre se conservan.
Respuestas
200 Respuesta exitosa
application/json · objeto
Ejemplo generado
{
"event_id": "3704597661",
"data": {}
}
400 Parámetros de solicitud o cuerpo inválidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o inválidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de velocidad excedido.
application/json · valor
Retry-After
entero
Segundos a esperar antes de reintentar cuando el limitador lo proporciona.
X-RateLimit-Limit
entero
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
entero
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
cadena
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Cuotas de carreras
Instantáneas de cuotas de carreras, feeds de carreras en casa, Server-Sent Events y actualizaciones WebSocket.
URL base https://api.odds-api.net/v1 Versión 1.0.0 Fuente OpenAPI en vivo
GET Instantánea /v1/racing/events/{event_id}/odds
Devuelve instantáneas de cuotas de casas de apuestas para un evento de carrera. Almacena en caché la última instantánea buena con su marca de tiempo y prefiere los streams para visualizaciones en tiempo real cercanas al salto. Los precios WIN compactos están en items[].runners[].win_odds. El volumen del mercado WIN de Exchange está en items[].total_matched y el volumen de corredores emparejados, cuando se proporciona, está en items[].runners[].traded_volume. Estos son montos negociados acumulativos, no profundidad ejecutable actual. Los precios en bruto de Sportsbet, cuando se solicitan, están en items[].payload.horse_data[].odds. El estado de cuotas temprano ok y el estado de captura cercano al salto pueden contener ambos precios válidos. active_runners, total_runners, scratched_runners, runner_count_source, runner_count_updated_at_ts y runner_count_complete de nivel superior describen el mejor estado de campo disponible. La selección de casas de apuestas de oportunidad de apuesta de la clave API no filtra las cuotas de carreras. Solicita include_source=true para marcas de tiempo de instantáneas e include_links=true para bookmaker_link, independientemente de include_raw_payload.
Autenticación: X-API-Key Maneja HTTP 429 con retroceso y evita bucles de sondeo ajustados.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/racing/events/RACE_EVENT_ID/odds"
Parámetros
Ruta
event_id obligatorio
cadena
Identificador canónico de evento o carrera de una respuesta de lista de eventos.
Consulta
bookmakers
cadena
Lista de permitidos de casas de apuestas separadas por comas. Usa /bookmakers\ para descubrir claves compatibles.
include_links
booleano
Incluye bookmaker_link cuando esté disponible, independientemente de la carga útil en bruto. Los clientes compactos omiten enlaces por defecto. false elimina enlaces, incluidos enlaces en bruto anidados.
include_raw_payload
booleano
Incluye carga útil específica de la casa de apuestas. Los clientes compactos usan false por defecto y reciben runners[].win_odds; los precios WIN en bruto de Sportsbet son payload.horse_data[].odds.
include_source
booleano
Incluye metadatos de fuente como updated_at_ts (segundos Unix). Los clientes compactos lo omiten por defecto.
include_unavailable
booleano
Incluye instantáneas de casas de apuestas sin precios de corredores WIN o PLACE compactos. Esto no restringe las cuotas al estado de captura; el estado temprano ok puede contener precios válidos.
Respuestas
200 Respuesta exitosa
application/json · objeto
Cuotas de carreras: Instantánea
{
"event_id": "race-1001",
"as_of_ts_ms": 1760000000000,
"active_runners": 7,
"total_runners": 8,
"scratched_runners": 1,
"runner_count_source": "betfair",
"runner_count_updated_at_ts": 1759999700,
"runner_count_complete": true,
"items": [
{
"bookmaker_name": "betfair",
"race_id": "race-1001",
"status": "ok",
"total_matched": 24567.12,
"runners": [
{
"runner_number": "1",
"runner_name": "Example Runner",
"win_odds": 3.4,
"place_odds": 1.65,
"traded_volume": 4100.0
}
]
}
],
"resume": "1760000000000-0"
}
400 Parámetros de solicitud o cuerpo inválidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o inválidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de velocidad excedido.
application/json · valor
Retry-After
entero
Segundos a esperar antes de reintentar cuando el limitador lo proporciona.
X-RateLimit-Limit
entero
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
entero
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
cadena
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (SSE) /v1/racing/events/{event_id}/odds/stream
Feed de Server-Sent Events para cambios de cuotas de carreras en un evento. Reconecta con since=<last\_resume\>\ y recarga la instantánea después de resync\. Cada changes[].snapshot usa los mismos campos de corredores compactos, banderas de enlaces y significados de estado de cuotas que el endpoint de instantánea de cuotas de carreras para clientes compactos. Los clientes no compactos con include_raw_payload=true reciben datos de casas de apuestas en bruto directamente en snapshot (Sportsbet: snapshot.horse_data[].odds), sin envoltorio de carga útil.
Autenticación: X-API-Key Maneja HTTP 429 con retroceso y evita bucles de sondeo ajustados.
Ejemplo de solicitud
curl -N -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/racing/events/RACE_EVENT_ID/odds/stream?since=RACE_RESUME_TOKEN&catchup=true"
Parámetros
Ruta
event_id obligatorio
cadena
Identificador canónico de evento o carrera de una respuesta de lista de eventos.
Consulta
include_links
booleano
Incluye bookmaker_link cuando esté disponible, independientemente de la carga útil en bruto. Los clientes compactos omiten enlaces por defecto. false elimina enlaces, incluidos enlaces en bruto anidados.
include_raw_payload
booleano
Incluye carga útil específica de la casa de apuestas. Los clientes compactos usan false por defecto y reciben runners[].win_odds; los precios WIN en bruto de Sportsbet son payload.horse_data[].odds.
include_source
booleano
Incluye metadatos de fuente como updated_at_ts (segundos Unix). Los clientes compactos lo omiten por defecto.
include_unavailable
booleano
Incluye instantáneas de casas de apuestas sin precios de corredores WIN o PLACE compactos. Esto no restringe las cuotas al estado de captura; el estado temprano ok puede contener precios válidos.
since
cadena
Token de reanudación de una instantánea o mensaje de stream anterior. Pásalo después de reconectar.
catchup
booleano
Cuando es verdadero, devuelve eventos de stream perdidos disponibles después de since\ antes de esperar nuevos eventos.
heartbeat_sec
entero
Intervalo de latido en segundos para la vitalidad del stream. El rango válido es 5-120.
max_batch
entero
Máximo de mensajes de stream a leer por lote. El valor predeterminado es 500; usa lotes más pequeños para clientes de baja latencia.
Respuestas
200 Stream de Server-Sent Events. Cada mensaje tiene un nombre de evento y una carga útil de datos JSON.
text/event-stream · objeto
Mensaje delta decodificado
event: delta
data: {
"event_id": "race-1001",
"resume": "1760000000000-0",
"changes": [
{
"op": "upsert",
"bookmaker_name": "sportsbet",
"snapshot": {
"bookmaker_name": "betfair",
"race_id": "race-1001",
"status": "ok",
"total_matched": 24567.12,
"runners": [
{
"runner_number": "1",
"runner_name": "Example Runner",
"win_odds": 3.4,
"place_odds": 1.65,
"traded_volume": 4100.0
}
]
}
}
]
}
Mensaje de latido decodificado
event: heartbeat
data: {}
Mensaje de resincronización decodificado
event: resync
data: {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
400 Parámetros de solicitud o cuerpo inválidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o inválidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 Recurso no encontrado.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de velocidad excedido.
application/json · valor
Retry-After
entero
Segundos a esperar antes de reintentar cuando el limitador lo proporciona.
X-RateLimit-Limit
entero
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
entero
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
cadena
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (WebSocket) /v1/racing/events/{event_id}/odds/ws
Feed WebSocket para cambios de cuotas de carreras en un evento. Los mensajes reflejan el feed SSE de cuotas de carreras.
Autenticación: X-API-Key Maneja HTTP 429 con retroceso y evita bucles de sondeo ajustados.
Ejemplo de solicitud
wscat -c "wss://api.odds-api.net/v1/racing/events/RACE_EVENT_ID/odds/ws?since=RACE_RESUME_TOKEN&catchup=true&api_key=$ODDS_API_KEY"
Parámetros
Ruta
event_id obligatorio
cadena
Identificador canónico de evento o carrera de una respuesta de lista de eventos.
Consulta
include_links
booleano
Incluye bookmaker_link cuando esté disponible, independientemente de la carga útil en bruto. Los clientes compactos omiten enlaces por defecto. false elimina enlaces, incluidos enlaces en bruto anidados.
include_raw_payload
booleano
Incluye carga útil específica de la casa de apuestas. Los clientes compactos usan false por defecto y reciben runners[].win_odds; los precios WIN en bruto de Sportsbet son payload.horse_data[].odds.
include_source
booleano
Incluye metadatos de fuente como updated_at_ts (segundos Unix). Los clientes compactos lo omiten por defecto.
include_unavailable
booleano
Incluye instantáneas de casas de apuestas sin precios de corredores WIN o PLACE compactos. Esto no restringe las cuotas al estado de captura; el estado temprano ok puede contener precios válidos.
since
cadena
Token de reanudación de una instantánea o mensaje de stream anterior. Pásalo después de reconectar.
catchup
booleano
Cuando es verdadero, devuelve eventos de stream perdidos disponibles después de since\ antes de esperar nuevos eventos.
heartbeat_sec
entero
Intervalo de latido en segundos para la vitalidad del stream. El rango válido es 5-120.
max_batch
entero
Máximo de mensajes de stream a leer por lote. El valor predeterminado es 500; usa lotes más pequeños para clientes de baja latencia.
Respuestas
101 Conexión WebSocket establecida. Los mensajes son objetos JSON.
application/json · objeto
Mensaje delta
{
"event": "delta",
"data": {
"event_id": "race-1001",
"resume": "1760000000000-0",
"changes": [
{
"op": "upsert",
"bookmaker_name": "sportsbet",
"snapshot": {
"bookmaker_name": "betfair",
"race_id": "race-1001",
"status": "ok",
"total_matched": 24567.12,
"runners": [
{
"runner_number": "1",
"runner_name": "Example Runner",
"win_odds": 3.4,
"place_odds": 1.65,
"traded_volume": 4100.0
}
]
}
}
]
}
}
Mensaje de latido
{
"event": "heartbeat",
"data": {}
}
Mensaje de resincronización
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
200 Esquema de respuesta de compatibilidad con herramientas OpenAPI. Las conexiones WebSocket en tiempo de ejecución se actualizan con 101.
application/json · objeto
Mensaje delta
{
"event": "delta",
"data": {
"event_id": "race-1001",
"resume": "1760000000000-0",
"changes": [
{
"op": "upsert",
"bookmaker_name": "sportsbet",
"snapshot": {
"bookmaker_name": "betfair",
"race_id": "race-1001",
"status": "ok",
"total_matched": 24567.12,
"runners": [
{
"runner_number": "1",
"runner_name": "Example Runner",
"win_odds": 3.4,
"place_odds": 1.65,
"traded_volume": 4100.0
}
]
}
}
]
}
}
Mensaje de heartbeat
{
"event": "heartbeat",
"data": {}
}
Mensaje de resincronización
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten acceder a este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 No se encontró el recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de tasa excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando el limitador lo proporciona.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Oportunidades de apuestas
Fuentes de oportunidades de EV positivo, arbitraje, middle y apuestas de bonificación.
URL base https://api.odds-api.net/v1 Versión 1.0.0 Fuente OpenAPI en vivo
GET Snapshot /v1/bets/snapshot
Devuelve las oportunidades de apuestas actuales por estrategia. Usa strategies\, limit\ y event\_id\ para mantener el payload acotado a lo que tu producto necesita. Consulta en un intervalo acotado, guarda en caché la última respuesta válida y muestra lenguaje de riesgo de ejecución antes de cualquier acción de apuesta visible para el usuario.
Autenticación: X-API-Key Maneja HTTP 429 con backoff y evita bucles de consulta demasiado frecuentes.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/bets/snapshot?strategies=pos_ev&limit=25"
Parámetros
Consulta
strategies
string
Estrategias de apuestas separadas por comas o all\.
limit
integer
Cantidad máxima de elementos a devolver. Respeta los límites devueltos por /limits\.
event_id
string
Identificador canónico de evento o carrera de una respuesta de lista de eventos.
source
string
Fuente de apuestas en vivo: activa, heredada o híbrida solo para administración
price_fields
string
odds\, odds,novig\, odds,fair\ o all\. Los clientes compactos usan por defecto odds\; los clientes existentes usan por defecto los campos de precios completos actuales.
include_links
boolean
Cuando es true, incluye campos de casa de apuestas/enlaces profundos, como enlaces de partidos y enlaces de carreras.
include_raw_payload
boolean
Cuando es true, incluye objetos de payload/datos almacenados en bruto donde el endpoint los expone.
include_source
boolean
Cuando es true, incluye metadatos de procedencia y captura por línea/casa de apuestas. Los campos de frescura de nivel superior siempre se conservan.
include_debug_ids
boolean
Cuando es true, incluye IDs internos/de subgrupo/opuestos útiles para conciliación.
Respuestas
200 Respuesta exitosa
application/json · objeto
Oportunidades de apuestas: Snapshot
{
"items": [
{
"id": "example-positive-ev",
"strategy": "pos_ev",
"event_id": "3704597661",
"bookmaker_name": "Bet365",
"selection_key": "moneyline:home",
"odds": 2.1,
"ev": 7.7
}
],
"resume": "{\"pos_ev\":\"1760000000000-0\"}"
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten acceder a este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 No se encontró el recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de tasa excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando el limitador lo proporciona.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (SSE) /v1/bets/stream
Fuente de eventos enviados por el servidor para inserciones, actualizaciones y eliminaciones de oportunidades de apuestas. Usa esto para alertas en lugar de consultas de snapshot de alta frecuencia. Los encabezados de respuesta de vinculación de fuente identifican la fuente lógica de apuestas en vivo solicitada y las fuentes efectivas por estrategia.
Autenticación: X-API-Key Maneja HTTP 429 con backoff y evita bucles de consulta demasiado frecuentes.
Ejemplo de solicitud
curl -N -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/bets/stream?strategies=pos_ev&since=1760000000000-0&catchup=true"
Parámetros
Consulta
strategies
string
Estrategias de apuestas separadas por comas o all\.
event_id
string
Identificador canónico de evento o carrera de una respuesta de lista de eventos.
source
string
Fuente de apuestas en vivo: activa, heredada o híbrida solo para administración
price_fields
string
odds\, odds,novig\, odds,fair\ o all\. Los clientes compactos usan por defecto odds\; los clientes existentes usan por defecto los campos de precios completos actuales.
include_links
boolean
Cuando es true, incluye campos de casa de apuestas/enlaces profundos, como enlaces de partidos y enlaces de carreras.
include_raw_payload
boolean
Cuando es true, incluye objetos de payload/datos almacenados en bruto donde el endpoint los expone.
include_source
boolean
Cuando es true, incluye metadatos de procedencia y captura por línea/casa de apuestas. Los campos de frescura de nivel superior siempre se conservan.
include_debug_ids
boolean
Cuando es true, incluye IDs internos/de subgrupo/opuestos útiles para conciliación.
since
string
Token de reanudación de un snapshot o mensaje de stream anterior. Pásalo después de reconectar.
catchup
boolean
Cuando es true, devuelve los eventos de stream perdidos disponibles después de since\ antes de esperar nuevos eventos.
heartbeat_sec
integer
Intervalo de heartbeat en segundos para la actividad del stream. Rango válido: 5-120.
Respuestas
200 Stream de eventos enviados por el servidor. Cada mensaje tiene un nombre de evento y un payload de datos JSON.
text/event-stream · objeto
Mensaje delta decodificado
event: delta
data: {
"resume": "1760000000000-0",
"events": []
}
Mensaje de heartbeat decodificado
event: heartbeat
data: {}
Mensaje de resincronización decodificado
event: resync
data: {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten acceder a este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 No se encontró el recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de tasa excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando el limitador lo proporciona.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
GET Stream (WebSocket) /v1/bets/ws
Fuente WebSocket para inserciones, actualizaciones y eliminaciones de oportunidades de apuestas. El handshake de aceptación incluye encabezados de vinculación de fuente que coinciden con el stream SSE.
Autenticación: X-API-Key Maneja HTTP 429 con backoff y evita bucles de consulta demasiado frecuentes.
Ejemplo de solicitud
wscat -c "wss://api.odds-api.net/v1/bets/ws?strategies=pos_ev&since=1760000000000-0&catchup=true&api_key=$ODDS_API_KEY"
Parámetros
Consulta
strategies
string
Estrategias de apuestas separadas por comas o all\.
event_id
string
Identificador canónico de evento o carrera de una respuesta de lista de eventos.
source
string
Fuente de apuestas en vivo: activa, heredada o híbrida solo para administración
price_fields
string
odds\, odds,novig\, odds,fair\ o all\. Los clientes compactos usan por defecto odds\; los clientes existentes usan por defecto los campos de precios completos actuales.
include_links
boolean
Cuando es true, incluye campos de casa de apuestas/enlaces profundos, como enlaces de partidos y enlaces de carreras.
include_raw_payload
boolean
Cuando es true, incluye objetos de payload/datos almacenados en bruto donde el endpoint los expone.
include_source
boolean
Cuando es true, incluye metadatos de procedencia y captura por línea/casa de apuestas. Los campos de frescura de nivel superior siempre se conservan.
include_debug_ids
boolean
Cuando es true, incluye IDs internos/de subgrupo/opuestos útiles para conciliación.
since
string
Token de reanudación de un snapshot o mensaje de stream anterior. Pásalo después de reconectar.
catchup
boolean
Cuando es true, devuelve los eventos de stream perdidos disponibles después de since\ antes de esperar nuevos eventos.
heartbeat_sec
integer
Intervalo de heartbeat en segundos para la actividad del stream. Rango válido: 5-120.
Respuestas
101 Conexión WebSocket establecida. Los mensajes son objetos JSON.
application/json · objeto
Mensaje delta
{
"event": "delta",
"data": {
"resume": "1760000000000-0",
"events": []
}
}
Mensaje de heartbeat
{
"event": "heartbeat",
"data": {}
}
Mensaje de resincronización
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
200 Esquema de respuesta de compatibilidad con herramientas OpenAPI. Las conexiones WebSocket en tiempo de ejecución se actualizan con 101.
application/json · objeto
Mensaje delta
{
"event": "delta",
"data": {
"resume": "1760000000000-0",
"events": []
}
}
Mensaje de heartbeat
{
"event": "heartbeat",
"data": {}
}
Mensaje de resincronización
{
"event": "resync",
"data": {
"event_id": "3704597661",
"resume": null,
"reason": "trimmed"
}
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten acceder a este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 No se encontró el recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Límite de tasa excedido.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando el limitador lo proporciona.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Aproximación de solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que produjo la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
Grupo de endpoints
Resultados
Consulta de resultados de eventos deportivos.
URL base https://api.odds-api.net/v1 Versión 1.0.0 Fuente OpenAPI en vivo
GET Resultado de evento /v1/events/{event_id}/results
Devuelve el último resultado conocido de un evento deportivo, o pending\ hasta que se liquide. Consulta cada 1-5 minutos después del inicio y luego reduce la frecuencia una vez que el evento sea final.
Autenticación: X-API-Key Maneja HTTP 429 con backoff y evita bucles de consulta demasiado frecuentes.
Ejemplo de solicitud
curl -H "X-API-Key: $ODDS_API_KEY" "https://api.odds-api.net/v1/events/3704597661/results"
Parámetros
Ruta
event_id obligatorio
string
Identificador canónico de evento o carrera de una respuesta de lista de eventos.
Respuestas
200 Respuesta exitosa
application/json · objeto
Resultados: Resultado de evento
{
"event_id": "3704597661",
"status": "final",
"result": {
"home_score": 24,
"away_score": 18
}
}
400 Parámetros de solicitud o cuerpo no válidos.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
401 Credenciales faltantes o no válidas.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
403 Las credenciales son válidas pero no permiten acceder a este recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
404 No se encontró el recurso.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
429 Se excedió el límite de solicitudes.
application/json · valor
Retry-After
integer
Segundos a esperar antes de reintentar cuando el limitador lo proporciona.
X-RateLimit-Limit
integer
Capacidad del bucket de solicitudes para el bucket del limitador activo cuando se proporciona.
X-RateLimit-Remaining
integer
Aproximadamente las solicitudes restantes en el bucket del limitador activo cuando se proporciona.
X-RateLimit-Bucket
string
Nombre del bucket del limitador que generó la respuesta cuando se proporciona.
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}
500 Error inesperado del servidor.
application/json · objeto
Ejemplo generado
{
"detail": "string",
"code": "string",
"request_id": "string"
}