---
title: "Create ZUGFeRD invoices with PHP and Laravel · Quittio"
description: "ZUGFeRD and Factur-X with PHP and Laravel: PDF/A-3 with embedded CII XML, profiles from BASIC to EXTENDED, checked with KoSIT and veraPDF."
canonical_url: "https://quittio.dev/en/formats/zugferd"
locale: en
meta:
  "og:description": "ZUGFeRD and Factur-X with PHP and Laravel: PDF/A-3 with embedded CII XML, profiles from BASIC to EXTENDED, checked with KoSIT and veraPDF."
  "og:image": "https://quittio.dev/og/quittio-en.jpg"
  "og:image:alt": "Quittio: Invoices, settled. E-invoicing for PHP and Laravel, with a validated sample invoice."
  "og:image:height": "630"
  "og:image:type": image/jpeg
  "og:image:width": "1200"
  "og:title": "Create ZUGFeRD invoices with PHP and Laravel · Quittio"
  "twitter:image": "https://quittio.dev/og/quittio-en.jpg"
  "twitter:image:alt": "Quittio: Invoices, settled. E-invoicing for PHP and Laravel, with a validated sample invoice."
---

> Index of every page on this site: [llms.txt](https://quittio.dev/llms.txt)

# Create ZUGFeRD invoices with PHP and Laravel

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

[**Get started**](https://quittio.dev/en/docs/getting-started) [**Formats in the docs**](https://quittio.dev/en/docs/formats)

## 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();
```

invoice.php

```
use Quittio\Core\Builder\InvoiceBuilder;
use Quittio\Core\Builder\Party;
use Quittio\Core\Quittio;
use Quittio\Core\Tax\CountryDefaultVat;
use Quittio\Country\DE\CountryDE;

// once at start-up: country pack and default VAT
$quittio = Quittio::create([], [new CountryDE]);
InvoiceBuilder::useDefaultVat(new CountryDefaultVat($quittio->countries()));

$invoice = InvoiceBuilder::make()
    ->seller($company)   // seller and bank account in code
    ->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);

$result = $quittio->make($invoice)->render();   // ZUGFeRD: PDF/A-3 with embedded XML

$result->pdf();
```

Without Laravel you only need quittio/core and quittio/country-de. The complete script is in the guide [E-invoices with plain PHP, no Laravel needed](https://quittio.dev/en/guides/e-invoices-with-php-without-laravel).

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

Sample file: [RE-2026-0042.pdf](https://quittio.dev/samples/RE-2026-0042.pdf)

## Profiles and variants

- **MINIMUM**not an e-invoice under German VAT law
- **BASIC WL**not an e-invoice under German VAT law
- **BASIC**
- **EN 16931**recommended
- **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 your CI. In Quittio’s own CI, veraPDF checks the ZUGFeRD PDFs of all EN 16931 scenarios.

When which invoice becomes mandatory is explained in our guide to the [German e-invoicing mandate](https://quittio.dev/en/e-invoicing-mandate-germany).

```json
{"@context":"https://schema.org","@graph":[{"@id":"https://quittio.dev/en#website","@type":"WebSite","description":"E-invoicing for PHP and Laravel: create, validate, read and archive ZUGFeRD, XRechnung and Peppol invoices.","inLanguage":"en","name":"Quittio","url":"https://quittio.dev/en","publisher":{"@id":"https://quittio.dev/#identity"},"translationOfWork":{"@id":"https://quittio.dev/#website"}},{"@id":"https://quittio.dev/en/formats/zugferd#webpage","@type":"WebPage","dateModified":"2026-10-18","datePublished":"2026-10-15","description":"ZUGFeRD and Factur-X with PHP and Laravel: PDF/A-3 with embedded CII XML, profiles from BASIC to EXTENDED, checked with KoSIT and veraPDF.","name":"Create ZUGFeRD invoices with PHP and Laravel","url":"https://quittio.dev/en/formats/zugferd","breadcrumb":{"@id":"https://quittio.dev/en/formats/zugferd#breadcrumb"},"isPartOf":{"@id":"https://quittio.dev/en#website"},"potentialAction":[{"@type":"ReadAction","target":["https://quittio.dev/en/formats/zugferd"]}],"primaryImageOfPage":{"@id":"https://quittio.dev/#logo"}},{"@id":"https://quittio.dev/#identity","@type":"Organization","description":"Open-Source-Bibliothek für E-Rechnungen in PHP und Laravel (ZUGFeRD, XRechnung, Peppol) und Quittio Managed.","email":"kontakt@niklasforst.de","legalName":"Niklas Forst – Softwareentwicklung","name":"Quittio","url":"https://quittio.dev","founder":{"@type":"Person","name":"Niklas Forst","url":"https://quittio.dev/ueber"},"logo":{"@id":"https://quittio.dev/#logo"},"sameAs":["https://github.com/Quittio/quittio","https://packagist.org/packages/quittio/quittio"]},{"@id":"https://quittio.dev/en/formats/zugferd#article","dateModified":"2026-10-18","datePublished":"2026-10-15","description":"ZUGFeRD and Factur-X with PHP and Laravel: PDF/A-3 with embedded CII XML, profiles from BASIC to EXTENDED, checked with KoSIT and veraPDF.","headline":"Create ZUGFeRD invoices with PHP and Laravel","inLanguage":"en","thumbnailUrl":"https://quittio.dev/og/quittio-en.jpg","@type":["Article","TechArticle"],"author":{"@id":"https://quittio.dev/#/schema/person/1"},"image":{"@id":"https://quittio.dev/#/schema/image/1"},"isPartOf":{"@id":"https://quittio.dev/en/formats/zugferd#webpage"},"mainEntityOfPage":{"@id":"https://quittio.dev/en/formats/zugferd#webpage"},"publisher":{"@id":"https://quittio.dev/#identity"}},{"@id":"https://quittio.dev/en/formats/zugferd#breadcrumb","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","name":"Home","item":"https://quittio.dev/en","position":1},{"@type":"ListItem","name":"Formats","item":"https://quittio.dev/en/formats","position":2},{"@type":"ListItem","name":"ZUGFeRD / Factur-X","position":3}]},{"@id":"https://quittio.dev/en/formats/zugferd#/schema/question/1","@type":"Question","inLanguage":"en","name":"ZUGFeRD or XRechnung?","acceptedAnswer":{"@type":"Answer","text":"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."}},{"@id":"https://quittio.dev/en/formats/zugferd#/schema/question/2","@type":"Question","inLanguage":"en","name":"Which profiles count as an e-invoice?","acceptedAnswer":{"@type":"Answer","text":"BASIC, EN 16931, EXTENDED and XRECHNUNG. MINIMUM and BASIC WL contain too little data and do not count as e-invoices in Germany."}},{"@id":"https://quittio.dev/en/formats/zugferd#/schema/question/3","@type":"Question","inLanguage":"en","name":"Do I have to deal with PDF/A-3?","acceptedAnswer":{"@type":"Answer","text":"No. Quittio creates the PDF/A-3b with embedded XML and the required metadata. veraPDF checks it, locally or in your CI. In Quittio’s own CI, veraPDF checks the ZUGFeRD PDFs of all EN 16931 scenarios."}},{"@id":"https://quittio.dev/#/schema/person/1","@type":"Person","name":"Niklas Forst","url":"https://quittio.dev/ueber"},{"@id":"https://quittio.dev/#logo","@type":"ImageObject","caption":"Quittio","contentUrl":"https://quittio.dev/logo.png","inLanguage":"en","url":"https://quittio.dev/logo.png"},{"@id":"https://quittio.dev/#/schema/image/1","@type":"ImageObject","contentUrl":"https://quittio.dev/og/quittio-en.jpg","inLanguage":"en","url":"https://quittio.dev/og/quittio-en.jpg"}]}
```