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

  1. Obtén primero una instantánea y persiste el token resume\ con el estado del evento en caché.
  2. Conéctate a /stream\ con Server-Sent Events o a /ws\ con WebSockets. Usa los mismos filtros que la instantánea.
  3. Maneja delta\ aplicando cambios de forma idempotente. Almacena el resume\ más reciente después de cada mensaje aceptado.
  4. Trata heartbeat\ como una señal de actividad. Si no llega heartbeat o datos dentro de tu tiempo de espera, reconéctate.
  5. Al desconectarte, reconéctate con since=<last\_resume\>\ y catchup=true\ usando retroceso exponencial con jitter.
  6. 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.

SuperficieIntervalo inicialNotas de producción
Deportes, ligas, casas de apuestas6-24 horasLa cobertura cambia lentamente. Actualiza a diario a menos que estés sincronizando una nueva vista de catálogo.
Listas de eventos deportivos5-15 minutosUsa consultas más frecuentes de 1-5 minutos solo para ligas activas o ventanas cercanas al inicio.
Listas de eventos de carreras1-5 minutosLos horarios de carreras cambian cerca del inicio. Mantén la ventana de tiempo estrecha.
Instantáneas de odds60-120 segundosUsa 15-30 segundos solo para eventos prioritarios cuando no haya streams disponibles.
Instantáneas de oportunidades de apuesta30-120 segundosConsulta más rápido solo para productos de alertas con controles estrictos de cuota.
Resultados1-5 minutos después del inicioDespué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\ y X-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ámetro cursor\ de la siguiente solicitud.
  • Detente cuando next\_cursor\ falte, sea null, esté vacío o sea 0\.
  • 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\ y to\_ts\ para consultas de historial acotadas.
  • Usa bookmakers\, market\_group\_id\, price\_type\ y limit\_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"
}