Globalization
GoRoute supports sending invoices across the global Peppol network with proper localization for different countries, languages, and currencies. This guide covers how to handle international invoicing requirements.
Multi-Currency Supportβ
Supported Currenciesβ
Peppol BIS Billing 3.0 supports all ISO 4217 currency codes. Common currencies include:
| Code | Currency | Symbol |
|---|---|---|
| EUR | Euro | β¬ |
| USD | US Dollar | $ |
| GBP | British Pound | Β£ |
| SEK | Swedish Krona | kr |
| NOK | Norwegian Krone | kr |
| DKK | Danish Krone | kr |
| CHF | Swiss Franc | CHF |
| PLN | Polish Zloty | zΕ |
| SGD | Singapore Dollar | S$ |
| AUD | Australian Dollar | A$ |
Setting Invoice Currencyβ
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
<!-- Document currency (for line amounts and totals) -->
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
<!-- Tax currency if different from document currency -->
<cbc:TaxCurrencyCode>EUR</cbc:TaxCurrencyCode>
<!-- ... -->
</Invoice>
Multi-Currency Invoicesβ
When the tax reporting currency differs from the invoice currency:
<cbc:DocumentCurrencyCode>USD</cbc:DocumentCurrencyCode>
<cbc:TaxCurrencyCode>EUR</cbc:TaxCurrencyCode>
<cac:TaxTotal>
<!-- Tax in document currency (USD) -->
<cbc:TaxAmount currencyID="USD">1200.00</cbc:TaxAmount>
</cac:TaxTotal>
<cac:TaxTotal>
<!-- Tax in reporting currency (EUR) -->
<cbc:TaxAmount currencyID="EUR">1100.00</cbc:TaxAmount>
</cac:TaxTotal>
Multi-Language Supportβ
Invoice Notes and Descriptionsβ
Include multiple languages in text fields using the languageID attribute:
<cbc:Note languageID="en">Payment due within 30 days</cbc:Note>
<cbc:Note languageID="nl">Betaling binnen 30 dagen</cbc:Note>
<cbc:Note languageID="de">Zahlung innerhalb von 30 Tagen</cbc:Note>
Item Descriptionsβ
<cac:InvoiceLine>
<cac:Item>
<cbc:Description languageID="en">Professional consulting services</cbc:Description>
<cbc:Description languageID="fr">Services de conseil professionnel</cbc:Description>
<cbc:Name>Consulting Services</cbc:Name>
</cac:Item>
</cac:InvoiceLine>
Supported Languagesβ
| Code | Language |
|---|---|
en | English |
nl | Dutch |
de | German |
fr | French |
it | Italian |
es | Spanish |
pt | Portuguese |
pl | Polish |
sv | Swedish |
no | Norwegian |
da | Danish |
fi | Finnish |
Country-Specific Localizationβ
Tax Identificationβ
Different countries require different tax identifier formats:
<!-- Netherlands (BTW) -->
<cac:PartyTaxScheme>
<cbc:CompanyID>NL123456789B01</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<!-- Italy (Partita IVA + Codice Fiscale) -->
<cac:PartyTaxScheme>
<cbc:CompanyID>IT12345678901</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:CompanyID schemeID="0210">RSSMRA85M01H501Z</cbc:CompanyID>
</cac:PartyLegalEntity>
Address Formatsβ
Addresses vary significantly by country:
<!-- German address -->
<cac:PostalAddress>
<cbc:StreetName>HauptstraΓe 42</cbc:StreetName>
<cbc:CityName>Berlin</cbc:CityName>
<cbc:PostalZone>10115</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>DE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<!-- UK address (with county) -->
<cac:PostalAddress>
<cbc:StreetName>10 Downing Street</cbc:StreetName>
<cbc:CityName>London</cbc:CityName>
<cbc:PostalZone>SW1A 2AA</cbc:PostalZone>
<cbc:CountrySubentity>Greater London</cbc:CountrySubentity>
<cac:Country>
<cbc:IdentificationCode>GB</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<!-- Singapore address (with building name) -->
<cac:PostalAddress>
<cbc:StreetName>1 Raffles Place</cbc:StreetName>
<cbc:AdditionalStreetName>One Raffles Place Tower 1</cbc:AdditionalStreetName>
<cbc:CityName>Singapore</cbc:CityName>
<cbc:PostalZone>048616</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>SG</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
Date and Time Formatsβ
ISO 8601 Datesβ
All dates in UBL must use ISO 8601 format:
<!-- Date only (YYYY-MM-DD) -->
<cbc:IssueDate>2026-01-26</cbc:IssueDate>
<cbc:DueDate>2026-02-26</cbc:DueDate>
<!-- Date with time (for timestamps) -->
<cbc:IssueTime>10:30:00</cbc:IssueTime>
Timezone Handlingβ
GoRoute processes all times in UTC. Include timezone information for clarity:
<cbc:IssueDate>2026-01-26</cbc:IssueDate>
<cbc:IssueTime>10:30:00+01:00</cbc:IssueTime>
Number Formattingβ
Decimal Precisionβ
Use periods as decimal separators and maintain precision:
<!-- Correct -->
<cbc:PriceAmount currencyID="EUR">1234.56</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1.00</cbc:BaseQuantity>
<!-- Incorrect (comma decimal separator) -->
<cbc:PriceAmount currencyID="EUR">1234,56</cbc:PriceAmount>
Quantity Unitsβ
Use UN/ECE Recommendation 20 unit codes:
| Code | Unit | Description |
|---|---|---|
C62 | Unit | One piece/item |
HUR | Hour | Hourly rate |
DAY | Day | Daily rate |
MON | Month | Monthly rate |
KGM | Kilogram | Weight |
MTR | Meter | Length |
LTR | Liter | Volume |
EA | Each | Each item |
<cbc:InvoicedQuantity unitCode="HUR">40.00</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">4000.00</cbc:LineExtensionAmount>
Country-Specific Rules (CIUS)β
Some countries have additional requirements beyond standard Peppol BIS:
Germany (XRechnung)β
<!-- Buyer Reference is mandatory -->
<cbc:BuyerReference>04011000-12345-67</cbc:BuyerReference>
<!-- Leitweg-ID required for public sector -->
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="9930">04011000-12345-67</cbc:EndpointID>
</cac:Party>
</cac:AccountingCustomerParty>
Italy (FatturaPA)β
<!-- Codice Destinatario -->
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="0201">A1B2C3D</cbc:EndpointID>
</cac:Party>
</cac:AccountingCustomerParty>
<!-- Regime Fiscale -->
<cac:AccountingSupplierParty>
<cac:Party>
<cac:PartyTaxScheme>
<cbc:TaxLevelCode>RF01</cbc:TaxLevelCode>
</cac:PartyTaxScheme>
</cac:Party>
</cac:AccountingSupplierParty>
France (Factur-X)β
<!-- SIRET number -->
<cac:PartyLegalEntity>
<cbc:CompanyID schemeID="0009">12345678901234</cbc:CompanyID>
</cac:PartyLegalEntity>
API Localizationβ
Setting Response Languageβ
Request localized error messages and responses:
curl -X POST https://app.goroute.ai/peppol-api/documents/validate \
-H "X-API-Key: your-api-key" \
-H "Accept-Language: nl-NL" \
-d @invoice.xml
Localized Validation Messagesβ
{
"valid": false,
"errors": [
{
"rule": "BR-16",
"message": "Een factuur moet minimaal één factuurregel bevatten",
"message_en": "An Invoice shall have at least one Invoice line"
}
]
}
Best Practicesβ
1. Use ISO Standardsβ
Always use standardized codes:
- Countries: ISO 3166-1 alpha-2 (e.g.,
NL,DE) - Currencies: ISO 4217 (e.g.,
EUR,USD) - Languages: ISO 639-1 (e.g.,
en,nl) - Units: UN/ECE Rec 20 (e.g.,
C62,HUR)
2. Validate for Target Countryβ
Use our validation API with country context:
curl -X POST https://app.goroute.ai/peppol-api/documents/validate \
-H "X-API-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"document": "<Invoice>...</Invoice>",
"target_country": "DE",
"cius": "XRechnung"
}'
3. Handle Character Encodingβ
Always use UTF-8 encoding:
<?xml version="1.0" encoding="UTF-8"?>
Special characters should work natively:
ΓΌ,ΓΆ,Γ€(German umlauts)Γ©,Γ¨,Γͺ(French accents)ΓΈ,Γ¦,Γ₯(Nordic characters)
4. Include Fallback Textβ
When using multiple languages, include English as fallback:
<cbc:Note languageID="nl">Betaling binnen 30 dagen</cbc:Note>
<cbc:Note languageID="en">Payment due within 30 days</cbc:Note>