Skip to main content
Peppol API

Peppol API for sending UBL invoices

Send e-invoices from your ERP, web shop or own billing software through one endpoint. Get a status straight away and track delivery with webhooks.

We enable the Peppol API per company. Create an account first, then contact us. Contact us to activate the API

How the Peppol API works

One endpoint for sending

Send one base64-encoded UBL XML invoice per request to POST /v1/peppol/invoice.

An immediate status

The response contains a submissionId and the status sending or failed, with an error message if something goes wrong.

Delivery updates via webhooks

When the status changes, for example to delivered or failed, your webhook URL receives a callback.

When should you use the Peppol API?

No integration needed?

Do you create your invoices in Factuur Simpel itself? Then you don't need the API: Peppol is included in Complete, with no per-invoice fees.

Create and send Peppol invoices from Factuur Simpel

Does your system already produce UBL files that you would rather upload than integrate?

Send UBL invoices in bulk

OpenAPI docs and code samples

Start in Swagger UI or import the OpenAPI JSON into your own tooling.

API references

Swagger UI

Explore request and response schemas and test from your browser.

https://api.budgetinvoice.com/docs/peppol

OpenAPI JSON

Import the schema into Postman, Insomnia or your code generator.

https://api.budgetinvoice.com/docs/peppol/openapi.json

Submission endpoint

Authenticated endpoint for one UBL invoice per request.

POST https://api.budgetinvoice.com/v1/peppol/invoice
curl --request POST \
  --url 'https://api.budgetinvoice.com/v1/peppol/invoice' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "xml": "BASE64_ENCODED_UBL_XML",
    "targetNetwork": "auto"
  }'

Put your API key in the Authorization header. You create API keys under Settings > API keys.

Delivery status via webhooks

After an accepted submission, your webhook receives the status changes sending, delivered and failed.

  • Set a production and a test webhook URL. Live API keys use the production URL, test keys the test URL.
  • Each callback contains submissionId, filename, targetNetwork, recipient, status and updatedAt.
  • One callback is sent per status change. Failed callbacks appear in the webhook history, where you can resend them.
  • Use submissionId as a unique key so a resent callback is not processed twice.

Secure your endpoint

Callbacks carry no signature header. Use an HTTPS endpoint and check each submissionId against your own submissions.

Example callback

JSON
{
  "submissionId": "bd9f47f3-7bc4-4760-a1dc-8c33df6496f3",
  "filename": "invoice-2026-0001.xml",
  "status": "delivered",
  "targetNetwork": "peppol",
  "recipient": {
    "scheme": "iso6523-actorid-upis",
    "id": "0208:0123456789"
  },
  "updatedAt": "2026-02-28T09:42:11.202Z"
}

Price per invoice sent

No monthly fee and no separate API surcharge. You pay for each invoice you send through the API.

Tiers per calendar month

0 - 3,000 invoices
€0.35
3,001 - 10,000 invoices
€0.25
10,001 - 50,000 invoices
€0.18
50,001 - 250,000 invoices
€0.15
More than 250,000 invoices
€0.12

Price per invoice, excl. VAT

Each tier has its own price. If you send 5,000 invoices in a month, you pay 3,000 × €0.35 + 2,000 × €0.25 = €1,550.00 excl. VAT.

  • No minimum volume
  • No monthly fee
  • Peppol registration included
  • Receiving and forwarding invoices included
  • Same price as bulk sending

How to go live

  1. Create a free account and turn on Peppol in your settings.
  2. Contact us. We activate the Peppol API and per-invoice pricing for your company.
  3. Create an API key under Settings > API keys and set your webhook URLs.

Frequently asked questions

How do I authenticate with the Peppol API?

Send your API key as a Bearer token in the Authorization header. Requests without a valid key return an authorization error.

What format does the endpoint accept?

One base64-encoded UBL XML document per request. This endpoint does not accept ZIP files; use bulk sending for those.

When do I receive webhook callbacks?

Whenever the status of a submission changes. The statuses are sending, delivered and failed. One callback is sent per status change.

Can I choose the target network?

Yes. Pass targetNetwork with auto, peppol or ksef. If you leave it out, auto is used.

How do I activate the Peppol API?

Create an account and contact us. We enable the API and per-invoice pricing for your company. Then create an API key under Settings > API keys and set your webhook URLs.

How much does the Peppol API cost?

You pay per invoice sent, from €0.35 down to €0.12 excl. VAT. The price per invoice drops per tier as you send more invoices in a calendar month. There is no monthly fee and no minimum volume.

Start your Peppol integration

Read the OpenAPI spec, test with the code samples and contact us to activate the API for your company.