One API for every EU format: why national coverage matters
If you only ever ship to one EU country, e-invoicing is a solved, well-documented problem. The trouble starts the moment a second country joins the list — because each one arrived on its own schedule, with its own format, and its own idea of how an invoice becomes "official".
The mandates aren't aligned
A quick snapshot of where things actually stand:
- Italy — mandatory for domestic B2B/B2C since 2019, via FatturaPA and the SDI clearance platform. The oldest and most mature of the bunch.
- Germany — B2G (public sector) live since November 2020 via XRechnung; B2B issuance mandatory in stages from 2027 (€800k+ turnover) and 2028 (everyone).
- France — receiving mandatory for every business from September 2026; issuing phased from September 2026 (large/mid) to September 2027 (small), through certified Plateforme Agréée platforms.
- Poland — KSeF/FA_VAT mandatory for large taxpayers from 1 February 2026, most B2B from 1 April 2026, micro-enterprises from 1 January 2027.
- Romania — B2G and B2B already live via RO_CIUS.
- Spain — phased rollout of Verifactu / Crea y Crece obligations, alongside the existing B2G Facturae format.
Different start dates, different legal bases, and — this is the part that actually costs engineering time — different XML formats and different delivery models. Italy and Poland use centralized clearance (SDI, KSeF); Peppol uses a four-corner network; France uses a directory of certified private platforms; Germany checks format compliance with no central registry at all.
What that fragmentation costs a developer
Concretely, supporting three EU markets well enough to actually pass each country's checks usually means: three different XML vocabularies (or a EN 16931 core plus national extras), three different sets of validation rules to keep current as they change, three different sets of transmission-envelope metadata your invoice doesn't naturally have (a 7-digit SDI recipient code here, a NIP there, a SIREN scheme there), and no single library that covers all of it without gaps.
What "one API" honestly means here
Our own answer to that is a single engine covering both layers, without pretending the layers are the same thing:
- The pan-EU core — UBL/Peppol BIS 3.0, CII, XRechnung, Factur-X, RO_CIUS — where generate, validate, convert and render all work, because they all share the EN 16931 semantic model.
- The national terminal formats — FatturaPA, Facturae, KSeF — where generate and validate work, but convert and render honestly don't apply: these aren't UBL/CII, so there's no lossless path between them and the rest, and we don't pretend otherwise.
That honesty matters more than it sounds — a tool that claims to "convert" a FatturaPA invoice into UBL is either wrong or quietly dropping Italy-specific fields no generic model has room for. See the full breakdown on our formats hub, which groups every format we support along exactly this line.
Where to start
If you're only just starting to support a second or third country: pick the mandate with the nearest deadline for your business, read that format's page (FatturaPA, Facturae, KSeF, XRechnung), and validate a real invoice against it for free before you build anything around it — the pricing page covers what happens once you need to generate or convert at volume.
Keep reading
Want to try this against a real invoice?
Every example above calls the same API you can call today — validate for free, or read the full reference.