Necesitas datos deportivos en vivo integrados en tu aplicación de Python esta semana, sin tener que lidiar con múltiples proveedores, claves o documentos. Al final de esta guía, podrás buscar entidades de FlashScore (equipos, jugadores, torneos), listar los deportes soportados y obtener países/competencias para un deporte utilizando la API en Vivo de FlashScore en Zyla API Hub—completa con código cURL y Python que puedes copiar y pegar en producción.
Lo que puedes construir con la API en Vivo de FlashScore
La API en Vivo de FlashScore proporciona acceso programático al directorio estructurado de deportes de FlashScore: busca entidades por nombre, enumera deportes soportados y lista países/competencias para un deporte. Esto es ideal para:
- Flujos de incorporación donde los usuarios eligen un equipo o competencia y tú almacenas su ID canónico.
- Autocompletar para equipos o torneos en una casa de apuestas, aplicación de puntajes o CMS.
- Funciones de descubrimiento (navegar deportes, luego filtrar por países/competencias).
Debido a que está en Zyla API Hub, usas una cuenta, una clave de API y un modelo de suscripción + cuota en todas tus integraciones—sin precios por llamada.
Comenzando en Zyla API Hub
Abre la lista para la API aquí: API en Vivo de FlashScore. Haz clic en Suscribirse (o Comenzar Prueba Gratuita cuando esté disponible) para obtener tu clave de API. Esta API utiliza suscripción + cuota (no pago por llamada). La primera API ofrece una prueba de 7 días o 50 solicitudes. No hay Plan Gratuito disponible. Para opciones de acceso y cuotas actuales, siempre confirma en la página de la API antes de implementar.
Todas las solicitudes requieren un encabezado de Autorización:
- Authorization: Bearer YOUR_API_KEY
Puntos finales que usarás
A continuación se presentan las rutas disponibles en esta lista, exactamente como se documenta en Zyla API Hub. No agregues parámetros en el cuerpo—son simples GETs con cadenas de consulta donde se especifica.
1) Buscar
Buscar entidades de FlashScore (equipos, jugadores, torneos) por cadena de consulta.
- Método: GET
- URL: https://zylalabs.com/api/12518/flashscore-live-api/23852/search
- Params:
- q (cadena, requerida): el término de búsqueda (ejemplo: real madrid)
cURL
curl -s -X GET "https://zylalabs.com/api/12518/flashscore-live-api/23852/search?q=real+madrid" \
-H "Authorization: Bearer YOUR_API_KEY"
Respuesta JSON
[{"id":"W8mj7MDD","type":"team","name":"Real Madrid","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/E99TZ05n-ttfpEDUq.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"SlAdQJK4","type":"team","name":"Real Madrid U19","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/IgG3LUAK-xGwa4c2B.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"MP6gLUO7","type":"team","name":"Real Madrid","url":"real-madrid","sport":{"id":3,"name":"Basketball"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/pn8TQOkQ-bXlcmj9T.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"2anA8FkF","type":"team","name":"Real Madrid U21","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/p048BCQt-SKpsUss3.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"4xlfVfnP","type":"team","name":"Real Madrid W","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Women","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/4CKmt8Rt-WpmKUEXD.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"fyNss8GQ","type":"team","name":"Real Madrid B","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/f5FO93Tc-ltKPQjEk.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"46uFRv4a","type":"team","name":"Real Madrid C","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/bupmbK6n-QkBtimSf.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"UiUgFWdq","type":"team","name":"Real Madrid U20","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flash…
Lo que debes usar en tu aplicación:
- id: el identificador canónico de FlashScore para la entidad que almacenarás.
- type: tipo de entidad (por ejemplo, equipo) para filtrar las opciones de la interfaz de usuario.
- name, gender, country_name: metadatos presentables para menús desplegables y etiquetas.
- sport.id y sport.name: restringir flujos posteriores (por ejemplo, listas de países por deporte).
- image_path y country_image_path: íconos/escudos opcionales en tu interfaz de usuario.
2) Obtener deportes
Devuelve una lista de todos los deportes disponibles soportados.
- Método: GET
- URL: https://zylalabs.com/api/12518/flashscore-live-api/23853/get-sports
- Params: ninguno documentado.
cURL
La respuesta es una lista de objetos de deportes que incluyen sport_id, sport_url y name (por ejemplo, Fútbol, Tenis, Baloncesto). Usa sport_id al llamar Obtener países.
3) Obtener países
Devuelve una lista de países para un deporte específico.
- Método: GET
- URL: https://zylalabs.com/api/12518/flashscore-live-api/23854/get-countries
- Params:
- sport_id (cadena, requerida): ejemplo 2
cURL
La respuesta incluye country_id, country_url y name para el deporte especificado. Para Tenis (sport_id 2), las entradas incluyen individuales y dobles de ATP/WTA, giras de exhibición y más. Usa estos para poblar filtros de competencia o construir navegación a torneos dentro de un deporte.
Python: buscar y normalizar entidades
El fragmento a continuación llama a la ruta de Búsqueda en la misma lista, lee campos centrales y normaliza resultados para almacenamiento y visualización en la interfaz de usuario. Utiliza el encabezado de Autorización documentado y el parámetro de consulta real q=real+madrid.
Python
import os
import sys
import requests
API_KEY = os.getenv("ZYLA_API_KEY", "YOUR_API_KEY")
BASE_URL = "https://zylalabs.com/api/12518/flashscore-live-api"
def search_entities(query: str):
url = f"{BASE_URL}/23852/search"
params = {"q": query}
headers = {"Authorization": f"Bearer {API_KEY}"}
try:
resp = requests.get(url, headers=headers, params=params, timeout=15)
resp.raise_for_status()
except requests.RequestException as e:
print(f"Error HTTP: {e}", file=sys.stderr)
return []
try:
data = resp.json()
except ValueError:
print("Respuesta no JSON", file=sys.stderr)
return []
# Normalizar solo los campos que planeamos almacenar/mostrar
normalized = []
for item in data:
sport = item.get("sport") or {}
normalized.append({
"id": item.get("id"),
"type": item.get("type"),
"name": item.get("name"),
"sport_id": sport.get("id"),
"sport_name": sport.get("name"),
"gender": item.get("gender"),
"country_name": item.get("country_name"),
"image_path": item.get("image_path"),
"country_image_path": item.get("country_image_path"),
"slug": item.get("url"),
})
return normalized
if __name__ == "__main__":
results = search_entities("real madrid")
for r in results[:5]:
print(f"{r['id']} | {r['type']} | {r['name']} | {r['sport_name']} | {r['country_name']}")
Notas que te ahorran tiempo:
- Timeouts: establece un tiempo de espera del cliente (el anterior usa 15s) para evitar solicitudes colgadas.
- Resultados vacíos: la API puede devolver válidamente una lista vacía; maneja esto en tu interfaz de usuario.
- Caching: estas son solicitudes GET; puedes almacenar en caché por cadena de consulta para TTL cortos para reducir la latencia y el uso de cuotas.
Patrones de integración prácticos
Incorporación impulsada por búsqueda
Flujo: el usuario escribe un equipo → llamas a Búsqueda con q, muestras las mejores coincidencias con insignias de image_path y country_image_path → almacenas id + type + sport_id. Esto te permite preconfigurar alertas, secciones o widgets vinculados a ese id canónico.
Navegación deporte → país
Flujo: llama a Obtener deportes para poblar un selector de deportes, luego llama a Obtener países con sport_id cuando el usuario elige un deporte. Usa los valores country_id y name para construir tus filtros de competencia. Para tenis, las entradas reflejan giras y agrupaciones de competencia (por ejemplo, individuales/dobles de ATP/WTA).
Microservicio de autocompletar
Envuelve el punto final de Búsqueda con una pequeña caché (por ejemplo, 60–300 segundos por consulta) y devuelve un JSON mínimo de {id, type, name, sport_name, country_name}. Esto mantiene tus frontends rápidos y consistentes en web y móvil.
Trabajando con la API desde agentes de IA (MCP)
Cada API de Zyla es llamable desde agentes de codificación de IA y clientes compatibles con MCP (Claude Code, Cursor, Windsurf, etc.) utilizando el punto final MCP. Configura tu cliente para alcanzar:
- https://mcp.zylalabs.com/mcp?apikey=YOUR_API_KEY
Tu agente puede entonces hacer las mismas solicitudes GET a las rutas mostradas arriba en esta lista. Para orientación sobre cómo conectar clientes MCP, consulta la referencia MCP.
Manejo de errores, cuotas y consejos de implementación
- Autorización: Todas las llamadas requieren Authorization: Bearer YOUR_API_KEY. Mantén las claves en la configuración del lado del servidor o en administradores de secretos.
- Métodos HTTP: Todas las rutas documentadas aquí son GET. No envíes un cuerpo; usa parámetros de cadena de consulta exactamente como se listan.
- Cuotas: Esta API es de suscripción + cuota. La primera API ofrece una prueba de 7 días o 50 solicitudes y no tiene Plan Gratuito. Confirma tu cuota actual en la página de la API antes de realizar pruebas de carga.
- Paginación: No documentada en estos puntos finales. Espera arreglos completos para tus filtros y búsqueda; agrega paginación del lado del cliente si es necesario.
- Resiliencia: Implementa reintentos con retroceso para respuestas transitorias 5xx. No reintentes 4xx sin cambios en el código.
- Observabilidad: Registra el método de solicitud, URL y código de estado—no la clave. Para depuración, volcar encabezados de respuesta y los primeros N bytes del cuerpo.
Ejemplo de extremo a extremo: navegar a giras de tenis y luego buscar
- Listar deportes:
- GET https://zylalabs.com/api/12518/flashscore-live-api/23853/get-sports (solo encabezado de Autorización)
- Extraer la entrada con el nombre Tenis, leer sport_id (2 en el conjunto de respuesta de muestra).
- Listar países/competencias para Tenis:
- GET https://zylalabs.com/api/12518/flashscore-live-api/23854/get-countries?sport_id=2
- Renderizar secciones de ATP/WTA en tu interfaz de usuario usando name y country_id.
- Buscar entidades específicas:
- GET https://zylalabs.com/api/12518/flashscore-live-api/23852/search?q=real+madrid
- Almacenar ids de entidades seleccionadas para su uso posterior en tus funciones.
Lista de verificación de seguridad y rendimiento
- Mantén tu clave de API del lado del servidor; proxy las solicitudes del frontend a través de tu backend.
- Usa puntos finales solo HTTPS exactamente como se documenta en zylalabs.com.
- Aplica caché de TTL corto en GETs por URL completa (incluyendo cadena de consulta) para mejorar la capacidad de respuesta.
- Valida y sanitiza el parámetro q de la entrada del usuario; pásalo tal cual a la API después de la codificación de URL.
- Establece tiempos de espera razonables (conectar/leer) y aplica límites superiores en los tamaños de respuesta en tu cliente HTTP.
Fragmentos de solicitud listos para copiar
Buscar “real madrid” (cURL)
Listar todos los deportes (cURL)
Obtener países/competencias para Tenis (cURL)
¿A dónde ir a continuación?
Explora la lista completa en Zyla: API en Vivo de FlashScore. Crea una cuenta gratuita para obtener tu clave y comenzar a integrar en minutos: Registrarse. También puedes llamar a estas APIs directamente desde agentes de codificación de IA usando MCP como se describió anteriormente.
FAQ
¿La API en Vivo de FlashScore requiere un encabezado de Autorización?
Sí. Envía Authorization: Bearer YOUR_API_KEY con cada solicitud.
¿Hay un plan gratuito?
No hay Plan Gratuito disponible. La primera API ofrece una prueba de 7 días o 50 solicitudes. Consulta la página de la API para opciones de acceso y precios actuales.
¿Qué puntos finales están disponibles en esta lista?
Buscar (GET /23852/search con q), Obtener deportes (GET /23853/get-sports) y Obtener países (GET /23854/get-countries con sport_id).
¿Puedo pasar un cuerpo de solicitud?
No. Los puntos finales documentados son solo GET; usa los parámetros de consulta exactamente como se listan.
¿Cómo llamo a la API desde un agente de IA?
Apunta tu cliente compatible con MCP a https://mcp.zylalabs.com/mcp?apikey=YOUR_API_KEY y haz que emita las mismas solicitudes GET mostradas en esta guía. Consulta la referencia MCP para más detalles.
Respuesta oficial de la API
[{"id":"W8mj7MDD","type":"team","name":"Real Madrid","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/E99TZ05n-ttfpEDUq.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"SlAdQJK4","type":"team","name":"Real Madrid U19","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/IgG3LUAK-xGwa4c2B.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"MP6gLUO7","type":"team","name":"Real Madrid","url":"real-madrid","sport":{"id":3,"name":"Basketball"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/pn8TQOkQ-bXlcmj9T.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"2anA8FkF","type":"team","name":"Real Madrid U21","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/p048BCQt-SKpsUss3.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"4xlfVfnP","type":"team","name":"Real Madrid W","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Women","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/4CKmt8Rt-WpmKUEXD.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"fyNss8GQ","type":"team","name":"Real Madrid B","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/f5FO93Tc-ltKPQjEk.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"46uFRv4a","type":"team","name":"Real Madrid C","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/bupmbK6n-QkBtimSf.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"UiUgFWdq","type":"team","name":"Real Madrid U20","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flash…
Respuesta oficial de la API
[{"id":"W8mj7MDD","type":"team","name":"Real Madrid","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/E99TZ05n-ttfpEDUq.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"SlAdQJK4","type":"team","name":"Real Madrid U19","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/IgG3LUAK-xGwa4c2B.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"MP6gLUO7","type":"team","name":"Real Madrid","url":"real-madrid","sport":{"id":3,"name":"Basketball"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/pn8TQOkQ-bXlcmj9T.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"2anA8FkF","type":"team","name":"Real Madrid U21","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/p048BCQt-SKpsUss3.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"4xlfVfnP","type":"team","name":"Real Madrid W","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Women","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/4CKmt8Rt-WpmKUEXD.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"fyNss8GQ","type":"team","name":"Real Madrid B","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/f5FO93Tc-ltKPQjEk.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"46uFRv4a","type":"team","name":"Real Madrid C","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/bupmbK6n-QkBtimSf.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"UiUgFWdq","type":"team","name":"Real Madrid U20","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flash…