Skip to main content

Overview

With the e-invoice.be API you create, send and receive Peppol invoices and credit notes. The API converts each document to UBL BIS Billing 3.0 and transmits it on the Peppol network. This page is an overview. The endpoint pages in this tab give the parameters and the schemas of each operation. For the changes to the API and to this documentation, see the Changelog.

Base URL

There is one API host:
Develop and test with a sandbox company. A sandbox company runs in test mode: the API sends each document as UBL XML to the contact email address of the company, and nothing goes to the Peppol network. The API host and the endpoints are the same as for a production company. See Test mode and sandbox companies.
The contact email address is the company_email field of the company. GET /api/me/ returns it. If company_email is empty, the send call of a sandbox company returns 400 with the detail Tenant is in test mode but no company email is set. See Send errors.

Authentication

Send the API key of your company as a bearer token in the Authorization header:
Three lookup endpoints accept requests without an API key. See Authentication.

Endpoints

Documents

Schemas: Document schema, LineItem schema. Guides: Create e-invoices, Create credit notes, Self-billing and debit notes, Advanced invoicing, Send UBL documents, Create documents from PDF, Document lifecycle and delivery tracking.

Attachments

Guide: Attachments and PDF.

Document lists

Guides: Receive documents for requests, responses, inbox filters and the pattern to prevent double processing. List, filter and manage documents for filters, sort options and drafts.

Mailbox

Guide: Send invoices by email (Mailbox).

Validation

Validation is not a separate mandatory call. POST /api/documents/ rejects a payload that does not pass the same rules. Use POST /api/validate/json while you develop, because it returns all rule failures and the generated UBL.
Guides: Validation during development, Look up Peppol participants.

Lookup

Guide: Look up Peppol participants.

PDF conversion

Guide: Create documents from PDF.

Webhooks

Guide: Webhooks.

Account and usage

Guides: Authentication, Usage statistics and credits.

Admin API for resellers

Resellers that manage more than one customer company use a separate Admin API. It requires an organisation API key and is available to approved resellers only. The Admin API endpoints are not in the OpenAPI specification. In the Admin API, the name of a company is “tenant”. With the Admin API you can:
  • Create and manage the companies of your customers
  • Create and rotate the API keys of these companies
  • Register these companies on the Peppol network

Admin API

Manage the companies of your customers as a reseller
See also the reseller programme.

Request and response format

Request format

Requests with a body use JSON, with the header Content-Type: application/json. The endpoints that accept files (POST /api/documents/ubl, POST /api/documents/pdf, POST /api/validate/ubl, POST /api/conversion/pdf) use multipart/form-data.
The API rejects a document whose vendor is not a Peppol ID of your company (406). Before you run this example, replace the vendor fields with those of your own company.

Response format

A successful request returns JSON with a 2xx status code. This example shows the first fields of the response to a create request:
For all fields, see the Document schema.

Error responses

The API returns these error status codes: 400, 401, 403 (Admin API only), 404, 405, 406, 409, 415, 422, 429, 500.
  • 406 means that the document does not obey a business rule, or that its Peppol sender (the vendor, or the customer for self-billing) is not a Peppol ID of your company.
  • 405 means that the document is not in a state that permits a send.
  • 409 means that the sender of a send call is not a Peppol ID of your company.
  • 422 means that the request does not agree with the schema of the endpoint, or that the API cannot read an input file.
Most errors have this body:
For the body formats, the cause of each code and the retry rules, see Errors and troubleshooting.

Pagination

The document list endpoints (/api/inbox/, /api/outbox/, /api/drafts/) use page (default 1) and page_size (default 20, maximum 100). The response contains items, total, page, page_size, pages and has_next_page. For filters, sort options and a loop sample, see List, filter and manage documents.
The Admin API list endpoints (/api/admin/tenants and its API-key routes) use skip and limit parameters. See the Admin API.

Rate limiting

The API applies a rate limit for each API key to these endpoints:
  • POST /api/documents/ and POST /api/documents/ubl
  • POST /api/validate/json and POST /api/validate/ubl
Each of these endpoints has its own counter. When you exceed the limit, the API returns 429 Too Many Requests with a Retry-After header. The value of Retry-After is a fixed number of seconds: the length of the rate-limit window. It is not the time until your counter resets. If the request after the wait also gets 429, wait longer before the next attempt. Do not write a fixed limit into your code. A successful response of these endpoints contains these headers:
  • X-RateLimit-Limit: the number of requests in one window.
  • X-RateLimit-Remaining: the number of requests that remain in the current window.
  • X-RateLimit-Reset: the Unix time in seconds when the window ends.
See Rate limits.

Document states

You can send a document only when it is in the DRAFT or FAILED state. For the transitions, the retry behaviour and the webhook events of each state, see Document lifecycle and delivery tracking. To follow the state changes, use webhooks or the timeline. See Document lifecycle and delivery tracking for the state diagrams, the transitions and the timeline.

Supported currencies

The currency field accepts these ISO 4217 codes: EUR, USD, GBP, JPY, CHF, CAD, AUD, NZD, CNY, INR, SEK, NOK, DKK, SGD, HKD The default is EUR.

Peppol participant IDs

A Peppol ID has the format scheme:identifier. For example, a Belgian company uses the scheme 0208 with its enterprise number: 0208:1018265814. For the list of schemes and for the lookup of a participant, see Look up Peppol participants.

OpenAPI specification

The reference is generated from the openapi.json file in the docs repository, which a CI check compares with the live spec at https://api.e-invoice.be/api/openapi.json. You can use the live specification to:
  • Generate a client library in your programming language
  • Import the API into a test tool (for example Postman or Insomnia)
  • Validate request and response structures
SDKs and a command-line tool are available: see SDKs and peppol CLI. To connect an AI assistant to your company through MCP, see Model Context Protocol (MCP).

Support

Support

Send an email to the support team

GitHub

See the open-source projects

Next Steps

Quickstart

Send a first invoice with a sandbox company

Authentication

Get and use an API key

Create e-invoices

Create and send an e-invoice

Validation during development

Validate invoices while you develop