API de legislación

API de legislación del BOE: el artículo vigente a una fecha, en JSON

Pide un artículo como se cita de verdad —«art. 59.3 ET», «ET 59», «1902 CC»— y recibe el texto consolidado del BOE vigente en la fecha que indiques, con su vigencia y el enlace oficial. También todas sus redacciones y la ley en la fecha de los hechos.

Estado del acceso

El acceso está abierto

Crea tu cuenta de desarrollador, confirma el correo y activa el segundo factor (obligatorio) para crear tu clave. Biblioteca, calculadoras y plazos no gastan saldo; empresas y asistente tienen 100 consultas de prueba, sin tarjeta.

El acceso será para empresas de cualquier país, previa verificación.

Para quién es

  • Legaltech y software de gestión de despachos que necesitan citar la ley vigente sin mantener su propia base de normas.
  • Equipos que construyen asistentes o buscadores jurídicos y quieren fuentes con cita, versión y enlace oficial.
  • Departamentos jurídicos y consultoras con equipo técnico que automatizan comprobaciones de normativa.
  • Investigación y docencia que necesitan comparar la redacción de un artículo en distintas fechas.

Qué puedes hacer

Un artículo por su cita

Entiende «art. 59.3 ET», «ET 59» o «1902 CC» y devuelve el texto vigente en la fecha pedida (por defecto, hoy) con su norma, su bloque, su vigencia y el enlace oficial. Si hay siglas que se repiten, el parámetro orden desambigua.

Todas las redacciones

Las versiones de un artículo de la más antigua a la más reciente, cada una con su vigencia y su fuente, y las incidencias (huecos o solapes) que haya entre ellas.

La ley en la fecha de los hechos

La redacción vigente el día de los hechos y todas las posteriores. En penal avisa de que hay reformas posteriores que valorar (art. 2.2 CP), pero no decide cuál es más favorable: eso es juicio jurídico y el resultado nace propuesto.

Búsqueda por texto

Busca en la legislación cargada a una fecha, del más al menos relevante. Si no hay nada, la lista va vacía: nunca se inventa un artículo.

Qué normas hay cargadas

GET /v1/dev/biblioteca/abreviaturas lista las abreviaturas verificadas con artículos dentro y cuántos tiene cada norma: se cuenta, no se declara.

Las operaciones

  • GET/biblioteca/abreviaturas

    Abreviaturas verificadas y con artículos dentro Detalle

    Gratis
  • GET/biblioteca/articulo

    Consultar un artículo de la biblioteca a una fecha Detalle

    Gratis
  • GET/biblioteca/buscar

    Buscar artículos en la biblioteca jurídica Detalle

    Gratis
  • GET/biblioteca/versiones

    Todas las redacciones de un artículo, con su vigencia y su fuente Detalle

    Gratis
  • GET/biblioteca/ley-en-fecha

    La redacción vigente en la fecha de los hechos y todas las posteriores Detalle

    Gratis

Ejemplos de petición y respuesta

Los ejemplos usan tu clave desde la variable de entorno JURILIA_API_KEY.

Un artículo a una fecha

Los cuatro desenlaces (encontrado, abreviatura_desconocida, articulo_no_esta, no_vigente_esa_fecha) viajan con 200: «no encontrado» es información.

curl

curl "https://api.jurilia.com/v1/dev/biblioteca/articulo?cita=ET+59&fecha=2026-01-01" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/biblioteca/articulo",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    params={"cita":"ET 59","fecha":"2026-01-01"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/biblioteca/articulo");
url.search = new URLSearchParams({"cita":"ET 59","fecha":"2026-01-01"});
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Respuesta (la forma; los valores son de ejemplo)

{
  "desenlace": "encontrado",
  "abreviatura": "ET",
  "articulo": "59",
  "fecha": "2026-01-01",
  "boeId": "BOE-A-…",
  "bloqueId": "…",
  "tituloNorma": "…",
  "tituloBloque": "…",
  "texto": "…",
  "vigenciaDesde": "AAAA-MM-DD",
  "vigenciaHasta": null,
  "urlOficial": "https://www.boe.es/…",
  "aviso": null
}

Los valores son ilustrativos para que veas la forma exacta de la respuesta, no datos de una consulta real.

La ley en la fecha de los hechos

La redacción vigente cuando ocurrieron los hechos y las posteriores hasta la fecha de referencia.

curl

curl "https://api.jurilia.com/v1/dev/biblioteca/ley-en-fecha?articulo=ET+59&fechaHechos=2019-05-01&fechaReferencia=2026-10-01" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/biblioteca/ley-en-fecha",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    params={"articulo":"ET 59","fechaHechos":"2019-05-01","fechaReferencia":"2026-10-01"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/biblioteca/ley-en-fecha");
url.search = new URLSearchParams({"articulo":"ET 59","fechaHechos":"2019-05-01","fechaReferencia":"2026-10-01"});
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Respuesta (la forma; los valores son de ejemplo)

{
  "desenlace": "encontrado",
  "abreviatura": "CP",
  "articulo": "…",
  "articuloConVersiones": { "…": "como en /versiones" },
  "enLaFecha": {
    "fechaHechos": "AAAA-MM-DD",
    "fechaReferencia": "AAAA-MM-DD",
    "vigenteEnLosHechos": { "…": "una versión" },
    "posteriores": [],
    "vigenteEnLaReferencia": { "…": "una versión" },
    "aviso": null,
    "estado": "propuesto"
  },
  "fundamento": null
}

Los valores son ilustrativos para que veas la forma exacta de la respuesta, no datos de una consulta real.

Buscar artículos por texto

Acerca los resultados a un orden con orden; no filtra.

curl

curl "https://api.jurilia.com/v1/dev/biblioteca/buscar?q=despido+improcedente&orden=social" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/biblioteca/buscar",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    params={"q":"despido improcedente","orden":"social"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/biblioteca/buscar");
url.search = new URLSearchParams({"q":"despido improcedente","orden":"social"});
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Respuesta (la forma; los valores son de ejemplo)

{
  "articulos": [
    {
      "boeId": "BOE-A-…",
      "bloqueId": "…",
      "tituloNorma": "…",
      "abreviatura": "ET",
      "articulo": "56",
      "tituloBloque": "…",
      "texto": "…",
      "vigenciaDesde": "AAAA-MM-DD",
      "vigenciaHasta": null,
      "urlOficial": "https://www.boe.es/…"
    }
  ]
}

Los valores son ilustrativos para que veas la forma exacta de la respuesta, no datos de una consulta real.

Por qué fiarse de lo que devuelve

Cita o calla

Cada artículo lleva su norma, su versión, su vigencia y el enlace oficial. Si no está, la respuesta lo dice; nunca se inventa.

La fecha manda

El texto no es «el de hoy» sino el vigente en la fecha que pides, y puedes recorrer todas las redacciones.

Gratis

La biblioteca no gasta saldo ni prueba: sólo pide tu clave y respeta el límite por minuto.

Límites y lo que no hace

  • El texto consolidado del BOE es informativo, no tiene valor oficial: para efectos jurídicos, la publicación oficial. Por eso cada respuesta lleva el enlace.
  • Sólo la legislación cargada: /biblioteca/abreviaturas dice cuál.
  • No decide cuál es la norma más favorable ni interpreta: devuelve texto con su fuente.
  • 120 llamadas por minuto por clave.

Precio

Gratis. Pide tu clave y respeta el límite de 120 llamadas por minuto, pero no consume saldo ni la prueba.

Autenticación y errores

Cada llamada lleva la clave de tu cuenta de desarrollador en la cabecera Authorization: Bearer iuris_sk_…. La dirección base es https://api.jurilia.com. Hay un límite de 120 llamadas por minuto por clave, con las cabeceras X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset en cada respuesta. Una clave puede llevar una lista blanca de IP o redes (CIDR).

Los fallos llegan en JSON con un código estable: 401 (clave ausente o inválida), 402 (sin saldo: no se sirve ni se cobra), 403 (IP no permitida), 409 (falta un dato que decide el cálculo: no se cobra) y 429 (demasiadas llamadas seguidas).

Preguntas frecuentes

¿Se puede pedir un artículo por su cita?
Sí: «art. 59.3 ET», «ET 59» o «1902 CC». Si no se entiende qué artículo se pide, 400 o 422 según el endpoint; si se entiende y no está, 200 con articulo_no_esta.
¿Puedo obtener el texto vigente en una fecha pasada?
Sí. fecha en /biblioteca/articulo y fechaHechos en /biblioteca/ley-en-fecha devuelven la redacción vigente ese día, con su vigencia.
¿Tiene valor oficial el texto que devuelve?
No: el texto consolidado del BOE es informativo. Cada resultado trae el enlace oficial para contrastarlo con la publicación.
¿Cuánto cuesta?
Nada: la biblioteca es gratis. Sólo necesitas la clave de tu cuenta de desarrollador.