PEPPOL BIS Billing 3.0 Format
PEPPOL BIS Billing 3.0 is the cross-border European standard for B2B invoicing built on UBL (Universal Business Language). It is the de-facto exchange format in the Netherlands, Belgium, Austria, and the Nordic countries, and is the foundation of EU ViDA.
Overview
| Property | Value |
|---|---|
| Version | Billing BIS 3.0 |
| Syntax | UBL 2.1 |
| Type | Pure XML (no hybrid PDF) |
| Region | NL, BE, AT, Nordics, cross-border EU |
| Use Case | B2B delivery via PEPPOL access points |
Both invoices and credit notes are supported.
Configuration
Enable PEPPOL BIS
Stores > Configuration > MageB2B > E-Invoice:
- Set Default B2B Format: PEPPOL BIS Billing 3.0 (UBL)
- Go to the new PEPPOL BIS Billing 3.0 section
Seller Endpoint
Every PEPPOL document must declare a routable seller identifier.
| Setting | Notes |
|---|---|
| Seller Endpoint Scheme (EAS) | Pick from 70+ official Electronic Address Scheme codes |
| Seller Endpoint ID | The identifier that matches the scheme |
| CustomizationID override | Defaults to urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 |
| ProfileID override | Defaults to urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 |
Common EAS Codes
| Scheme | Country / Issuer | Example identifier |
|---|---|---|
0060 |
DUNS | 123456789 |
0088 |
GLN (GS1) | 4012345678901 |
0106 |
NL KvK | 12345678 |
0190 |
NL OIN | 00000001820001234000 |
0204 |
DE Leitweg-ID | 04011000-12345-67 |
0208 |
BE Enterprise Number | 0123456789 |
9914 |
AT VAT | ATU12345678 |
9915 |
AT Government | Federal identifier |
9930 |
DE VAT | DE123456789 |
9944 |
NL VAT | NL123456789B01 |
9957 |
FR VAT | FR12345678901 |
The complete list is the official PEPPOL codelist at https://docs.peppol.eu/poacc/billing/3.0/codelist/eas/.
Buyer Endpoint
The buyer endpoint is resolved automatically in this order:
- Order extension attribute
peppol_endpoint_id+peppol_endpoint_scheme - Order data fields of the same names
- Billing-address VAT ID mapped to the country's default VAT scheme
- Customer
taxvatmapped through the same table
For EU and EEA countries the mapping is built in. For non-EU buyers, set the customer attribute explicitly.
Generated Files
PEPPOL BIS produces pure XML (no hybrid PDF):
| File | Path example |
|---|---|
| XML | pub/media/einvoice/invoice-100000001-peppol_bis.xml |
| XML (credit note) | pub/media/einvoice/creditmemo-100000001-peppol_bis.xml |
Credit notes use the UBL <CreditNote> root element and reference the original invoice via BillingReference / InvoiceDocumentReference.
Required Fields
| Field | Source |
|---|---|
| VAT ID | Company Information |
| Seller Endpoint ID + Scheme | PEPPOL BIS section |
| BuyerReference (BT-10) | Order data, customer note, or invoice increment ID (fallback) |
| Billing address | Order |
| Currency | Order |
Seller trading name, registration number, GLN and DUNS are emitted when configured.
Validation
PEPPOL BIS carries its own Schematron rules on top of EN16931. This module validates XML structure (XSD); full Schematron conformity testing is on the roadmap. Many PEPPOL access points validate inbound documents, so errors surface before delivery.
Submission
This extension generates PEPPOL BIS XML. Delivery over the PEPPOL network requires an external access point:
- Storecove
- Pagero
- Unifiedpost
- Edicom
Bridge modules or custom integrations can consume the generated XML via REST API (GET /V1/invoices/{id} with einvoice_xml in the response) or directly from pub/media/einvoice/.
Best Practices
- Pick the scheme your counterpart expects. In DACH,
9930(DE VAT) or0088(GLN) are common. - Always supply the BuyerReference — it is mandatory in PEPPOL BIS, unlike plain EN16931.
- Fill in Seller Trading Name if your legal name differs from your trading name.
- Use
VAT Classification → Default Category for 0% Linesto control behaviour for shipments with unusual tax setups.
Troubleshooting
Missing Endpoint Error
Error: receiver rejects with "missing seller endpoint".
Solution:
- Configure Seller Endpoint ID and Seller Endpoint Scheme in the PEPPOL BIS section.
- Confirm the scheme matches the identifier format (e.g. scheme
9930→DE123456789).
Missing Buyer Reference
Error: "BT-10 required".
Solution:
- Set a value on the order (
buyer_referencedata field) or via the customer note. - Otherwise the extension falls back to the invoice increment ID.
Amounts Don't Match Magento Totals
Run bin/magento einvoice:verify-amounts --invoice-id=<id> to compare XML totals against Magento and identify rounding or mapping drift.