Skip to content

Location

location abstrae la jerarquía geográfica completa: país → región → provincia → municipio. Es el punto de entrada recomendado para cualquier flujo que dependa de normativa territorial.

Base URL: /api/v1/location

El identificador geográfico es semántico y lleva prefijo de país:

ES → País (España)
ES-AN → Comunidad autónoma (Andalucía)
ES-41 → Provincia (Sevilla)
ES-41091 → Municipio (Mairena del Aljarafe)

Este esquema permite expandir a otros territorios sin cambiar la API:
PT-110300 (Lisboa), CL-13101 (Santiago de Chile).


GET Buscar ubicaciones

Busca en texto libre cualquier entidad geográfica: municipio, provincia, comunidad o país. Es el punto de entrada para developers que no conocen el geo_id de antemano. Insensible a acentos y mayúsculas. Devuelve hasta 50 resultados.

ParámetroTipoRequeridoDescripción
qstringTexto libre. Acepta nombres parciales, con o sin tildes
levelstringNoFiltra por nivel: country | region | province | municipality
ancestor_idstringNoRestringe la búsqueda dentro de una geografía padre (ej. ES-41 para buscar solo en Sevilla)
CabeceraRequeridaDescripción
AuthorizationBearer sk-normatia-xxxxx
GET /api/v1/location/search?q=villanueva&ancestor_id=ES-41
Authorization: Bearer sk-normatia-xxxxx
{
"results": [
{
"geo_id": "ES-41102",
"name": "Villanueva del Ariscal",
"level": "municipality"
},
{
"geo_id": "ES-41903",
"name": "Villanueva del Río y Minas",
"level": "municipality"
}
]
}
CampoTipoDescripción
resultsarrayLista de coincidencias ordenadas por relevancia
results[].geo_idstringIdentificador semántico único
results[].namestringNombre original de la entidad geográfica
results[].levelstringcountry | region | province | municipality

GET Detalle de ubicación

Devuelve el contexto técnico completo de una localización y las normativas que le aplican, resolviendo la herencia territorial (un municipio hereda las normativas de su provincia, comunidad autónoma y país).

Este es el endpoint más importante del flujo: alimenta tanto la interfaz de usuario como el contexto que se pasa al RAG en /verify.

ParámetroTipoDescripción
geo_idstringID semántico de cualquier nivel geográfico. Ej: ES-41091
CabeceraRequeridaDescripción
AuthorizationBearer sk-normatia-xxxxx
GET /api/v1/location/ES-41091
Authorization: Bearer sk-normatia-xxxxx
{
"geo_id": "ES-41091",
"name": "Mairena del Aljarafe",
"level": "municipality",
"ancestors": [
{ "geo_id": "ES-41", "name": "Sevilla", "level": "province" },
{ "geo_id": "ES-AN", "name": "Andalucía", "level": "region" },
{ "geo_id": "ES", "name": "España", "level": "country" }
],
"tech_data": {
"climate_zone": "B4",
"altitude_m": 114,
"seismic_zone": "A",
"radon_zone": 1,
"population": 45823
},
"applicable_codes": [
{
"slug": "cte-db-he",
"title": "CTE DB-HE — Ahorro de Energía",
"normative_scope": "national",
"match_reason": "España"
},
{
"slug": "pgou-mairena",
"title": "PGOU Mairena del Aljarafe",
"normative_scope": "municipal",
"match_reason": "Mairena del Aljarafe"
}
]
}
CampoTipoDescripción
geo_idstringIdentificador semántico
namestringNombre de la localización
levelstringNivel geográfico
ancestorsobject[]Cadena jerárquica completa, de más cercana a más amplia
ancestors[].geo_idstringID del nivel ancestral
ancestors[].namestringNombre del nivel
ancestors[].levelstringNivel geográfico
tech_dataobject | nullDatos técnicos del territorio. Solo presente en municipios
tech_data.climate_zonestringZona climática (ej. B4)
tech_data.altitude_mintegerAltitud en metros
tech_data.seismic_zonestringZona sísmica
tech_data.radon_zoneintegerZona de radón (1–3)
tech_data.populationintegerPoblación del municipio
applicable_codesobject[]Normativas aplicables, resolviendo la jerarquía territorial
applicable_codes[].slugstringSlug de la normativa
applicable_codes[].titlestringTítulo completo
applicable_codes[].normative_scopestringÁmbito de la normativa
applicable_codes[].match_reasonstringNivel geográfico que origina la aplicación
StatusCódigoCondición
404not_foundEl geo_id no existe
403country_mismatchEl geo_id pertenece a un país distinto al de la key