# Peppol BIS Billing 3.0 validator

Source: https://veriport.io/tools/peppol-validator (published 2026-10-28)

Upload a Peppol BIS Billing 3.0 invoice or credit note (UBL 2.1) and this page checks it the way an access point does before it sends: the UBL 2.1 schema, the CEN EN 16931 rules 1.3.16 and the OpenPeppol rules of release 3.0.21 (PEPPOL-EN16931-*, PEPPOL-COMMON-*, the national rules), each finding with its rule id and the XPath of the element. No account, 4 checks a day; the file is not stored.

- The rule files as OpenPeppol and CEN publish them, evaluated in-process: on our sample set this validator and the KoSIT validator running the same Peppol rules name the same rule ids.
- Belgium has no national rule set in Peppol BIS: the one Belgian rule is PEPPOL-COMMON-R043, the enterprise number under scheme 0208 (mod 97). Belgian practice (rates 21/12/6 %, the structured communication) comes as Veriport warnings, labelled.
- An access point refuses a file that fails these rules: checking first saves a rejected transmission. This page does not send anything; an access point does.
- Belgium: structured e-invoicing between businesses through Peppol since 1 January 2026. Not tax advice.

## What is checked

The UBL 2.1 schema of an Invoice or a CreditNote, then the CEN EN 16931 rules (BR-*, BR-CO-*, the VAT category rules, the code lists BR-CL-*) and the Peppol rules (PEPPOL-EN16931-R*, -CL*, PEPPOL-COMMON-R*). A file that claims another profile (XRechnung, EN 16931 CII) is checked against its own rules instead, and the report says which.

## Common failures

- PEPPOL-EN16931-R003: neither a buyer reference (BT-10) nor a purchase order reference (BT-13).
- PEPPOL-EN16931-R002: more than one document note.
- PEPPOL-EN16931-CL008: an electronic address scheme outside the Peppol list (e-mail is not a Peppol address).
- PEPPOL-COMMON-R043: a Belgian enterprise number whose check digits fail.
- BR-CL-23: a unit code outside UN/ECE Recommendation 20 (fatal in Peppol).

## For developers

This page calls `POST https://veriport.io/api/v1/einvoice/validate` without a key. With a free key, 100 calls a month (a check is 5); `POST /einvoice/create` with `format: "peppol-bis"` writes the Peppol file from JSON (Belgian seller in v1) and checks it before returning it.

## Questions

### Is this the official Peppol validator?

No. Veriport is published by Janolab Studio LLC and runs the rule files OpenPeppol publishes; access points and OpenPeppol’s own tooling run the same files. Not affiliated with OpenPeppol; « Peppol » is used descriptively.

### Is my invoice kept?

No. It is checked in memory and discarded; only the call is counted.

### Does a valid result mean my access point will accept it?

It means the file passes the published rules of release 3.0.21. An access point may also check the envelope (SBDH) and the recipient’s registration, which a file check cannot see.

## Read next

- [The e-invoice API](https://veriport.io/einvoice-api)
- [Peppol BIS Billing 3.0 validator, explained](https://veriport.io/guides/peppol-bis-billing-3-validator)
- [EN 16931 rules explained](https://veriport.io/guides/en-16931-business-rules-explained)
- [E-invoice viewer](https://veriport.io/tools/einvoice-viewer)

## Sources

- Peppol BIS Billing 3.0 — specification, identifiers, code lists and rules — https://docs.peppol.eu/poacc/billing/3.0/ (2026-10-28)
- Peppol BIS Billing 3.0 release 3.0.21: PEPPOL-EN16931-UBL.sch and the CEN files it ships — https://github.com/OpenPEPPOL/peppol-bis-invoice-3/tree/3.0.21/rules/sch (2026-10-28)
- EN 16931 validation artefacts 1.3.16 (UBL and CII schematron, the business rules BR-*) — https://github.com/ConnectingEurope/eInvoicing-EN16931/releases/tag/validation-1.3.16 (2026-10-28)
- SPF BOSA — e-invoicing between Belgian businesses, structured (Peppol BIS) since 1 January 2026 — https://efacture.belgium.be/fr (2026-10-28)
