Skip to content

Ask — Consulta agéntica

POST /api/v2/ask

Responde preguntas en lenguaje natural sobre normativa de construcción española en el contexto de un proyecto de Normatia.

No es un RAG de un solo disparo: ejecuta el mismo bucle agéntico que el chat de normatia.com. El modelo encadena varias búsquedas con enfoques distintos, lee la memoria y los cálculos guardados del proyecto, consulta los documentos subidos y redacta la respuesta citando cada fuente con marcadores [N] validados contra los bloques realmente recuperados.

Requiere API key en el header Authorization:

Authorization: Bearer sk-normatia-...

La consulta se resuelve siempre sobre un proyecto, que ya tiene configurados el municipio, las normativas aplicables y los documentos. No hay que pasar geo_id ni filtros de normativa: el alcance sale del proyecto.

project_id explícito → proyecto activo del usuario

Si se omite project_id se usa el proyecto activo. Para consultar otro, obtén su identificador en GET /api/v1/projects y pásalo aquí — no hace falta cambiar el proyecto activo, y dos llamadas en paralelo a proyectos distintos no se pisan.

CampoTipoRequeridoDescripción
querystringPregunta en lenguaje natural (1–2000 caracteres)
project_iduuidProyecto sobre el que consultar. Si se omite, el proyecto activo del usuario
{
"query": "¿Cuál es el límite de transmitancia para ventanas en mi proyecto?",
"project_id": "3f8c1a90-5b2e-4d77-9d21-0e5f4a6c8b13"
}
CampoTipoDescripción
answerstringRespuesta generada, con marcadores de cita [N]
sourcesarrayFuentes citadas en la respuesta. El index es el N de cada marcador
projectobjectProyecto contra el que se resolvió la consulta
iterationsintegerRondas de razonamiento que consumió el turno
searchesintegerBúsquedas normativas ejecutadas
CampoDescripción
indexNúmero de la fuente — el N de las citas [N]
citation_typearticle, document, collection o user_document
document_titleTítulo del documento normativo
section_titleTítulo de la sección
block_titleTítulo del bloque o artículo concreto
urlEnlace directo a la sección en Normatia
url_validfalse si el enlace no pudo resolverse
block_idUUID del bloque recuperado

citation_type: "user_document" identifica un documento privado subido al proyecto: no lleva URL pública.

CampoDescripción
project_idIdentificador del proyecto resuelto
geo_idIdentificador geográfico del proyecto
locationMunicipio o territorio del proyecto
{
"answer": "Para tu proyecto en Madrid (zona climática D3), el CTE DB-HE 1 establece un límite de transmitancia de 1,4 W/m²K para huecos [1]. Ese valor es el aplicable a la orientación norte sin corrección adicional [2].",
"sources": [
{
"index": 1,
"citation_type": "article",
"document_title": "CTE DB-HE Ahorro de Energía",
"section_title": "3.1.1 Transmitancia térmica",
"block_title": "Tabla 3.1.1.b-HE1",
"url": "https://normatia.com/es/normativa/cte-db-he/...",
"url_valid": true,
"block_id": "6b1f8c22-...-a41d"
}
],
"project": {
"project_id": "3f8c1a90-5b2e-4d77-9d21-0e5f4a6c8b13",
"geo_id": "ES-28079",
"location": "Madrid"
},
"iterations": 3,
"searches": 2
}

Un turno agéntico encadena varias llamadas al modelo, así que la respuesta tarda bastante más que una búsqueda simple. El servidor acota el turno para que no se dispare:

PresupuestoValor
Rondas de razonamiento6
Búsquedas normativas6
Timeout del turno120 s

Configura el timeout de tu cliente HTTP en 150 segundos o más. Si cortas antes, el turno sigue ejecutándose en el servidor, consume su crédito y nadie recibe la respuesta.

StatusCódigoCondición
400no_active_projectNo se pasó project_id y el usuario no tiene proyecto activo
404project_not_foundEl proyecto no existe o el usuario no tiene acceso
422query vacía o superior a 2000 caracteres, o campos desconocidos en el body
429quota_exceededCréditos del plan agotados
429rate_limit_exceededDemasiadas peticiones por minuto

Si el proyecto no tiene ninguna normativa ni documento seleccionado, la respuesta llega con 200 y un answer que lo explica, sources vacío y iterations: 0 — no se consume crédito.

Cada llamada consume 1 crédito, independientemente de cuántas búsquedas encadene el agente internamente. El endpoint pertenece al grupo intelligence de rate limiting. Consulta los límites en Autenticación.

POST /api/v1/ask era el pipeline RAG anterior: una única búsqueda semántica sobre el proyecto activo, sin herramientas, sin memoria de proyecto y sin cálculos.

Está congelado. Se mantiene para no romper las integraciones B2B que ya lo usan, ya no aparece en el esquema OpenAPI público y se retirará en una versión futura. Su body solo admite query — los campos geo_id, codes y messages que aceptaba antiguamente se eliminaron y ahora devuelven 422.

Migrar es directo: cambia la ruta a /api/v2/ask y sustituye la lectura de geo_context por project. Los objetos de sources[] mantienen index, document_title, section_title y url; pierden code_slug, version y similarity_score, y ganan citation_type, block_title, block_id y url_valid.