Country Guides
E-invoicing requirements vary by country. This section covers country-specific requirements, identifier schemes, and compliance rules.
European Unionโ
Peppol is mandated or widely adopted across the EU:
| Country | B2G Mandate | B2B Status | CIUS |
|---|---|---|---|
| ๐ณ๐ฑ Netherlands | โ Required | Encouraged | NLCIUS |
| ๐ฉ๐ช Germany | โ Required | Encouraged | XRechnung |
| ๐ง๐ช Belgium | โ Required | Growing | โ |
| ๐ซ๐ท France | โ Required | Coming 2026 | Factur-X |
| ๐ฎ๐น Italy | โ Required | โ Required | FatturaPA |
| ๐ช๐ธ Spain | โ Required | Growing | โ |
| ๐ต๐น Portugal | โ Required | Growing | โ |
| ๐ฆ๐น Austria | โ Required | Growing | โ |
| ๐ต๐ฑ Poland | โ Required | Coming | KSeF |
This column names the national CIUS or format that applies in that country. It is not a statement about which Schematron packs GoRoute compiles and runs โ for that, see Schematron packs GoRoute actually runs below.
Nordicsโ
Strong Peppol adoption in Nordic countries:
| Country | B2G Mandate | B2B Status | Notes |
|---|---|---|---|
| ๐ณ๐ด Norway | โ Required | Common | EHF format |
| ๐ธ๐ช Sweden | โ Required | Common | Svefaktura |
| ๐ฉ๐ฐ Denmark | โ Required | Common | OIOUBL |
| ๐ซ๐ฎ Finland | โ Required | Common | Finvoice |
Asia-Pacificโ
Growing Peppol adoption:
| Country | B2G Status | B2B Status | Notes |
|---|---|---|---|
| ๐ธ๐ฌ Singapore | โ InvoiceNow | Growing | Government push |
| ๐ฆ๐บ Australia | โ Available | Growing | PINT A-NZ |
| ๐ณ๐ฟ New Zealand | โ Available | Growing | PINT A-NZ |
| ๐ฏ๐ต Japan | โ Pilot | Starting | JP PINT |
| ๐ฒ๐พ Malaysia | โ MyInvois | Mandated 2024+ | LHDN |
Middle East (GCC)โ
Rapid Peppol expansion in Gulf states:
| Country | B2G Status | B2B Status | Notes |
|---|---|---|---|
| ๐ฆ๐ช UAE | โ Available | Growing | FATA e-invoicing |
| ๐ธ๐ฆ Saudi Arabia | โ ZATCA | โ Mandated | FATOORA Phase 2 |
| ๐ถ๐ฆ Qatar | โ Available | Growing | Tax Authority |
| ๐ด๐ฒ Oman | โ Available | Growing | Tax Authority / Fatoora |
Americasโ
| Country | B2G Status | B2B Status | Notes |
|---|---|---|---|
| ๐บ๐ธ United States | Available | Growing | Business Payments Coalition |
| ๐จ๐ฆ Canada | Available | Growing | โ |
| ๐ฒ๐ฝ Mexico | โ CFDI | โ Required | SAT integration |
Identifier Schemes by Countryโ
Quick reference for the most common schemes:
Netherlands ๐ณ๐ฑโ
| Scheme | Name | Format | Example |
|---|---|---|---|
0106 | KVK | 8 digits | 12345678 |
0190 | OIN | 20 digits | 00000001234567890000 |
Germany ๐ฉ๐ชโ
| Scheme | Name | Format | Example |
|---|---|---|---|
0204 | VAT | DE + 9 digits | DE123456789 |
0209 | Leitweg-ID | Variable | 991-12345-67 |
Belgium ๐ง๐ชโ
| Scheme | Name | Format | Example |
|---|---|---|---|
0208 | CBE/KBO | 10 digits | 0123456789 |
France ๐ซ๐ทโ
| Scheme | Name | Format | Example |
|---|---|---|---|
9925 | SIRET | 14 digits | 12345678901234 |
0009 | SIREN | 9 digits | 123456789 |
Italy ๐ฎ๐นโ
| Scheme | Name | Format | Example |
|---|---|---|---|
0210 | Codice Fiscale | 11-16 chars | RSSMRA85M01H501W |
0211 | IPA Code | 6 chars | UFABCD |
Norway ๐ณ๐ดโ
| Scheme | Name | Format | Example |
|---|---|---|---|
0192 | Organisasjonsnummer | 9 digits | 123456789 |
Sweden ๐ธ๐ชโ
| Scheme | Name | Format | Example |
|---|---|---|---|
0007 | Organisationsnummer | 10 digits | 1234567890 |
Singapore ๐ธ๐ฌโ
| Scheme | Name | Format | Example |
|---|---|---|---|
0195 | UEN | Variable | S12345678A |
Country-Specific Validationโ
GoRoute applies country-specific validation rules through the deep-validation endpoint. Both validation endpoints take a JSON body containing a canonical invoice โ not raw XML.
| Endpoint | Purpose |
|---|---|
POST /api/v1/invoices/validate | Fast structural and business-rule check (dry run) |
POST /api/v1/invoices/validate/deep | Full CEN EN16931 + Peppol BIS Schematron validation, or the PINT pack for a PINT document |
import requests
response = requests.post(
"https://app.goroute.ai/peppol-api/api/v1/invoices/validate/deep",
headers={
"X-API-Key": "your_api_key",
"Content-Type": "application/json",
},
json={
"invoice": invoice, # CanonicalInvoice
"include_schematron": True,
},
)
result = response.json()
print(result["is_valid"], result["error_count"], result["warning_count"])
How the Schematron pack is selectedโ
There is no cius query parameter, and receiver_country does not select one either.
Pack selection is driven entirely by the document itself. GoRoute reads the rendered
invoice's cbc:CustomizationID:
- If it identifies a PINT jurisdiction that GoRoute has a compiled pack for, that PINT pack is run instead of CEN EN16931 โ not in addition to it. The PINT pack already incorporates the adapted EN16931 rules.
- Otherwise the document is validated against CEN EN16931 + Peppol BIS 3.0.
DeepValidationRequest does accept an optional receiver_country. It feeds a national CIUS
layer that is not implemented: the layer runs, finds nothing configured, and returns no
pack. Setting it changes nothing about which Schematron runs.
Deep validation responseโ
The response is a DeepValidationResponse:
| Field | Type | Meaning |
|---|---|---|
is_valid | boolean | False if any error or fatal finding |
error_count | integer | Number of errors |
warning_count | integer | Number of warnings |
validation_time_ms | number | Validation duration |
schematron_version | string | Schematron pack version applied |
profile | object | Audit metadata: schematron_release_track, schematron_pack_checksum, cius_pack_ids_applied |
errors | array | Findings with layer, identifier, identifier_type |
warnings | array | Same shape as errors |
score | integer | Compliance score, 0โ100 |
ubl_xml_preview | string | Preview of the generated UBL XML if validation passes |
cius_pack_ids_applied is always emptyThe field exists on the response, but the national CIUS layer that would populate it is not
implemented, so it is permanently an empty list. Do not use it as an audit trail of
which national rules were applied. The audit fields that are actually populated are
profile.schematron_release_track and profile.schematron_pack_checksum.
Compliance gate policy: error and fatal severities reject (is_valid: false); warning
severity passes with a flag (is_valid: true, logged).
Schematron packs GoRoute actually runsโ
These are the packs compiled into the GoRoute validator image at build time. Anything not on this list is not validated by a national Schematron, whatever the country guide for that jurisdiction says about local requirements.
| Pack | Source | Applies to |
|---|---|---|
Peppol BIS 3.0 (PEPPOL-EN16931-UBL) | OpenPeppol | Baseline for every non-PINT document |
CEN EN16931 (CEN-EN16931-UBL) | OpenPeppol | Baseline for every non-PINT document |
| PINT EU | OpenPeppol PINT eu | Documents whose CustomizationID is PINT EU |
| PINT Japan | OpenPeppol PINT jp | PINT JP documents |
| PINT Singapore | OpenPeppol PINT sg | PINT SG documents |
| PINT A-NZ Billing (v1.1.2) | OpenPeppol PINT aunz | PINT A-NZ billing documents |
| PINT A-NZ Self-billing (v1.1.2) | OpenPeppol PINT aunz-sb | PINT A-NZ self-billing documents |
| PINT Malaysia | OpenPeppol PINT my | PINT MY documents |
| PINT Oman | Copied into the image (not yet published by OpenPeppol) | PINT OM documents |
Earlier versions of this page listed XRechnung, NLCIUS and Factur-X as supported. That was wrong. Those packs are not compiled into the validator and no national Schematron runs for Germany, the Netherlands, France or Italy. Those documents are validated against CEN EN16931 + Peppol BIS 3.0 only. If you need national CIUS conformance today, validate against the national tooling as well.
Only PINT versions that OpenPeppol publishes on its A-NZ specification pages are stated
above; the other PINT packs are pulled from OpenPeppol's current resources.zip at image
build time and are not pinned to a version this documentation can quote.
Country Guidesโ
Select a country for detailed requirements:
- ๐ณ๐ฑ Netherlands โ KVK, OIN, DigiInkoop
- ๐ฉ๐ช Germany โ XRechnung, Leitweg-ID
- ๐ง๐ช Belgium โ CBE, Mercurius
- ๐ซ๐ท France โ Chorus Pro, Factur-X
- ๐ฎ๐น Italy โ SDI, FatturaPA
- ๐ณ๐ด Norway โ EHF, Altinn
- ๐จ๐ญ Switzerland โ UID, e-bill
- ๐ธ๐ช Sweden โ Organisationsnummer, Svefaktura
- ๐ต๐ฑ Poland โ KSeF, NIP
- ๐ท๐ด Romania โ RO e-Factura, CUI
- ๐ธ๐ฌ Singapore โ InvoiceNow, UEN
- ๐ฆ๐บ Australia โ ABN 0151, PINT A-NZ, GST
- ๐ณ๐ฟ New Zealand โ MBIE, NZBN 0088, PINT A-NZ, GST
- ๐ด๐ฒ Oman โ Fatoora, QR Code, 0248
Next Stepsโ
Further readingโ
- Global e-invoicing platform
- The Peppol network
- 2026 e-invoicing mandate tracker โ every country, one page
- How to choose a Peppol Access Point
- One API for multi-country e-invoicing
Ready to build? The free developer sandbox gives you test credentials and a registered participant, provisioned within 24 hours on business days. Recorded ERP integration walkthroughs are on the tutorials page.