Skip to main content

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:

CountryB2G MandateB2B StatusCIUS
๐Ÿ‡ณ๐Ÿ‡ฑ Netherlandsโœ… RequiredEncouragedNLCIUS
๐Ÿ‡ฉ๐Ÿ‡ช Germanyโœ… RequiredEncouragedXRechnung
๐Ÿ‡ง๐Ÿ‡ช Belgiumโœ… RequiredGrowingโ€”
๐Ÿ‡ซ๐Ÿ‡ท Franceโœ… RequiredComing 2026Factur-X
๐Ÿ‡ฎ๐Ÿ‡น Italyโœ… Requiredโœ… RequiredFatturaPA
๐Ÿ‡ช๐Ÿ‡ธ Spainโœ… RequiredGrowingโ€”
๐Ÿ‡ต๐Ÿ‡น Portugalโœ… RequiredGrowingโ€”
๐Ÿ‡ฆ๐Ÿ‡น Austriaโœ… RequiredGrowingโ€”
๐Ÿ‡ต๐Ÿ‡ฑ Polandโœ… RequiredComingKSeF
What the CIUS column means

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:

CountryB2G MandateB2B StatusNotes
๐Ÿ‡ณ๐Ÿ‡ด Norwayโœ… RequiredCommonEHF format
๐Ÿ‡ธ๐Ÿ‡ช Swedenโœ… RequiredCommonSvefaktura
๐Ÿ‡ฉ๐Ÿ‡ฐ Denmarkโœ… RequiredCommonOIOUBL
๐Ÿ‡ซ๐Ÿ‡ฎ Finlandโœ… RequiredCommonFinvoice

Asia-Pacificโ€‹

Growing Peppol adoption:

CountryB2G StatusB2B StatusNotes
๐Ÿ‡ธ๐Ÿ‡ฌ Singaporeโœ… InvoiceNowGrowingGovernment push
๐Ÿ‡ฆ๐Ÿ‡บ Australiaโœ… AvailableGrowingPINT A-NZ
๐Ÿ‡ณ๐Ÿ‡ฟ New Zealandโœ… AvailableGrowingPINT A-NZ
๐Ÿ‡ฏ๐Ÿ‡ต Japanโœ… PilotStartingJP PINT
๐Ÿ‡ฒ๐Ÿ‡พ Malaysiaโœ… MyInvoisMandated 2024+LHDN

Middle East (GCC)โ€‹

Rapid Peppol expansion in Gulf states:

CountryB2G StatusB2B StatusNotes
๐Ÿ‡ฆ๐Ÿ‡ช UAEโœ… AvailableGrowingFATA e-invoicing
๐Ÿ‡ธ๐Ÿ‡ฆ Saudi Arabiaโœ… ZATCAโœ… MandatedFATOORA Phase 2
๐Ÿ‡ถ๐Ÿ‡ฆ Qatarโœ… AvailableGrowingTax Authority
๐Ÿ‡ด๐Ÿ‡ฒ Omanโœ… AvailableGrowingTax Authority / Fatoora

Americasโ€‹

CountryB2G StatusB2B StatusNotes
๐Ÿ‡บ๐Ÿ‡ธ United StatesAvailableGrowingBusiness Payments Coalition
๐Ÿ‡จ๐Ÿ‡ฆ CanadaAvailableGrowingโ€”
๐Ÿ‡ฒ๐Ÿ‡ฝ Mexicoโœ… CFDIโœ… RequiredSAT integration

Identifier Schemes by Countryโ€‹

Quick reference for the most common schemes:

Netherlands ๐Ÿ‡ณ๐Ÿ‡ฑโ€‹

SchemeNameFormatExample
0106KVK8 digits12345678
0190OIN20 digits00000001234567890000

Germany ๐Ÿ‡ฉ๐Ÿ‡ชโ€‹

SchemeNameFormatExample
0204VATDE + 9 digitsDE123456789
0209Leitweg-IDVariable991-12345-67

Belgium ๐Ÿ‡ง๐Ÿ‡ชโ€‹

SchemeNameFormatExample
0208CBE/KBO10 digits0123456789

France ๐Ÿ‡ซ๐Ÿ‡ทโ€‹

SchemeNameFormatExample
9925SIRET14 digits12345678901234
0009SIREN9 digits123456789

Italy ๐Ÿ‡ฎ๐Ÿ‡นโ€‹

SchemeNameFormatExample
0210Codice Fiscale11-16 charsRSSMRA85M01H501W
0211IPA Code6 charsUFABCD

Norway ๐Ÿ‡ณ๐Ÿ‡ดโ€‹

SchemeNameFormatExample
0192Organisasjonsnummer9 digits123456789

Sweden ๐Ÿ‡ธ๐Ÿ‡ชโ€‹

SchemeNameFormatExample
0007Organisationsnummer10 digits1234567890

Singapore ๐Ÿ‡ธ๐Ÿ‡ฌโ€‹

SchemeNameFormatExample
0195UENVariableS12345678A

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.

EndpointPurpose
POST /api/v1/invoices/validateFast structural and business-rule check (dry run)
POST /api/v1/invoices/validate/deepFull 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:

FieldTypeMeaning
is_validbooleanFalse if any error or fatal finding
error_countintegerNumber of errors
warning_countintegerNumber of warnings
validation_time_msnumberValidation duration
schematron_versionstringSchematron pack version applied
profileobjectAudit metadata: schematron_release_track, schematron_pack_checksum, cius_pack_ids_applied
errorsarrayFindings with layer, identifier, identifier_type
warningsarraySame shape as errors
scoreintegerCompliance score, 0โ€“100
ubl_xml_previewstringPreview of the generated UBL XML if validation passes
cius_pack_ids_applied is always empty

The 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.

PackSourceApplies to
Peppol BIS 3.0 (PEPPOL-EN16931-UBL)OpenPeppolBaseline for every non-PINT document
CEN EN16931 (CEN-EN16931-UBL)OpenPeppolBaseline for every non-PINT document
PINT EUOpenPeppol PINT euDocuments whose CustomizationID is PINT EU
PINT JapanOpenPeppol PINT jpPINT JP documents
PINT SingaporeOpenPeppol PINT sgPINT SG documents
PINT A-NZ Billing (v1.1.2)OpenPeppol PINT aunzPINT A-NZ billing documents
PINT A-NZ Self-billing (v1.1.2)OpenPeppol PINT aunz-sbPINT A-NZ self-billing documents
PINT MalaysiaOpenPeppol PINT myPINT MY documents
PINT OmanCopied into the image (not yet published by OpenPeppol)PINT OM documents
No XRechnung, NLCIUS, Factur-X or FatturaPA Schematron is run

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โ€‹

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.