Skip to content

Create ZUGFeRD invoices with Laravel

A PDF for people, an XML for accounting, both in one file. ZUGFeRD is Quittio’s default format.

What is ZUGFeRD / Factur-X?

ZUGFeRD (Factur-X in France) is a PDF/A-3 with the invoice embedded as CII XML. People read the PDF, software reads the XML. Both show the same data because Quittio creates them from one data model.

Who is it for?

  • Invoices to businesses in Germany and France
  • Recipients who expect a readable PDF
  • Shops and SaaS products that want one format for everyone

How it works with Quittio

InvoiceService.php
use Quittio\Core\Builder\Party;
use Quittio\Laravel\Facades\Quittio;

$result = Quittio::invoice()
    ->number('RE-2026-0042')
    ->deliveryDate('2026-09-30')
    ->buyer(Party::make('Kunde AG')
        ->vatId('DE987654321')
        ->address('Bahnhofstraße 5', '54321', 'Beispielstadt', 'DE'))
    ->line('Web development', netPrice: '95.00', quantity: 24)
    ->render();                       // ZUGFeRD: PDF/A-3 with embedded XML

$result->pdf();

Checked with: KoSIT validator (EN 16931) for the XML, veraPDF for PDF/A-3b

Sample file: RE-2026-0042.pdf

Profiles and variants

  • MINIMUMnot an e-invoice under German VAT law
  • BASIC WLnot an e-invoice under German VAT law
  • BASIC
  • EN 16931recommended
  • EXTENDED
  • XRECHNUNG

Questions about ZUGFeRD / Factur-X

ZUGFeRD or XRechnung?

For businesses, ZUGFeRD in the EN 16931 profile is usually the most convenient choice because recipients get a readable PDF. German federal authorities require XRechnung.

Which profiles count as an e-invoice?

BASIC, EN 16931, EXTENDED and XRECHNUNG. MINIMUM and BASIC WL contain too little data and do not count as e-invoices in Germany.

Do I have to deal with PDF/A-3?

No. Quittio creates the PDF/A-3b with embedded XML and the required metadata. veraPDF checks it, locally or in CI.

When which invoice becomes mandatory is explained in our guide to the German e-invoicing mandate.