Both XRechnung and ZUGFeRD are EN16931-compliant e-invoice formats used in Germany. They're often mentioned in the same breath, but they serve different purposes and suit different workflows. Here's how to decide which one belongs in your integration.
The short answer
- Invoicing a German public-sector buyer (Bund, Länder, municipalities)? Use XRechnung.
- Invoicing a private-sector company and want a human-readable document too? Use ZUGFeRD.
- Building a system-to-system integration with no PDF requirement? Use XRechnung (UBL or CII).
XRechnung: pure XML, machine-first
XRechnung is a pure XML format. There is no human-readable component — the invoice is a structured data file. It exists in two XML syntaxes:
- UBL 2.1 — the default for most tooling and the PEPPOL network
- CII (UN/CEFACT) — also valid; some German ERP systems prefer it
XRechnung version 3.0 (current) adds the BT-24 specification identifier urn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_3.0 and tightens several Schematron rules around Leitweg-ID validation.
ZUGFeRD: PDF with embedded XML
ZUGFeRD wraps the same structured XML inside a PDF/A-3 attachment. The PDF is human-readable in any viewer; the embedded factur-x.xml file carries the machine-readable data. This makes ZUGFeRD ideal when your invoices need to be readable by both humans (accounts payable teams) and machines (ERP systems).
ZUGFeRD ships in five profiles ranked by data richness:
- Minimum — 6 mandatory fields, display only
- Basic WL — adds payment terms
- Basic — adds line items
- EN16931 — full compliance, equivalent to XRechnung data model
- Extended — superset with additional German trade fields
For most B2B use cases, EN16931 profile is the right choice — it maps 1:1 to XRechnung semantics.
Factur-X: same thing, French name
Factur-X is the French standardisation of ZUGFeRD 2.x. The data model is identical; only the filename convention differs (factur-x.xml vs ZUGFeRD-invoice.xml in older versions). If you're selling to French companies, use Factur-X. xingen treats both as the same format family.
Choosing for your integration
If you're building an API integration, the deciding factor is usually your customer's receiving system. Most German ERP procurement modules accept both, but public-sector e-procurement portals (OZG-RE, PEPPOL access points) require XRechnung specifically. When in doubt, generate XRechnung — it's the more interoperable of the two for automated processing.
The xingen Formats page lists all supported input/output combinations and the full conversion matrix.