Skip to content

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.

FechaQué cambia
2 de noviembre de 2026SDK 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 2026Permisos 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 2026El 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 2026Claves 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 2026Nuevas 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 2026Nuevas 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 2026Nuevas 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 2026La 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 2026Una 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 2026Rutas 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 2026Cada 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 2026Un 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 2026POST /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 2026La referencia completa de la API, generada de su esquema OpenAPI, en /referencia/
Noviembre de 2026El servidor MCP pide permiso antes de conectar un asistente con OAuth, y solo vuelve a destinos conocidos (Claude, ChatGPT, VS Code y aplicaciones locales)

Ninguna por ahora. Cuando una ruta vaya a retirarse, responderá con las cabeceras Deprecation y Sunset con la fecha, y aparecerá aquí.