Quittio

E-invoicing for Laravel. Quittio creates, validates, reads and renders electronic invoices based on the European standard EN 16931 – ZUGFeRD/Factur-X, XRechnung, UBL and Peppol BIS from one data model.

Get started Formats and profiles


Germany is the first market; everything country-specific (VAT rates, legal texts, XRechnung) lives in country packs, so the core stays country-neutral.

Status: version 0.1, the first release. APIs may still change until version 1.0, and the legal wording of the country packs must be confirmed by a tax adviser.

Packages

Package Purpose
quittio/core Country-neutral core: EN 16931 data model, calculation, profiles, CII and UBL writers/readers, ZUGFeRD/Factur-X PDF/A-3, validation. Usable without Laravel.
quittio/laravel Laravel integration: facade, configuration, Blade templates, commands, testing helpers.
quittio/country-de Country pack for Germany: UStG mandatory fields, tax presets, XRechnung profiles and BR-DE rules, DIN 5008 letter layouts.
quittio/quittio Everything in one package: core, Laravel integration and the country pack Germany.
quittio/managed Managed layer (commercial licence, not released yet): issuer profiles, drafts, gapless numbering, archive with hashes, cancellations and corrections, mail delivery, audit log, retention.

Requirements

  • PHP 8.3 or newer with ctype, dom, gd, libxml, mbstring, xmlwriter, zlib; intl recommended, zip for quittio:schemas:download
  • Laravel 13 (only for quittio/laravel)
  • Optional: Java 17+ for the KoSIT validator, veraPDF or Docker for PDF/A checks, opis/json-schema for JSON input validation

Supported formats

Format Content
zugferd / factur-x PDF/A-3 with embedded CII XML (profiles MINIMUM to EXTENDED, XRECHNUNG)
xrechnung-cii, xrechnung-ubl XRechnung 3.0 as plain XML
cii, ubl Plain CII or UBL 2.1 XML in any profile
peppol UBL according to Peppol BIS Billing 3.0
pdf, html, json PDF without XML, HTML preview, normalised data model

Quick example

use Quittio\Core\Builder\Party;
use Quittio\Core\Enums\UnitCode;
use Quittio\Laravel\Facades\Quittio;

$result = Quittio::invoice()                                     // seller and bank account from config/quittio.php
    ->number('RE-2026-0042')
    ->deliveryDate('2026-09-30')
    ->buyer(Party::make('Kunde AG')                               // or a model: ->buyer($customer)
        ->vatId('DE987654321')
        ->address('Bahnhofstraße 5', '54321', 'Beispielstadt', 'DE'))
    ->line('Web development', netPrice: '95.00', quantity: 24, unit: UnitCode::Hour)
    ->line('Hosting', netPrice: '49.00')                          // quantity 1, VAT 19 % by default
    ->dueInDays(14)
    ->render();                                                   // ZUGFeRD: PDF/A-3 with embedded XML

$result->pdf();
$result->save('invoices', '2026/');
$result->cancel('ST-2026-0001', reason: 'Charged twice');        // the cancellation, rendered

Documentation

New to Quittio? Follow Getting started; new to e-invoicing? Read E-invoicing basics first.

Topic Content
Getting started Installation, your company in the configuration, a first invoice, rendering, cancellation, use without Laravel
E-invoicing basics EN 16931, CII and UBL, ZUGFeRD, XRechnung, Peppol, profiles, rule codes, which format you need, German terms
Examples Complete examples: service invoices, VAT rates, online shops, small businesses, XRechnung, customers abroad, final invoices, cancellations, orders, drafts, reminders, incoming invoices
Building invoices Every builder method: parties, lines, VAT, payment, references, calculation, cancellations, data model
Formats and profiles Output formats, the automatic format choice, embedded files and XMP
Validation What is checked (levels L1 to L7), error messages, KoSIT and veraPDF
Templates and design Logo, colours, texts, partials, own templates, view model, letter layouts, fonts
Quotes and other documents Quotes, order confirmations, delivery notes, proforma invoices, reminders, statements
Reading incoming invoices XML and PDF input, findings, limits
Laravel integration Facade, rendering, storage, queue, events, mail, Blade templates, preview
Configuration Every key of config/quittio.php
Artisan commands All commands and publish tags
Testing Fake, assertions, factories, scenarios
Country packs The German pack: tax presets, rules, XRechnung, reminders; writing a pack
Managed layer Preview of the unreleased package: issuer profiles, customers, numbering, archive, cancellations and corrections, delivery, audit log, immutability, retention
Troubleshooting Common errors with cause and fix
FAQ Sending, the German e-invoicing obligation, Java, temporary files, queued invoices
Field reference Every field of the data model with BT, cardinality and XML paths (generated)
API reference Every public class and method with its parameters and doc comment (generated)
AI assistants llms.txt, the MCP server of this documentation, Laravel Boost guidelines and skill

Licence

Open core: quittio/core, quittio/laravel, quittio/country-de and quittio/quittio are released under the MIT licence. The Managed layer quittio/managed will be commercially licensed; it is not released yet.