Referencia de la API
Explora todos los endpoints de la API del FC Barcelona
Primeros pasos
La API del Barça es una REST API pública y gratuita. No se requiere autenticación — solo haz una solicitud GET y recibirás un JSON de vuelta.
URL base
https://api.fc-barcelona.app/api
Formato de respuesta
Cada respuesta exitosa viene envuelta en un sobre consistente:
{
"data": { ... },
"meta": {
"cached_at": "2026-04-03T10:00:00.000Z",
"cache_expires_at": "2026-04-04T10:00:00.000Z"
}
}
El objeto meta indica cuándo se almacenaron los datos en caché y cuándo expiran, para que puedas gestionarlo en tu aplicación.
El parámetro season
La mayoría de los endpoints aceptan un parámetro opcional ?season=. Pasa un año de 4 dígitos: ?season=2024 devuelve datos de la temporada 2024-25. Sin él, siempre devuelve la temporada actual.
Formato de error
{
"error": {
"code": "NOT_FOUND",
"message": "Player not found"
}
}
Códigos de error: NOT_FOUND (404), VALIDATION_ERROR (400), RATE_LIMITED (429).
Rate Limiting
La API permite 100 solicitudes por hora por dirección IP. Cada respuesta incluye headers de rate limit para que puedas monitorear tu uso:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 3412
X-RateLimit-Reset es el número de segundos hasta que se reinicia la ventana.
Al superar el límite, la API responde con 429 Too Many Requests:
{
"error": {
"code": "RATE_LIMITED",
"message": "Too many requests. Please wait before retrying."
}
}
Consejos para mantenerte dentro del límite
- Almacena en caché las respuestas — el campo
meta.cache_expires_atindica hasta cuándo los datos son frescos. - Evita hacer polling en bucles cerrados; la mayoría de los datos se actualiza como máximo una vez por hora.
- Para datos de plantilla y clasificación (actualizados diariamente), una sola solicitud diaria es suficiente.
/api/squadGet Squad
Devuelve la plantilla completa del FC Barcelona para una temporada determinada. Cada jugador incluye posición, número de camiseta, nacionalidad, fecha de nacimiento y estadísticas de la temporada (partidos, goles, asistencias).
Los jugadores están ordenados por número de camiseta. El número 0 indica que el número no está disponible para esa temporada.
Filtrar por posición
Usa el parámetro position para obtener solo porteros, defensas, centrocampistas o delanteros:
GET /api/squad?position=GK
GET /api/squad?position=FW
Ejemplo con fetch
const res = await fetch('https://api.fc-barcelona.app/api/squad')
const { data } = await res.json()
data.forEach(player => {
console.log(`#${player.number} ${player.name} — ${player.position}`)
})
cURL
curl https://api.fc-barcelona.app/api/squad?position=MF
Parámetros
| Name | Type | Required | Description |
|---|---|---|---|
position | GKDFMFFW | opcional | Filter players by position. |
season | integer | opcional· predeterminado: 2025 | Season year (e.g. 2025 for the 2025-26 season). Defaults to the current season. |
Respuesta
{
"data": [
{
"id": 1,
"name": "Marc-André ter Stegen",
"number": 1,
"position": "GK",
"nationality": "Germany",
"dateOfBirth": "1992-04-30",
"isCaptain": false,
"appearances": 28,
"goals": 0,
"assists": 0
},
{
"id": 2,
"name": "Lamine Yamal",
"number": 19,
"position": "FW",
"nationality": "Spain",
"dateOfBirth": "2007-07-13",
"isCaptain": false,
"appearances": 32,
"goals": 14,
"assists": 18
}
],
"meta": {
"cached_at": "2026-04-03T10:00:00.000Z",
"cache_expires_at": "2026-04-04T10:00:00.000Z"
}
}/api/player/{id}Get Player
Devuelve un único jugador por su ID interno. El ID del jugador proviene de la respuesta de /api/squad (data[n].id).
Ejemplo con fetch
// Primero obtén la plantilla para encontrar los IDs
const squadRes = await fetch('https://api.fc-barcelona.app/api/squad')
const { data: squad } = await squadRes.json()
// Luego busca un jugador específico
const player = squad.find(p => p.name === 'Lamine Yamal')
const playerRes = await fetch(`https://api.fc-barcelona.app/api/player/${player.id}`)
const { data } = await playerRes.json()
Respuesta 404
Si no existe ningún jugador con el ID indicado, la API devuelve 404 Not Found:
{
"error": {
"code": "NOT_FOUND",
"message": "Player not found"
}
}
Parámetros
| Name | Type | Required | Description |
|---|---|---|---|
idpath | integer | requerido | Internal player ID (from the squad endpoint). |
season | integer | opcional· predeterminado: 2025 | Season year. Defaults to the current season. |
Respuesta
{
"data": {
"id": 2,
"name": "Lamine Yamal",
"number": 19,
"position": "FW",
"nationality": "Spain",
"dateOfBirth": "2007-07-13",
"isCaptain": false,
"appearances": 32,
"goals": 14,
"assists": 18
},
"meta": {
"cached_at": "2026-04-03T10:00:00.000Z",
"cache_expires_at": "2026-04-04T10:00:00.000Z"
}
}/api/next-matchGet Next Match
Devuelve el próximo partido programado del FC Barcelona. Útil para construir temporizadores de cuenta regresiva o widgets de vista previa de partido.
Devuelve 404 Not Found si no hay próximos partidos en la temporada actual.
Ejemplo con fetch
const res = await fetch('https://api.fc-barcelona.app/api/next-match')
const { data } = await res.json()
const kickoff = new Date(data.matchDate)
const now = new Date()
const msUntilKickoff = kickoff - now
console.log(`Próximo partido: ${data.homeTeam} vs ${data.awayTeam}`)
console.log(`Estadio: ${data.venue}`)
Caché: Este endpoint tiene un caché más corto de 15 minutos (
s-maxage=900) para mantener los temporizadores precisos.
Parámetros
| Name | Type | Required | Description |
|---|---|---|---|
season | integer | opcional· predeterminado: 2025 | Season year. Defaults to the current season. |
Respuesta
{
"data": {
"id": 101,
"homeTeam": "Barcelona",
"homeTeamImageUrl": "https://api.fc-barcelona.app/images/teams/barcelona.png",
"awayTeam": "Real Madrid",
"awayTeamImageUrl": "https://api.fc-barcelona.app/images/teams/real-madrid.png",
"matchDate": "2026-04-12T19:00:00.000Z",
"venue": "Estadi Olímpic Lluís Companys",
"status": "scheduled",
"homeScore": null,
"awayScore": null,
"matchday": 31,
"competition": "La Liga",
"competitionShortName": "LAL",
"competitionImageUrl": "https://api.fc-barcelona.app/images/competitions/laliga.png"
},
"meta": {
"cached_at": "2026-04-03T10:00:00.000Z",
"cache_expires_at": "2026-04-03T11:00:00.000Z"
}
}/api/calendarGet Calendar
Devuelve una lista paginada de partidos del FC Barcelona. Puedes filtrar por competición, estado y temporada.
Paginación
Usa limit y offset para navegar por los resultados. La respuesta incluye un objeto pagination:
{
"pagination": {
"total": 48,
"limit": 10,
"offset": 0
}
}
Filtrar próximos partidos
GET /api/calendar?status=scheduled&limit=5
Filtrar por competición
GET /api/calendar?competition=UCL
Ejemplo con fetch
const res = await fetch('https://api.fc-barcelona.app/api/calendar?status=completed&limit=10')
const { data } = await res.json()
data.matches.forEach(match => {
console.log(`${match.homeTeam} ${match.homeScore}–${match.awayScore} ${match.awayTeam}`)
})
Valores de estado
| Valor | Significado |
|---|---|
scheduled |
Aún no jugado |
live |
En progreso |
completed |
Resultado final disponible |
postponed |
Aplazado o cancelado |
Parámetros
| Name | Type | Required | Description |
|---|---|---|---|
competition | LALUCLCDRSUP | opcional | Filter by competition. LAL = La Liga, UCL = Champions League, CDR = Copa del Rey, SUP = Supercopa. |
status | scheduledcompletedlivepostponed | opcional | Filter by match status. |
limit | integer | opcional· predeterminado: 10 | Number of matches to return (1–50). |
offset | integer | opcional· predeterminado: 0 | Number of matches to skip for pagination. |
season | integer | opcional· predeterminado: 2025 | Season year. Defaults to the current season. |
Respuesta
{
"data": {
"matches": [
{
"id": 101,
"homeTeam": "Barcelona",
"homeTeamImageUrl": "https://api.fc-barcelona.app/images/teams/barcelona.png",
"awayTeam": "Real Madrid",
"awayTeamImageUrl": "https://api.fc-barcelona.app/images/teams/real-madrid.png",
"matchDate": "2026-04-12T19:00:00.000Z",
"venue": "Estadi Olímpic Lluís Companys",
"status": "scheduled",
"homeScore": null,
"awayScore": null,
"matchday": 31,
"competition": "La Liga",
"competitionShortName": "LAL",
"competitionImageUrl": "https://api.fc-barcelona.app/images/competitions/laliga.png"
}
],
"pagination": {
"total": 48,
"limit": 10,
"offset": 0
}
},
"meta": {
"cached_at": "2026-04-03T10:00:00.000Z",
"cache_expires_at": "2026-04-03T10:30:00.000Z"
}
}/api/standingsGet Standings
Devuelve la clasificación actual de La Liga o la UEFA Champions League, ordenada por posición.
Nota: Las clasificaciones de la Copa del Rey (
CDR) y Supercopa (SUP) raramente están disponibles.
Ejemplo con fetch
const res = await fetch('https://api.fc-barcelona.app/api/standings?competition=UCL')
const { data } = await res.json()
const barca = data.find(team => team.team === 'Barcelona')
console.log(`Barcelona: ${barca.points} pts, posición ${barca.position}`)
cURL
curl 'https://api.fc-barcelona.app/api/standings?competition=LAL'
La clasificación refleja los datos más recientes y se actualiza diariamente a las 07:00 UTC.
Parámetros
| Name | Type | Required | Description |
|---|---|---|---|
competition | LALUCLCDRSUP | opcional· predeterminado: LAL | Competition short name. Defaults to LAL (La Liga). |
season | integer | opcional· predeterminado: 2025 | Season year. Defaults to the current season. |
Respuesta
{
"data": [
{
"position": 1,
"team": "Barcelona",
"teamImageUrl": "https://api.fc-barcelona.app/images/teams/barcelona.png",
"played": 30,
"won": 22,
"drawn": 4,
"lost": 4,
"goalsFor": 74,
"goalsAgainst": 32,
"goalDifference": 42,
"points": 70,
"competition": "La Liga"
},
{
"position": 2,
"team": "Real Madrid",
"teamImageUrl": "https://api.fc-barcelona.app/images/teams/real-madrid.png",
"played": 30,
"won": 20,
"drawn": 5,
"lost": 5,
"goalsFor": 65,
"goalsAgainst": 35,
"goalDifference": 30,
"points": 65,
"competition": "La Liga"
}
],
"meta": {
"cached_at": "2026-04-03T10:00:00.000Z",
"cache_expires_at": "2026-04-03T16:00:00.000Z"
}
}/api/scorersGet Top Scorers
Devuelve los máximos goleadores de una competición, ordenados por goles de forma descendente. Cada entrada incluye un campo rank calculado.
Competiciones disponibles: Solo
LAL(La Liga) yUCL(Champions League) tienen datos de goleadores. Copa del Rey y Supercopa no están disponibles.
Ejemplo con fetch
const res = await fetch('https://api.fc-barcelona.app/api/scorers?competition=UCL')
const { data } = await res.json()
data.forEach(scorer => {
console.log(`${scorer.rank}. ${scorer.playerName} (${scorer.team}) — ${scorer.goals} goles`)
})
cURL
curl 'https://api.fc-barcelona.app/api/scorers?competition=LAL&season=2024'
Parámetros
| Name | Type | Required | Description |
|---|---|---|---|
competition | LALUCL | opcional· predeterminado: LAL | Competition short name. Only LAL and UCL are supported. |
season | integer | opcional· predeterminado: 2025 | Season year. Defaults to the current season. |
Respuesta
{
"data": [
{
"rank": 1,
"playerName": "Robert Lewandowski",
"team": "Barcelona",
"teamImageUrl": "https://api.fc-barcelona.app/images/teams/barcelona.png",
"goals": 24,
"assists": 8,
"penalties": 3,
"playedMatches": 28,
"competition": "La Liga",
"competitionShortName": "LAL"
},
{
"rank": 2,
"playerName": "Kylian Mbappé",
"team": "Real Madrid",
"teamImageUrl": "https://api.fc-barcelona.app/images/teams/real-madrid.png",
"goals": 21,
"assists": 6,
"penalties": 2,
"playedMatches": 29,
"competition": "La Liga",
"competitionShortName": "LAL"
}
],
"meta": {
"cached_at": "2026-04-03T10:00:00.000Z",
"cache_expires_at": "2026-04-03T16:00:00.000Z"
}
}/api/h2hHead-to-Head
Devuelve el historial de enfrentamientos del FC Barcelona contra cualquier rival, con un resumen de victorias, empates, derrotas y goles.
El parámetro team admite coincidencia parcial — "Real" coincide con "Real Madrid", "Real Sociedad", etc.
Historial completo
Omite el parámetro season para obtener el historial completo:
GET /api/h2h?team=Real Madrid
Una temporada específica
GET /api/h2h?team=Atletico&season=2025
Ejemplo con fetch
const res = await fetch('https://api.fc-barcelona.app/api/h2h?team=Real Madrid')
const { data } = await res.json()
const { summary, matches } = data
console.log(`Jugados: ${summary.played} — V${summary.wins} E${summary.draws} D${summary.losses}`)
console.log(`Goles: ${summary.goalsFor}–${summary.goalsAgainst}`)
Nota: Los datos están limitados a los partidos almacenados en la base de datos (desde la temporada 2023-24). No hay datos históricos anteriores.
Parámetros
| Name | Type | Required | Description |
|---|---|---|---|
team | string | requerido | Opponent team name. Partial match is supported (e.g. "Real" matches "Real Madrid"). |
season | integer | opcional | Season year. Omit to return all-time results. |
Respuesta
{
"data": {
"matches": [
{
"id": 95,
"homeTeam": "Barcelona",
"homeTeamImageUrl": "https://api.fc-barcelona.app/images/teams/barcelona.png",
"awayTeam": "Real Madrid",
"awayTeamImageUrl": "https://api.fc-barcelona.app/images/teams/real-madrid.png",
"matchDate": "2026-03-01T20:00:00.000Z",
"venue": "Estadi Olímpic Lluís Companys",
"status": "completed",
"homeScore": 3,
"awayScore": 2,
"matchday": 26,
"competition": "La Liga",
"competitionShortName": "LAL",
"competitionImageUrl": "https://api.fc-barcelona.app/images/competitions/laliga.png"
}
],
"summary": {
"played": 12,
"wins": 5,
"draws": 3,
"losses": 4,
"goalsFor": 18,
"goalsAgainst": 15
}
},
"meta": {
"cached_at": "2026-04-03T10:00:00.000Z",
"cache_expires_at": "2026-04-03T16:00:00.000Z"
}
}