Peppol BIS Billing 3.0 for developers: learn UBL mapping, validation, endpoint IDs, VAT rules and reliable e-invoice delivery.
An invoice can look completely correct inside an ERP, billing platform, or SaaS application and still fail when it reaches a trading partner through the Peppol network. The problem is often not broken XML. It is a missing buyer reference, an incorrect electronic-address scheme, unreconciled totals, an unsupported VAT category, or a country-specific rule the application was never built to handle.
That is the real implementation challenge behind Peppol BIS Billing 3.0. The standard gives developers a common framework for turning invoice data into structured, interoperable UBL documents that can be exchanged through Peppol. But generating XML is only one part of the job. A reliable integration also needs accurate ERP-to-UBL mapping, valid Peppol participant IDs, controlled code lists, Schematron validation, recipient discovery, error handling, and a way to keep pace with evolving Peppol and local compliance rules.
Peppol BIS Billing 3.0 is a Core Invoice Usage Specification based on EN 16931, the European standard for electronic invoicing. It defines how developers should structure EN 16931-compliant invoice data in UBL 2.1 XML for interoperable exchange through the Peppol network. Its core Peppol document types are the seller-issued Invoice and Credit Note.
The specification covers the invoice payload rather than the entire Peppol ecosystem. In other words, it tells your application what invoice data to include, how to structure it, which code lists to use, and what validation rules to meet. It does not independently define Access Point operations, network transport, or recipient discovery.
For a developer, that distinction matters:
A Peppol invoice is therefore not simply a PDF sent digitally. The invoice must contain structured, machine-readable data, typically UBL XML, and comply with the relevant EN 16931, Peppol BIS Billing 3.0, and country-specific requirements. Peppol is widely used in European e-invoicing ecosystems, including Belgium, Norway, Sweden, and the Netherlands, but each country can apply the framework differently.
Peppol invoices use UBL 2.1 as their underlying document syntax. Your generator must create either an invoice or UBL Credit Note root document and populate the business terms required by the applicable Peppol BIS Billing rules.
At a minimum, developers should plan to map the following UBL elements:
UBL element | Purpose | Implementation concern |
CustomizationID | Identifies the Peppol BIS Billing 3.0 specification | Use the applicable specification identifier. |
ProfileID | Identifies the billing business process | Required for the document profile. |
ID | Invoice or credit note number | Must be unique according to your business controls. |
IssueDate | Document issue date | Use the required date format. |
InvoiceTypeCode / CreditNoteTypeCode | Identifies the document type | Use an allowed code for the document being issued. |
DocumentCurrencyCode | Identifies the invoice currency | Use a valid ISO 4217 currency code. |
EndpointID | Identifies the seller and buyer electronic addresses | Both the value and schemeID must be correctly populated. |
InvoiceLine / CreditNoteLine | Contains item, quantity, price and related VAT information | At least one invoice or credit note line is required. |
TaxTotal | Provides VAT totals and tax breakdowns | Values must reconcile with taxable amounts and document lines. |
LegalMonetaryTotal | Provides net, VAT-inclusive and payable amounts | Totals must reconcile exactly with the underlying document data. |
A typical invoice header begins with elements such as:
<cbc:CustomizationID>
urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0
</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
<cbc:ID>INV-2026-0042</cbc:ID>
<cbc:IssueDate>2026-02-14</cbc:IssueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
Credit notes follow the same general structure, but use a CreditNote root element, CreditNoteTypeCode and CreditNoteLine instead of their invoice equivalents.
Do not copy internal ERP accounting conventions directly into UBL. For example, negative credit-note values may not always translate directly to the required Peppol structure. Validate the complete document against the applicable BIS Billing rules, including payment requirements such as providing a due date or payment terms when the payable amount is positive.
Most failed e-invoicing Peppol integrations begin with a data problem, not a transport problem. An ERP may store a VAT number, customer name, and tax rate but Peppol expects a correctly qualified endpoint identifier, a valid tax category, and controlled values from relevant code lists.
Key code lists include:
A Peppol participant identifier is commonly represented as a scheme plus identifier value, such as 0088:1234567890123. In the UBL document, however, map the identifier value into cbc:EndpointID and the scheme separately into its mandatory schemeID attribute.
xml
<cbc:EndpointID schemeID="0088">1234567890123</cbc:EndpointID>
Both seller and buyer electronic addresses are required. The scheme must come from the maintained Electronic Address Scheme list, otherwise validation can fail with errors including BR-CL-25 and PEPPOL-EN16931-CL008.
Build this as a governed data service, not a manually maintained free-text field. A sound implementation will:

Peppol BIS Billing 3.0 validation goes beyond checking whether your UBL XML is technically valid. Your invoice must also meet EN 16931 business rules, Peppol requirements, controlled code-list rules, and any applicable country-specific validation rules.
Use this four-step workflow before sending a document through a Peppol Access Point:
Common validation failures include unreconciled invoice totals, missing schemeID values for buyer or seller EndpointID, invalid VAT categories, incorrect VAT breakdowns, and missing payment terms or a due date where the payable amount is positive.
BIS Billing 3.0 itself covers Invoice and Credit Note documents. Related Peppol specifications support adjacent workflows, including Self-Billing, Invoice Response, and Message Level Response. Do not describe these as four message types inside BIS Billing 3.0, they are separate but connected specifications in the wider ecosystem.
The standard Peppol exchange uses a four-corner model:
Do not treat invoice delivery as a single synchronous API call that ends when you upload XML. Capture submission status, technical delivery outcomes, retryable failures, and in workflows that support it business-level Invoice Response messages.
This is where Peppol compliance requirements become operational rather than theoretical. A document can pass your internal generator and still fail because a recipient’s country rules, endpoint configuration, or permitted document process differs from your assumptions.
For software teams, the challenge is not simply generating UBL XML. It is maintaining the compliance layer around it, endpoint handling, validation rules, code-list updates, country-specific requirements, archiving and invoice delivery. DDD Invoices provides an API-first infrastructure layer that helps ERP, accounting, CRM, payment and SaaS platforms manage these requirements without building and maintaining separate compliance connectors for every market.
With DDD Invoices, platforms can send normalised invoice data through a single integration and handle structured XML generation, local compliance transformations, invoice lifecycle management and Peppol exchange where applicable. This reduces the ongoing maintenance burden and helps keep invoice workflows aligned as Peppol specifications, code lists, trading-partner requirements and local e-invoicing rules change.
Still have questions?
In the 30min free call we will discuss:
Peppol BIS 3 refers to the Peppol Business Interoperability Specifications version 3 family. Peppol BIS Billing 3.0 is the billing specification for structured Invoice and Credit Note documents based on EN 16931 and UBL syntax.
The Peppol invoice format for BIS Billing 3.0 is a structured UBL 2.1 XML Invoice or Credit Note that follows EN 16931 semantic requirements and Peppol-specific business rules. A standalone PDF is not, by itself, a Peppol BIS Billing 3.0 invoice.
For core billing, support UBL Invoice and UBL Credit Note. Consider related documents such as Self-Billing Invoice, Self-Billing Credit Note, Invoice Response, and Message Level Response only when the relevant business workflow requires them.
Validate the XML structure, then apply the current Peppol BIS Billing 3.0 Schematron rules and any relevant country-specific rules. Check mandatory endpoint IDs, EAS schemeID values, code lists, VAT logic, totals, payment details, and recipient-specific requirements before transmission.