Manual de la API de Pelota Pro Liga

Consulta el calendario de partidos y las plantillas de los equipos desde tu aplicación.

Introducción

La API es de solo lectura, devuelve JSON (UTF-8) y todas las rutas cuelgan de esta URL base:

https://datosapi.pelotaproliga.com/api/v1

Para usarla necesitas una clave de API. Te la facilita el administrador desde el panel de administración, que también define los límites de uso de tu aplicación.

Autenticación

Envía la clave en todas las peticiones, con una de estas dos cabeceras:

X-API-Key: bk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Authorization: Bearer bk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Límites de uso

Cada clave tiene un límite de peticiones por minuto, por día y por mes (según su plan). Con cada respuesta se envían estas cabeceras para que sepas cuánto te queda:

CabeceraSignificado
X-RateLimit-LimitPeticiones permitidas por minuto.
X-RateLimit-RemainingPeticiones que te quedan en el minuto actual.
X-Quota-Day-Limit / X-Quota-Day-RemainingCupo y restante del día.
X-Quota-Month-Limit / X-Quota-Month-RemainingCupo y restante del mes.

Solo aparecen las cabeceras de los límites que tu plan tiene definidos. Si los superas, la API responde 429 con la cabecera Retry-After (segundos que debes esperar). Las peticiones rechazadas no consumen cupo.

Errores

Los errores devuelven siempre este formato:

{
  "error": {
    "code": "unauthenticated",
    "message": "API key ausente o no válida."
  }
}
HTTPcodeCuándo ocurre
401unauthenticatedFalta la clave o no es válida.
403client_disabledLa clave o su plan están desactivados.
403key_expiredLa clave ha caducado.
403ip_not_allowedTu IP no está en la lista autorizada.
403scope_not_allowedTu clave no tiene acceso a ese recurso.
404not_foundEl partido, equipo o pelotari no existe.
422—Algún parámetro no es válido (se detalla en errors).
422range_too_largeEl rango de fechas supera 366 días.
429rate_limit_exceededHas superado un límite de uso.

Calendario de partidos recurso: partidos

Listado de partidos

GET/partidos

Devuelve los partidos ordenados por fecha y hora: los ya disputados con su resultado y los próximos con la información de venta de entradas.

ParámetroDescripción
desdeFecha inicial (AAAA-MM-DD). Por defecto, 30 días antes de hoy.
hastaFecha final. Por defecto, 210 días después de desde. El rango máximo es de 366 días.
estadoprogramado o finalizado.
competicionTexto contenido en el nombre o la categoría de la competición (p. ej. Masters, Serie A).
frontonIdentificador del frontón.
pelotariIdentificador de un pelotari: solo los partidos en los que juega.
equipobaiko o aspe.
langes (por defecto) o eu: idioma de los textos de las entradas.
page, per_pagePaginación. Por defecto 50 por página, máximo 200.
curl -H "X-API-Key: TU_CLAVE" \
  "https://datosapi.pelotaproliga.com/api/v1/partidos?desde=2026-09-01&hasta=2026-09-30&competicion=Masters"

Ejemplo de respuesta (partido ya disputado):

{
  "data": [
    {
      "id": "47208-0-16",
      "fecha": "2026-09-05",
      "hora": null,
      "estado": "finalizado",
      "fronton": { "id": 2345, "nombre": "Santi Brouard", "municipio": "Bilbao", "provincia": "Bizkaia" },
      "competicion": { "id": 47208, "nombre": "[2026] Masters CaixaBank Serie A", "categoria": "Masters CaixaBank Serie A" },
      "fase": "liga_de_clasificacion",
      "titulo": null,
      "tipo": null,
      "orden": "p2",
      "equipo_rojo": {
        "pelotaris": [
          { "id": 2250, "nombre": "EZKURDIA", "alias": "Ezkurdia", "equipo": "aspe", "asiste": true },
          { "id": 2281, "nombre": "ALBISU", "alias": "ALBISU", "equipo": "baiko", "asiste": true }
        ],
        "tantos": 22
      },
      "equipo_azul": { "pelotaris": [ ... ], "tantos": 14 },
      "resultado": { "ganador": "rojo", "tantos_rojo": 22, "tantos_azul": 14 },
      "entradas": null
    }
  ],
  "meta": { "desde": "2026-09-01", "hasta": "2026-09-30", "total": 57, "page": 1, "per_page": 50, "last_page": 2 }
}

Los valores de los ejemplos (identificadores, nombres…) son ilustrativos; la estructura es la real.

Campos devueltos

CampoDescripción
idIdentificador del partido (texto), para consultarlo individualmente.
fecha, horaDía y hora de inicio. La hora puede ser null si no está informada.
estadoVer estados.
frontonLugar: id, nombre, municipio y provincia.
competicionCampeonato o festival: id, nombre y categoria.
fase, titulo, tipoFase de la competición, título del partido y modalidad (parejas, manomanista, cuatro_y_medio…).
ordenPosición dentro del festival: p1 (primer partido), p2…
equipo_rojo, equipo_azulpelotaris (id, nombre, alias, equipo y asiste) y tantos. Si asiste es false, el pelotari estaba programado pero no jugó (fue sustituido).
resultadoganador (rojo o azul), tantos_rojo y tantos_azul. Es null si no hay resultado.
entradasSi hay venta: titulo, subtitulo, precio, agotadas, url_compra, venta_desde y venta_hasta. Si no, null.

Estados

EstadoCriterio
programadoEl partido todavía no tiene resultado cargado (próximos partidos y también partidos ya jugados cuyo marcador aún no se ha introducido en la web).
finalizadoPartido con resultado cargado: resultado siempre trae el ganador y el marcador.

Un partido

GET/partidos/{id}

Devuelve un único partido dentro de data, con los mismos campos que el listado (p. ej. /partidos/47208-0-16). Si no existe, responde 404.

Plantillas de equipos recurso: plantillas

Equipos

GET/equipos

{
  "data": [
    { "slug": "baiko", "nombre": "Baiko", "pelotaris": 22 },
    { "slug": "aspe",  "nombre": "Aspe",  "pelotaris": 25 }
  ]
}

El campo slug es el que se usa en el resto de rutas de plantillas.

Pelotaris de un equipo

GET/equipos/{equipo}/pelotaris

ParámetroDescripción
posiciondelantero o zaguero.
retirados1 para incluir también a los pelotaris retirados (por defecto, no).
langes (por defecto) o eu.
curl -H "X-API-Key: TU_CLAVE" \
  "https://datosapi.pelotaproliga.com/api/v1/equipos/baiko/pelotaris?posicion=delantero"
{
  "data": [
    {
      "id": 2278,
      "equipo": "baiko",
      "nombre": "AGIRRE",
      "alias": "AGIRRE",
      "nombre_completo": "Asier Agirre Irisarri",
      "posicion": "delantero",
      "retirado": false,
      "foto": "https://…/agirre.png",
      "foto_miniatura": "https://…/agirre-300x295.png",
      "ficha": {
        "fecha_nacimiento": "1995-06-11",
        "edad": 31,
        "lugar_nacimiento": "Pamplona",
        "provincia_nacimiento": "Navarra",
        "altura_cm": 182,
        "peso_kg": 74,
        "fecha_debut": "2015-06-13",
        "lugar_debut": "Pamplona (Labrit)",
        "palmares_profesional": "2025 Subcampeón Manomanista Serie B\n2024 Campeón Parejas Serie B",
        "palmares_aficionado": null,
        "txapelas": {
          "manomanista": { "numero": null, "anos": null },
          "cuatro_y_medio": { "numero": null, "anos": null },
          "parejas": { "numero": null, "anos": null }
        }
      }
    }
  ],
  "meta": { "equipo": "baiko", "total": 11 }
}
Algunos pelotaris pueden no tener foto o tener la ficha incompleta: en ese caso los campos llegan como null. Prepara tu aplicación para mostrar un marcador de posición.

Ficha de un pelotari

GET/pelotaris/{id}

Devuelve la misma estructura que cada elemento del listado, dentro de data. Si el pelotari no existe o no está publicado, responde 404.

Notas y buenas prácticas