Factur-X & ZUGFeRD, explained: one PDF that is also a structured invoice
Factur-X (France, by FNFE-MPE) and ZUGFeRD (Germany, by FeRD) are not two formats — they are the same one. From ZUGFeRD 2.1 / Factur-X 1.0 onward the two are technically identical and interoperable: a PDF/A-3 file with a structured EN 16931 XML invoice embedded inside it. A person opens the PDF and reads it; a system opens the same file and parses the XML. That is the whole idea of a hybrid e-invoice.
Why “hybrid”
A pure structured invoice (UN/CEFACT CII or OASIS UBL XML) is perfect for machines and unreadable to people. A plain PDF is the opposite. Factur-X / ZUGFeRD carries both in one file: the visible PDF is a normal-looking invoice, and attached to it is factur-x.xml — the same data as EN 16931 CII XML. This works because PDF/A-3 (ISO 19005-3), the archival PDF standard, explicitly permits arbitrary embedded files. The embedded XML, not the rendered pixels, is the legally meaningful part.
The embedded file is named factur-x.xml in ZUGFeRD 2.x and Factur-X (older ZUGFeRD 1.0 used ZUGFeRD-invoice.xml); the XRECHNUNG profile uses xrechnung.xml.
The profiles, least to most data
A Factur-X / ZUGFeRD file declares a profile — how much structured data the XML actually carries:
- MINIMUM and BASIC WL — header- and total-level data only (a booking aid). These are not complete invoices under EN 16931 and generally do not satisfy a structured-invoice obligation on their own.
- BASIC — line items included, a restricted but EN 16931-conformant subset.
- EN 16931 (historically called COMFORT) — the full EN 16931 semantic core. This is the profile most mandates expect.
- EXTENDED — EN 16931 plus additional business terms for richer cross-industry use.
- XRECHNUNG (ZUGFeRD 2.1.1+) — carries the German XRechnung CIUS, the stricter national rule subset, inside the hybrid container.
Factur-X / ZUGFeRD vs XRechnung vs plain CII/UBL
They are layers, not rivals. EN 16931 is the European semantic standard (the meaning of the fields). CII and UBL are two XML syntaxes that express it. XRechnung is Germany’s CIUS — a stricter national tightening of EN 16931, usually delivered as standalone XML with no PDF wrapper. Factur-X / ZUGFeRD takes the EN 16931 CII XML and wraps it inside a PDF/A-3. France accepts Factur-X; Germany accepts ZUGFeRD (EN 16931 profile and up) as well as XRechnung. Because both ride on EN 16931, one well-formed document travels the Franco-German corridor.
Generate one from JSON
Slipstack turns the same JSON you already use for PDF invoices into a Factur-X hybrid PDF — the PDF/A-3 with the CII XML embedded — or standalone CII XML if your buyer wants pure structured data.
// Factur-X / ZUGFeRD hybrid PDF (PDF + embedded EN 16931 CII XML)
const res = await fetch("https://slipstack.dev/api/v1/einvoice", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SLIPSTACK_KEY}`, // Pro plan
"Content-Type": "application/json",
},
body: JSON.stringify({
options: { format: "facturx-pdf" }, // or "xrechnung-cii" for standalone XML
data: {
from: {
name: "Atelier Lumiere SARL",
countryCode: "FR", // required for e-invoices
vatId: "FR32123456789", // required when taxRate > 0
address: "12 Rue de la Roquette",
city: "Paris", postalCode: "75011",
},
to: { name: "Müller Bau GmbH", countryCode: "DE", vatId: "DE811569869" },
number: "FX-2026-0042",
date: "2026-09-02",
currency: "EUR",
items: [{ description: "Conseil / Beratung", quantity: 8, unitPrice: 120 }],
taxRate: 20,
},
}),
});Validate before you send — free, no account
Whether you build the XML with Slipstack or your own code, paste or upload the CII (or UBL) into the free EN 16931 / XRechnung core validator — up to 20 checks a day, no signup. Scope, stated plainly: it checks the EN 16931 core schematron (ConnectingEurope release v1.3.16). It does not check the KoSIT XRechnung CIUS or Peppol BIS rules, which are stricter.
What Slipstack is — and is not
Slipstack generates and validates the e-invoice document (the Factur-X / ZUGFeRD PDF and its CII XML). It is not a PDP / Peppol access point: it does not transmit invoices, exchange them with your buyers, or report data to a public portal. You pick a registered platform for transmission and e-reporting — Slipstack produces and checks the compliant file that flows through it.
Mandate context by country: France e-invoicing mandate · Germany e-invoicing mandate.
Generate a Factur-X / ZUGFeRD invoice from one JSON call
EN 16931 CII embedded in a PDF/A-3, or standalone XML. Validate the core rules for free first.