Las cuotas deportivas
en una sola API

Cuotas normalizadas de decenas de casas — incluidas las italianas que las APIs globales no tienen — en un formato JSON estable. Para tus modelos, bots y herramientas.

● casas IT en ciclo continuo · frescura medida event_id estable · last_update por cuota self-serve · sin tarjeta

GET /api/v1/odds feed en vivo
# una petición, todas las cuotas de un evento
curl "https://odss-api.com/api/v1/odds?sport=calcio&league=serie%20a" \
  -H "x-api-key: odss_live_..."

{ "count": 118, "offset": 0, "returned": 118, "state": "prematch", "odds": [{
  "event_id": "a3f9c1e07b2d4865", "event": "Inter - Milan",
  "league": "Serie A", "market": "1x2", "commence_time": "2026-08-23T18:45:00Z",
  "bookmakers": [
    { "key":"snai", "outcomes":{"HOME":2.10,"DRAW":3.40,"AWAY":3.60}, "last_update":"2026-07-14T10:32:05Z" },
    { "key":"bet365", "outcomes":{"HOME":2.05,"DRAW":3.50,"AWAY":3.70}, "last_update":"2026-07-14T10:28:12Z" } ]}]}

Casas en el feed

Tres pasos para integrar las cuotas

01

Crea la clave

Regístrate y genera una clave odss_live en un minuto. El plan Free es para siempre, sin tarjeta.

02

Llama a /odds

Un endpoint, todas las cuotas cross-book por evento y mercado. Filtra por deporte, liga, mercado y casa.

03

Integra y sincroniza

event_id estable para reconocer eventos, last_update para la frescura, offset para leer todo el calendario.

El foso: las casas italianas.

Las casas ADM que las APIs globales no tienen

Sisal, SNAI, Eurobet, GoldBet, Planetwin365, Betflag y decenas de casas italianas más, leídas directamente. Además de bet365, Betfair Exchange y Pinnacle como referencia sharp.

sisalsnaieurobetgoldbetplanetwin365+ decine

Esquema estable

Un formato JSON público y versionado: la forma interna del motor nunca llega a tu código.

Integración fiable

event_id determinista durante toda la ventana prepartido, last_update ISO por casa, paginación con offset: sincronizaciones sin sorpresas.

Frescura honesta

Las casas italianas giran en ciclo continuo y la frescura real está medida y pública, casa por casa, en la status page; bet365 y Betfair llegan vía feeds de partners con cadencia de unos minutos. Cada cuota declara su last_update: nada de números caducados vestidos de live.

La comparación honesta.

Dónde estamos frente a las APIs globales y la media del mercado. Sin nombres, sin promesas.

Característica
odss-api
Media del mercado
Casas ADM italianas
Cobertura directa y verificable (/coverage y /bookmakers públicos), frescura medida y pública (p50/p95 en /status).
Ausentes: cubren casas extranjeras (US/UK/offshore), ninguna casa ADM.
Cómo se paga
Por cuenta: cuota mensual + rate/min. Más casas o mercados por evento no suben el coste.
Por casa simultánea, o créditos mercados×regiones: el coste se dispara en multi-casa.
Cross-book
event_id determinista compartido por todos los mercados del partido: comparación nativa, sin matching heurístico.
A menudo cuotas propietarias o matching no determinista.
Frescura
last_update ISO a la vista, casa por casa: sabes cómo de reciente es cada pata.
A menudo no expuesta por casa individual.
Lista para agentes
OpenAPI 3.1, llms.txt, JSON-LD, /.well-known/api-catalog: un agente la encuentra y la lee solo.
Docs tras login o crawlers bloqueados, sin estándar agéntico.
Precio y alta
Tarifas públicas con Free tier; Enterprise self-serve configurable. Clave en un minuto.
Enterprise opaco y con ventas, o self-serve sin casas italianas.
Claves específicas
Restringibles por deporte/liga (p. ej. una clave «solo fútbol»), sin límite de número.
No documentado.

Comparación con la media de los proveedores globales/enterprise evaluados (jul 2026). Nuestro lado es verificable desde los endpoints públicos y la documentación.

Casas & ligas

Números en vivo, contados desde el feed ahora mismo — no un inventario de catálogo.

casas activas en el feed

deportes cotizados ahora

ligas en el tablero

Las ligas en el tablero ahora

Datos en vivo del feed (endpoint público /api/v1/leagues): para cada deporte, las ligas cotizadas en este momento. Los nombres son los valores del filtro league.

No excluimos ninguna liga. Seguimos todas las casas ADM y mostramos todo lo que cotizan: si una casa cotiza un partido, lo ves aquí también — desde las grandes ligas europeas hasta divisiones menores y competiciones internacionales. Lo que aparece depende de la temporada y el momento: sin partidos, las casas no cotizan, así que no aparecen. La lista de abajo es el calendario de este momento.

Cargando el calendario…

El tablero sigue la temporada: en verano el fútbol de clubes es naturalmente menor.

Documentación

Base URL https://odss-api.com. Autentícate con la cabecera x-api-key: odss_live_… o Authorization: Bearer. Respuestas JSON, cuotas decimales europeas.

Primera llamada en 3 pasos

01

Crea la clave

Regístrate y genera una clave en el panel. El plan Free es para siempre.

02

Lista los deportes

Verifica la clave con una llamada a /sports.

03

Pide las cuotas

Llama a /odds con deporte y mercado: recibes las cuotas cross-book.

GET /api/v1/odds ejemplo

curl "https://odss-api.com/api/v1/odds?sport=calcio&league=serie%20a&limit=5" \
  -H "x-api-key: odss_live_..."
const r = await fetch(
  "https://odss-api.com/api/v1/odds?sport=calcio&league=serie%20a&limit=5",
  { headers: { "x-api-key": "odss_live_..." } }
);
const { count, odds } = await r.json();
import requests
r = requests.get(
    "https://odss-api.com/api/v1/odds",
    params={"sport": "calcio", "league": "serie a", "limit": 5},
    headers={"x-api-key": "odss_live_..."},
)
data = r.json()  # { count, offset, returned, state, odds: [...] }

GET /api/v1/odds

Las cuotas cross-book actuales, agrupadas por evento, mercado y línea. Cada registro lista las casas con sus resultados y el timestamp de su última actualización.

Parámetros

ParámetroDescripción
sportFiltro exacto de deporte (ej. calcio, tennis, basket). Valores: ver /api/v1/sports.
marketMercado canónico: 1x2, ou, btts, dc, handicap, moneyline…
bookmakersLista CSV de claves de casa (ej. snai,bet365). Valores: ver /api/v1/bookmakers.
leagueFiltro por subcadena, sin distinguir mayúsculas (ej. serie a). Valores: ver /api/v1/leagues.
event_idUn solo evento, por id exacto.
stateprematch (por defecto), live (in-play, con marcador y minuto) o all (ambos). Con live, si el motor in-play está apagado la lista está vacía y live_enabled=false. Si la clave tiene un ámbito de feed (solo prematch o solo live), un state fuera del ámbito devuelve 403 y all degrada al estado permitido.
limitRegistros por página. Por defecto 500, máx. 2000.
offsetÍndice de inicio para la paginación. Por defecto 0.

Campos de la respuesta

CampoDescripción
countTotal de registros que cumplen los filtros (en todas las páginas).
offset · returnedEco del offset pedido y registros devueltos en esta página.
odds[].event_idId determinista del evento: idéntico para todos los mercados del mismo partido y estable durante toda la ventana prepartido.
odds[].eventNombre normalizado del evento (Local - Visitante).
odds[].sport · leagueDeporte y liga/competición del evento.
odds[].home_team · away_teamLos dos equipos, cuando están disponibles.
odds[].commence_timeInicio del evento, ISO 8601 UTC.
odds[].market · line · scope · periodMercado canónico, línea opcional (ej. 2.5), ámbito (ej. equipo) y periodo (ej. 1ª parte).
odds[].state · score · minutestate = prematch o live. Para el live: score (ej. "1-0") y minute (ej. "63'") actuales. Mismo event_id que el prematch → correlaciona el mismo partido en ambos estados.
…bookmakers[].keyClave de la casa, con country, playable_it e is_exchange.
…bookmakers[].outcomesMapa resultado → cuota decimal (ej. HOME: 2.10).
…bookmakers[].last_updateTimestamp ISO de la última actualización correcta de esa casa.

Paginación

Repite la llamada aumentando offset en returned, mientras offset + returned < count. El tablero está vivo: count puede variar ligeramente entre páginas.

GET /api/v1/odds?sport=calcio&limit=1000&offset=0
GET /api/v1/odds?sport=calcio&limit=1000&offset=1000
# … finché offset + returned < count

GET /api/v1/sports

Los deportes disponibles ahora mismo en el feed (los valores del parámetro sport).

GET /api/v1/bookmakers

Las casas activas en el feed, con country, playable_it (false para referencias sharp como Pinnacle) e is_exchange (comisión sobre la ganancia).

GET /api/v1/leagues público, sin clave

El calendario actual agregado: para cada deporte las ligas cotizadas, con número de eventos y de casas. Útil para descubrir valores del filtro league.

GET /api/v1/stream Enterprise

Server-Sent Events: un evento hello al conectar, luego eventos odds con los registros CAMBIADOS (mismo esquema que /odds, cada uno con su state) y los eliminados, en un máximo de ~10 segundos desde que el motor los detecta — sin polling. Parámetros opcionales sport y state (prematch|live|all); snapshot inicial vía GET /odds?state=…. La cadencia de los datos sigue siendo la del motor (frescura por casa medida en la status page; bet365/Betfair vía feeds partner): el stream elimina la latencia de polling, manda last_update. Máx. 3 streams concurrentes; la conexión cuenta como 1 petición de cuota.

GET /api/v1/coverage público, sin clave

Inventario del catálogo de casas por región. Es un recuento de catálogo, no la lista de casas activas en el feed: para eso usa /api/v1/bookmakers o /api/v1/leagues.

POST /api/mcp MCP

Servidor MCP (JSON-RPC 2.0) para agentes IA y conectores (Claude, ChatGPT…). Autenticación con la misma clave (Authorization: Bearer odss_live_… o x-api-key). Herramientas: get_odds (con state=live), list_sports, list_bookmakers, list_leagues. Solo tools/call consume cuota; el handshake es gratis. Stateless.

curl -X POST https://odss-api.com/api/mcp \
  -H "Authorization: Bearer odss_live_..." -H "content-type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"get_odds","arguments":{"sport":"calcio","state":"live","limit":5}}}'

Webhook Enterprise

Registra una URL (https) desde el panel o vía API — POST /api/account/webhooks con la sesión de cuenta (body {url, sport?, state?}; el secret se muestra una vez, máx. 20 por cuenta) — y recibe los cambios de cuota por POST — mismo payload {changed, removed} que el stream. Cada entrega va firmada: X-Odss-Signature: t=<unix>,v1=<hex> = HMAC-SHA256 de «{timestamp}.{body}» con el secreto (verifícala, rechaza timestamps viejos). Solo https, sin redirecciones; los endpoints que fallan se autodesactivan. Responde 2xx.

Límites, cabeceras y errores

Cada respuesta autenticada incluye X-RateLimit-Limit (cuota mensual del plan) y X-RateLimit-Remaining. La cuota es una ventana móvil de 30 días.

StatusDescripción
401Clave ausente, no válida o revocada.
403Fuera de ámbito: cuenta suspendida, feed fuera del ámbito de la clave (ej. live con clave solo-prematch) o función exclusiva de Enterprise (stream, webhooks).
429Burst: superadas las peticiones por minuto del plan. Cabecera Retry-After: 60.
429Cuota mensual agotada: sube de plan o espera la ventana.
502Feed temporalmente no disponible: reintenta con backoff.

Machine-readable · contrato y agentes

Para generar clientes, SDKs o usar la API desde un agente IA: el contrato OpenAPI 3.1 y una guía breve para LLM son públicos y siempre sincronizados.

CampoDescripción
/openapi.jsonContrato OpenAPI 3.1 (endpoints, parámetros, esquemas, auth x-api-key).
/llms.txtGuía markdown para LLM (llmstxt.org): resumen y enlaces a recursos.
/postman_collection.jsonColección Postman: impórtala y define la variable x-api-key para probar los endpoints al momento.
/sdk/odss_api.pySDK de Python oficial (un solo archivo, sin dependencias): cliente tipado con paginación automática y soporte live.
/sdk/odss-api.tsSDK de TypeScript oficial (un solo archivo, sin dependencias): tipos, iterador async y helper para el stream SSE.
/.well-known/api-catalogCatálogo de API (RFC 9727, linkset JSON).

Licencia de uso

El uso interno (modelos, bots, análisis, backtests) está incluido en todos los planes. Redistribuir los datos — p. ej. mostrarlos a los usuarios finales de tu producto — requiere autorización escrita: escribe a [email protected] y definimos una licencia adecuada a tu caso.

El plan adecuado para tu volumen.

La misma cobertura en todos los planes: solo pagas el volumen. Empieza gratis, cancela cuando quieras.

Free

Para explorar la API. Para siempre, sin tarjeta.

0para siempre
Empezar gratis
  • 500 peticiones / mes
  • 30 peticiones / min
  • Cobertura completa: todos los deportes y casas del feed
★ Más elegido

Starter

Para bots e integraciones en producción.

79/mes
Elegir Starter
  • 50.000 peticiones / mes
  • 120 peticiones / min
  • Cobertura completa: todos los deportes y casas del feed

Pro

Para plataformas y volúmenes altos.

159/mes
Elegir Pro
  • 500.000 peticiones / mes
  • 600 peticiones / min
  • Prioridad de asistencia

Enterprise

Para plataformas, empresas y revendedores: configura volumen, rate y licencia — el precio se actualiza solo y activas en el checkout, sin negociación.

199/mes
+€120

Te autoriza a mostrar los datos a los usuarios finales de tu producto (sin ella, el uso queda interno). Lee la licencia →

  • Streaming SSE incluido (/api/v1/stream)
  • Cuota y rate configurados en tu cuenta
  • Activación automática al pagar, cancela cuando quieras

Al continuar aceptas la Licencia Enterprise y de Redistribución (legible desde el enlace de arriba) además de los Términos del servicio.

Pagos vía Stripe · cancelación en un clic desde el portal · la cuota es una ventana móvil de 30 días

Preguntas frecuentes.

¿Puedo usar los datos en un producto comercial (SaaS)?

El uso interno — tus modelos, bots, análisis, herramientas — está incluido en todos los planes. Mostrar los datos a los usuarios finales de tu producto requiere autorización escrita: escribe a [email protected] y definimos una licencia adecuada a tu volumen.

¿Cada cuánto se actualizan las cuotas?

Las casas italianas en ciclo continuo — la frescura REAL, medida casa por casa (p50/p95), es pública en la status page; bet365 y Betfair llegan vía feeds de partners con cadencia de unos minutos. No hace falta que nos creas: cada cuota de la respuesta lleva su last_update.

¿Hay prueba de los planes de pago?

El plan Free es para siempre y tiene la misma cobertura que los planes de pago: es la mejor forma de verificar los datos. Si necesitas más volumen para una evaluación, escribe a [email protected].

¿En qué se diferencia de surebett.app?

Mismo motor, dos productos: odss-api vende las cuotas en bruto normalizadas para construir encima; surebett.app es el producto final, con los arbitrajes ya calculados y stakes equilibrados.

Panel

Plan actual
free
Cambiar plan
Este mes (cuenta)

La cuota es de la cuenta: se comparte entre todas tus claves, no por clave.

Generar una clave

Crea las que quieras — comparten la cuota de la cuenta. Restríngelas a deportes o ligas si necesitas claves dedicadas.

Feed

Mis claves API