Congreso Open Data · API estática JSON

Datos del Congreso listos para consumir desde cualquier app

Este repositorio transforma el Open Data del Congreso de los Diputados en JSON versionado: votaciones, iniciativas, intervenciones, diputados, legislaturas disponibles e índices por legislatura y año.

Ver endpoints Diputados Ejemplos GitHub

Estado de los datos

Este panel intenta leer automáticamente los índices generados en data/congreso. Si todavía no se ha ejecutado el Action, algunas tarjetas aparecerán como pendientes.

Cómo funciona

No hay backend propio. Es una API estática: GitHub Actions ejecuta crawlers, descarga o normaliza los recursos públicos del Congreso y guarda JSON dentro de data/congreso. Después puedes consumirlos desde GitHub Pages o desde raw.githubusercontent.com.

URLs base

GitHub Pages

https://jalonsomerchan.github.io/congreso-opendata/

Recomendado para una web pública con esta documentación y los JSON estáticos.

Raw GitHub

https://raw.githubusercontent.com/jalonsomerchan/congreso-opendata/main/

Útil para consumir directamente los JSON desde scripts o backends.

Bloques disponibles

Votaciones

Votaciones del Pleno detectadas en la página oficial de OpenData, con legislatura, sesión, fecha y número de votación.

Iniciativas

Datasets oficiales de iniciativas legislativas: aprobadas, proyectos de ley, proposiciones y reformas de estatuto.

Intervenciones

Recursos OpenData detectados desde el buscador de intervenciones. Puede quedar vacío si el Congreso no publica enlaces directos sin interacción.

Diputados

Datasets de diputados activos, diputados por legislatura, diputadas históricas y declaraciones de intereses.

votacionesiniciativasintervencionesdiputados

Endpoints principales

EndpointQué devuelve
data/congreso/legislaturas.jsonJSON global con las legislaturas disponibles detectadas en todos los bloques y un resumen por sección.
data/congreso/{bloque}/index.jsonÍndice principal del bloque. Contiene todos los registros conocidos por ese crawler.
data/congreso/{bloque}/latest.jsonResumen de lo último capturado por ese crawler en la última ejecución con cambios.
data/congreso/{bloque}/legislaturas/index.jsonLista de legislaturas detectadas dentro de ese bloque.
data/congreso/{bloque}/legislaturas/{legislatura}/index.jsonTodos los registros de un bloque para una legislatura. Ejemplo: data/congreso/votaciones/legislaturas/leg15/index.json.
data/congreso/{bloque}/legislaturas/{legislatura}/latest.jsonÚltimos registros disponibles de esa legislatura, limitado por GROUP_LATEST_LIMIT.
data/congreso/{bloque}/anios/index.jsonLista de años detectados dentro de ese bloque.
data/congreso/{bloque}/anios/{anio}/index.jsonTodos los registros de un bloque para un año. Ejemplo: data/congreso/iniciativas/anios/2026/index.json.
data/congreso/{bloque}/anios/{anio}/latest.jsonÚltimos registros disponibles de ese año, limitado por GROUP_LATEST_LIMIT.
data/congreso/{bloque}/.../lastest.jsonAlias de compatibilidad de latest.json. La ruta canónica recomendada sigue siendo latest.json.

Legislaturas disponibles

El endpoint global data/congreso/legislaturas.json agrega todas las legislaturas encontradas en los bloques disponibles. Cada legislatura incluye su id, slug, total de registros y, dentro de sections, las rutas de índice y últimos registros por bloque.

{
  "generated_at": "2026-06-16T10:00:00+00:00",
  "generated_by": "scripts/build_congreso_indexes.py",
  "total_legislatures": 1,
  "legislatures": [
    {
      "id": "Leg15",
      "slug": "leg15",
      "total_records": 123,
      "sections": {
        "votaciones": {
          "total_records": 100,
          "index_path": "data/congreso/votaciones/legislaturas/leg15/index.json",
          "latest_path": "data/congreso/votaciones/legislaturas/leg15/latest.json",
          "lastest_path": "data/congreso/votaciones/legislaturas/leg15/lastest.json"
        }
      }
    }
  ]
}

Rutas de detalle por bloque

BloqueRuta de detalleInformación disponible
Votacionesdata/congreso/votaciones/{legislatura}/{sesion}/{fecha}/{votacion}.jsonLegislatura, sesión, fecha, número de votación, URL oficial, fecha de captura y JSON oficial de la votación.
Iniciativasdata/congreso/iniciativas/{dataset}/{timestamp}.jsonNombre del dataset, timestamp/exportación, URL oficial y contenido oficial del Congreso.
Intervencionesdata/congreso/intervenciones/{recurso}/{timestamp-o-hash}.jsonRecursos JSON, CSV o XML detectados desde el buscador de intervenciones y normalizados como JSON.
Diputadosdata/congreso/diputados/{dataset}/{timestamp}.jsonDiputados activos, diputados de baja, diputados por legislatura, diputadas en todas las legislaturas y declaraciones de intereses.

Diputados

El bloque diputados funciona igual que el resto: tiene índice principal, últimos cambios, agrupaciones por legislatura y agrupaciones por año.

Estructura de los JSON

Índice principal de bloque

{
  "updated_at": "2026-06-16T10:00:00+00:00",
  "source": "https://www.congreso.es/...",
  "total_datasets": 4,
  "datasets": {
    "diputados-activos-20260616050022": {
      "id": "diputados-activos-20260616050022",
      "path": "data/congreso/diputados/diputados-activos/20260616050022.json",
      "source_url": "https://www.congreso.es/...json",
      "first_seen_at": "2026-06-16T10:00:00+00:00"
    }
  }
}

Índice por legislatura o año

{
  "generated_at": "2026-06-16T10:00:00+00:00",
  "generated_by": "scripts/build_congreso_indexes.py",
  "section": "votaciones",
  "group": { "id": "Leg15", "slug": "leg15", "type": "legislature" },
  "total_records": 123,
  "votes": {
    "leg15-sesion185-20260611-votacion001": {
      "id": "leg15-sesion185-20260611-votacion001",
      "path": "data/congreso/votaciones/leg15/sesion185/20260611/votacion001.json",
      "grouping": { "legislatures": ["Leg15"], "years": ["2026"] }
    }
  }
}

Fichero de detalle

{
  "metadata": {
    "id": "...",
    "source_url": "...",
    "captured_at": "2026-06-16T10:00:00+00:00"
  },
  "data": {
    "...": "Respuesta oficial del Congreso"
  }
}

Los nombres exactos de las claves de registros cambian por bloque: votes en votaciones, datasets en iniciativas y diputados, y resources en intervenciones.

Ejemplos de uso

JavaScript: obtener legislaturas disponibles

const base = 'https://raw.githubusercontent.com/jalonsomerchan/congreso-opendata/main/';
const legislaturas = await fetch(base + 'data/congreso/legislaturas.json').then(r => r.json());
console.log(legislaturas.legislatures);

JavaScript: últimas votaciones de la legislatura 15

const latest = await fetch(base + 'data/congreso/votaciones/legislaturas/leg15/latest.json').then(r => r.json());
const first = latest.latest_records[0];
const detail = await fetch(base + first.path).then(r => r.json());
console.log(detail.metadata, detail.data);

JavaScript: iniciativas de 2026

const iniciativas2026 = await fetch(base + 'data/congreso/iniciativas/anios/2026/index.json').then(r => r.json());
console.log(Object.values(iniciativas2026.datasets));

JavaScript: datasets de diputados disponibles

const diputados = await fetch(base + 'data/congreso/diputados/index.json').then(r => r.json());
console.log(Object.keys(diputados.datasets));

PHP: leer últimos registros de un año

<?php
$base = 'https://raw.githubusercontent.com/jalonsomerchan/congreso-opendata/main/';
$json = file_get_contents($base . 'data/congreso/votaciones/anios/2026/latest.json');
$data = json_decode($json, true);
print_r($data['latest_records']);
?>

cURL

curl https://raw.githubusercontent.com/jalonsomerchan/congreso-opendata/main/data/congreso/diputados/index.json