Datos y fuentes
Cómo obtenemos las cuotas
Leemos las interfaces publicadas por los operadores con licencia ADM — los endpoints que alimentan sus propios programas de eventos — y las exponemos normalizadas en un esquema único. Una parte del catálogo (entre ellas bet365 y Pinnacle) procede de proveedores de datos externos con licencia, no del operador. Cada cuota sigue atribuida a la casa a la que pertenece, con su last_update.
Verificable con dos lecturas distintas, que no dan el mismo número: GET /api/v1/bookmakers (requiere una clave API) lista las claves activas en el feed con country, playable_it, is_exchange y source — cuántas claves puedes consultar, contando aparte los carriles de mercado dedicados como <marca>-corners; GET /api/v1/coverage (público, sin clave) cuenta las marcas por región — cuántas enseñas estás cubriendo, con los carriles agrupados bajo la suya. No hay correspondencia uno a uno entre los dos recuentos: miden cosas distintas.
Cómo las normalizamos
- event_id determinista: el mismo partido tiene el mismo id en todos los mercados y durante toda la ventana pre-match — así comparamos las casas entre sí (matching no heurístico).
- Esquema estable y versionado (OpenAPI 3.1): la forma interna del motor nunca llega al cliente.
- Captura completa de los mercados: para cada evento exponemos todos los mercados que la casa cotiza (resultado, más/menos, hándicap, resultado exacto, descanso/final, combinaciones y mercados propios de la casa como
other:<label>), no solo los principales. - Ninguna fusión arbitraria de casas: cada clave del feed sigue siendo una clave y la respuesta no fusiona marcas distintas en una sola fila — si necesitas agruparlas, lo decides tú. La única agrupación está en los recuentos por marca de GET /api/v1/coverage, donde los carriles de mercado dedicados (
<marca>-corners) entran bajo su enseña.
Verificable: GET /api/v1/leagues muestra deporte → ligas con el recuento de eventos y casas en el programa actual.
Frescura y corrección
- Cada cuota lleva su
last_update(ISO) — la marca de tiempo es la de la última lectura correcta: una casa en error nunca muestra un dato caducado con una marca de tiempo reciente. - La distribución real de la antigüedad (p50/p95/p99 en 24 h, por casa) es pública en la status page. Medida, no declarada.
- No inventamos datos: una línea/hándicap cuyo signo no se puede deducir con certeza se descarta, no se adivina (evita falsos arbitrajes).
- Los mercados no comparables entre casas (
other:*, por jugador, totales asiáticos) se exponen como dato pero nunca se promueven a arbitraje. - No aplicamos filtros que no existen: un parámetro de consulta desconocido responde
400con la lista de los admitidos en ese endpoint (y la sugerencia, si es una errata), nunca200con el feed sin filtrar. El error no consume cuota.
Cobertura y estacionalidad
No tenemos una lista de ligas que seguimos o excluimos: si una casa cotiza un evento, lo vemos. La aparición de los mercados depende de la temporada — con los campeonatos parados el programa de fútbol es reducido (amistosos), y vuelve a llenarse cuando se reanudan. El recuento real, momento a momento, está en /api/v1/leagues y en la status page.
Licencia y redistribución
Uso interno incluido en todos los planes: tus modelos, bots, análisis, herramientas.
Redistribución a usuarios finales (mostrar las cuotas dentro de un producto/SaaS tuyo: búsqueda pre-match, comparación, calculadoras, flujos de trabajo) → requiere la licencia Enterprise / de redistribución, no los planes Starter/Pro estándar. Es una restricción central para un SaaS, no una nota a pie de página. Texto completo en los Términos y en la licencia Enterprise.
Asistencia
Escríbenos a [email protected] o desde el robotito de la web. Un problema grave se atiende en 4 horas laborables (objetivo); los planes de pago tienen prioridad.