Skip to content

ZUGFeRD, XRechnung or Peppol: which format do you need?

Three names, one standard. Once you know the differences, you choose correctly in seconds, and most of the time Quittio chooses for you.

Formats15 Oct 2026 · about 9 minutes

In short

For businesses in Germany, ZUGFeRD in the EN 16931 profile is the most convenient choice: a readable PDF with embedded XML. German authorities require XRechnung with a Leitweg-ID. Peppol is a delivery network, mainly for recipients abroad who are registered there. Consumers, small invoices up to €250 and customers outside the EU get a regular PDF. Quittio makes this choice automatically.

What the three have in common

All three are based on the European standard EN 16931. It defines what an electronic invoice contains: seller, buyer, lines, VAT, totals, payment. Every field has a number, such as BT-1 for the invoice number or BT-10 for the buyer reference.

Technically there are two notations (syntaxes) for the same data: CII (Cross Industry Invoice) and UBL (Universal Business Language). The formats differ in the syntax they use, whether a PDF is included and which additional rules apply.

FormatWhat it isTypical recipient
ZUGFeRD / Factur-XPDF/A-3 with embedded CII XML. People read the PDF, software reads the XML. ZUGFeRD (Germany) and Factur-X (France) are the same standard.Businesses
XRechnungThe German standard for public buyers: XML only, in CII or UBL, with additional German rules (BR-DE)German authorities
Peppol BIS Billing 3.0UBL XML delivered over the Peppol network, an international network for e-invoicesBusinesses and authorities connected to Peppol
CII, UBLPlain XML in either syntaxRecipients that ask for exactly that
PDFA PDF without XML (PDF/A-3 for archiving)Consumers, small invoices, countries without a mandate

The decision in one table

What matters is who receives the invoice. For a seller in Germany:

Your customerFormatWhy
Business in GermanyZUGFeRD (EN 16931)An e-invoice under German VAT law and a readable PDF
German public authorityXRechnung (CII)Required by public buyers; the Leitweg-ID goes into the buyer reference
ConsumerPDFNo e-invoicing mandate
Small invoice up to €250 grossPDFSmall invoices are exempt (sec. 33 UStDV)
Business in another EU countryZUGFeRD (EN 16931)Readable PDF with standard XML
Business reachable via PeppolPeppol BISDelivery over the Peppol network
Customer outside the EUPDFNo EU rules

Businesses in Germany: ZUGFeRD

For invoices to businesses in Germany, XRechnung and ZUGFeRD from version 2.0.1 count as e-invoices, ZUGFeRD in the profiles BASIC, EN 16931, EXTENDED and XRECHNUNG. Both formats are allowed. ZUGFeRD has a practical advantage: recipients who do not process invoices automatically yet can simply read the PDF.

Quittio uses the EN 16931 profile, the complete standard. The smaller profiles MINIMUM and BASIC WL are not enough; the guide ZUGFeRD profiles explained explains why.

XRechnung to businesses?

That works too. Some businesses prefer plain XML because their accounting software imports it directly. If in doubt, ask what your customer processes and set the format accordingly.

German authorities: XRechnung with Leitweg-ID

Public buyers in Germany require XRechnung. Every authority has a Leitweg-ID, its routing address for invoices. It goes into the invoice as buyer reference (BT-10). If it is missing, Quittio reports rule BR-DE-15.

Quittio recognises authorities by a valid Leitweg-ID in the buyer reference or an electronic address with scheme 0204 and then chooses xrechnung-cii automatically. XRechnung also requires electronic addresses for seller and buyer, a seller contact and payment instructions.

Peppol: a network, not a domestic file format

Peppol is first of all a delivery network. Participants are reachable through a Peppol ID; invoices travel via certified access points. The file format inside is Peppol BIS Billing 3.0, UBL according to EN 16931 with its own rules.

Peppol is not mandatory in Germany. It becomes relevant when customers abroad receive invoices via Peppol. Quittio creates the valid file; your access point provider handles delivery. A dedicated package for sending (quittio/peppol) is on the roadmap.

For Quittio to choose Peppol automatically, pass a lookup that checks whether the buyer is reachable in the network. Quittio does not ship a lookup service of its own:

bootstrap.php
use Quittio\Core\Data\Party\BuyerParty;
use Quittio\Core\Formats\DefaultFormatResolver;
use Quittio\Core\Quittio;
use Quittio\Country\DE\CountryDE;

$quittio = Quittio::create($config, [new CountryDE], formatResolver: new DefaultFormatResolver(
    defaultProfile: 'en16931',
    autoUpgradeProfile: true,
    peppolLookup: fn (BuyerParty $buyer): bool => $directory->isRegistered($buyer->electronicAddress),
));

Consumers, small amounts, abroad

  • Consumers: no e-invoicing mandate. Quittio creates a PDF without XML.
  • Small invoices up to €250: exempt. Mark the invoice with ->smallAmount() and a PDF is created.
  • Customers outside the EU: no EU rules, so a PDF.
InvoiceController.php
$result = Quittio::invoice()
    ->buyer($customer)
    ->line('Coffee', netPrice: '3.50')
    ->smallAmount()            // ≤ 250 €
    ->render();                // → pdf

How Quittio chooses automatically

Without a format, Quittio decides from data you provide anyway: the countries of seller and buyer, whether the buyer is a consumer, and the buyer reference. In this order:

  1. Domestic invoice with a country rule: in Germany a Leitweg-ID leads to XRechnung, a marked small invoice to PDF.
  2. Buyer reachable via Peppol (only with a lookup): Peppol.
  3. Consumer: PDF.
  4. Other domestic invoices: ZUGFeRD with the EN 16931 profile.
  5. Cross-border within the EU: the buyer’s country pack rules first, otherwise ZUGFeRD.
  6. Seller or buyer outside the EU: PDF.

The result tells you what Quittio chose, or you can ask beforehand with prepare():

InvoiceService.php
$result = Quittio::make($invoice)->render();       // no format: automatic choice
$result->format();                                 // "zugferd"
$result->profile()?->key();                        // "en16931"

$prepared = Quittio::make($invoice)->prepare();    // the same decision, without rendering
$prepared->format();

Setting a format yourself

If a customer requires a specific format, name it. Every format has its default profile. Several formats from one calculation are possible too, e.g. ZUGFeRD for sending and XRechnung for the customer’s archive:

InvoiceService.php
$result = Quittio::invoice()
    ->buyer($customer)
    ->buyerReference('04011000-12345-03')          // Leitweg-ID, mandatory for XRechnung
    ->line('Consulting', netPrice: '120.00')
    ->render('xrechnung-cii');

// for an invoice you built before
$result = Quittio::make($invoice)->format('peppol')->render();

// several formats, one calculation
$result = Quittio::make($invoice)->formats(['zugferd', 'xrechnung-cii'])->render();
$result->as('xrechnung-cii')->xml();

To use the same format for every invoice, set defaults.format in config/quittio.php. The default null means automatic choice.

Frequently asked questions

Is ZUGFeRD or XRechnung better?

Both are valid e-invoices. ZUGFeRD is more convenient for businesses because a readable PDF is included. German authorities require XRechnung.

Do I need to support Peppol?

Not in Germany. Peppol pays off when customers abroad receive invoices over the Peppol network. Quittio creates the file; an access point handles delivery.

Can I send a customer several formats?

Yes. formats([…]) creates several formats from the same calculation. Make sure it is clear which document is the invoice.

What about invoices to private customers?

There is no e-invoicing mandate for consumers. Quittio creates a PDF, optionally with embedded XML.

How does Quittio recognise an authority?

By a valid Leitweg-ID in the buyer reference (BT-10) or an electronic address with scheme 0204.

Not sure which format?

The format finder gives you the answer in two clicks, with matching code.