About Service Providers
About Service Providers
eInvoicing generates and validates PEPPOL XML, but it doesn't ship invoices over the network on its own. That's the job of a service provider — a PEPPOL Access Point with a contract with the PEPPOL authority. Your service provider is who actually puts your XML into the recipient's mailbox (and vice versa for incoming).
Why you need one
- PEPPOL is a four-corner model: Sender → Sender's Access Point → Receiver's Access Point → Receiver. The two Access Points are service providers; they handle authentication, routing, retries, and standards compliance.
- You can't just POST UBL XML to a customer — they don't accept random HTTP. They accept it from a PEPPOL Access Point.
Supported integrations
| Provider | API Reference | Strengths |
|---|---|---|
| B2B Router | b2brouter.com | Multi-account support; API-based send + poll |
| Recommand | peppol.recommand.eu/api-reference | Webhook for real-time inbound, transparent pricing, multi-company, document verification, GitHub |
Both providers handle the heavy lifting of the four-corner model. You configure credentials in eInvoicing, and the app routes outgoing documents to them and ingests incoming documents from them.
How outbound works
Sales Invoice → EDocument (UBL XML) → Validate → Transmit via API
→ Service Provider (B2B Router / Recommand)
→ Peppol network → Recipient's Access Point → Recipient
The EDocument status updates to "Transmission Successful" and the provider's document ID is stored in the reference field for later tracking.
How inbound works
| Mechanism | When |
|---|---|
| Webhook | Real-time — the provider POSTs UBL XML to /api/method/edocument_integration.api.webhook as soon as a document arrives |
| Polling | On a schedule — the app calls the provider's inbox endpoint hourly, fetches new documents, and creates EDocument records |
Both paths converge on the same EDocument lifecycle: create → detect → validate → match → create Purchase Invoice.
Adding another provider
The integration is pluggable. To add a third provider:
- Create
<provider>_api.pywith a client class exposingtransmit_invoice(xml)andpoll_inbox() - Add a route in
api.py'stransmit_edocument()andpoll_incoming_invoices() - Add the new value to the EDocument Integrator Select field on EDocument Integration Settings
Architecture details: see the edocument_integration repo on GitHub.
Next
- Setting Up a Provider — credentials and DocType setup
- Configuring a Service Provider — webhook URL and polling
- Sending & Receiving — day-to-day usage