Skip to main content
Germany supports two structured e-invoicing formats: ZUGFeRD and XRechnung. Both are valid and supported by Invopop, but they serve different purposes and have different requirements.
  • ZUGFeRD is the most common choice for B2B invoicing. It has fewer validation constraints, which is why we always recommend embedding the XML inside a PDF — your customer receives a standard-looking PDF that also contains a machine-readable file. No per-customer setup is required.
  • XRechnung is primarily used for B2G invoicing (invoicing public authorities). It has stricter validations and more required fields, but if your customers require it, Invopop fully supports it.
This guide assumes you have already connected the Chargebee app and completed the general setup — see the Chargebee overview first if you haven’t. Required apps: UN/CEFACT CII

Using Chargebee’s email delivery

For Invopop to update the invoice in Chargebee and trigger Chargebee’s own email delivery to your customer, you will need a Full Access API key. Beyond that, the following conditions must be met in Chargebee — if any of these are not in place, Chargebee will not forward the generated PDF (or XML, in the case of XRechnung) to your customer:
  1. The SEND_EINVOICE_NOTIFICATION feature flag must be enabled on your Chargebee site. Contact your Chargebee representative to enable this.
  2. The cf_invopop_include custom field must be present and set to true on each customer you want to process.
  3. Invoice and credit note email notifications must be enabled on your Chargebee site.

Workflows

Chargebee ZUGFeRD

Syncs with Chargebee, downloads the Chargebee PDF, generates a ZUGFeRD XML, and embeds both into a single hybrid PDF.
The ZUGFeRD workflow downloads the existing Chargebee PDF, generates the ZUGFeRD-compliant XML, and embeds the XML into the PDF to produce a single hybrid document. Chargebee then picks up the result and sends it to your customer. No per-customer configuration is required beyond having a valid German supplier set up in Invopop.
Example Chargebee ZUGFeRD workflow
The metadata keys listed above follow the Chargebee metadata format (hyphens, no cf_ prefix). If you prefer to use custom fields instead, replace hyphens with underscores and add the cf_ prefix. See Custom fields & metadata for details.

FAQ

Pick a format based on the recipient: XRechnung (UBL or CII) for B2G via Peppol, ZUGFeRD/Factur-X for B2B where a human-readable PDF is also wanted. Both are EN 16931-compliant — Invopop generates either from the same GOBL invoice.
Generate a GOBL invoice with the de-xrechnung-v3 addon, then run the Peppol Send workflow. Invopop emits XRechnung (UBL or CII per recipient preference), looks up the recipient’s Access Point, and delivers via Peppol.
Both syntaxes are equally valid and contain the same information, so in the majority of cases the choice has no consequences.If you plan on sending invoices through the Peppol network, we recommend using UBL as it is the supported format. If you plan on also issuing invoices in ZUGFeRD or Factur-X, it might be more convenient to use CII, as it is the syntax also supported by ZUGFeRD and Factur-X.
For ZUGFeRD PDFs, the XML file is embedded within the PDF itself. To extract and view it, you can use the Attachments section in Adobe Acrobat Reader.Alternatively, you can use specialized tools like the SysTools PDF Extractor to extract the XML file.
See the Germany tax regime in GOBL for tax categories and identifiers. The XRechnung mapping lives in de-xrechnung-v3; ZUGFeRD/Factur-X share the EN 16931 CII profile.
In countries where Peppol is the standard but not mandatory, you may still need to issue an e-invoice when the recipient isn’t on the network. Both parties can agree on an alternative transfer method, but the invoice must still be EN16931 compliant.Recommended approach:
  • Set up a separate workflow that generates the XML without the send-Peppol-document step
  • Or reuse your existing workflow without the customer Peppol ID — the send step is automatically skipped
  • Fetch the generated XML and deliver it through the agreed channel, typically email
B2C invoices typically lack the structured customer information required for Peppol delivery, and most consumers don’t have inboxes. Use a conditional workflow:
  1. Add an If/Else step that checks for a customer inbox using count(customer.inboxes, true) > 0.
  2. On the false branch, generate a PDF and email it to the customer, then stop the flow.
This routes B2B invoices through Peppol while keeping a smooth path for consumers.
If a job fails with KO and receiver not found in the peppol network, treat it like an invalid email address — the recipient simply isn’t reachable on Peppol. Add the Lookup Participant ID step (ideally in a separate validation workflow run against customer data) so you catch missing IDs before generating the invoice.
No. The regime is automatically derived from the supplier’s settings, which is the recommended approach for Peppol — leave it unset on the document.
See the oasis-ubl-v2 addon and the Peppol app reference for required fields, supported document types, and Participant ID schemes.
More available in our Germany FAQ section

Participate in our community

Ask and answer questions about your Chargebee integration →