Peppol lookup: check a receiver via the API

Check upfront whether a receiver is reachable via Peppol using the queryRecipientParty endpoint.

Before sending an invoice or order, you want to know whether the receiver is reachable. With the queryRecipientParty endpoint you check in a single call whether an organisation is registered on Peppol, which document types are accepted and via which channel the PSB will deliver the document. This prevents delivery errors and lets you give your users direct feedback.

How it works

The PSB performs an SML/SMP lookup automatically with every delivery to find the correct Access Point of the receiver. With queryRecipientParty you can perform that same lookup upfront, without actually sending a document.

The API checks:

  • Whether the receiver is registered in the Peppol network (SMP registration)
  • Which document types the receiver can accept (capabilities)
  • Via which Access Point delivery is routed
  • Which channel the PSB will use (Peppol, DICO, email fallback, etc.)
Endpoint
GET /api/v1/queryRecipientParty?identifier={schemeID}:{id}

Replace {schemeID} with the identification scheme and {id} with the receiver's number. Use one of the common Peppol identifiers:

SchemeIDTypeExample0106NL Chamber of Commerce number0106:123456780190NL OIN (government, 20 digits)0190:000000012345678900009944NL VAT number9944:NL123456789B010208BE enterprise number0208:01234567890088GLN (international)0088:1234567890123
Example request
GET /api/v1/queryRecipientParty?identifier=0106:12345678
Response on success

If the receiver is reachable, the API returns the recommended identifier and the channel the PSB will use:

{
  "id": "NL:KVK:12345678",
  "channel": "peppol",
  "description": "default send via peppol delivery"
}
FieldDescriptionidThe Peppol identifier to use as endpointId in your invoice or orderchannelThe delivery channel the PSB will use (e.g. peppol, dico)descriptionDescription of the selected channel

Use the value from id as EndpointID in your UBL document.

Response for unknown receiver

If the receiver is not found on Peppol, the API returns a 404 with an error message:

{
  "helpLink": "https://psb.econnect.eu/endpoints/v1/SalesInvoice.html#query-recipient-party",
  "message": "PartyId 'NL:KVK:12345678' not found in Peppol.",
  "code": "API404",
  "requestId": "41cd5529904be94d941137068c1c3fa1",
  "dateTime": "2026-03-14T10:22:19.4878393+00:00"
}

Tip: Does an organisation have multiple identifiers (KvK, VAT, OIN)? Try a different schemeID. Not all receivers are registered under every identifier. For example: an organisation is registered as 0106:12345678 (KvK) but not as 0088:5412345678908 (GLN). Getting a 404? Always try the Chamber of Commerce number (0106) or VAT number (9944) as an alternative, or use the POST variant to check multiple identifiers at once.

POST variant with multiple identifiers

If you want to check multiple identifiers at the same time, use the POST variant. The PSB evaluates all identifiers and returns the best option:

POST /api/v1/{partyId}/salesInvoice/queryRecipientParty

The {partyId} in the URL is your own (sending) partyId. In the request body, provide an array of possible identifiers of the receiver:

["0106:12345678", "9944:NL123456789B01", "0190:00000001234567890000"]

This is useful when you don't know under which identifier the receiver is registered. The API automatically selects the best match.

Optional parameters
ParameterDescription?preferredDocumentTypeIdGives priority to a specific document format in the lookup?includeOptionsReturns all available channels, not just the recommended channel
Response with includeOptions

With ?includeOptions=true the response contains an options array with all available delivery channels:

{
  "id": "NL:KVK:12345678",
  "channel": "peppol",
  "description": "default send via peppol delivery",
  "options": [
    {
      "channel": "peppol",
      "description": "default send via peppol delivery",
      "identifiers": [
        {
          "partyId": {
            "text": "NL:KVK:12345678",
            "value": "12345678",
            "schemeAuthority": "iso6523-actorid-upis",
            "schemeIdText": "NL:KVK",
            "schemeIdNumber": "0106"
          },
          "isValid": true
        }
      ]
    }
  ]
}
When to use?

Use queryRecipientParty as a pre-flight check in the following situations:

  • Before sending: check whether the receiver is reachable before calling the send endpoint, so you can give your end users direct feedback
  • Onboarding relations: verify when creating a new customer or supplier whether they are already registered on Peppol
  • Multi-channel routing: see which delivery channel the PSB will select (Peppol, DICO, email) and optionally force an alternative channel via the ?channel parameter when sending
  • Self-billing: check whether a supplier has the self-billing capability before sending a self-billing invoice

Note: The lookup checks the registration at the time of the call. Between the lookup and the actual delivery, a registration may change. In practice this is rare, but keep it in mind for large batches with a delay between check and delivery.

Tip: Want to manually check an SMP registration, outside of the API? OpenPeppol offers the Peppol Lookup Service, where you can directly query the SMP and Business Card data of a Peppol participant. Useful for verifying whether a registration is correctly configured.

Common errors
ErrorCauseSolutionAPI404 "PartyId not found in Peppol"Receiver not registered for this identifier typeTry a different schemeID (KvK, VAT, OIN)API404 "No valid delivery options"No route available to the receiverCheck whether the receiver is connected to an active Peppol service provider

Want to also see which Access Point and document formats a receiver supports exactly? The Peppol delivery options endpoint provides a more detailed overview of the SMP registration.

Try the lookup in the API