Test Identifiers
Use these test identifiers to validate your integration in the GoRoute sandbox environment. These identifiers are pre-registered and configured for various testing scenarios.
Sandbox Environment​
All test identifiers work in the sandbox environment:
- API Base URL:
https://app.goroute.ai/peppol-api - API Key: Use your sandbox API key (starts with
sk_test_)
Test Sender Identifiers​
Use these as the sender (AccountingSupplierParty) in your test invoices:
| Identifier | Scheme | Country | Description |
|---|---|---|---|
9915:phase4-test-sender | 9915 | EU | GoRoute test sender |
0088:5060412690014 | GLN | NL | Netherlands test company |
0106:12345678 | KvK | NL | Netherlands KvK test |
0208:0123456789 | BE | BE | Belgium test company |
9930:DE123456789 | Leitweg | DE | Germany public sector test |
0009:12345678901234 | SIRET | FR | France test company |
0211:12345678901 | IT | IT | Italy test company |
Test Receiver Identifiers​
Use these as the receiver (AccountingCustomerParty) to test different scenarios:
Successful Delivery​
| Identifier | Description | Behavior |
|---|---|---|
9915:phase4-test-receiver | Standard test receiver | Always accepts, returns MDN |
0088:5060412690015 | GLN test receiver | Accepts invoices and credit notes |
9915:helger-test | Peppol testbed | Standard Peppol test endpoint |
Error Scenarios​
| Identifier | Description | Behavior |
|---|---|---|
9915:reject-all | Rejection tester | Rejects with business error |
9915:timeout-test | Timeout tester | Delays response (30s+) |
9915:invalid-cert | Certificate error | Returns certificate error |
9915:not-registered | Lookup failure | Not in SMP (404) |
Document Type Testing​
| Identifier | Supported Documents |
|---|---|
9915:invoice-only | Invoice only |
9915:credit-note-only | Credit Note only |
9915:all-documents | Invoice, Credit Note, Order, Order Response |
Example Test Invoice​
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
<cbc:ID>TEST-INV-001</cbc:ID>
<cbc:IssueDate>2026-01-26</cbc:IssueDate>
<cbc:DueDate>2026-02-26</cbc:DueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
<!-- Test Sender -->
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="9915">phase4-test-sender</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>GoRoute Test Sender</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Test Street 1</cbc:StreetName>
<cbc:CityName>Amsterdam</cbc:CityName>
<cbc:PostalZone>1012 AB</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>NL</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>NL123456789B01</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>GoRoute Test Sender B.V.</cbc:RegistrationName>
<cbc:CompanyID schemeID="0106">12345678</cbc:CompanyID>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingSupplierParty>
<!-- Test Receiver -->
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="9915">phase4-test-receiver</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>GoRoute Test Receiver</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Receiver Street 42</cbc:StreetName>
<cbc:CityName>Brussels</cbc:CityName>
<cbc:PostalZone>1000</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>BE0123456789</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>GoRoute Test Receiver BVBA</cbc:RegistrationName>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingCustomerParty>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">21.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">100.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">21.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">100.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">100.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">121.00</cbc:TaxInclusiveAmount>
<cbc:PayableAmount currencyID="EUR">121.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">1.00</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">100.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>Test Product</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">100.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
</Invoice>
Country-Specific Test Identifiers​
Germany (XRechnung)​
| Identifier | Type | Notes |
|---|---|---|
9930:04011000-12345-67 | Leitweg-ID | Public sector test |
9930:test-xrechnung | Leitweg-ID | XRechnung validation test |
Include BuyerReference for German public sector:
<cbc:BuyerReference>04011000-12345-67</cbc:BuyerReference>
Italy (FatturaPA)​
| Identifier | Type | Notes |
|---|---|---|
0211:IT12345678901 | Codice Fiscale | SDI test recipient |
0201:A1B2C3D | Codice Destinatario | 7-char SDI code |
France (Factur-X)​
| Identifier | Type | Notes |
|---|---|---|
0009:12345678901234 | SIRET | French company test |
0009:11111111100015 | SIRET | Chorus Pro test |
Belgium​
| Identifier | Type | Notes |
|---|---|---|
0208:0123456789 | Enterprise Number | Belgian company test |
0208:0000000000 | Enterprise Number | Error scenario test |
Singapore​
| Identifier | Type | Notes |
|---|---|---|
0195:SGUEN123456789 | UEN | Singapore company test |
0195:SGTEST00001A | UEN | InvoiceNow test |
Testing Scenarios​
Successful Send Flow​
# 1. Send test invoice
curl -X POST https://app.goroute.ai/peppol-api/documents/send \
-H "X-API-Key: sk_test_your_key" \
-H "Content-Type: application/xml" \
-d @test-invoice.xml
# Response
{
"transaction_id": "txn_test_abc123",
"status": "accepted"
}
# 2. Check status
curl https://app.goroute.ai/peppol-api/transactions/txn_test_abc123 \
-H "X-API-Key: sk_test_your_key"
# Response
{
"transaction_id": "txn_test_abc123",
"status": "delivered",
"delivered_at": "2026-01-26T10:35:00Z"
}
Validation Error Flow​
# Send invalid invoice (missing required field)
curl -X POST https://app.goroute.ai/peppol-api/documents/validate \
-H "X-API-Key: sk_test_your_key" \
-H "Content-Type: application/xml" \
-d @invalid-invoice.xml
# Response
{
"valid": false,
"errors": [
{
"rule": "BR-16",
"message": "An Invoice shall have at least one Invoice line",
"severity": "error"
}
]
}
Rejection Flow​
# Send to rejection test endpoint
# Use receiver: 9915:reject-all
curl -X POST https://app.goroute.ai/peppol-api/documents/send \
-H "X-API-Key: sk_test_your_key" \
-d @test-invoice-reject.xml
# Response (after async processing)
{
"transaction_id": "txn_test_xyz789",
"status": "rejected",
"error": {
"code": "PEPPOL:REJECTED",
"message": "Document rejected by receiver"
}
}
Best Practices​
-
Always use test identifiers in sandbox - Never use real production identifiers for testing
-
Test all error scenarios - Don't just test happy path; test rejections, timeouts, validation errors
-
Verify webhook handling - Use test identifiers to trigger webhook events
-
Test country-specific flows - If sending to Germany, test with XRechnung requirements
-
Clean up test data - Periodically clean up test transactions in your database
Moving to Production​
Before going live, ensure:
- Replace all test identifiers with real ones
- Switch to production API key (
sk_live_...) - Register your real Peppol identifier
- Update webhook endpoints to production URLs
- Complete the Production Checklist