Skip to main content
A receiver must have a Peppol ID and a registration with an Access Point before you can send a document on the Peppol network. The API has three operations to find and check a receiver. All three work without an API key: the Authorization header is not necessary.

Compare the operations

The two operations with an exact Peppol ID use the same lookup and the same cache. The API keeps each result for 15 minutes.
The Peppol Directory can be incomplete. Publication in the directory is optional for an Access Point, so a registered participant can be absent from the search results. An empty search result does not show that a company is not on Peppol. Use the directory search to find candidates only, then check the Peppol ID.

Peppol ID schemes

A Peppol ID has the format scheme:identifier, for example 0208:1018265814. The scheme is a four-digit code that tells which register issued the identifier. This table shows the most frequent schemes of the Peppol participant identifier scheme code list, version 9.7. This is the version that the API uses. For all schemes, see the Peppol code lists. When you do not give the Peppol IDs, the API derives one scheme for each country from the tax ID or the company ID: The scheme that the API derives can be different from the scheme that the receiver registered. Check the Peppol ID of the receiver, and give it explicitly when you send. The schemes that you can register for your own company are a smaller set. See Supported schemes. For a Belgian company, the identifier is the enterprise number: the VAT number without BE. The VAT number BE1018265814 gives the Peppol ID 0208:1018265814.

Pre-send check

Before you send a document, call GET /api/validate/peppol-id with the Peppol ID of the receiver. Send only if is_valid is true and supported_document_types contains the document type that you send. This is the only place where this rule is written; other pages link to it.
string
required
Peppol ID in the format scheme:identifier, for example 0208:1018265814.
boolean
The SML has a DNS record for the Peppol ID, so an SMP knows the participant.
boolean
The SMP publishes a business card with a minimum of one entity.
boolean
true if dns_valid or business_card_valid is true. It does not tell which document types the receiver accepts; read supported_document_types for that.
object
null if there is no business card.
For a Peppol ID that is not registered, the status is 200 and is_valid is false.

Get the full record of a participant

GET /api/lookup returns the complete result of the SML and SMP lookup. Use it when you need the endpoints, the transport profile or the certificates of a receiver, for example to find the cause of a failed send. It has the same peppol_id query parameter as the pre-send check.
This example is shortened: it shows one endpoint, and no processes and certificates content. The status is 200 also for a Peppol ID that is not registered. In that case dnsInfo.status is error. This response has no single field that says “registered”; the pre-send check gives that answer.

Search the Peppol Directory

GET /api/lookup/participants searches the public Peppol Directory. Use it when you know the name of a company but not its Peppol ID, for example for a search field in your application.
string
required
Search text: a company name or a part of an identifier.
string
ISO 3166-1 alpha-2 country code, for example BE. Without this parameter the search is global.
The peppol_id is the complete Peppol ID (scheme:identifier). Use it as it is for the pre-send check. The peppol_scheme is the identifier scheme of the Peppol Directory (iso6523-actorid-upis), not the four-digit scheme: do not join it to peppol_id. The API copies the values from the Peppol Directory: query_terms is the query that the API sent to the directory, and search_date is the time of the search in UTC. The response has a maximum of 20 participants and no paging. Make the search text more specific if the participant that you look for is not in the list.

Find and check a receiver

This pattern combines the operations. If you know the identifier, it checks the Peppol ID directly. If you know only the name, it searches the directory and checks each candidate.
If the list is empty after a search by name, ask the customer for the enterprise number or VAT number and check the Peppol ID directly. If the direct check also gives is_valid: false, the customer cannot receive documents on Peppol; use a different delivery method.

Integration checklist

  • Do the pre-send check for each new receiver.
  • Use the directory search only to find candidates, and check each candidate.
  • Do not use an empty directory result as proof that a company is not registered.
  • Show the user a clear message when the search finds nothing, and ask for the identifier.
  • Keep a positive result in your own cache for a limited time; a receiver can change its Access Point or stop its registration.
  • Set the Peppol IDs explicitly when you send. See Create e-invoices.
  • For the status codes and the error body of these operations, see Errors and troubleshooting.

Next Steps

Create e-invoices

Create a document and send it to the receiver that you checked.

Document lifecycle and delivery tracking

Follow the state of a document after the send.

Errors and troubleshooting

Find the cause of a failed send.

Glossary

Read the definitions of the Peppol terms.