Peppol network via the API

Configure SMP capabilities, Peppol Directory and businessCard via the PSB API.

The PSB is a certified Peppol Access Point and SMP (Service Metadata Publisher). Via the API you configure which document types an organisation can receive, publish company data in the Peppol Directory and manage the SMP registration. This article covers the technical background and the API endpoints you use for this.

The 4-corner model

Peppol uses a 4-corner model: the sender (C1) sends a document via their Access Point (C2) to the Access Point of the receiver (C3), which forwards it to the receiver (C4). Routing relies on two central components:

  • SML (Service Metadata Locator): a central DNS registry that points to the correct SMP of the receiver
  • SMP (Service Metadata Publisher): contains the metadata of a receiver, which documents it can receive and via which Access Point

When you send an invoice through the PSB, the PSB automatically performs an SML/SMP lookup to find the correct Access Point of the receiver. As an integrator, you don't need to do this yourself.

Infrastructure and migrations

The Peppol infrastructure is actively being developed. For integrators using the PSB API this has no impact: the PSB handles SML/SMP lookups automatically. Below are the current developments for your information.

SML insourcing. OpenPeppol is taking over management of the SML from the European Commission (DG DIGIT). The migration window opened on 19 March 2026. Two separate deadlines apply: the deadline for SMP registrations is 31 May 2026, the migration period for AP Lookup (DNS resolution) is extended to 31 August 2026. OpenPeppol is discussing with the European Commission whether the SMP registration deadline can also be extended. For API integrators, nothing changes in terms of endpoints or lookups: the PSB handles the migration internally.

CNAME-to-NAPTR migration. The migration from DNS CNAME records to NAPTR records for SML lookups was completed in March 2026. NAPTR has been mandatory since 1 February 2026. The old CNAME records were removed from the SMK test network (4 March 2026) and the SML production network (11 March 2026). This is an internal DNS change in the Peppol infrastructure. The PSB already uses NAPTR and no adjustments are needed in your integration.

PKI G3 migration. OpenPeppol is preparing the transition from PKI Generation 2 (G2) to Generation 3 (G3) certificates. G3 certificates are used for the mutual communication between Access Points. The Peppol Testbed has supported both G2 and G3 certificates since March 2026, so that Service Providers can test ahead of time. No mandatory transition date has been published yet. For API integrators nothing changes: the PSB handles the certificate renewal internally.

Peppol Logistics

Peppol supports logistics document types in addition to invoices via the Peppol Logistics specification. Version 1.2 has been mandatory since 16 March 2026. Release 1.3 is in member review until 15 April 2026, with publication expected on 18 May 2026.

Supported logistics documents:

  • Despatch Advice (packing slip)
  • Weight Statement
  • Transport Execution Plan
  • Waybill

New features in release 1.3:

  • ProductTraceID with schemeID for ItemInstance
  • DespatchAdviceTypeCode extended with values for use case identification (101, 102, 112, 203-211, 303-311)
  • DocumentStatusCode with new value "55 - Notification only" for changes after invoicing
  • Waste Declaration Number as AdditionalItemProperty
  • New code list ProductTraceIDschemeIDCode

Release 1.3 resolves RFCs LLC-27 through LLC-35, including ItemInstance alignment, non-invoicing updates and sub-treatment codes for waste.

Configuring SMP capabilities

When registering a party in the eConnect SMP, you use capabilities to determine which document types that party can receive. Each capability has three possible states:

StateMeaningonExplicitly enabled for this partyoffExplicitly disabled for this partyinheritedUses the default configuration of the organisation

The recommended value for new registrations is inherited, unless a party specifically needs to deviate from the default.

Available capabilities
CapabilityDocument typesinvoicesSI 2.0, SI 2.0 CreditNote, BIS Billing V3, BIS Billing V3 CreditNote, BIS Billing V3 CIIselfbillingBIS Selfbilling V3, BIS Selfbilling V3 CreditNoteinvoice_bisv2Legacy: BIS5a Invoice, BIS4a Invoice, BIS5a CreditNotereviewsPeppol MLS 1.0 (Message Level Status, successor to MLR 3.0)invoiceResponsePeppol Invoice Response transaction 3.0 (status messages)ordersPeppol Order transaction 3.0 (legacy)orderOnlyPeppol Order Only transaction 3.3orderAdvancedPeppol Order 3.3, Order Change 3.3 and Order Cancellation 3.3orderResponsePeppol Order Response transaction 3.3orderResponseAdvancedPeppol Order Response Advanced transaction 3.3
Setting capabilities via the API

Capabilities are configured via the Peppol config endpoint:

PUT /api/v1/peppol/config/party/{partyId}

In the request body, specify the desired state for each capability. An example:

{
  "capabilities": {
    "invoices": "on",
    "selfbilling": "inherited",
    "invoiceResponse": "on",
    "orderOnly": "on",
    "orderAdvanced": "off"
  }
}
Peppol Directory and businessCard

The Peppol Directory is the public registry of all Peppol participants. By publishing a businessCard, a party becomes discoverable in the directory. The businessCard contains:

FieldDescriptionRequiredNamesOne or more company names (comma-separated)Yes (at least one)Geographic informationAddress and country code (comma-separated)Yes (at least country code)Email addressTechnical contact addressNo

The businessCard is published via the Enrollment endpoint or via the SMP configuration. After publication, the organisation is discoverable at directory.peppol.eu.

Mandatory fields for every businessCard publication

The PSB API does not derive any fields from a linked business register. Regardless of the identifier scheme (KvK 0106, VAT 9944, OIN 0190, GLN 0088 or another), both names and an address with country code must be explicitly present in the payload. An example of a correctly configured businessCard:

"businessCard": {
  "names": {
    "value": "eVerbinding, eConnect",
    "state": "on",
    "description": "Business names."
  },
  "address": {
    "value": "Pelmolenlaan 16A, 3447 GW, Woerden, NL",
    "state": "on",
    "description": "Geographic information."
  },
  "emailAddress": {
    "value": "[email protected]",
    "state": "on",
    "description": "Technical contact"
  },
  "state": "on"
}

The country code (in the example above, NL at the end of the address field) must be explicitly included.

Error message Both name(s) and country code are required when adding a business card

This error message is diagnostically unambiguous: the submitted payload is missing names, or the address does not contain a country code. The fix is always to add those fields explicitly to the businessCard payload, not to change anything at another level (party, identifier, SMP capabilities). The message occurs relatively often with GLN integration (0088) in practice, because GLN integration partners less often use a template that includes these fields by default. The PSB does not exhibit different behaviour for GLN compared to other schemes.

Checking delivery options

Checking upfront whether a recipient is reachable on Peppol is done per document type and via an advanced lookup endpoint:

EndpointUsePOST /api/v1/{partyId}/salesInvoice/queryRecipientPartyInvoice routing; body ["0106:..."] or { "partyIds": [...], "metaAttributes": {...} }; optional ?preferredDocumentTypeId, ?includeOptionsPOST /api/v1/{partyId}/purchaseOrder/queryRecipientPartyOrder routing; additional parameter ?documentFamily=OrderGET /api/v1/peppol/deliveryOption?partyIds=...&documentFamily=...&isCredit=...Advanced: response contains partyId, documentTypeId, processId, protocol (As2/As4), url, certificate

The response shows the available channels, the selected Access Point and the supported document types. Use these endpoints to validate upfront whether a delivery will succeed. They are unlimited in every plan (proactive route detection/discovery).

Peppol identifiers

Each party in the SMP is identified via an identifier with a schemeID. The most commonly used schemes:

SchemeIDAliasDescriptionExample0106NL Chamber of Commerce number0106:123456780190NL OIN (government)0190:000000012345678900009944NL VAT number9944:NL123456789B010208BE:ENBE enterprise number (KBO)0208:01234567899925BE:VATBE VAT number9925:BE0835689642 (also BE1xxxxxxxxx is valid since 2025)0088GLN (international)0088:1234567890123

The PSB API accepts both the numeric schemeID and the letter code: 9925:BE0835689642 is equivalent to BE:VAT:BE0835689642. When using external lookup tools (such as SMP lookup), the official numeric schemeIDs must be used.

A party can have multiple identifiers, but each invoice may contain only one EndpointID.

Belgian identifiers

In Belgium, two identifier types are used for Peppol. The enterprise number (KBO, schemeID 0208) is the primary identification number and mandatory for Peppol reception. Registration on VAT number (schemeID 9925) is optional, which means that looking up a Belgian organisation by enterprise number succeeds more often than by VAT number.

The enterprise number can be derived from the VAT number by removing the country code prefix (BE). For example: VAT number BE0835689642 corresponds to enterprise number 0835689642.

EndpointID and routing

When sending a document, the PSB extracts the Peppol ID from the EndpointID element in the XML. This element determines to which receiver the document is routed. If the EndpointID is missing or incorrectly filled in, the document is not valid and receives the status InvoiceSentError.

An incorrect XML is not automatically retried. The correction lies with the source system (the software package generating the invoice), not with the PSB. Check upfront via queryRecipientParty whether the receiver is reachable on the Peppol network.


Want to automate the full registration process? Read the article on the Enrollment API, which lets you configure registration, capabilities and hooks in a single API call.

View the SMP endpoints