Changelog

Every change that a caller could notice is listed here with its date: a new field, a changed limit, a rate updated after the monthly review, a registry release. Breaking changes do not happen inside v1; they would be a v2 with a notice period.

·

2026-10-30 — Validation records, and the VIES availability history is now kept

  • GET /vat/validate?record=true (and record: true on bulk) keeps the answer as a record on your account for 10 years: its own id, a digest you can store, GET /vat/validations with filters, CSV export and DELETE. On prepaid credits and the monthly plan; reading back stays open to every key.
  • Every VIES availability probe is now kept instead of being deleted after 90 days; the free download still reaches back 90 days.

2026-10-28 — VIES availability record, end-user checks in German and French, the roundup, SDK and MCP packages prepared, a visible review line

  • /vies-status: « Is VIES down? » with the Commission’s check-status table live and a measured record per member state over 24 hours and 30 days (one probe every five to ten minutes, kept 90 days), the outage episodes, an Atom feed of episodes, a CSV download (CC BY 4.0) and the six VIES error codes with what GET /vat/validate returns for each.
  • /tools/vat-number-check and /tools/iban-checker: a result shareable by link (?vat=, ?iban=), a « what this means » block per outcome, the country’s format page in the result; German twins /de/ust-idnr-pruefen and /de/iban-pruefen; French registry pages /fr/api-siret, /fr/verifier-un-siret (with a SIRET checker) and /fr/api-sirene; guides for the VAT numbers VIES does not hold (United Kingdom: HMRC; Switzerland and Norway: the UID register and Enhetsregisteret); German guides « XRechnung prüfen und validieren » and « E-Rechnung API ».
  • Guides « VIES API: REST vs SOAP, errors and limits » and « Validate EU VAT numbers in bulk from a CSV »; the roundup « EU VAT validation APIs compared (2026) » and one alternative page per vendor (vatlayer, Abstract, VATSense, vatcheckapi, viesapi.eu, Stripe Tax), prices read on 2026-10-28 and sourced; the reference pages retitled as references so that one page owns each head term.
  • Developer surfaces prepared: examples and changelogs in the TypeScript and Python SDKs, the MCP registry manifest, a Postman collection and an APIs.guru copy generated from the OpenAPI document (docs/postman, docs/openapi); publication on npm, PyPI, the MCP registry, Postman and APIs.guru is announced here when it happens. The About page lists each profile with its status; the live ones are the Organization’s sameAs.
  • Every page shows its publish date and, when different, its update date; the rates pages show the monthly review with its last and next dates (next review 2026-11-24); /vat-rates/rates.csv serves the rates table as a public CSV, the first distribution of the rates Dataset. When the maintainer’s name is set, it is the author of every article.

2026-10-28 — E-invoices: create XRechnung, ZUGFeRD / Factur-X and Peppol BIS, validate against the official rules, parse

  • POST /einvoice/create (20 calls): invoice JSON in, the file out: XRechnung 3.0.2 (UBL 2.1 or CII D16B), ZUGFeRD 2.x / Factur-X 1.0 profile EN 16931 (PDF/A-3b with factur-x.xml), Peppol BIS Billing 3.0 with the Belgian rules. Document-level allowances and charges, EU reverse charge (AE) and intra-Community supplies (K), credit notes and corrected invoices, up to 500 lines. The file comes back with its own check (Veriport-Validation header, or ?envelope=json); Idempotency-Key replays the same file without a second charge and without storing it.
  • Nothing is dropped silently: every field is written or refused with 422 einvoice_unsupported naming the feature and its path; a broken rule is 422 einvoice_invalid with the rule ids. New problem codes einvoice_unsupported, einvoice_invalid, einvoice_unreadable (all 422, never counted).
  • POST /einvoice/validate (5 calls, anonymous allowed on the daily allowance): the XML schema and the published CEN 1.3.16, XRechnung 3.0.2 and Peppol BIS 3.0.21 rules, run in-process, rule ids and messages as published. POST /einvoice/parse (5 calls): a received e-invoice back into the create model, with what the JSON leaves out, or a readable PDF (?as=pdf).
  • Evidence: every sample written through the API went through KoSIT (XRechnung and Peppol configurations), veraPDF and Mustang, all accepted; our validator names the same rules as KoSIT on every file, broken documents included (the table is on /einvoice-api).
  • Free tools: /tools/xrechnung-pruefen (German), /tools/valider-factur-x (French), /tools/peppol-validator, /tools/einvoice-viewer; the product page /einvoice-api; five guides; the TypeScript and Python SDKs gain createEInvoice, validateEInvoice, parseEInvoice, the MCP server validate_einvoice.

2026-10-28 — Free tools, 143 country pages, product pages, Markdown twins, the agent surface

  • Free tools on the anonymous allowance: /tools/vat-number-check, /tools/iban-checker, /tools/vat-rates.
  • One page per VAT-rates row, VAT number structure and IBAN registry entry (/vat-rates/{country}, /vat-number-format/{country}, /iban-format/{country}), each dated from its row, with hubs and Dataset JSON-LD on the rates family.
  • Product pages for the four lines (/vat-validation-api, /iban-validation-api, /eu-vat-rates-api, /siren-siret-api) with the same call in six languages and the price per 1,000 against the named alternatives; the home repositioned on the EU counterparty check.
  • Every content page has a Markdown twin at its path plus .md; <link rel="alternate"> to llms.txt and to the twin on every page; this changelog as an Atom feed at /changelog/atom.xml; /about names the maintainer; /methodology/vat-rates states how the rates table is verified; /docs/errors has one anchor per problem code, the type of every problem document.
  • Structured data: Organization and WebSite on every page, HowTo dropped, the hreflang en + x-default pair removed.
  • SDK scaffolds for TypeScript (@veriport/sdk, generated from /openapi.json, with MIT offline helpers for VAT structure and IBAN mod-97) and Python (veriport), and a minimal MCP server, in the repository; publication is an owner step and nothing is published yet.

2026-10-28 — Atomic quota, shared rate limits, reconciliation, logs; rates re-read; OSS at 25 calls; fair use instead of an SLA

  • Metering: the monthly allowance check and the credit consumption are one conditional write per charge (no double spend under concurrency).
  • Rate limits are enforced on a shared window across instances; every 429 carries RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset, RateLimit-Policy and Retry-After.
  • Webhook claims that cannot orphan a sale, with an hourly reconciliation cron; structured JSON logs (one line per 4xx/5xx and per webhook, cron and mail event, with the route and the instance).
  • VAT rates re-read: Lithuania reduced rates 5 % and 12 % from 2026-01-01; Bulgaria’s currency is EUR; Ireland restaurant and catering 9 % from 2026-07-01. US sales tax: ZIP prefix 733 is Texas.
  • OSS: POST /vat/oss/return is labelled an OSS return validator (lines only; dispatch-country breakdown not implemented) and now weighs 25 calls (was 100); send an Idempotency-Key header and a retry replays the stored answer for 24 hours without being charged again. New problem code idempotency_conflict (409).
  • Availability: Fair use on every tier: no availability percentage is sold; the availability record is public on the status page and /api/v1/status, and incidents are dated there. The 99.9 % commitment with service credits is withdrawn; /docs/sla is now the availability record page.
  • VAT numbers: check digits verified for all 28 formats (Cyprus, Spain, Ireland, Lithuania and Northern Ireland added); GB is no longer aliased to XI and answers country_unknown with a note pointing at HMRC’s free check.

2026-10-27 — Stripe Managed Payments replaces Lemon Squeezy as the second merchant of record

  • Payments: the second merchant of record next to Paddle is now Stripe Managed Payments (Stripe, through Link, is the seller of record and handles the tax of your country). Checkout still opens with whichever approves the site first and stays closed until then; the free tier is unchanged.

2026-10-24 — OSS returns, French company data, US sales-tax rates; a second merchant of record

  • POST /vat/oss/return: OSS (quarterly) and IOSS (monthly) return lines from JSON rows or a CSV export (English, French or German headers); rates checked against the dated table, VAT reconciled, period boundaries, credit notes and corrections; a labelled generic CSV (?output=csv). 100 calls per accepted return at the time (25 since 2026-10-28); a 422 costs nothing.
  • GET /fr/company/{id} and POST /fr/company/bulk (plan): SIREN, SIRET or French VAT number to a normalised record from the open Recherche d’entreprises API and, with the operator’s key, the INSEE Sirene API; cached 7 days, stale fallback, source and fetchedOn on every answer.
  • GET /us/sales-tax?zip=: state rates for the 50 states and DC; ZIP-level combined averages for OH and WA from the revenue departments’ files; coverage on every answer.
  • New problem codes: upstream_unavailable (503), unprocessable_file (422), payload_too_large (413).
  • Payments: Lemon Squeezy wired as a second merchant of record next to Paddle; checkout opens with whichever approves the site first. Webhook redeliveries are recognised and ignored.
  • Cached VIES answers older than 30 days are now deleted by the hourly purge (they were already never served).

2026-10-24 — v1: three endpoints, free tier, documentation

  • GET /vat/validate with structural pre-check, VIES REST then SOAP, 30-day dated cache on member-state outage, consultation number on the paid tiers.
  • GET /vat/rates and GET /vat/rates/{country}: 27 member states, category hints, rows verified 2026-10-24; next review 2026-11-24.
  • GET /iban/validate: 88 countries from the SWIFT IBAN Registry, mod 97-10, BBAN pattern, bank and branch identifiers, SEPA flag with the October 2025 additions.
  • Bulk variants of both validation endpoints on the monthly plan; /me; /status.
  • Sign-up with double opt-in, keys shown once and stored hashed, disposable domains refused, per-address limits.
  • OpenAPI 3.1 at /openapi.json; RFC 9457 problem documents; llms.txt.
  • Paid checkout closed until the merchant of record approves the site; waitlist open.