Planned 2027

Peppol Gateway

Send e-invoices directly via the Peppol network to authorities and businesses across Europe. Including delivery confirmation and status tracking.

In Planning

What is Peppol?

Peppol (Pan-European Public Procurement OnLine) is a pan-European network for the secure exchange of e-invoices and other business documents.

Peppol dispatch over AS4 is planned for 2027. Until then the API delivers the finished Peppol BIS 3.0 document; certificates, SMP lookup and AS4 transport stay with your access point.

40+
Countries
300k+
Participants
AS4
Protocol
MDN
Confirmation

Send Invoice

bash
1curl -X POST https://service.invoice-api.xhub.io/api/v1/peppol/send \
2 -H "Authorization: Bearer sk_live_abc123..." \
3 -H "Content-Type: application/json" \
4 -d '{
5 "receiverPeppolId": "9930:DE987654321",
6 "documentType": "invoice",
7 "document": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEludm9pY2U+Li4u",
8 "invoiceNumber": "RE-2026-0042",
9 "issueDate": "2026-03-01",
10 "verifyReceiver": true
11 }'

Check first: is the receiver reachable?

bash
1curl https://service.invoice-api.xhub.io/api/v1/peppol/receivers/9930:DE987654321 \
2 -H "Authorization: Bearer sk_live_abc123..."
3 
4# {
5# "reachable": true,
6# "participant": {
7# "peppolId": {
8# "scheme": "9930",
9# "identifier": "DE987654321",
10# "formatted": "9930:DE987654321"
11# },
12# "name": "Behörde XY",
13# "country": "DE",
14# "documentTypes": ["urn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_3.0"],
15# "accessPoint": "storecove"
16# }
17# }

Response

json
1{
2 "success": true,
3 "transmission": {
4 "id": "d29c1f5e-8c2a-4c1e-9f0b-3f1a2b4c5d6e",
5 "organizationId": "org_7Hq2",
6 "invoiceId": null,
7 "direction": "outbound",
8 "providerName": "storecove",
9 "messageId": "0f7b1c94-5a1e-4a0b-9d3c-2e6f8a9b0c1d",
10 "senderPeppolId": "9930:DE123456789",
11 "receiverPeppolId": "9930:DE987654321",
12 "documentType": "invoice",
13 "status": "sent",
14 "errorCode": null,
15 "errorMessage": null,
16 "contentHash": "9f2c1b7d4e8a03f5c6b9d0e1a2f3c4b5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1",
17 "createdAt": "2026-03-01T10:30:00.000Z",
18 "updatedAt": "2026-03-01T10:30:00.000Z",
19 "statusAt": "2026-03-01T10:30:00.000Z"
20 }
21}

Request Parameters

ParameterTypeRequiredDescription
receiverPeppolIdstringPeppol address of the receiver, pattern `^\d{4}:.+$` (example `9930:DE987654321`).
documentstringBase64-encoded UBL XML (Peppol BIS Billing 3.0) — e.g. the `data` value from a `/generate` call.
documentType"invoice" | "credit-note"-Document type of the UBL payload. Default: `invoice`.
environment"sandbox" | "production"-Which Peppol settings (provider configuration and provider key) to use. Default: `production`.
invoiceNumberstring-Invoice number for the transmissions log — not sent over the network.
issueDatestring-Issue date (ISO 8601) for the transmissions log — not sent over the network.
verifyReceiverboolean-Run an SMP discovery check first and refuse with `RECEIVER_NOT_REACHABLE` (HTTP 422) when the receiver cannot accept the document type.

Peppol Participant IDs

Peppol IDs consist of a schema prefix and an identifier. Commonly used schemas:

SchemaNameExampleCountry
0204DE: Leitweg-ID0204:04011000-12345-34DE
9930DE: USt-IdNr.9930:DE123456789DE
0088GLN (GS1)0088:5790000123456INT
0060DUNS0060:123456789INT
0184DK: CVR0184:12345678DK
0190NL: OIN0190:12345678901234567890NL
0106NL: KvK0106:12345678NL
0009FR: SIRET0009:12345678901234FR
0007SE: Organisationsnummer0007:1234567890SE
0192NO: Organisasjonsnummer0192:123456789NO
0208BE: Ondernemingsnummer0208:1234567890BE
9914AT: UID9914:ATU12345678AT
9920ES: NIF9920:ESA12345674ES

Check Delivery Status

GET /api/v1/peppol/transmissions

json
1{
2 "transmissions": [
3 {
4 "id": "d29c1f5e-8c2a-4c1e-9f0b-3f1a2b4c5d6e",
5 "direction": "outbound",
6 "providerName": "storecove",
7 "messageId": "0f7b1c94-5a1e-4a0b-9d3c-2e6f8a9b0c1d",
8 "senderPeppolId": "9930:DE123456789",
9 "receiverPeppolId": "9930:DE987654321",
10 "documentType": "invoice",
11 "status": "delivered",
12 "errorCode": null,
13 "errorMessage": null,
14 "createdAt": "2026-03-01T10:30:00.000Z",
15 "updatedAt": "2026-03-01T10:30:12.000Z",
16 "statusAt": "2026-03-01T10:30:12.000Z"
17 }
18 ]
19}

Ask the access point for the delivery status of a single transmission: POST /api/v1/peppol/transmissions/{messageId}/refresh

bash
1curl -X POST https://service.invoice-api.xhub.io/api/v1/peppol/transmissions/0f7b1c94-5a1e-4a0b-9d3c-2e6f8a9b0c1d/refresh \
2 -H "Authorization: Bearer sk_live_abc123..." \
3 -H "Content-Type: application/json" \
4 -d '{ "environment": "production" }'

Status Values

pendingE-invoice waiting for transmission
sentHanded over to Peppol network
deliveredDelivery confirmation (MDN) received
failedTransmission failed
rejectedAccess point rejected the document

Peppol Webhooks

Receive automatic notifications about delivery status:

peppol.sent

Invoice handed over to Peppol network

peppol.delivered

Delivery confirmation (MDN) received

peppol.failed

Transmission failed

Webhook configuration: Webhooks Documentation

Your existing access point

Until our gateway ships (planned 2027), the API produces Peppol BIS 3.0 compliant documents that you send through your existing access point. The format is a public standard — it is not tied to us.

Premium and Enterprise plan

The Peppol Gateway is not available yet — planned for 2027. On release it becomes part of the Premium plan; it is not included in the Free and Starter plans.