Necesitas integrar datos deportivos en vivo en una aplicación esta semana. Al final de esta guía, podrás buscar entidades de FlashScore (equipos, jugadores, torneos), listar los deportes soportados y obtener agrupaciones de países específicas por deporte utilizando la API de FlashScore - Live en Zyla API Hub, completa con ejemplos de curl y código en Python que puedes pegar en tu proyecto.
Lo que te ofrece la API de FlashScore - Live
La API de FlashScore - Live proporciona acceso buscable a entidades de FlashScore (equipos, jugadores, torneos) y puntos finales de metadatos que te ayudan a delimitar tus consultas a los deportes soportados y sus agrupaciones por país. Las integraciones típicas incluyen barras de búsqueda dentro de la aplicación, listas de selección pre-pobladas por deporte o restringir la exploración de un usuario a la categoría de país/torneo correcta antes de que profundicen.
Esta API está disponible en Zyla API Hub, un mercado con más de 10,000 APIs públicas. Con una cuenta y una clave de API, te suscribes una vez y llamas a cualquier API listada a través de una interfaz consistente.
Comenzando en Zyla API Hub
Abre la lista de la API de FlashScore - Live y comienza una prueba para obtener tu clave:
- Ve a la página de la API: Iniciar prueba de 7 días en FlashScore - Live API.
- Haz clic en Suscribirse o Iniciar Prueba Gratuita (cuando esté disponible) para recibir tu clave de API.
- Usa el encabezado Authorization: Bearer YOUR_API_KEY en cada solicitud.
La facturación en Zyla utiliza suscripción + cuota (no pago por llamada). Para la primera API que uses, típicamente verás una prueba de 7 días o una pequeña cuota de solicitudes para evaluar. Consulta la página de la API para las opciones de acceso y precios actuales.
Puntos finales que usarás
A continuación se presentan los puntos finales documentados disponibles en la lista de la API de FlashScore - Live. Cada sección indica su método HTTP, URL exacta de solicitud y cualquier parámetro requerido. Copia los ejemplos de curl tal como están y reemplaza YOUR_API_KEY con tu clave.
1) Buscar (equipos, jugadores, torneos)
Busca entre las entidades de FlashScore mediante una consulta de texto libre.
- Método: GET
- URL: https://zylalabs.com/api/12518/flashscore-live-api/23852/search
- Parámetro de consulta requerido:
- q (cadena): El texto a buscar. Ejemplo: real madrid
Curl oficial (copia y pega):
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 oficial:
[{"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…
Lo que usarás en la práctica:
- id: El identificador de la entidad de FlashScore (cadena). Usa esto para persistir selecciones o construir enlaces profundos en tu aplicación.
- type: categoría de entidad (por ejemplo, equipo). Útil para ramificar el comportamiento de la interfaz de usuario según el tipo de resultado.
- name: etiqueta de visualización para la entidad.
- url: el fragmento de ruta slug utilizado en FlashScore.
- sport.id y sport.name: clasificación deportiva para el resultado. Útil para filtrar interfaces de búsqueda de múltiples deportes.
- gender: donde sea aplicable, para contextos deportivos que dividen competiciones.
- country_name: etiqueta de país/región de alto nivel para la entidad.
- image_path y country_image_path: URLs PNG para insignias de equipos y países que puedes renderizar en componentes de la interfaz de usuario.
Ejemplo en Python: llamar a Buscar y manejar resultados
Este fragmento de Python llama al punto final de Buscar, verifica equipos llamados “Real Madrid” y imprime una vista simplificada que puedes integrar en tu capa de interfaz de usuario.
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://zylalabs.com/api/12518/flashscore-live-api/23852/search"
def search_entities(query):
resp = requests.get(
BASE_URL,
params={"q": query},
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=20,
)
resp.raise_for_status()
return resp.json()
if __name__ == "__main__":
results = search_entities("real madrid")
teams = [r for r in results if r.get("type") == "team"]
for t in teams:
sport = t.get("sport", {})
print({
"id": t.get("id"),
"name": t.get("name"),
"sport": sport.get("name"),
"country": t.get("country_name"),
"badge": t.get("image_path"),
})
2) Obtener deportes
Recupera una lista de deportes soportados por FlashScore en esta API. Usa esto para poblar un selector de deportes o para validar valores de sport_id antes de llamar a otros puntos finales.
- Método: GET
- URL: https://zylalabs.com/api/12518/flashscore-live-api/23853/get-sports
- Parámetros: ninguno documentado
curl:
La respuesta devuelve un array de objetos con campos como sport_id, sport_url y name. Usa los valores de sport_id en contextos donde se requiera un identificador de deporte más adelante.
3) Obtener países (por deporte)
Devuelve la lista de agrupaciones de países (o torneo/categoría) para un deporte específico. Esto es útil para construir un flujo de navegación “Deporte → País/Categoría → Competencia”.
- Método: GET
- URL: https://zylalabs.com/api/12518/flashscore-live-api/23854/get-countries
- Parámetro de consulta requerido:
- sport_id (cadena): por ejemplo, 2 para Tenis
curl (ejemplo de Tenis):
La respuesta devuelve un array de objetos con campos como country_id, country_url y name que denotan las categorías o agrupaciones de países del deporte (para Tenis, agrupaciones como ATP - Individual, WTA - Dobles, etc.). Usa estos para delimitar la exploración del usuario antes de activar búsquedas o consultas de partidos.
Uniendo los puntos finales en tu aplicación
Interfaz de usuario centrada en la búsqueda
Muchas aplicaciones comienzan con el punto final de Buscar para permitir a los usuarios encontrar rápidamente equipos, jugadores o torneos. Para una experiencia receptiva:
- Activa GET /search después de que los usuarios dejen de escribir (por ejemplo, 300–500 ms de debounce) para reducir llamadas.
- Almacena en caché las últimas N consultas del lado del cliente para evitar volver a obtener términos idénticos.
- Usa filtros sport.id o gender en tu lógica de renderizado para agrupar o priorizar resultados.
Interfaz de usuario centrada en la navegación (deporte → país/categoría)
Si deseas una navegación estructurada:
- Llama a GET /get-sports para construir el selector de deportes de nivel superior.
- Cuando se elija un deporte, llama a GET /get-countries?sport_id=... para mostrar su lista de países/categorías.
- Usa esas selecciones para refinar tu búsqueda posterior, o para mostrar listas restringidas al deporte y agrupación elegidos.
Recomendaciones del lado del servidor
- Centraliza las llamadas a los puntos finales de Zyla en un pequeño módulo de servicio para estandarizar encabezados y manejar errores HTTP de manera consistente.
- Almacena en caché datos de referencia como deportes y países/categorías en memoria durante minutos a horas, ya que estas listas no cambian con frecuencia.
- Registra cadenas de consulta para búsqueda para optimizar sugerencias de autocompletado más tarde.
Ejemplo de extremo a extremo: selector de categoría de Tenis con búsqueda
Aquí tienes un plan rápido para construir un flujo de selección de tenis:
- Llama a GET /get-sports una vez al inicio y mapea el sport_id de “Tenis” (del response, Tenis tiene un campo sport_id).
- Llama a GET /get-countries?sport_id=2 cuando el usuario abra la sección de Tenis.
- Renderiza nombres de categorías como “ATP - Individual,” “WTA - Dobles,” etc.
- Proporciona un cuadro de búsqueda que consulte GET /search con el término del usuario; renderiza solo resultados donde sport.id corresponda a Tenis.
Esto delimita la intención del usuario antes de cualquier búsqueda de datos posterior, mejorando tanto la experiencia del usuario como la eficiencia del backend.
Llamando a la API desde agentes de IA a través de MCP
Si tu flujo de trabajo utiliza clientes compatibles con MCP (como Claude Code, Cursor o Windsurf), puedes enrutar llamadas a través del punto final MCP de Zyla en https://mcp.zylalabs.com/mcp?apikey=YOUR_API_KEY. Esto permite que un agente invoque las mismas herramientas de la API de FlashScore - Live sin volver a implementar llamadas HTTP en tu aplicación. Para notas de integración y expectativas del protocolo MCP, consulta la documentación de MCP.
Los patrones de uso típicos incluyen:
- Permitir que un asistente de IA realice una búsqueda (por ejemplo, “Encuentra equipos de Real Madrid”).
- Hacer que un agente enumere primero los deportes soportados, luego profundice en los países/categorías de un deporte específico antes de buscar.
Aún necesitas autenticarte con tu clave de API de Zyla, y el uso cuenta para tu cuota de suscripción.
Notas operativas que ahorran tiempo
- Autenticación: Cada solicitud debe incluir Authorization: Bearer YOUR_API_KEY.
- Modelo de cuota: Suscripción + cuota. Esto no es pago por llamada. Consulta la página de listado para más detalles.
- Pruebas: Para tu primera API en Zyla, típicamente obtendrás una prueba de 7 días o una pequeña asignación de solicitudes. Siempre verifica los términos actuales del listado.
- Caching: Almacena en caché las salidas de GET /get-sports y GET /get-countries de manera agresiva; son listas de referencia y no cambian a menudo.
- UX de búsqueda: Debounce la entrada del usuario y almacena en caché consultas recientes para reducir llamadas duplicadas.
- Manejo de errores: Trata las respuestas no 2xx como errores y muestra mensajes accionables; registra los cuerpos de respuesta para diagnosticar parámetros inválidos rápidamente.
Si eres nuevo en Zyla, explora el catálogo en zylalabs.com—una cuenta y una clave desbloquean el acceso a miles de APIs sin cambiar tus patrones de cliente HTTP.
Referencia: Todos los puntos finales cubiertos
- Buscar
- GET https://zylalabs.com/api/12518/flashscore-live-api/23852/search
- Params: q (cadena, requerido)
- Obtener deportes
- GET https://zylalabs.com/api/12518/flashscore-live-api/23853/get-sports
- Params: ninguno documentado
- Obtener países
- GET https://zylalabs.com/api/12518/flashscore-live-api/23854/get-countries
- Params: sport_id (cadena, requerido)
FAQ
¿Cómo autentico mis solicitudes?
Incluye el encabezado Authorization: Bearer YOUR_API_KEY en cada llamada. Obtén YOUR_API_KEY de la página de listado de la API después de suscribirte.
¿Hay un plan gratuito?
No hay un plan gratuito. Zyla utiliza un modelo de suscripción + cuota. Para tu primera API, típicamente verás una prueba de 7 días o una pequeña cuota de solicitudes para evaluar. Consulta el listado para las opciones de acceso actuales.
¿Qué devuelve el punto final de Buscar?
Un array de entidades (por ejemplo, equipos) con campos como id, type, name, sport.id, sport.name, gender, country_name y URLs de imágenes que puedes renderizar en componentes de la interfaz de usuario.
¿Cómo encuentro el sport_id correcto para Obtener países?
Llama a GET /get-sports para listar los deportes soportados y sus valores de sport_id. Luego pasa el sport_id elegido a GET /get-countries.
¿Puedo llamar a la API desde un asistente de código de IA?
Sí. Usa el punto final MCP de Zyla en https://mcp.zylalabs.com/mcp?apikey=YOUR_API_KEY con un cliente compatible con MCP. Consulta la documentación de MCP vinculada para más detalles.
¿Listo para lanzar tu integración deportiva? Suscríbete y obtén tu clave en el listado: Iniciar prueba de 7 días en FlashScore - Live API. Una vez que tu clave esté activa, pega el curl anterior y estarás en vivo en minutos.
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…