Changelog

What's New?

Updates, new features, and improvements.

Subscribe to Updates

Get notified about new releases

Newsletter

September 2026

NewFeature

Converter is live: convert XRechnung, ZUGFeRD and Factur-X in one call

POST /api/v1/invoice/convert takes an existing e-invoice as XML or PDF, detects the source format and returns the target format zugferd, facturx or xrechnung. Fields the target does not carry are listed in conversionWarnings instead of vanishing. The way back from ZUGFeRD to XRechnung fails transparently with the XRechnung rule codes when mandatory data such as BT-10 or the seller contact is missing. Billed like a generate call: one unit against the target format.

Learn More
NewImprovement

Countries and formats now come from the running service, not from hand-written lists

On 15 September the landing was moved to OpenAPI specification 1.4.0. The tables on the Creator, Formats, Validator and OpenAPI pages have since been generated from the response of GET /api/v1/invoice/formats — 37 countries at the time, with the formats the service really offers per country. Before that there were 28 hand-written rows, several of them wrong: Austria with ZUGFeRD instead of UBL, Spain with VeriFactu as a format, Portugal with SAF-T for generation.

Learn More
NewImprovement

New docs: How it works, Attachments, VeriFactu QR, convert recipe

The overview page "How it works" shows every building block in one picture: inbound, invoice data, generate, enrich, convert, dispatch. Newly documented are /api/v1/invoice/attachments and /api/v1/pdf/attachments (embed files into an existing PDF/A-3) and /api/v1/invoice/es/verifactu-qr. The recipe "Convert XRechnung to ZUGFeRD" runs against the real API. On /docs/errors seven rule descriptions were corrected against the XRechnung specification: BR-DE-1, BR-DE-15, BR-DE-17, BR-16, BR-CO-13, BR-S-8 and BR-CL-10 each described a different rule before.

Learn More

August 2026

Feature

New: we tell you before your quota, trial or API key runs out

Until now you learned about a limit when you were already standing at it. That is over: as your organization approaches its monthly quota, a warning goes to the owner — one mail per threshold. The same applies to an ending trial and to an API key about to expire. A failed payment now reaches you as well, not just us; previously it ended in our operations log. Behind this sit five daily runs that watch deadlines and clean up — one of them, the payment provider configuration check, had been unreachable for two weeks. All account mails are localized and branded, and every marketing mail carries an unsubscribe link that works without signing in. What you want to receive is your decision under Settings → Email: one switch, opt-in, revocable at any time.

Security

Account deletion: nothing is left behind — and permissions are checked server-side

The GDPR deletion path is complete and provable. A deletion request is confirmed by mail, the deadline actually expires, and three mails accompany the path: requested, cancelled, completed. Three sets of data that used to survive deletion are now removed with everything else — the two-factor authentication secret, the stored tax authority credentials and the answers from onboarding. To keep it that way, a guard counts the tables instead of working through a hand-maintained list: if a new table holding personal data appears, it is noticed. Second, we corrected an assumption that was never access control: a hidden button has never protected anything. Every route now checks its permission server-side, preferences and queries belong to the signed-in user rather than to a shared cache, and sign-ins via Google are recorded in the login audit again.

Bugfix

Corrected: validation needs an API key and is bound to your quota — and our examples were incomplete

In several places we described validation as freely usable and unrelated to your quota. That was incomplete: validation and the formats endpoints require a valid bearer key — without one they answer 401 — and they are bound to your monthly quota: once it is exhausted, they are refused with 429 as well. The call itself is not metered against the quota. This is corrected on the validator and formats pages, in the banners, badges and feature cards, and in the OpenAPI specifications. Second, the examples in the Quickstart and on the Creator page were not runnable — required fields were missing (countrySpecific.countryCode, subtotal, total, taxSummary, and seller.bankAccount, which EN 16931 requires via BR-61 as soon as a bank transfer is given as a payment method). Anyone who copied them got errors back, and the cause was on our side. Both examples are fixed and checked against the OpenAPI specification. If you built your integration on the old statement, or got stuck on our examples, get in touch and we will look at your case.

Announcement

Premium includes 7,500 API calls — same price, existing accounts keep their quota until 31 Dec 2026

Premium now includes 7,500 API calls per month instead of 20,000. The price stays the same, and the free tier is completely unchanged. Existing paid accounts keep their current quota until 31 December 2026; a period you have already paid for is never changed mid-term. Nothing is switched off above the quota — calls beyond it are billed at €0.01 net per call. The reason: Premium is an off-the-shelf plan, and above a certain size that is the wrong answer — then it is about predictable volume, custom rate limits and, depending on the company, running the service in your own infrastructure. That is what Enterprise is for. Until now that tier was signposted with a threshold that meant essentially nobody; it now starts at roughly 7,500 calls a month, and the calculator on the pricing page reaches beyond Premium.

Feature

PDF editor: headers and footers as bands, group totals and true-to-scale margins

The template editor (V2) gains bands: header and footer sit as their own areas on the sheet, and you drag their height at the divider. Repeating areas now have a group footer and group totals in the properties panel, the matching metrics appear in the variable picker, and multiple total columns can be selected instead of exactly one. Alongside that, a set of scale corrections that together make the difference: block content draws at paper scale instead of 1 pt = 1 px, drag handles factor out the zoom, and margins are read and displayed in their own unit — pt stays pt. The preview can render server-side and therefore shows what the PDF really produces, including header/footer repetition and carry-over across page breaks. New templates inherit measurement system and paper format from the company. And the interface no longer switches between German and English: 42 language leaks are closed, and the editor no longer writes German page names into your data.

July 2026

Feature

Console update: new dashboard, tidier navigation + changelog in the Console

The Console gets a real dashboard: three widgets show today's API calls as a ring, usage per day by call type (today/7/30/90 days), and system activity from the audit log. Plus: a collapsible sidebar with its own settings group, a settings page with inner navigation (including cookie preferences and legal pages), profile picture upload and quick actions via Cmd+K. The conversion page is now a live playground — every convert shows the real REST call with a ready-to-copy curl snippet — and the full changelog is readable right inside the Console, with a jump-to-release rail.

Learn More
Feature

VeriFactu (Spain): registro core, per-organization activation, print obligations in the PDF

Spanish organizations now find VeriFactu in the Console: a page of its own under Settings, visible only where it belongs, with the declaración responsable available to read. Activation happens per organization rather than globally — if you run several tenants, you enable exactly the one that needs it. The registro core sits in the invoice backend, and the Spanish invoice PDF meets the VERI*FACTU print obligations.

Feature

Factur-X as a conversion target format — and the prepaid amount in the API schema (BT-113)

The /convert endpoint now accepts facturx as a targetFormat, alongside zugferd and xrechnung. The target format still resolves to the respective country's generator, so you do not need to know which one that is. In addition, the prepaid amount (prepaidAmount, BT-113) is part of the OpenAPI schema and therefore documented and typed — until now it could be passed but not looked up.

Feature

Major PDF editor update: sample data live in the editor, inline editing + true WYSIWYG

The template editor (V2) now shows real sample data while you design instead of raw placeholders, text can be edited right on the page, and a new cut-off guide warns you before header or footer content would be clipped in the PDF. Plus: a fields outline built from your sample data, rename/duplicate/delete pages, a block context menu, document-wide font sizes and pixel-accurate image sizing — the editor shows what the PDF really renders.

Learn More

June 2026

Feature

Account self-service: change email, transfer ownership + tidier settings

New flows to change your account email address and to transfer account ownership to someone else. Roles and tax-office credentials (gov credentials) are now their own sections in the sidebar instead of tabs – using the full width. Plus: language updates appear immediately after a deploy, no manual browser-cache clearing required.

Feature

ZUGFeRD 2.5 / Factur-X 1.09 + countries & formats automatically from the catalog

The Generate endpoints now also produce ZUGFeRD 2.5 and Factur-X 1.09; you can request a specific version explicitly. The conversion view in the Console also pulls its country and format choices dynamically from the API catalog – 28 countries at the time, with new ones appearing automatically as soon as the API supports them, with no update to wait for.

v1.4.0Feature

PDF via API: render any template + new Editor V2

New endpoint POST /api/v1/pdf/generate renders any PDF template stored in the Console (or sent inline) with your data – not just invoices, but contracts, delivery notes, reports and more. The Console also gets a new block-native template editor (V2) alongside the existing one, with free-form document types and a v1/v2 badge per template.

May 2026

v1.3.0Feature

Team management + public API docs at /docs-full

Console extension: owners/admins invite additional users to the organization via email under /users and manage roles/permissions under /settings/roles (Console routes, not REST API endpoints). Also new: public docs at /docs-full (Scalar UI) and the raw spec at /openapi-full.json – no login, ready to link.

Learn More
v1.3.0Feature

Embed file attachments in PDFs (PDF/A-3 compliant for e-invoices)

New invoice.attachments[] field in the request body of every Generate endpoint embeds arbitrary files (proofs of service, audit reports, T&Cs) – each entry has filename, mimeType, content (Base64) and an optional description. ZUGFeRD/Factur-X invoices retain their PDF/A-3 compliance (correctly wired /AF array + AFRelationship). ~200 MiB cap per attachment (KoSIT-aligned).

Bugfix

ZUGFeRD/Factur-X: CII element ordering fixed

Strict XSD validation surfaced multiple ordering bugs in CII XML generation: DefinedTradeContact before PostalTradeAddress, ExemptionReasonCode after CategoryCode, SEPA direct debit structure, and Factur-X line items before settlement. The test suite now validates generated XML strictly against the official CII/UBL XSDs.

Feature

Full coverage of all 28 countries + new format slots qr-bill and peppol-ubl

14 additional countries (CY/DK/EE/FI/GB/GR/IE/LT/LU/LV/MT/NO/SE/SI) get their own adapters – /api/v1/invoice/{cc}/ubl/generate now responds directly with Peppol BIS 3.0 UBL. Also new: qr-bill for CH (32-line SPC payload), peppol-ubl for PL/PT/RO alongside the national CIUS, and Peppol-BIS UBL on AT/CZ/ES/FR. Several request body fields relaxed to optional.

Learn More
Feature

GDPR account deletion now supports OAuth users

The account deletion dialog hides the password field for OAuth-only users (Google/GitHub/Apple) – the active session serves as proof of identity. Also: dead-end in preview resolved (org checkbox was silently hidden), and the pending banner now shows the deletion date in the UI language (12.06.2026 instead of 06/12/2026).

Feature

6 system PDF templates per country + real Swiss QR-Bill

Instead of a single default invoice, there are now system templates for DE/AT/CH/NL/CZ/BG – each with country-specific labels, locale, and VAT-ID format. The CH template renders a scannable Swiss QR-Bill block at the end of the body. „Insert example“ in the conversion UI now loads country-specific sample invoices in the respective language.

Improvement

NL validator coverage + BT-25 BillingReference in the inbound parser

Five NL-R rules (NL-R-001/002/004/007/008) now run at the JSON validator level, no longer only in KoSIT Schematron – callers receive findings immediately, no XML round-trip required. Additionally, the NL-UBL and DE-CII parsers now correctly hoist the predecessor invoice reference (BT-25) to referencedInvoiceNumber.

Feature

XRechnung 3.0.2 / ZUGFeRD 2.3 full conformance + REST API schema sync

Complete closure of DE conformance gaps: all 86 official KoSIT reference messages validate green, plus support for XRechnung Extension (sub-lines + third-party payments via thirdPartyPayments[]) and the construction sector (§13b/§48 EStG with #FREISTELLUNG# structured note). Cross-country sweep with helper rollout (attachments, CreditNote root, document allowance/charge) across 12 countries, new GR myDATA validator, and CH ZUGFeRD wrapper. REST API schema extended by 8 fields and 3 endpoints.

Learn More

April 2026

Bugfix

PDF editor: logo + divider line bug + DACH mandatory fields

Three PDF bugs from a pilot customer report fixed: logos with inline base64 sources weren't rendering, divider lines overlapped neighbor columns, and EN-16931 mandatory fields blocked the pure PDF render. New fields in the field picker: company register number, register court, managing director, and legal form now flow end-to-end from org settings to PDF.

Improvement

Strict Schematron compliance for all 13 outbound generators

Each country generator (AT/BE/BG/CZ/DE/ES/FR/HU/IT/NL/PL/PT/RO) is now strictly tested against its country validator – validation.errors must be empty. Activation surfaced real generator bugs in BG (schemeID), CZ (duplicate identifier), IT (PIVA prefix), PT, and RO – all fixed in this release.

Bugfix

PDF template ID bug + XRechnung UBL-SR-16 fix

POST /api/v1/invoice/de/zugferd/generate returned HTTP 500 as soon as a templateId was in the request – schema qualification in SQL and result shape fixed. Also: the XRechnung generator emitted two cac:PartyIdentification on AccountingCustomerParty (UBL-SR-16 violation); the VAT ID belongs solely in cac:PartyTaxScheme.

Improvement

Round-trip fidelity: parsers + generators extended for all countries

All 12 parsers and 12 generators extended so that every field from the respective format specification is correctly generated and re-parsed. Previously ~21 fields per format were ignored; now only 3–7 remain (all documented as format-specific limits). Email, article number, GTIN, service period, bank account, and more now flow through the round-trip.

Improvement

Round-trip tests for all 13 supported countries

Systematic round-trip tests (Generate → Validate → Parse) across all 13 countries – 998 tests in total, generated from Excel decision tables via equivalence-class-based fixtures. Validation issues fixed in IT/HU/RO/BG/PT/CH/NL. The countrySpecific schema now accepts country-specific data for every country, not just DE.

Feature

ZUGFeRD 2.4 and Factur-X 1.08 support + sub-line items

New output formats ZUGFeRD 2.4 (DE) and Factur-X 1.08 (FR), selectable in the finalization dialog alongside the existing versions 2.3 / 1.07. New UI for sub-items per invoice line with type selection (items[].lineSubtype: DETAIL/INFORMATION/GROUP) and expand/collapse. All 12 languages updated.

Learn More
v1.1.0Feature

API v1.1.0 – Extended Invoice Fields

New optional fields for complete e-invoices: orderNumber, customerNumber, contractNumber, servicePeriod, paymentMethods (SEPA, direct debit, credit card) and countrySpecific (DE: buyerReference, leitwegId, isKleinunternehmer). Seller/Buyer extended with bankAccount, tradingName, additionalStreet, state and website.

Learn More
v1.1.0Feature

PDF Template System via API

Full control over PDF layout via API: templateId references saved templates, formatOptions.template allows inline BlockTemplates with 9 block types (Text, Table, KeyValue, Columns, Summary, Image, QR Code, Spacer, Line). ZUGFeRD profile selectable via formatOptions.zugferdProfile.

Learn More
v1.1.0Feature

19 Country-Specific Parse Endpoints

In addition to the auto-detect endpoint (/api/v1/invoice/parse), there are now 19 explicit endpoints per country and format – e.g. /de/xrechnung/parse, /at/ebinterface/parse, /ro/efactura/parse. New parse formats: PT (SAF-T), PL (KSeF), RO (eFactura + UBL), BG (UBL).

Learn More
v1.1.0Improvement

Improved Auto-Detection for Parsing

The auto-detect parser now returns a detailed detection object: format, version, country code, confidence score (0–100), detection method (NAMESPACE, ROOT_ELEMENT, CUSTOMIZATION_ID, PROFILE_ID, HEURISTIC) and ambiguity info with alternative countries.

Learn More

February 2026

Announcement

invoice.xhub.io – E-Invoices Without a Line of Code

Now available: invoice.xhub.io – a complete SaaS application for creating, sending and managing e-invoices. No code, no setup. Built on the proven invoice-api.xhub.io platform.

Learn More

December 2025

v1.0.0Feature

Public Beta Launch

invoice-api.xhub is now publicly available! Create XRechnung and ZUGFeRD invoices via REST API.

Learn More

Have feedback or feature requests?

Let us know