{"specification":"API Commons Change Log","specificationVersion":"0.1","provider":"flatin.pt","url":"https://flatin.pt/api/changelog.json","humanURL":"https://flatin.pt/status/#changelog","entries":[{"date":"2026-10-01","name":"IMT and stamp duty on the higher of the price and the VPT","description":"imt_calculate and POST /api/v1/imt/calculate accept an optional vpt (the valor patrimonial tributário from the caderneta predial, in euros). IMT and stamp duty are charged on the higher of the contract price and the VPT (CIMT art. 12.º n.º 1; Código do Imposto do Selo art. 9.º n.º 4): the new taxable_value_cents is that base, taxable_base says which one it is (price or vpt), and input.vpt_cents echoes the VPT or is null. Without vpt nothing changes in the amounts, and the first note says a higher VPT would raise both taxes. New refusals bad_vpt and not_positive_vpt come with field vpt; too_large can now also come with field vpt. Amounts written with a dot for thousands (250.000 or 123.456,78) are now read as thousands: they used to be read as decimals, so 250.000 was 250 EUR. deed_source now also carries the price list itself: single_act_cents and extra_property_cents, with formatted amounts.","breaking":false,"tags":["rest","mcp","imt","embed"]},{"date":"2026-09-28","name":"Deed and registration: a published price instead of an estimate","description":"notary_estimate_cents used to be 90000 (900 EUR), a mid-range guess with no source behind it. It is now 37500 (375 EUR), the published price of one registration act at the Casa Pronta counter of the Ministério da Justiça, and total_cents falls by the same 52500. The new deed_source field carries the URL and the name of that price list. Read the field as the registration only: the purchase contract at a notary, buying with a mortgage and the agency fee are not in it, and notes now say so. Annual IMI is still not part of total_cents: it is charged on the VPT, not on the purchase price.","breaking":false,"tags":["rest","mcp","imt"]},{"date":"2026-09-24","name":"Google Sheets add-on","description":"FLATIN_IMT, FLATIN_SELO, FLATIN_IMI_RATE and FLATIN_IMI put the same numbers into a spreadsheet cell, over the same keyless API, with answers cached for six hours. The add-on has its own privacy policy page in all seven languages.","breaking":false,"tags":["sheets","open-data"]},{"date":"2026-09-24","name":"Open-source repositories moved to GitLab","description":"GitHub suspended two accounts of ours in a row, so the MCP bridge, WordPress plugin, browser extension, QGIS plugin and Sheets add-on now live at gitlab.com/flatin-pt-group. The MCP Registry entry points there from version 1.0.3.","breaking":false,"tags":["open-source","mcp"]},{"date":"2026-09-24","name":"Glossary of Portuguese property and tax terms","description":"Nineteen terms (IMT, IMI, AIMI, CPCV, caderneta predial, VPT and more) in all seven languages of the site, each with the article of the tax code it comes from, a link to the official source and the date it was checked. Listed in llms.txt.","breaking":false,"tags":["glossary","content"]},{"date":"2026-09-24","name":"Embeddable IMT calculator","description":"Any site can embed the IMT calculator with one script tag: /embed/imt-1.js renders the form and the result into the host page, in the seven languages of the site, without cookies or storage. The credit link lives in the snippet the site owner pastes, never injected by the script.","breaking":false,"tags":["embed","imt"]},{"date":"2026-09-24","name":"Press kit and dataset DOI","description":"A press page for journalists in all seven languages: the findings, charts in PNG and SVG, the methodology and the ready credit line, with every number computed from the published tables. The dataset is archived on Zenodo; its concept DOI 10.5281/zenodo.22935147 is now the identifier in the Dataset markup and is shown on the open-data page.","breaking":false,"tags":["open-data","press","doi"]},{"date":"2026-09-16","name":"Open-source repositories moved","description":"The MCP bridge, WordPress plugin, browser extension and QGIS plugin now live at github.com/devflatinpt (mcp, wp, chrome, qgis). The MCP Registry entry pt.flatin/property-taxes points there from version 1.0.2.","breaking":false,"tags":["open-source","mcp"]},{"date":"2026-09-16","name":"Stamp duty relief for buyers aged 35 or under","description":"imt_calculate (REST and MCP) now applies the Imposto do Selo deduction of art. 7.º-A of the Código do Imposto do Selo (Decreto-Lei n.º 48-A/2024) when buyer_is_young and primary_home are both true: stamp duty is reduced by up to 0.8 % of the first band limit of the young buyers' IMT table. stamp_duty_cents is the amount due after the deduction; the new field stamp_duty_relief_cents shows the deduction. No deduction is applied above the second band of the young buyers' table, following official guidance. Previously stamp duty was charged in full.","breaking":false,"tags":["rest","mcp","imt","stamp-duty"]},{"date":"2026-09-16","name":"IMI rates as GeoJSON and a multi-year CSV","description":"GET /api/v1/imi/rates.geojson returns the IMI rates of all 308 municipalities with municipal boundaries (CAOP2025, Direção-Geral do Território, simplified); year selects a verified past year. GET /api/v1/imi/rates-history.csv returns every verified tax year in one long-format file. A QGIS plugin reads the GeoJSON.","breaking":false,"tags":["rest","imi","open-data","geojson"]},{"date":"2026-09-16","name":"MCP tools declare their behaviour","description":"Every MCP tool has a title and the annotations readOnlyHint (true), destructiveHint (false), idempotentHint (true) and openWorldHint (false). A server card is served at /.well-known/mcp/server-card.json. imi_rate and imi_annual_cost say that municipalities are looked up by their Portuguese name (Lisboa, not Lisbon).","breaking":false,"tags":["mcp","discovery"]},{"date":"2026-09-16","name":"CORS preflight answered","description":"OPTIONS requests to existing /api/* addresses get 204 with CORS headers, so browsers can POST JSON to /api/v1/imt/calculate. Before, the preflight got 405 and browsers dropped the request.","breaking":false,"tags":["rest","cors"]},{"date":"2026-09-16","name":"Discovery documents, status page, English by default","description":"Published an APIs.json index (/.well-known/apis.json), an RFC 9727 api-catalog, an API Onboarding Descriptor, machine-readable plans and rate limits, a Spectral ruleset, security.txt, llms.txt and a live status page (/status/). The OpenAPI schema is also served at /openapi.json. Clients that send no Accept-Language now get the English site.","breaking":false,"tags":["discovery","status","docs"]},{"date":"2026-09-16","name":"Open-source clients","description":"Published the stdio bridge for the MCP server (github.com/devflatinpt/mcp), the WordPress plugin (github.com/devflatinpt/wp) and the Chrome extension (github.com/devflatinpt/chrome). All of them call this API.","breaking":false,"tags":["mcp","wordpress","chrome","open-source"]},{"date":"2026-09-16","name":"MCP server listed in the official MCP Registry","description":"The remote server https://flatin.pt/mcp is published in registry.modelcontextprotocol.io as pt.flatin/property-taxes.","breaking":false,"tags":["mcp","registry"]},{"date":"2026-09-16","name":"All machine answers in English","description":"MCP tool descriptions and results, REST API errors and 429 refusals are in English. The consent text of request_consultation is still returned in the user's language.","breaking":false,"tags":["mcp","rest","i18n"]},{"date":"2026-09-15","name":"Rate limits","description":"Per-address limits on the REST API and the MCP server. A refused request gets HTTP 429 with a Retry-After header.","breaking":false,"tags":["rest","mcp","rate-limits"]},{"date":"2026-09-15","name":"MCP protocol version is checked","description":"Requests declaring an MCP protocol revision the server does not speak get HTTP 400 with the list of supported revisions.","breaking":false,"tags":["mcp"]},{"date":"2026-09-15","name":"IMI rate history","description":"GET /api/v1/imi/rates/{codigo} returns a history field: the municipality's urban rate by tax year and whether it went up, down or stayed.","breaking":false,"tags":["rest","imi"]},{"date":"2026-09-13","name":"Public REST API v1 and MCP server","description":"IMI rates for all 308 municipalities as JSON and CSV, IMT and stamp duty calculation on a purchase, and the MCP tools imt_calculate, imi_rate, imi_annual_cost and request_consultation. No key, no sign-up.","breaking":false,"tags":["rest","mcp","imi","imt"]}]}