SMP Registration
The Service Metadata Publisher (SMP) is the directory that tells the Peppol network where to find you. When you register in the SMP, other participants can discover your capabilities and send you documents.
What is SMP?โ
The SMP stores:
- Who you are โ Your Peppol identifier
- What you can receive โ Document types and processes
- How to reach you โ Your Access Point's endpoint
- Security info โ Certificates for message encryption
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ SMP Record โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Participant: 0106:12345678 โ
โ โโโ Document: Invoice-2 โ
โ โ โโโ Process: BIS Billing 3.0 โ
โ โ โโโ Endpoint: https://ap.goroute.ai/as4 โ
โ โโโ Document: CreditNote-2 โ
โ โโโ Process: BIS Billing 3.0 โ
โ โโโ Endpoint: https://ap.goroute.ai/as4 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
How SMP Lookup Worksโ
When GoRoute sends an invoice to a receiver:
1. Sender provides: 0106:12345678 (receiver ID)
โ
โผ
2. GoRoute queries SML: Where is this participant's SMP?
โ
โผ
3. SML returns: smp-goroute.acc.edelivery.tech (SMP URL)
โ
โผ
4. GoRoute queries SMP: What are this participant's capabilities?
โ
โผ
5. SMP returns:
- Document types: Invoice, Credit Note
- Access Point: https://receiver-ap.example.com/as4
- Certificate: [X.509 certificate]
โ
โผ
6. GoRoute delivers invoice to receiver's Access Point
Registration Processโ
Step 1: Create Participantโ
First, create a participant record in GoRoute:
import requests
participant = {
"scheme": "0106",
"identifier": "12345678",
"name": "My Company BV",
"country": "NL",
"email": "invoices@mycompany.nl"
}
response = requests.post(
"https://app.goroute.ai/peppol-api/api/v1/participants",
headers={
"X-API-Key": "your_api_key",
"Content-Type": "application/json"
},
json=participant
)
result = response.json()
print(f"Participant ID: {result['id']}")
Step 2: Register in SMPโ
Then register in the SMP with document capabilities:
registration = {
"document_types": [
{
"document_type": "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2",
"process_id": "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0"
},
{
"document_type": "urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2",
"process_id": "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0"
}
]
}
response = requests.post(
f"https://app.goroute.ai/peppol-api/api/v1/participants/{participant_id}/smp/register",
headers={
"X-API-Key": "your_api_key",
"Content-Type": "application/json"
},
json=registration
)
result = response.json()
print(f"SMP Registration Status: {result['status']}")
Step 3: Verify Registrationโ
Confirm the registration was successful:
response = requests.get(
f"https://app.goroute.ai/peppol-api/api/v1/participants/{participant_id}/smp/status",
headers={"X-API-Key": "your_api_key"}
)
status = response.json()
print(f"Registered: {status['registered']}")
print(f"Document Types: {status['document_types']}")
print(f"Last Sync: {status['last_sync']}")
SMP Record Structureโ
An SMP record contains:
Service Groupโ
<?xml version="1.0" encoding="UTF-8"?>
<ServiceGroup xmlns="http://busdox.org/serviceMetadata/publishing/1.0/">
<ParticipantIdentifier scheme="iso6523-actorid-upis">0106:12345678</ParticipantIdentifier>
<ServiceMetadataReferenceCollection>
<ServiceMetadataReference
href="https://smp.goroute.ai/0106:12345678/services/urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"/>
</ServiceMetadataReferenceCollection>
</ServiceGroup>
Service Metadataโ
<?xml version="1.0" encoding="UTF-8"?>
<ServiceMetadata xmlns="http://busdox.org/serviceMetadata/publishing/1.0/">
<ServiceInformation>
<ParticipantIdentifier scheme="iso6523-actorid-upis">0106:12345678</ParticipantIdentifier>
<DocumentIdentifier scheme="busdox-docid-qns">
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
</DocumentIdentifier>
<ProcessList>
<Process>
<ProcessIdentifier scheme="cenbii-procid-ubl">
urn:fdc:peppol.eu:2017:poacc:billing:01:1.0
</ProcessIdentifier>
<ServiceEndpointList>
<Endpoint transportProfile="peppol-transport-as4-v2_0">
<EndpointURI>https://ap.goroute.ai/as4</EndpointURI>
<RequireBusinessLevelSignature>false</RequireBusinessLevelSignature>
<Certificate>MIIF...</Certificate>
<ServiceDescription>GoRoute Peppol Access Point</ServiceDescription>
<TechnicalContactUrl>https://goroute.ai/#contact</TechnicalContactUrl>
</Endpoint>
</ServiceEndpointList>
</Process>
</ProcessList>
</ServiceInformation>
</ServiceMetadata>
Document Capabilitiesโ
Billing Documentsโ
Most participants register for billing documents:
BILLING_CAPABILITIES = [
{
"document_type": "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2",
"process_id": "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0",
"description": "Peppol BIS Billing 3.0 Invoice"
},
{
"document_type": "urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2",
"process_id": "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0",
"description": "Peppol BIS Billing 3.0 Credit Note"
}
]
Full Capabilitiesโ
For organizations needing all document types:
FULL_CAPABILITIES = [
# Billing
{"document_type": "Invoice-2", "process_id": "billing:01:1.0"},
{"document_type": "CreditNote-2", "process_id": "billing:01:1.0"},
# Ordering
{"document_type": "Order-2", "process_id": "ordering:01:1.0"},
{"document_type": "OrderResponse-2", "process_id": "ordering:01:1.0"},
# Catalogue
{"document_type": "Catalogue-2", "process_id": "catalogue:01:1.0"},
# Despatch
{"document_type": "DespatchAdvice-2", "process_id": "despatch:01:1.0"}
]
SMP Managementโ
Update Registrationโ
Modify document capabilities:
# Add new document type capability
response = requests.put(
f"https://app.goroute.ai/peppol-api/api/v1/participants/{participant_id}/smp/capabilities",
headers={
"X-API-Key": "your_api_key",
"Content-Type": "application/json"
},
json={
"document_types": [
# Include all capabilities (existing + new)
{"document_type": "Invoice-2", "process_id": "billing:01:1.0"},
{"document_type": "CreditNote-2", "process_id": "billing:01:1.0"},
{"document_type": "Order-2", "process_id": "ordering:01:1.0"} # New
]
}
)
Deregister from SMPโ
Remove participant from the Peppol network:
response = requests.delete(
f"https://app.goroute.ai/peppol-api/api/v1/participants/{participant_id}/smp/deregister",
headers={"X-API-Key": "your_api_key"}
)
# Participant will no longer be discoverable on Peppol
Deregistering from SMP means other participants can no longer send you documents via Peppol. Only do this if you're migrating to another Access Point or leaving the network.
Test vs Productionโ
Test SMPโ
SML: acc.edelivery.tech
SMP: smp-test.goroute.ai
Production SMPโ
SML: edelivery.tech
SMP: smp.goroute.ai
Test and production are completely separate networks. A participant registered in test cannot receive documents from production, and vice versa.
Troubleshootingโ
Registration Failedโ
Error: "Participant already registered with another AP"
The identifier is already registered with a different Access Point. The previous provider must deregister before GoRoute can register.
# Contact GoRoute support for migration assistance
# admin@goroute.ai
Lookup Returns Nothingโ
Error: "Participant not found in SMP"
- Check if registration completed successfully
- Verify you're using the correct environment (test/prod)
- Wait 5-10 minutes for DNS propagation
Wrong Document Typesโ
Error: "Receiver does not support document type"
The receiver's SMP registration doesn't include the document type you're trying to send.
# Check receiver's capabilities first
response = requests.get(
"https://app.goroute.ai/peppol-api/api/v1/participants/lookup",
params={"scheme": "0106", "identifier": "receiver_id"},
headers={"X-API-Key": "your_api_key"}
)
capabilities = response.json()["document_types"]
Best Practicesโ
- Register Early โ Complete SMP registration before going live
- Test First โ Always register in test environment before production
- Minimal Capabilities โ Only register document types you can actually process
- Monitor Status โ Set up alerts for SMP registration changes
- Keep Records โ Maintain history of registration changes
API Referenceโ
Register in SMPโ
POST /api/v1/participants/{participant_id}/smp/register
Check SMP Statusโ
GET /api/v1/participants/{participant_id}/smp/status
Update Capabilitiesโ
PUT /api/v1/participants/{participant_id}/smp/capabilities
Deregisterโ
DELETE /api/v1/participants/{participant_id}/smp/deregister