ZUGFeRD to Peppol API
Convert ZUGFeRD invoices to Peppol BIS Billing 3.0 UBL XML with full EN 16931 mapping, ready for the Peppol network.
If you generate ZUGFeRD or Factur-X invoices, you already have EN 16931-compliant e-invoice data. But the moment you need to send that invoice over the Peppol network - to a Belgian, Dutch, or French B2B client - you hit a wall: Peppol does not want your PDF, and most Peppol Access Points do not accept the CII XML that ZUGFeRD and Factur-X carry. They expect Peppol BIS Billing 3.0 in UBL syntax.
The new ZUGFeRD to Peppol and Factur-X to Peppol converters close that gap. Send a PDF or the raw XML, get back ready-to-transmit Peppol BIS Billing 3.0 UBL.
These terms get mixed up constantly, so it is worth being precise - because the difference is exactly why a conversion is needed.
There is a third term you will see alongside these: XRechnung, Germany's pure-UBL e-invoice format with no PDF wrapper. So the lineup is ZUGFeRD/Factur-X (hybrid PDF + CII), XRechnung (standalone UBL), and Peppol (the network that carries UBL).
So a ZUGFeRD invoice and a Peppol BIS invoice can describe the exact same transaction under the same EN 16931 model - but in two different XML syntaxes (CII vs UBL) and two different containers (embedded in a PDF vs standalone). To put a ZUGFeRD or Factur-X invoice on Peppol, the embedded CII payload has to be mapped to UBL. In short, this is a CII to UBL conversion - and that is exactly what this tool performs.
The converter takes a ZUGFeRD 2.x or Factur-X invoice and outputs Peppol BIS Billing 3.0 UBL XML, ready to hand to your Peppol Access Point.
Two input options - PDF or XML:
Full EN 16931 mapping. Every field of the semantic model is carried over: invoice header, seller and buyer parties, delivery, payment means and terms, document- and line-level allowances and charges, VAT breakdown, monetary totals, and all invoice lines.
Credit notes supported. Documents with type code 381 are emitted as a UBL CreditNote, not an Invoice.
Because ZUGFeRD and Factur-X share one specification, both converters do the same mapping - pick the endpoint that matches the file you are sending.
E-invoicing rules across Europe are what is driving demand for this conversion right now:
If you have a German or French invoicing pipeline producing ZUGFeRD or Factur-X, converting to Peppol BIS lets you reach these markets without rebuilding your invoice generation from scratch. Same EN 16931 data, correct syntax for the receiver.
A single API call does it. Replace the endpoint with facturx/to/peppol for Factur-X input.
curl -X POST https://v2.convertapi.com/convert/zugferd/to/peppol \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-F "File=@/path/to/invoice.pdf" \
-F "StoreFile=true"
The File parameter accepts either a ZUGFeRD PDF/A-3 or the raw CII XML - the converter detects the input and extracts the embedded XML when a PDF is supplied. StoreFile=true returns a secure, time-limited download URL for the result.
using ConvertApiDotNet;
var convertApi = new ConvertApi("YOUR_API_TOKEN");
var result = await convertApi.ConvertAsync("zugferd", "peppol",
new ConvertApiFileParam("File", @"C:\invoices\invoice-12345.pdf")
);
await result.SaveFilesAsync(@"C:\invoices\peppol");
For Factur-X, change the conversion to ConvertAsync("facturx", "peppol", ...). Everything else stays the same.
The converter takes either a PDF or the raw XML - you only need one. A real ZUGFeRD/Factur-X invoice usually arrives as a PDF/A-3 (the matching code sample above uses one), so that is the typical input. If you already have the bare CII XML, send that instead and skip the PDF.
Download the sample files to see what goes in and what comes out:
Drop either input into the ZUGFeRD to Peppol online sandbox - or the Factur-X to Peppol sandbox if that is your format - and compare the UBL output against the result file above.
Is ZUGFeRD the same as Factur-X? Technically yes. They share one specification - a PDF/A-3 with embedded EN 16931 CII XML. ZUGFeRD is the German name, Factur-X is the French name. An invoice valid as one is valid as the other.
Can I send a ZUGFeRD or Factur-X invoice over Peppol directly? No. Peppol expects Peppol BIS Billing 3.0 in UBL syntax, and most Peppol Access Points do not accept the CII XML that ZUGFeRD and Factur-X carry. The CII payload has to be mapped to UBL first.
What is the difference between CII and UBL? Both are XML syntaxes for the same EN 16931 invoice model. ZUGFeRD and Factur-X use CII (Cross Industry Invoice), while Peppol uses UBL (Universal Business Language). You cannot mix them, which is why a conversion is required.
Do I need to extract the XML from the PDF first? No. When you send a ZUGFeRD or Factur-X PDF/A-3, the converter extracts the embedded invoice XML automatically before converting. You can also send the raw CII XML directly if you already have it.
Does the converter support credit notes? Yes. A document with type code 381 is emitted as a UBL CreditNote rather than an Invoice.
Is XRechnung the same as Peppol? No. XRechnung is Germany's pure-UBL e-invoice format (a document). Peppol is the network that delivers UBL invoices. They are often used together but are not the same thing.
The ZUGFeRD to Peppol and Factur-X to Peppol converters are available now. Map your existing German and French e-invoices to the Peppol network with a single request.
ZUGFeRD to Peppol - explore the converter at convertapi.com/zugferd-to-peppol or test it free in the online sandbox.
Factur-X to Peppol - explore the converter at convertapi.com/facturx-to-peppol or test it free in the online sandbox.
Convert ZUGFeRD invoices to Peppol BIS Billing 3.0 UBL XML with full EN 16931 mapping, ready for the Peppol network.
Convert Factur-X invoices to Peppol BIS Billing 3.0 UBL XML with full EN 16931 mapping, ready for the Peppol network.
Reliable PDF to PDF/A API for long-term archiving, VeraPDF certified, with batch processing and optional embedded e-invoice XML.
Generate PDF invoices from Peppol BIS Billing 3.0 UBL XML files with invoice lines, VAT breakdown and contact details.