Cambios
Cambios
Section titled “Cambios”Lo que cambia en la API y en el servidor MCP, lo más reciente primero. Si un cambio altera lo que ya respondía una ruta, la entrada lo dice, con lo que respondía antes. Las retiradas de rutas van en su apartado, al final.
| Fecha | Qué cambia |
|---|---|
| 2 de noviembre de 2026 | SDK de TypeScript 1.3.0 en npm, con los métodos de /v1: getParcel, findParcelsAtPoint, getPlace, findPlaces, listLayers, getCoverage, listRegulations, getRegulation, getRegulationContents, getRegulationSection, getMe, getUsage, listKeys, revokeKey y getSandbox. Primera versión del SDK de Python, 0.1.0 en PyPI, con un cliente síncrono y otro asíncrono. Los dos se publican desde github.com/normatia/normatia con certificado de procedencia. El servidor MCP, en el MCP Registry como com.normatia/mcp (versión 1.1.0) |
| Noviembre de 2026 | Permisos por clave: data, ask y mcp, que se eligen al crearla. Una ruta o herramienta sin su permiso responde 403 insufficient_scope. En el OAuth del MCP, el usuario puede no dar las consultas. GET /v1/me y GET /v1/keys traen scopes. Las claves de antes tienen los tres |
| Noviembre de 2026 | El servidor MCP pasa de tres herramientas a once: las de datos (find_parcel, get_parcel, get_place, search_regulations, get_regulation_contents, read_regulation_section, get_usage), con el mismo JSON que la API en structuredContent, y ask acepta un municipio (place) o una parcela (parcel) sin proyecto, espera como mucho 45 s y deja el resto para get_answer. Los errores llegan como isError con su código. El token de OAuth dura una hora y se renueva con refresh_token; las aplicaciones conectadas se ven y se desconectan en Mi cuenta |
| Noviembre de 2026 | Claves de prueba (sk-normatia-test-): las crea cualquiera, sin la API activada, y responden con el entorno de pruebas. GET /v1/sandbox da la lista de las parcelas de prueba. GET /v1/me y GET /v1/keys dicen el modo de cada clave (mode) |
| Noviembre de 2026 | Nuevas rutas GET /v1/places (buscar un municipio, una provincia o una comunidad) y GET /v1/places/{place} (el lugar y, en un municipio, sus datos técnicos con la norma de donde sale cada uno) |
| Noviembre de 2026 | Nuevas rutas GET /v1/regulations (la normativa: catálogo, versiones, índice y texto de cada sección, y si el texto está curado a mano), GET /v1/layers y GET /v1/coverage (las capas con sus fuentes y lo cargado en cada municipio) |
| Noviembre de 2026 | Nuevas rutas GET /v1/parcels/{ref} (la parcela por su referencia catastral, con sus afecciones, planeamiento, edificación, inmuebles y geometría) y GET /v1/parcels?lat=&lon= (las parcelas de un punto) |
| Noviembre de 2026 | La API y el servidor MCP se activan por organización, cada uno por su lado. Una clave sin la API activada recibe 403 api_not_enabled, y en el MCP, 403 mcp_not_enabled. Antes bastaba con un plan de pago, y sin él la respuesta era 403 plan_required |
| Noviembre de 2026 | Una clave pertenece a una organización y solo ve los proyectos de esa organización. El consumo se cuenta a esa organización |
| Noviembre de 2026 | Rutas nuevas en /v1: GET /v1/me, GET /v1/usage, GET /v1/keys y DELETE /v1/keys/{key_id}. Sus errores van en formato RFC 9457 |
| Noviembre de 2026 | Cada respuesta lleva X-Request-Id: el que mande el cliente (de 8 a 64 letras, números, puntos, guiones o guiones bajos) o uno nuevo. Las de las rutas con clave llevan además RateLimit-Limit, RateLimit-Remaining y RateLimit-Reset. Un 429 trae Retry-After |
| Noviembre de 2026 | Un error interno (500) y un cuerpo demasiado grande (413) responden en JSON con el formato de siempre (detail.error), en lugar de texto plano y de {"error": "PAYLOAD_TOO_LARGE"} |
| Noviembre de 2026 | POST /api/v1/verify responde 502 llm_unavailable, sin gastar cupo, si el modelo de lenguaje falla o no da una respuesta válida. Antes respondía 500 o un 200 con undetermined |
| Noviembre de 2026 | La referencia completa de la API, generada de su esquema OpenAPI, en /referencia/ |
| Noviembre de 2026 | El servidor MCP pide permiso antes de conectar un asistente con OAuth, y solo vuelve a destinos conocidos (Claude, ChatGPT, VS Code y aplicaciones locales) |
Retiradas anunciadas
Section titled “Retiradas anunciadas”Ninguna por ahora. Cuando una ruta vaya a retirarse, responderá con las cabeceras Deprecation y Sunset con la fecha, y aparecerá aquí.