Paperbolt is now live on the Shopify App Store Browse the listing
Germany / France Validator-passing

ZUGFeRD 2.1 / Factur-X

PDF/A-3 with embedded Cross Industry Invoice XML. The German B2B mandate is staged 2027 to 2028; the Factur-X profile is already the standard for French B2B.

Live preview Rendered through the same Chromium pipeline that ships the PDF
Invoice RE-2026-1004
Peppol BIS Billing 3.0
Issue 1 Sep 2026
Due 15 Sep 2026
Buyer ref BPO-554
From
Lichtwerk Design GmbH
Maximilianstrasse 17
80539 Munich
DE
VAT DE123456789
To
Hafen Studios AG
Speicherstadt 5
20457 Hamburg
DE
VAT DE987654321
DescriptionQtyUnitVATAmount
UX research workshop, 2 days2.001450.0019%2900.00
Design system audit1.003200.0019%3200.00
SubtotalEUR 6100.00
VATEUR 1159.00
Total dueEUR 7259.00
IBAN DE89370400440532013000    BIC COBADEFFXXX
Zahlbar innerhalb 14 Tagen netto.
Sample structured output CII (UN/CEFACT)
<?xml version="1.0" encoding="UTF-8"?>
<rsm:CrossIndustryInvoice xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100" xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100" xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
  <rsm:ExchangedDocumentContext>
    <ram:GuidelineSpecifiedDocumentContextParameter>
      <ram:ID>urn:cen.eu:en16931:2017#compliant#urn:factur-x.eu:1p0:basic</ram:ID>
    </ram:GuidelineSpecifiedDocumentContextParameter>
  </rsm:ExchangedDocumentContext>
  <rsm:ExchangedDocument>
    <ram:ID>RE-2026-1004</ram:ID>
    <ram:TypeCode>380</ram:TypeCode>
    <ram:IssueDateTime>
      <udt:DateTimeString format="102">20260901</udt:DateTimeString>
    </ram:IssueDateTime>
  </rsm:ExchangedDocument>
  <rsm:SupplyChainTradeTransaction>
    <ram:IncludedSupplyChainTradeLineItem>
      <ram:AssociatedDocumentLineDocument>
        <ram:LineID>1</ram:LineID>
      </ram:AssociatedDocumentLineDocument>
      <ram:SpecifiedTradeProduct>
        <ram:Name>UX research workshop, 2 days</ram:Name>
      </ram:SpecifiedTradeProduct>
      <ram:SpecifiedLineTradeAgreement>
        <ram:NetPriceProductTradePrice>
          <ram:ChargeAmount>1450.00</ram:ChargeAmount>
        </ram:NetPriceProductTradePrice>
      </ram:SpecifiedLineTradeAgreement>
      <ram:SpecifiedLineTradeDelivery>
        <ram:BilledQuantity unitCode="DAY">2.00</ram:BilledQuantity>
      </ram:SpecifiedLineTradeDelivery>
      <ram:SpecifiedLineTradeSettlement>
        <ram:ApplicableTradeTax>
          <ram:TypeCode>VAT</ram:TypeCode>
          <ram:CategoryCode>S</ram:CategoryCode>
          <ram:RateApplicablePercent>19</ram:RateApplicablePercent>
        </ram:ApplicableTradeTax>
        <ram:SpecifiedTradeSettlementLineMonetarySummation>
          <ram:LineTotalAmount>2900.00</ram:LineTotalAmount>
        </ram:SpecifiedTradeSettlementLineMonetarySummation>
      </ram:SpecifiedLineTradeSettlement>
    </ram:IncludedSupplyChainTradeLineItem>
    <ram:IncludedSupplyChainTradeLineItem>
      <ram:AssociatedDocumentLineDocument>
        <ram:LineID>2</ram:LineID>
      </ram:AssociatedDocumentLineDocument>
      <ram:SpecifiedTradeProduct>
        <ram:Name>Design system audit</ram:Name>
      </ram:SpecifiedTradeProduct>
      <ram:SpecifiedLineTradeAgreement>
        <ram:NetPriceProductTradePrice>
          <ram:ChargeAmount>3200.00</ram:ChargeAmount>
        </ram:NetPriceProductTradePrice>
      </ram:SpecifiedLineTradeAgreement>
      <ram:SpecifiedLineTradeDelivery>
        <ram:BilledQuantity unitCode="EA">1.00</ram:BilledQuantity>
      </ram:SpecifiedLineTradeDelivery>
      <ram:SpecifiedLineTradeSettlement>
        <ram:ApplicableTradeTax>
          <ram:TypeCode>VAT</ram:TypeCode>
          <ram:CategoryCode>S</ram:CategoryCode>
          <ram:RateApplicablePercent>19</ram:RateApplicablePercent>
        </ram:ApplicableTradeTax>
        <ram:SpecifiedTradeSettlementLineMonetarySummation>
          <ram:LineTotalAmount>3200.00</ram:LineTotalAmount>
        </ram:SpecifiedTradeSettlementLineMonetarySummation>
      </ram:SpecifiedLineTradeSettlement>
    </ram:IncludedSupplyChainTradeLineItem>
    <ram:ApplicableHeaderTradeAgreement>
      <ram:SellerTradeParty>
        <ram:Name>Lichtwerk Design GmbH</ram:Name>
        <ram:PostalTradeAddress>
          <ram:PostcodeCode>80539</ram:PostcodeCode>
          <ram:LineOne>Maximilianstrasse 17</ram:LineOne>
          <ram:CityName>Munich</ram:CityName>
          <ram:CountryID>DE</ram:CountryID>
        </ram:PostalTradeAddress>
        <ram:SpecifiedTaxRegistration>
          <ram:ID schemeID="VA">DE123456789</ram:ID>
        </ram:SpecifiedTaxRegistration>
      </ram:SellerTradeParty>
      <ram:BuyerTradeParty>
        <ram:Name>Hafen Studios AG</ram:Name>
        <ram:PostalTradeAddress>
          <ram:PostcodeCode>20457</ram:PostcodeCode>
          <ram:LineOne>Speicherstadt 5</ram:LineOne>
          <ram:CityName>Hamburg</ram:CityName>
          <ram:CountryID>DE</ram:CountryID>
        </ram:PostalTradeAddress>
        <ram:SpecifiedTaxRegistration>
          <ram:ID schemeID="VA">DE987654321</ram:ID>
        </ram:SpecifiedTaxRegistration>
      </ram:BuyerTradeParty>
    </ram:ApplicableHeaderTradeAgreement>
    <ram:ApplicableHeaderTradeDelivery>
      <ram:ActualDeliverySupplyChainEvent>
        <ram:OccurrenceDateTime>
          <udt:DateTimeString format="102">20260901</udt:DateTimeString>
        </ram:OccurrenceDateTime>
      </ram:ActualDeliverySupplyChainEvent>
    </ram:ApplicableHeaderTradeDelivery>
    <ram:ApplicableHeaderTradeSettlement>
      <ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
      <ram:ApplicableTradeTax>
        <ram:CalculatedAmount>1159.00</ram:CalculatedAmount>
        <ram:TypeCode>VAT</ram:TypeCode>
        <ram:BasisAmount>6100.00</ram:BasisAmount>
        <ram:CategoryCode>S</ram:CategoryCode>
        <ram:RateApplicablePercent>19</ram:RateApplicablePercent>
      </ram:ApplicableTradeTax>
      <ram:SpecifiedTradePaymentTerms>
        <ram:Description>Zahlbar innerhalb 14 Tagen netto.</ram:Description>
        <ram:DueDateDateTime>
          <udt:DateTimeString format="102">20260915</udt:DateTimeString>
        </ram:DueDateDateTime>
      </ram:SpecifiedTradePaymentTerms>
      <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
        <ram:LineTotalAmount>6100.00</ram:LineTotalAmount>
        <ram:TaxBasisTotalAmount>6100.00</ram:TaxBasisTotalAmount>
        <ram:TaxTotalAmount currencyID="EUR">1159.00</ram:TaxTotalAmount>
        <ram:GrandTotalAmount>7259.00</ram:GrandTotalAmount>
        <ram:DuePayableAmount>7259.00</ram:DuePayableAmount>
      </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
    </ram:ApplicableHeaderTradeSettlement>
  </rsm:SupplyChainTradeTransaction>
</rsm:CrossIndustryInvoice>

What this template emits

A single invoice with two legs that travel together inside one PDF file.

The visual leg is a normal PDF invoice in your house style. Your customer's eye reads it the way they always read invoices.

The structured leg is a Cross Industry Invoice (CII) XML attachment embedded inside the same PDF, marked with AFRelationship="Alternative". The accounting software at the receiving end pulls the XML out of the PDF and books the invoice automatically. There is no need for a separate channel; the XML rides inside the PDF.

The CII syntax is published by UN/CEFACT and is functionally equivalent to UBL 2.1 for invoicing. Both encode the EN 16931 semantic model. ZUGFeRD picked CII for historical reasons; Belgium, the Nordics, and the Netherlands picked UBL. Anyone shipping both formats already shares the line-item data model.

The profiles, briefly

ZUGFeRD 2.1 ships in five profiles. From least to most data:

  1. MINIMUM carries only the totals. Useful for archiving.
  2. BASIC WL (without lines) carries header data and tax totals but no line items.
  3. BASIC carries everything EN 16931 requires. This is the profile that satisfies the German mandate.
  4. EN 16931 (also called COMFORT) adds optional fields the CEN standard allows.
  5. EXTENDED adds fields outside EN 16931 that some German receivers prefer.

The emitter defaults to BASIC. Pass a different profile constant if your receiver requires it.

What the German mandate actually says

Effective 2025-01-01, every German B2B receiver must accept e-invoices. Effective 2027-01-01, every B2B sender with prior-year revenue over EUR 800,000 must send e-invoices. Effective 2028-01-01, the requirement extends to all B2B senders. The format is whatever satisfies EN 16931, which in practice means ZUGFeRD BASIC or higher, or pure XML over Peppol.

The two-leg PDF approach is popular in Germany because it survives email channels and on-premise accounting systems that cannot accept network protocols.

Validation status

On 2026-06-03 our sample invoice (pkg/einvoice/SampleZUGFeRDInvoice) was validated with Mustang-CLI 2.23.1. The validator reports XML:valid for the claimed BASIC profile (urn:cen.eu:en16931:2017#compliant#urn:factur-x.eu:1p0:basic). Mustang's batch validator additionally checks XRechnung BR-DE-* and Peppol-on-CII rules; those rule packs report violations because we do not claim those profiles. The structured report is in test-results/validators/zugferd/mustang-report.txt in the repository.

What the validator checks

The Mustang-Project open-source validator is the de facto checker for ZUGFeRD. The Schematron rules are largely the same EN 16931 rules Peppol enforces. The format-specific additions:

  • GuidelineSpecifiedDocumentContextParameter ID must match the profile you claim.
  • Embedded XML inside the PDF must be marked with AFRelationship="Alternative".
  • The PDF wrapper must be PDF/A-3 conformant: embedded ICC color profile, XMP metadata identifying the conformance level, font subsetting.

Our Free and Starter tiers emit the CII XML standalone. The Pro tier embeds it inside a PDF/A-3 wrapper through the platform's Chromium engine.

Frequently asked questions

Does ZUGFeRD work outside Germany?

The Factur-X 1.0 BASIC profile and ZUGFeRD 2.1 BASIC are byte-identical. Factur-X is the French government's chosen format; Chorus Pro accepts it. The same template emits both.

What about ViDA in 2030?

The ViDA proposal mandates Peppol-compatible structured e-invoicing for cross-border EU B2B from 2030 with a phased rollout. ZUGFeRD will remain valid as a national format for German B2B; the cross-border leg will run over Peppol BIS Billing 3.0. The same line-item data model drives both emitters.