Peppol BIS Billing 3.0, explained for developers
Peppol is two things: a network that delivers business documents between access points, and a set of document specifications. Peppol BIS Billing 3.0 is the invoice specification, a UBL file built on EN 16931. Belgium made it the default for invoices between businesses on 1 January 2026.
Updated 19 October 2026
What a Peppol BIS invoice is
- An OASIS UBL 2.1 Invoice or CreditNote document.
- A CIUS of EN 16931: every Peppol BIS invoice is a valid EN 16931 invoice, with extra Peppol rules on top.
- Two identifiers say what it is: the specification identifier
cbc:CustomizationID=urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0and the business processcbc:ProfileID=urn:fdc:peppol.eu:2017:poacc:billing:01:1.0.
The specification, the rules and example files are at docs.peppol.eu, maintained by OpenPeppol. It is updated in regular releases; the current one is the May 2026 release.
How the network works
Peppol is a "four-corner" model. Your software (corner 1) hands the invoice to your access point (corner 2), which looks up the receiver in the Peppol directory (SML/SMP) and delivers it to the receiver's access point (corner 3), which passes it to the buyer's software (corner 4). Sender and receiver can use different providers.
Parties are addressed by a participant identifier: a scheme code from the EAS list plus the identifier. Examples: 0208 with the Belgian enterprise number (KBO/BCE), 9925 with a Belgian VAT number, 0088 with a GLN, 0204 with a German Leitweg-ID. In the invoice they go in the seller's and buyer's cbc:EndpointID with a schemeID attribute.
Invoir creates and validates the invoice file; it is not an access point and does not send through Peppol. To send, you need a Peppol access point provider. OpenPeppol lists the certified ones.
The Peppol rules people hit
A Peppol BIS invoice is checked against the CEN EN 16931 rules for UBL and the Peppol rules. The Peppol ones that fail most:
PEPPOL-EN16931-R010/R020Buyer / seller electronic address must be provided- Both
cbc:EndpointIDelements, each with aschemeIDfrom the EAS list (elsePEPPOL-EN16931-CL008). PEPPOL-EN16931-R003A buyer reference or purchase order reference must be provided- Either
cbc:BuyerReferenceorcac:OrderReference/cbc:ID. PEPPOL-EN16931-R004/R001/R007Identifiers- The CustomizationID must start with the Peppol value above, and the ProfileID must be present and approved. Copying a file from another CIUS (such as XRechnung UBL) and forgetting these is a classic.
PEPPOL-EN16931-R120Line net amount- Must equal quantity × (net price ÷ base quantity) + line charges − line allowances. Rounding the price before multiplying is the usual cause.
PEPPOL-EN16931-R053Only one tax total with tax subtotals- Exactly one
cac:TaxTotalcarries the VAT breakdown.
The EN 16931 rules (BR-*, BR-CO-*) are explained on the EN 16931 page.
Where Peppol BIS is used
- Belgium: mandatory structured e-invoicing between businesses since 1 January 2026, sent over Peppol, with Peppol BIS as the standard format (Belgian mandate).
- Germany: one of the channels to public authorities, which can be addressed by their Leitweg-ID. Between businesses Peppol is optional.
- Many other countries use Peppol for public procurement or B2B; OpenPeppol publishes the list.
Peppol BIS API
Validate a Peppol BIS invoice against the official CEN and Peppol Schematron before you hand it to your access point:
curl https://validate.invoir.dev/api/v1/validate \
-H "Authorization: Bearer inv_YOUR_KEY" \
-F [email protected]
The report names the rule set version it used (API docs). Generating Peppol BIS XML from JSON is in development. Comparing formats? See ZUGFeRD vs XRechnung vs Factur-X vs Peppol BIS.
Check a file in your browser, or over the API. The free validator runs the official rules (KoSIT, CEN and Peppol Schematron, Mustang, veraPDF) and lists every error with its rule ID. Nothing is stored. The same check is one HTTP call with a free API key: 25 documents a month, no credit card.
Sources
- OpenPeppol: Peppol BIS Billing 3.0 (specification, rules, code lists).
- FPS Finance (Belgium): structured e-invoices between companies, compulsory since 2026.