Free Peppol BIS Billing 3.0 validator
Valinvo's free validator checks a Peppol BIS Billing 3.0 invoice or credit note (UBL XML) against the official rules and lists every problem with its rule ID, its location in the file and a message. You need no account and no API key, and your file is processed in memory and not stored.
Open the validator · Use it from code (API quickstart)
What it checks
- Peppol BIS Billing 3.0: UBL Invoice and UBL CreditNote, currently release 3.0.21.
- The XML schema and the Schematron business rules: the European standard EN 16931 (rules
BR-…) plus the Peppol rules on top (PEPPOL-EN16931-…). - The rule set is detected from the document, so you do not choose a format first. The result names the one that was applied, for example
peppol-bis-3.0.21-ubl-invoice.
The rules come from OpenPeppol and CEN and are applied as published. The validator also recognises XRechnung files, so you can use the same page for both. See the XRechnung validator.
How to use it
- Open the validator, paste the XML or upload the file.
- Click Validate. You can first try the built-in valid Peppol sample or the broken XRechnung sample.
- Read the list: each error shows the rule ID, the location and what is wrong. Fix the invoice in your system and validate again.
From code: the same check as an API
curl -X POST https://valinvo.bmk-hub.com/v1/validate \
-H 'X-Accept-Terms: 1.0' \
-H 'Content-Type: application/xml' \
--data-binary @invoice.xml
A valid invoice returns:
{"ruleSet": "peppol-bis-3.0.21-ubl-invoice", "valid": true, "errors": [], "warnings": []}
An invoice with problems is a normal 200 answer with valid: false and the list of errors. Warnings do not make an invoice invalid. More in the quickstart.
Common Peppol errors
| Rule | What it means | Usual fix |
|---|---|---|
PEPPOL-EN16931-R001 | The business process (ProfileID) is missing. | Add the Peppol business process identifier. |
PEPPOL-EN16931-R003 | A buyer reference or an order reference must be given. | Fill in one of them. |
PEPPOL-EN16931-R010 | The buyer's electronic address is missing. | Add the buyer's Peppol endpoint ID with its scheme. |
PEPPOL-EN16931-R020 | The seller's electronic address is missing. | Add the seller's Peppol endpoint ID with its scheme. |
PEPPOL-EN16931-R004 | The specification identifier (CustomizationID) is not the Peppol BIS 3.0 one. | Use the identifier from the Peppol BIS Billing 3.0 specification. |
PEPPOL-EN16931-R002 | More than one note at document level. | Keep a single note, or move the text to a line or an attachment. |
For Belgian companies the endpoint ID normally uses the scheme 0208 with the ten-digit enterprise number (no dots). Other countries use other schemes: see the country notes in the quickstart.
Questions
Is the validator really free? Yes. The online validator needs no account or API key. The API can also be tried without a key, with a small daily limit for creating invoices.
Is my invoice stored? No. The file is processed in memory and not stored. Please use sample data or invoices you are allowed to share.
Does "valid" mean it reaches the buyer? No. The check applies the official rules as published. Delivery needs a Peppol access point, and a valid file cannot guarantee that a recipient accepts it. It is not tax or legal advice.
Can Valinvo create the invoice too? Yes. You send one JSON invoice and receive Peppol BIS or XRechnung XML that has been checked against the same rules. See the quickstart.
By using the validator you accept the Terms of Use.
Quickstart · XRechnung validator · Peppol validator · ZUGFeRD / Factur-X validator · ZUGFeRD-csharp: your options · Error codes