Codes
codes da acceso al catálogo de normativas. Cada normativa (code) es un cuerpo normativo, como el CTE DB-HE o el PGOU de Sevilla, y agrupa uno o varios documentos, que la API llama versiones.
Ruta base: /api/v1/codes
Todos estos endpoints pertenecen al grupo de datos: 60 peticiones por minuto y sin consumo de cuota. Con una clave de prueba responden 403 not_available_in_sandbox.
Estas rutas devuelven los metadatos y el índice de secciones, no el texto. El texto de cada sección, artículo a artículo, lo da GET /v1/regulations/{slug}/sections/{section}; para preguntar sobre una norma en lenguaje natural, con citas a artículos concretos, POST /api/v2/ask.
Valores de referencia
Section titled “Valores de referencia”normative_scope
Section titled “normative_scope”| Valor | Descripción |
|---|---|
national | Normativa estatal (CTE, RITE, LOE) |
regional | Normativa autonómica |
provincial | Normativa provincial |
municipal | Planeamiento y ordenanzas municipales |
sectoral | Normativa sectorial, como la Ley de Costas |
supramunicipal | Ámbitos supramunicipales: mancomunidades, áreas metropolitanas |
european | Normativa europea |
status de las versiones
Section titled “status de las versiones”| Valor | Descripción |
|---|---|
active | En vigor |
repealed | Derogada |
draft | Borrador |
in_progress | En tramitación |
GET /api/v1/codes/search
Section titled “GET /api/v1/codes/search”GET Buscar normativas
Búsqueda paginada de normativas por título, ámbito o etiqueta.
Parámetros de query
Section titled “Parámetros de query”| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
q | string | Texto que debe aparecer en el título (no distingue mayúsculas) | |
normative_scope | string | Filtra por ámbito (valores de la tabla anterior) | |
tag | string | Filtra las normativas que tienen esta etiqueta | |
page | integer | 1 | Número de página, desde 1 |
page_size | integer | 20 | Resultados por página. Máximo 50 |
Sin ningún filtro, devuelve el catálogo completo paginado.
Ejemplo de petición
Section titled “Ejemplo de petición”GET /api/v1/codes/search?q=ahorro&normative_scope=nationalAuthorization: Bearer sk-normatia-...Respuesta 200
Section titled “Respuesta 200”{ "items": [ { "slug": "cte-db-he", "title": "CTE DB-HE Ahorro de energía", "short_title": "CTE DB-HE", "normative_scope": "national", "tags": ["cte", "energia"] } ], "total": 1, "page": 1, "page_size": 20, "total_pages": 1}Campos de respuesta
Section titled “Campos de respuesta”| Campo | Tipo | Descripción |
|---|---|---|
items | array | Normativas de la página, ordenadas por ámbito y título |
items[].slug | string | Identificador de la normativa |
items[].title | string | Título completo |
items[].short_title | string | null | Título abreviado |
items[].normative_scope | string | Ámbito normativo |
items[].tags | string[] | null | Etiquetas |
total | integer | Total de resultados |
page | integer | Página actual |
page_size | integer | Tamaño de página pedido |
total_pages | integer | Total de páginas |
GET /api/v1/codes/{slug}
Section titled “GET /api/v1/codes/{slug}”GET Detalle de una normativa
Devuelve la normativa con todas sus versiones, primero las vigentes.
Parámetros de ruta
Section titled “Parámetros de ruta”| Parámetro | Tipo | Descripción |
|---|---|---|
slug | string | Identificador de la normativa. Ej.: cte-db-he |
Ejemplo de petición
Section titled “Ejemplo de petición”GET /api/v1/codes/cte-db-heAuthorization: Bearer sk-normatia-...Respuesta 200
Section titled “Respuesta 200”Ejemplo abreviado, con valores ilustrativos:
{ "slug": "cte-db-he", "title": "CTE DB-HE Ahorro de energía", "short_title": "CTE DB-HE", "normative_scope": "national", "description": "Documento Básico de ahorro de energía del Código Técnico de la Edificación.", "tags": ["cte", "energia"], "country_code": "es", "documents": [ { "version": "2022", "title": "CTE DB-HE (modificación del RD 450/2022)", "status": "active", "published_date": "2022-06-15", "effective_date": "2022-06-16", "is_internal": true } ]}Campos de respuesta
Section titled “Campos de respuesta”| Campo | Tipo | Descripción |
|---|---|---|
slug | string | Identificador de la normativa |
title | string | Título completo |
short_title | string | null | Título abreviado |
normative_scope | string | Ámbito normativo |
description | string | null | Descripción |
tags | string[] | null | Etiquetas |
country_code | string | País de la normativa (ISO 3166-1 alfa-2). Hoy siempre es |
documents | object[] | Versiones de la normativa, primero las vigentes |
documents[].version | string | Identificador de la versión. Es el que se usa en /api/v1/codes/{slug}/{version} |
documents[].title | string | Título de la versión |
documents[].status | string | active, repealed, draft o in_progress |
documents[].published_date | string | null | Fecha de publicación (YYYY-MM-DD) |
documents[].effective_date | string | null | Fecha de entrada en vigor (YYYY-MM-DD) |
documents[].is_internal | boolean | true si el texto de la versión está curado a mano por Normatia (en /v1, curated). false si está convertido de forma automática o no tiene texto |
Errores
Section titled “Errores”| Estado | detail.error | Cuándo |
|---|---|---|
| 404 | not_found | El slug no existe |
GET /api/v1/codes/{slug}/latest
Section titled “GET /api/v1/codes/{slug}/latest”GET Versiones vigentes
Devuelve los documentos vigentes (status = active) de una normativa, con sus metadatos. No incluye el índice de secciones: para eso, usa el endpoint de una versión concreta. Si no hay ninguna versión vigente, devuelve una lista vacía.
Parámetros de ruta
Section titled “Parámetros de ruta”| Parámetro | Tipo | Descripción |
|---|---|---|
slug | string | Identificador de la normativa. Ej.: cte-db-he |
Ejemplo de petición
Section titled “Ejemplo de petición”GET /api/v1/codes/cte-db-he/latestAuthorization: Bearer sk-normatia-...Respuesta 200
Section titled “Respuesta 200”Con valores ilustrativos:
[ { "slug": "cte-db-he", "version": "2022", "title": "CTE DB-HE (modificación del RD 450/2022)", "status": "active", "published_date": "2022-06-15", "effective_date": "2022-06-16", "description": null, "author": "Ministerio de Transportes, Movilidad y Agenda Urbana", "source_url": "https://www.boe.es/eli/es/rd/2022/06/14/450", "is_internal": true }]Cada elemento tiene los mismos campos que la respuesta de una versión concreta (ver más abajo), salvo sections.
Errores
Section titled “Errores”| Estado | detail.error | Cuándo |
|---|---|---|
| 404 | not_found | El slug no existe |
GET /api/v1/codes/{slug}/{version}
Section titled “GET /api/v1/codes/{slug}/{version}”GET Detalle de una versión
Devuelve una versión concreta, vigente o no, con su índice de secciones. Sirve para conocer la estructura de una norma y enlazar a sus secciones.
Parámetros de ruta
Section titled “Parámetros de ruta”| Parámetro | Tipo | Descripción |
|---|---|---|
slug | string | Identificador de la normativa. Ej.: cte-db-he |
version | string | Identificador de la versión, tal como aparece en documents[].version. Ej.: 2022 |
Ejemplo de petición
Section titled “Ejemplo de petición”GET /api/v1/codes/cte-db-he/2022Authorization: Bearer sk-normatia-...Respuesta 200
Section titled “Respuesta 200”Ejemplo abreviado, con valores ilustrativos:
{ "slug": "cte-db-he", "version": "2022", "title": "CTE DB-HE (modificación del RD 450/2022)", "status": "active", "published_date": "2022-06-15", "effective_date": "2022-06-16", "description": null, "author": "Ministerio de Transportes, Movilidad y Agenda Urbana", "source_url": "https://www.boe.es/eli/es/rd/2022/06/14/450", "is_internal": true, "sections": [ { "slug": "he-0", "title": "Sección HE 0. Limitación del consumo energético", "order": 1 }, { "slug": "he-1", "title": "Sección HE 1. Condiciones para el control de la demanda energética", "order": 2 } ]}Campos de respuesta
Section titled “Campos de respuesta”| Campo | Tipo | Descripción |
|---|---|---|
slug | string | Identificador de la normativa |
version | string | Identificador de esta versión |
title | string | Título de esta versión |
status | string | active, repealed, draft o in_progress |
published_date | string | null | Fecha de publicación (YYYY-MM-DD) |
effective_date | string | null | Fecha de entrada en vigor (YYYY-MM-DD) |
description | string | null | Descripción de esta versión |
author | string | null | Organismo emisor |
source_url | string | null | URL de la fuente oficial |
is_internal | boolean | true si el texto de esta versión está curado a mano por Normatia (en /v1, curated). false si está convertido de forma automática o no tiene texto |
sections | object[] | Índice de secciones, en orden |
sections[].slug | string | Identificador de la sección (el ancla que usa la web) |
sections[].title | string | Título de la sección |
sections[].order | integer | Posición en el índice |
Las secciones no traen texto: solo identificador, título y orden.
Errores
Section titled “Errores”| Estado | detail.error | Cuándo |
|---|---|---|
| 404 | not_found | El slug o la versión no existen |