Skip to main content

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:

FieldDescriptionExample
Legal NameOfficial registered company nameAcme Corporation B.V.
VAT NumberTax identification numberNL123456789B01
Peppol SchemeIdentifier scheme for your country0106 (NL KvK)
Peppol IDYour identifier in the scheme12345678
CountryISO 3166-1 alpha-2 codeNL
AddressRegistered business addressHerengracht 123, Amsterdam

Common Peppol Identifier Schemes​

CountryScheme CodeDescription
Netherlands0106KvK (Chamber of Commerce)
Belgium0208Enterprise Number
Germany9930Leitweg-ID
France0009SIRET
Italy0211Codice Fiscale
Global0088GLN (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​

  1. Log in to app.goroute.ai
  2. Navigate to Organizations → Create New
  3. Fill in the organization details
  4. 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:

  1. Contact the current AP to initiate a migration
  2. 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​

  1. Use production identifiers in production - Don't reuse test identifiers
  2. Verify before sending - Always confirm registration before first send
  3. Keep information updated - Update organization details when they change
  4. Test with sandbox first - Validate your integration before going live

Next Steps​