Belgium’s e-invoicing mandate: what a Peppol BIS 3.0 invoice must pass
Since 1 January 2026, invoices between Belgian businesses are structured e-invoices exchanged over Peppol, in the Peppol BIS Billing 3.0 format (SPF BOSA; who is in scope, and the exceptions, are on its page, linked below). Before an access point sends such a file, it has to pass three published layers of checks: the UBL 2.1 XML schema, the CEN EN 16931 business rules (release 1.3.16) and OpenPeppol’s PEPPOL-EN16931-UBL rules (release 3.0.21). Belgium adds no national rule set; the one Belgian rule in the release is PEPPOL-COMMON-R043, the enterprise number under scheme 0208. This guide says what each layer checks, which failures are common on Belgian files, and how to check the recipient before sending. The free validator runs all three layers on a file (4 checks a day without an account), in English, Dutch and French. Not tax advice.
- The format: Peppol BIS Billing 3.0, a UBL 2.1 Invoice or CreditNote that follows EN 16931 and the Peppol rules. Structured e-invoicing between Belgian businesses through Peppol since 1 January 2026 (SPF BOSA).
- Three layers, all published: the UBL 2.1 schema, the EN 16931 rules (CEN/TC 434, release 1.3.16), the Peppol BIS rules (OpenPeppol, release 3.0.21). One fatal finding in any layer makes the file invalid, and an access point refuses it.
- The Belgian rule, PEPPOL-COMMON-R043: an identifier under scheme 0208 is a ten-digit enterprise number whose last two digits are 97 minus the first eight modulo 97 (0202239951: 97 − (2022399 mod 97) = 51).
- Belgian practice that no published rule checks (the rates 21, 12 and 6 %, the structured communication +++123/4567/89002+++, an enterprise number that differs from the VAT number) comes from Veriport as warnings, marked
source: "veriport", never as a published rule.
What the mandate asks of the file
The mandate fixes the channel and the format: the invoice travels over the Peppol network, through access points, as a Peppol BIS Billing 3.0 document. Peppol BIS Billing 3.0 is a CIUS of the European norm EN 16931: the norm’s semantic model (BT-* business terms, BG-* groups) written in UBL 2.1, narrowed by OpenPeppol’s rules. A credit note is a UBL CreditNote under the same specification.
A Belgian business is addressed on Peppol by its enterprise number under scheme 0208; Belgian providers also register the VAT number under scheme 9925, and the participant lookup asks under both. POST https://veriport.io/api/v1/einvoice/create writes 0208 and the enterprise number as the electronic address of a Belgian party (BT-34, BT-49) when you give none.
Who must comply, from which date for which business, the exceptions and the penalties are legal questions this guide does not restate: the SPF BOSA page in the sources is the reference, and your accountant the adviser.
The three layers, in order
The report names the layer of each finding in its source field: schema, cen-ubl or peppol-ubl.
| Layer | Published by | Release | What fails here | Rule ids |
|---|---|---|---|---|
| XML schema | OASIS (UBL 2.1; the schemas the KoSIT configuration ships) | UBL 2.1 | An element out of order, unknown or missing where the schema requires it | XSD, with the line |
| EN 16931 | CEN/TC 434, with the European Commission | 1.3.16 | Mandatory terms, the totals arithmetic, the rules of each VAT category, decimals, code lists, UBL syntax restrictions | BR-*, BR-CO-*, BR-S-*, BR-AE-* …, BR-CL-*, UBL-CR-* |
| Peppol BIS Billing 3.0 | OpenPeppol | 3.0.21 | One note at most, a buyer or order reference, electronic addresses, Peppol code lists, identifier checks, national rule sets (none for Belgium) | PEPPOL-EN16931-R*, -CL*, PEPPOL-COMMON-R* |
The one Belgian rule: PEPPOL-COMMON-R043
PEPPOL-COMMON-R043 is a common rule: it applies to any identifier written under scheme 0208, typically the electronic address of a Belgian seller or buyer (BT-34, BT-49) and its legal registration identifier. The enterprise number has ten digits; the last two are a mod-97 key of the first eight. For 0202239951: 2022399 mod 97 = 46, 97 − 46 = 51, the last two digits. Dots and the BE prefix of the VAT number do not belong in a 0208 identifier.
A mistyped digit breaks the key, and the report points to the element by XPath:
curl -X POST "https://veriport.io/api/v1/einvoice/validate" \
-H "Content-Type: application/xml" \
--data-binary @invoice.xml{
"valid": false,
"profile": "peppol-bis",
"format": "peppol-bis",
"syntax": "ubl",
"container": "xml",
"errors": [
{
"rule": "PEPPOL-COMMON-R043",
"severity": "fatal",
"path": "/ubl:Invoice/cac:AccountingSupplierParty/cac:Party/cbc:EndpointID",
"message": "Belgian enterprise number MUST be stated in the correct format.",
"source": "peppol-ubl"
}
],
"warnings": []
}Common failures on Belgian files
The failures the validator pages list, plus the missing buyer address. The four marked † are the broken documents of the evidence run (2026-10-28): the KoSIT validator and this one rejected each of them, naming the same rule.
| Rule | What it says | Fix |
|---|---|---|
| PEPPOL-COMMON-R043 † | A Belgian enterprise number under scheme 0208 whose mod-97 key fails | Copy the number from the customer’s own invoice or Peppol ID: ten digits, no dots, no BE prefix. |
| PEPPOL-EN16931-R003 | Neither a buyer reference (BT-10) nor a purchase order reference (BT-13) | Give one of them: the customer’s reference, or its order number. |
| PEPPOL-EN16931-R002 † | More than one note at document level | Join the notes into one. |
| PEPPOL-EN16931-CL008 | An electronic address scheme outside the Peppol list | An e-mail address is not a Peppol address: use 0208 with the enterprise number (or the identifier the customer is registered under). |
| PEPPOL-EN16931-R010 | No buyer electronic address (BT-49) | Give the customer’s Peppol identifier (0208, 9925, 9944 …). |
| BR-CL-23 † | A unit code outside UN/ECE Recommendation 20 | Use C62 (piece), HUR, DAY, KGM …; fatal in Peppol, where XRechnung only warns. |
| XSD † | An element out of order or unknown to UBL 2.1 | Write the elements in the order of the UBL schema; the report gives the line. |
Belgian practice, checked as warnings
The Peppol release does not check Belgian VAT practice. The validator adds its own checks, reported as warnings with source: "veriport" so they are never mistaken for a published rule:
- VP-BE-004: a Belgian rate other than 21, 12 or 6 %.
- VP-BE-002: a structured communication (+++123/4567/89002+++) whose mod-97 key fails: twelve digits, the last two the first ten modulo 97 (97 for 0).
- VP-BE-012: a seller enterprise number under 0208 that differs from the digits of its Belgian VAT number.
Check the recipient before sending
A valid file arrives only if the customer is registered on Peppol and receives Billing 3.0 invoices. The Peppol participant lookup (in Dutch) asks the network the way an access point does: the SML (zone participant.sml.prod.tech.peppol.org, U-NAPTR, the lookup Peppol has required since 1 November 2025) for the registration and the provider, the provider’s SMP for the documents the customer receives, the Peppol Directory for its registered name. A registration made today can take up to a day to reach every DNS resolver.
Checked against the reference validator
The evidence run of 2026-10-28 wrote ten Belgian cases through the API (a 21 % invoice, the franchise scheme of article 56bis, a credit note naming the corrected invoice, 21, 12 and 6 % in one invoice, the EU reverse charge, an intra-Community supply, the domestic reverse charge on works on immovable property, an exempt operation of article 44, a document-level allowance and charge, order and contract references without a buyer reference) and ran them through the KoSIT validator configured with the UBL 2.1 schema, the CEN rules and PEPPOL-EN16931-UBL 3.0.21: 10 of 10 Peppol files accepted. The product page publishes the table and the tool versions.
What a file check does not do
It does not send: transmission needs a certified Peppol access point, which may also check the envelope (SBDH) and the recipient’s registration. It does not decide the content: the VAT category, the rate and the exemption reason are the seller’s decision. It does not keep the file: the check runs in memory.
Questions
- Does Belgium add its own rules to Peppol BIS?
- Not as a rule set: release 3.0.21 carries national rule sets for other countries (DE-R, NL-R, NO-R …) and none for Belgium. The Belgian specific is PEPPOL-COMMON-R043, a common rule that applies to every Peppol file carrying a 0208 identifier.
- Is a valid file enough to comply?
- It is necessary, not sufficient: the file must also travel over Peppol, through an access point, to a recipient registered for Billing 3.0 invoices, and its content (VAT category, rate, exemption reason) is your decision. Not tax advice.
- Enterprise number or VAT number as the Peppol address?
- Belgian providers register the enterprise number under 0208 and the VAT number under 9925; the API writes the 0208 form by default. Send to the identifier the customer is registered under: the lookup shows which.
- Can I check a file without an account?
- Yes: 4 checks a day per address on the free validator, also in Dutch and French; 5 calls a check by API with a key.
4 checks a day without an account: the three layers, every finding with its rule id and XPath.
Check a Belgian Peppol fileSources
- SPF BOSA — e-invoicing between Belgian businesses, structured (Peppol BIS) since 1 January 2026 — SPF BOSA (Belgium), consulted 2026-10-28
- Peppol BIS Billing 3.0 — specification, identifiers, code lists and rules — OpenPeppol AISBL, consulted 2026-10-28. « Peppol » is a trademark of OpenPeppol; used descriptively.
- Peppol BIS Billing 3.0 release 3.0.21: PEPPOL-EN16931-UBL.sch and the CEN files it ships — OpenPeppol AISBL, consulted 2026-10-28
- EN 16931 validation artefacts 1.3.16 (UBL and CII schematron, the business rules BR-*) — CEN/TC 434, published with the European Commission (Connecting Europe), consulted 2026-10-28
- KoSIT validator (the reference validator for XRechnung), release 1.6.3 — KoSIT, consulted 2026-10-28
- Peppol SML: participant discovery by U-NAPTR (SHA-256, base32) in the zone participant.sml.prod.tech.peppol.org; CNAME/MD5 names retired 1 February 2026 — OpenPeppol AISBL, consulted 2026-11-08. Checked against the live network on 2026-11-08. « Peppol » is a trademark of OpenPeppol; used descriptively.
- Peppol SMP 1.x: the ServiceGroup of a participant, one ServiceMetadataReference per document type it receives — OpenPeppol AISBL, consulted 2026-11-08
- Peppol Directory: the business cards that providers publish (name, country, registration date); REST search /search/1.0/json — OpenPeppol AISBL, consulted 2026-11-08. Optional for providers: a registered participant may have no business card.