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:

  1. Set Default B2B Format: PEPPOL BIS Billing 3.0 (UBL)
  2. 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:

  1. Order extension attribute peppol_endpoint_id + peppol_endpoint_scheme
  2. Order data fields of the same names
  3. Billing-address VAT ID mapped to the country's default VAT scheme
  4. Customer taxvat mapped 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

  1. Pick the scheme your counterpart expects. In DACH, 9930 (DE VAT) or 0088 (GLN) are common.
  2. Always supply the BuyerReference — it is mandatory in PEPPOL BIS, unlike plain EN16931.
  3. Fill in Seller Trading Name if your legal name differs from your trading name.
  4. Use VAT Classification → Default Category for 0% Lines to 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 9930DE123456789).

Missing Buyer Reference

Error: "BT-10 required".

Solution:

  • Set a value on the order (buyer_reference data 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.

Found an issue with this documentation? Let us know