Verify
POST /api/v1/verify
Section titled “POST /api/v1/verify”POST Verificar cumplimiento normativo
Recibe un elemento constructivo con su parámetro y valor, busca la normativa aplicable mediante búsqueda semántica y devuelve un resultado estructurado de cumplimiento con citas trazables.
El RAG determina automáticamente la dirección del límite (máximo, mínimo, igualdad). El caller solo proporciona el valor que quiere verificar. El contexto del proyecto se expresa en texto libre — no hay catálogo de campos ni esquema predefinido.
Cabeceras
Section titled “Cabeceras”| Cabecera | Requerida | Descripción |
|---|---|---|
Authorization | Sí | Bearer sk-normatia-xxxxx |
Content-Type | Sí | application/json |
Request body
Section titled “Request body”| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
element | string | Sí | Elemento constructivo o instalación a verificar (texto libre, máx. 500 car.) |
parameter | string | Sí | Parámetro o requisito que se comprueba (texto libre, máx. 200 car.) |
value | number | Sí | Valor del proyecto a verificar |
unit | string | Sí | Unidad del valor (ej. W/m²K, lux, dB) |
geo_id | string | Sí | ID geográfico del municipio (ej. ES-41091) |
codes | array | null | No | Normativas concretas contra las que verificar. Si null, usa todas las aplicables al geo_id |
codes[].slug | string | Sí (en el item) | Slug de la normativa |
codes[].version | string | null | No | Versión concreta. Si se omite, usa todos los documentos active |
building_use | string | null | No | Uso del edificio (texto libre, opcional) |
Ejemplos de request
Section titled “Ejemplos de request”Verificación numérica — transmitancia térmica:
POST /api/v1/verifyAuthorization: Bearer sk-normatia-xxxxxContent-Type: application/json{ "element": "Fachada de ladrillo cara vista", "parameter": "transmitancia térmica", "value": 0.35, "unit": "W/m²K", "geo_id": "ES-41091", "building_use": "Residencial unifamiliar", "codes": [ { "slug": "cte-db-he" } ]}Consulta con versión histórica concreta:
{ "element": "Fachada de ladrillo cara vista", "parameter": "transmitancia térmica", "value": 0.38, "unit": "W/m²K", "geo_id": "ES-41091", "codes": [ { "slug": "cte-db-he", "version": "2019" } ]}Sin acotar normativas — usa todas las aplicables al municipio:
{ "element": "Cubierta plana no transitable", "parameter": "transmitancia térmica", "value": 0.30, "unit": "W/m²K", "geo_id": "ES-28079"}Respuesta 200
Section titled “Respuesta 200”Ejemplo — resultado conforme:
{ "is_compliant": true, "result_status": "compliant", "element": "Fachada de ladrillo cara vista", "parameter": "transmitancia térmica", "provided_value": 0.35, "limit_value": 0.41, "unit": "W/m²K", "margin": 0.06, "conditions": [], "sources": [ { "code_slug": "cte-db-he", "version": "2022", "section_title": "HE 1 Tabla 3.1.1.a — Transmitancia límite fachadas", "content_excerpt": "Para la zona climática B4, la transmitancia máxima en fachadas es 0,41 W/m²K." } ], "geo_context": { "geo_id": "ES-41091", "name": "Mairena del Aljarafe", "climate_zone": "B4" }, "warnings": []}Ejemplo — resultado condicional:
{ "is_compliant": true, "result_status": "conditional", "element": "Aparcamiento subterráneo", "parameter": "sistema de extracción de humos", "provided_value": 1, "limit_value": null, "unit": "boolean", "margin": null, "conditions": [ "El caudal de extracción debe ser ≥ 150 l/s por plaza según CTE DB-SI 3.", "El sistema debe disponer de detector de CO con activación automática por encima de 50 ppm." ], "sources": [ { "code_slug": "cte-db-si", "version": "2022", "section_title": "SI 3 — Evacuación de ocupantes", "content_excerpt": "Los aparcamientos de más de 5 plazas dispondrán de un sistema de extracción mecánica..." } ], "geo_context": { "geo_id": "ES-28079", "name": "Madrid", "climate_zone": "D3" }, "warnings": []}Campos de respuesta
Section titled “Campos de respuesta”| Campo | Tipo | Descripción |
|---|---|---|
is_compliant | boolean | true si el valor cumple el límite normativo |
result_status | string | Estado del resultado (ver tabla más abajo) |
element | string | Eco del elemento del request |
parameter | string | Eco del parámetro del request |
provided_value | number | Eco del valor del request |
limit_value | number | null | Límite normativo cuantificable encontrado. null en verificaciones booleanas o undetermined |
unit | string | Eco de la unidad del request |
margin | number | null | limit_value − provided_value. Positivo = cumple |
conditions | string[] | Condiciones adicionales que aplican aunque el resultado sea compliant. Vacío si no las hay |
sources | object[] | Bloques normativos usados para determinar el cumplimiento |
sources[].code_slug | string | Slug de la normativa de origen |
sources[].version | string | null | Versión concreta del documento |
sources[].section_title | string | null | Sección o tabla específica donde se encuentra el límite |
sources[].content_excerpt | string | null | Fragmento del texto normativo relevante |
geo_context | object | null | Contexto geográfico resuelto |
geo_context.geo_id | string | ID geográfico |
geo_context.name | string | Nombre de la localización |
geo_context.climate_zone | string | null | Zona climática extraída del tech_data |
warnings | string[] | Avisos no bloqueantes sobre limitaciones de la respuesta |
Estados de result_status
Section titled “Estados de result_status”| Valor | Significado |
|---|---|
compliant | El valor cumple el límite normativo sin condiciones adicionales |
conditional | El valor está dentro del límite pero existen condiciones adicionales que también deben cumplirse |
non_compliant | El valor supera o incumple el límite normativo |
undetermined | No se encontró un límite normativo para este parámetro y contexto en las fuentes disponibles |
Errores
Section titled “Errores”| Status | Código | Condición |
|---|---|---|
| 400 | invalid_code | Un slug de normativa no existe |
| 403 | plan_not_allowed | El plan no tiene api_access |
| 404 | location_not_found | El geo_id no existe |
| 429 | quota_exceeded | Se han agotado los créditos del plan |