Enterprise‑ready Peppol routing
Enterprise‑ready Peppol routing API and observability platform.
- Route each document by your workflow.
- Fail over to the next provider.
- Analyse in-depth telemetry for each provider.
One routing layer for every invoice you send
Connect your integration once and use these six capabilities with every provider.
One Peppol API
One integration for every provider, idempotent and asynchronous even when the provider is not.
What the API coversYour own labels
Add your own labels to each document. They return in every log line and every export.
Your labels in every exportGuardrails
EnterpriseEvery IBAN on the invoice is checked before it leaves. An invoice that fails the check is held, and you see why.
On the Enterprise tierYour routing workflow
Draw it on a canvas. Set conditions on country, entity, document type and load. Then route, hold, schedule, delay, call a webhook or block a receiver.
See the workflow examplesBring your own keys
Scoped, short-lived and revocable, and never in the payment path.
How we hold your keysOne log of every attempt
Every attempt, every provider and every result, for each invoice you send.
What we measure
Add providers in three steps
Connect the providers you already pay, choose which one sends each document, and send everything through one API. Your ERP code does not change.
Connect your provider keys
Add the API keys of the providers you already pay. Sending needs no new registration.
Build your routing workflow
Your routing workflow picks the provider for each invoice. It routes by recipient country, provider load or document type. Failover passes the document to the next provider when one never accepts it.
Send through one API
Your ERP calls one endpoint and gets one result back. When you add or change a provider, your integration stays the same.
Routing workflows you draw and change
You draw the workflow on a canvas outside the ERP, so a change needs no release.
Invoices from your French entity to French recipients go through Provider A. Everything else goes through Provider B.
- Condition
- The recipient country is France and the legal entity label is your French entity.
- Route
- Provider A, otherwise Provider B.
- Log
- Entity label, country and provider for each document.
- yesactionRoute to a providerProvider A
- otherwiseactionRoute to a providerProvider B
You send a burst of invoices. Provider A takes up to the load you allow. Providers B and C take the rest, each up to its own limit.
- Condition
- Provider A is at the load you allow.
- Route
- Providers B and C, each up to its own allowed load.
- Log
- Provider and load for each document.
- below loadactionRoute to a providerProvider A
- the restactionRoute to a providerProvider B
- the restactionRoute to a providerProvider C
Catalogues go through the provider that carries Peppol BIS Catalogue, invoices through another.
- Condition
- The document type is catalogue.
- Route
- Provider A for catalogues, Provider B for invoices.
- Log
- Document type and provider for each document.
- catalogueactionRoute to a providerProvider A
- invoiceactionRoute to a providerProvider B
Provider A never accepts the document. Failover passes it to Provider B, the next provider in your workflow.
- Condition
- Provider A never accepted the document.
- Route
- Provider B, as attempt 2 of the same document.
- Log
- Both attempts, the provider that carried it and the result.
Detailed measurements and logs for every document
See how each provider handles the invoices you send, per document, country and entity.
Every document, end to end
You see the provider that carried it, every attempt, and when the provider accepted and delivered it.
Every provider, side by side
Acceptance time, delivery time and failure rate per provider, from your own traffic. Keep a provider, send it less, or show the numbers to the auditor.
Reporting in your labels
Every log line and every export carries your own labels, so your close reconciles per entity, not per provider.
| Provider | Accepted in | Delivered in | Not accepted | Volumeper day | State |
|---|---|---|---|---|---|
| Provider A | 1.2 s | 38 s | 0.4% | Healthy | |
| Provider B | 1.4 s | 41 s | 0.6% | Healthy | |
| Provider C | 6.8 s | 3 min | 2.1% | Sloweron Thu, Fri |
Last attempts
- 09:41:07 attempt 1 Provider A not accepted
- 09:41:09 attempt 2 Provider B delivered
- 09:42:15 attempt 1 Provider C delivered
Example view. The numbers come from the invoices you send.
One API call for any provider
Each invoice goes to one API that adds routing, your own labels and a log of every attempt.
request you sendPOST /documents
Authorization: Bearer
‹short-lived token›
Idempotency-Key: ‹your key›
{
"document": ‹your invoice›,
"labels": {
"legal_entity": "‹your entity›",
"billing_run": "‹your billing run›"
}
}response at once202 Accepted
{
"id": "‹document id›",
"state": "queued"
}webhook laterPOST ‹your webhook URL›
{
"event": "document.result",
"state": "delivered",
"carried_by": "Provider B",
"attempts": [
{ "provider": "Provider A",
"state": "not accepted" },
{ "provider": "Provider B",
"state": "delivered" }
],
"labels": ‹the labels you sent›
}Example only. The API reference has the exact field names.
Your keys and your routes stay yours
- Note 1Scoped keys. You give us only what the routing layer needs.
- Note 2Short-lived tokens. You have no static secret to rotate. Revoke a key at any moment.
Idempotent and asynchronous
- Note 3Idempotent, even when your provider is not. Send the same document twice and we send it once, matched by your idempotency key or by the document identity.
- Note 4Asynchronous, even when your provider is not. You get a document id at once. The result comes by webhook, or when you ask for it.
Report on every document
- Note 5Your own labels. Legal entity, cost centre, billing run or ERP document number. They come back in every result and every export.
- Note 6Named carrier. The webhook names the provider that carried the document and lists every attempt.
Peppol providers you can bring
Bring the key of any provider with an API, or activate a provider in the product: Maventa, Invopop, Storecove, Billit, Dokapi, SUPERPDP, B2BRouter and others, in no order. Bring two providers or ten, and your workflow can route to each one. You choose them and you contract them.
Pricing for the routing layer
Your Peppol access point price stays with your provider.
Developer
Free
No card required.
- One provider key
- 500 documents a month
- Full telemetry on every document
- 30-day retention
- At 500 documents we stop accepting new ones, so you never owe money
Growth
RecommendedEUR249a month
10,000 documents included, then EUR 0.01 each.
- Everything in Developer, plus:
- Unlimited provider keys
- Routing workflows you draw
- Failover under the resend rule
- 90-day retention
- A monthly cap that you set
- Email support, next business day
Enterprise
On request
For a routing layer that passes your security review.
- Everything in Growth, plus:
- SSO and SCIM
- An audit log API
- Custom retention and guardrails
- SLA-backed support with a response time
- Provider SLOs on your own access points
Prices exclude VAT. Your own provider keys have no markup on any tier. A provider that you activate in the product has a markup, and we show it.
Questions from finance and IT
Where does PeppolRouter sit in the Peppol network?
In front of your access point. Your invoices reach the Peppol network through the access point that you chose and pay.
We are the routing layer in front of it, with your keys and your workflow.
Can I send through more than one Peppol provider?
Yes. You receive with one provider, and you can send with any provider.
Your registration tells senders where to deliver documents to you. How your invoices leave is your choice, so you keep your current provider and add others.
How does failover keep each invoice single?
We resend only when the provider never accepted the document: a refused connection, a TLS or DNS failure, or a 5xx error before the provider acknowledges the document.
After acceptance, we show you the document, the provider and the elapsed time, and you decide.
How much integration work does a second provider add?
A second contract, and the same integration. You keep one integration, one result back to your ERP, and one record of which provider carried each document.
Which part of the path does routing cover?
The path from your systems to the access points you contract. The Peppol address book (SML) sets the recipient's access point for each document type.
What do you promise?
The mechanism: the resend rule, the workflow you build, and a log of every attempt.
For measured access point availability, see Live Peppol status.
Start with your current Peppol API provider
Bring the API key you already have and send your first invoice through PeppolRouter today. Add more providers when you are ready. Your integration stays the same.
- your provider key
- one API
- deliveredcarried_by your provider