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/abreviaturasAbreviaturas verificadas y con artículos dentro Detalle
Gratis - GET
/biblioteca/articuloConsultar un artículo de la biblioteca a una fecha Detalle
Gratis - GET
/biblioteca/buscarBuscar artículos en la biblioteca jurídica Detalle
Gratis - GET
/biblioteca/versionesTodas las redacciones de un artículo, con su vigencia y su fuente Detalle
Gratis - GET
/biblioteca/ley-en-fechaLa 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/abreviaturasdice 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í.
fechaen/biblioteca/articuloyfechaHechosen/biblioteca/ley-en-fechadevuelven 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.
Más APIs y casos de uso
API del asistente jurídico
Pregunta en castellano y recibe una respuesta con citas del BOE comprobadas, o «sin fuentes» si no la hay. Admite PDF y Word. Coste real del modelo ×5.
Ver la API →API de calculadoras jurídicas
Veinte calculadoras jurídicas por API: despido, finiquito, alimentos con IPC, baremo, prescripción… Con traza, fundamento y supuestos. Gratis.
Ver la API →API de plazos procesales
Calcula el vencimiento de un plazo procesal en días hábiles con el calendario oficial que corresponda, con traza y avisos. Gratis.
Ver la API →Contenido revisado el 2026-10-06