Create a Sender
Before you can send invoices through the Peppol network, you need to establish your organization as a "sender" (also known as a Legal Entity). This guide walks you through the complete setup process.
Overview​
A sender in GoRoute represents your organization or your client's organization that will send e-invoices. Each sender has:
- Peppol Identifier - A unique ID on the Peppol network (e.g.,
0088:1234567890123) - Organization Details - Legal name, address, VAT number
- Document Capabilities - Types of documents you can send
- SMP Registration - Entry in the Service Metadata Publisher
Step 1: Gather Required Information​
Before creating a sender, collect this information:
| Field | Description | Example |
|---|---|---|
| Legal Name | Official registered company name | Acme Corporation B.V. |
| VAT Number | Tax identification number | NL123456789B01 |
| Peppol Scheme | Identifier scheme for your country | 0106 (NL KvK) |
| Peppol ID | Your identifier in the scheme | 12345678 |
| Country | ISO 3166-1 alpha-2 code | NL |
| Address | Registered business address | Herengracht 123, Amsterdam |
Common Peppol Identifier Schemes​
| Country | Scheme Code | Description |
|---|---|---|
| Netherlands | 0106 | KvK (Chamber of Commerce) |
| Belgium | 0208 | Enterprise Number |
| Germany | 9930 | Leitweg-ID |
| France | 0009 | SIRET |
| Italy | 0211 | Codice Fiscale |
| Global | 0088 | GLN (EAN Location Number) |
See Identifiers for the complete list.
Step 2: Create the Organization​
Via API​
curl -X POST https://app.goroute.ai/peppol-api/organizations \
-H "X-API-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Corporation B.V.",
"country": "NL",
"vat_number": "NL123456789B01",
"address": {
"street": "Herengracht 123",
"city": "Amsterdam",
"postal_code": "1015 BH",
"country": "NL"
}
}'
Response:
{
"id": "org_abc123",
"name": "Acme Corporation B.V.",
"country": "NL",
"vat_number": "NL123456789B01",
"created_at": "2026-01-26T10:30:00Z"
}
Via Dashboard​
- Log in to app.goroute.ai
- Navigate to Organizations → Create New
- Fill in the organization details
- Click Create Organization
Step 3: Register Peppol Identifier​
After creating the organization, register it on the Peppol network:
curl -X POST https://app.goroute.ai/peppol-api/participants \
-H "X-API-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"org_id": "org_abc123",
"scheme": "0106",
"identifier": "12345678",
"document_types": [
"urn:oasis:names:specification:ubl:schema:xsd:Invoice-2::Invoice##urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0::2.1",
"urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2::CreditNote##urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0::2.1"
]
}'
Response:
{
"participant_id": "0106:12345678",
"status": "registered",
"smp_url": "https://smp.goroute.ai/0106:12345678",
"document_types": ["Invoice", "CreditNote"],
"registered_at": "2026-01-26T10:35:00Z"
}
Step 4: Verify Registration​
Confirm the sender is properly registered on the Peppol network:
curl https://app.goroute.ai/peppol-api/participants/lookup?identifier=0106:12345678 \
-H "X-API-Key: your-api-key"
Response:
{
"participant_id": "0106:12345678",
"registered": true,
"access_point": "POP000991",
"document_types": [
{
"document_type_id": "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2::Invoice##urn:cen.eu:en16931:2017...",
"process_id": "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0"
}
],
"smp_url": "https://smp.goroute.ai/iso6523-actorid-upis::0106:12345678"
}
Step 5: Send Your First Invoice​
Now you can send invoices from this sender:
curl -X POST https://app.goroute.ai/peppol-api/documents/send \
-H "X-API-Key: your-api-key" \
-H "Content-Type: application/xml" \
-d @invoice.xml
The AccountingSupplierParty in your invoice must match the registered sender:
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="0106">12345678</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>Acme Corporation B.V.</cbc:Name>
</cac:PartyName>
<!-- ... -->
</cac:Party>
</cac:AccountingSupplierParty>
Multi-Tenant Senders​
If you're an integrator sending on behalf of multiple clients, create separate organizations for each:
from goroute import GoRouteClient
client = GoRouteClient(api_key="your-api-key")
# Create organizations for each client
for company in client_companies:
org = client.organizations.create(
name=company.legal_name,
country=company.country,
vat_number=company.vat_number
)
# Register on Peppol
participant = client.participants.register(
org_id=org.id,
scheme=company.peppol_scheme,
identifier=company.peppol_id
)
print(f"Registered {company.legal_name} as {participant.participant_id}")
Sender Capabilities​
Supported Document Types​
By default, senders are registered for:
- Invoice (BIS Billing 3.0)
- Credit Note (BIS Billing 3.0)
You can add additional capabilities:
- Order
- Order Response
- Dispatch Advice
- Message Level Response
Adding Document Types​
curl -X PATCH https://app.goroute.ai/peppol-api/participants/0106:12345678 \
-H "X-API-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"document_types": [
"Invoice",
"CreditNote",
"Order",
"OrderResponse"
]
}'
Troubleshooting​
"Identifier already registered"​
Problem: The Peppol identifier is registered with another Access Point.
Solution:
- Contact the current AP to initiate a migration
- See Participant Migration
"Invalid identifier format"​
Problem: The identifier doesn't match the scheme's requirements.
Solution:
- Check the scheme's format requirements
- Remove any spaces or special characters
- Ensure proper length (e.g., GLN must be exactly 13 digits)
"VAT number validation failed"​
Problem: The VAT number couldn't be verified.
Solution:
- Verify the VAT number with VIES
- Ensure country prefix matches country field
- Check for typos
Best Practices​
- Use production identifiers in production - Don't reuse test identifiers
- Verify before sending - Always confirm registration before first send
- Keep information updated - Update organization details when they change
- Test with sandbox first - Validate your integration before going live