Skip to main content
Service metadata describes which access point endpoints a participant supports for a given document type and process. It is keyed by the combination of participant identifier and document type identifier. XML namespace: http://busdox.org/serviceMetadata/publishing/1.0/

GET /{ServiceGroupId}/services/{DocumentTypeId}

Returns the signed service metadata for the given participant and document type. The response is signed with the SMP’s private key using XML-DSig. Authentication: Not required.
ServiceGroupId
string
required
The participant identifier in scheme::value format, URL-encoded.
DocumentTypeId
string
required
The document type identifier in scheme::value format, URL-encoded. Example: busdox-docid-qns%3A%3Aurn%3Aoasis%3Anames%3Aspecification%3Aubl%3Aschema%3Axsd%3AInvoice-2%3A%3AInvoice%23%23urn%3Acen.eu%3Aen16931%3A2017%23compliant%23urn%3Afdc%3Apeppol.eu%3A2017%3Apoacc%3Abilling%3A3.0%3A%3A2.1
curl https://smp.example.org/iso6523-actorid-upis%3A%3A0088%3A5060210000007/services/busdox-docid-qns%3A%3Aurn%3Aoasis%3Anames%3Aspecification%3Aubl%3Aschema%3Axsd%3AInvoice-2%3A%3AInvoice%23%23urn%3Acen.eu%3Aen16931%3A2017%23compliant%23urn%3Afdc%3Apeppol.eu%3A2017%3Apoacc%3Abilling%3A3.0%3A%3A2.1

Response fields

SignedServiceMetadata
object
ServiceInformation
object
Endpoint
object

Error responses

StatusCondition
400Identifier cannot be parsed
404Service group or service metadata not found, or no endpoints are registered

PUT /{ServiceGroupId}/services/{DocumentTypeId}

Creates or replaces the service metadata for the given participant and document type. Provide either a ServiceInformation block (direct endpoints) or a Redirect block. Authentication: Required. See Authentication.
ServiceGroupId
string
required
The participant identifier in scheme::value format, URL-encoded.
DocumentTypeId
string
required
The document type identifier in scheme::value format, URL-encoded.
<?xml version="1.0" encoding="UTF-8"?>
<ServiceMetadata xmlns="http://busdox.org/serviceMetadata/publishing/1.0/"
                 xmlns:id="http://busdox.org/transport/identifiers/1.0/">
  <ServiceInformation>
    <ParticipantIdentifier scheme="iso6523-actorid-upis">0088:5060210000007</ParticipantIdentifier>
    <DocumentIdentifier scheme="busdox-docid-qns">urn:oasis:names:specification:ubl:schema:xsd:Invoice-2::Invoice##urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0::2.1</DocumentIdentifier>
    <ProcessList>
      <Process>
        <ProcessIdentifier scheme="cenbii-procid-ubl">urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</ProcessIdentifier>
        <ServiceEndpointList>
          <Endpoint transportProfile="peppol-transport-as4-v2_0">
            <EndpointReference xmlns="http://www.w3.org/2005/08/addressing">
              <Address>https://ap.example.org/as4</Address>
            </EndpointReference>
            <RequireBusinessLevelSignature>false</RequireBusinessLevelSignature>
            <ServiceActivationDate>2024-01-01</ServiceActivationDate>
            <ServiceExpirationDate>2026-12-31</ServiceExpirationDate>
            <Certificate>MIIBkTCB+wIJ...</Certificate>
            <ServiceDescription>Peppol BIS Billing 3.0</ServiceDescription>
            <TechnicalContactUrl>mailto:[email protected]</TechnicalContactUrl>
          </Endpoint>
        </ServiceEndpointList>
      </Process>
    </ProcessList>
  </ServiceInformation>
</ServiceMetadata>
The ParticipantIdentifier and DocumentIdentifier values inside the request body must match the identifiers in the URL. The server returns 400 Bad Request if they differ.
Endpoints with overlapping validity periods (same transport profile, overlapping ServiceActivationDate/ServiceExpirationDate) within the same process are rejected with 400 Bad Request.

Response

Returns HTTP 200 OK with an empty body on success.

Error responses

StatusCondition
400Identifier mismatch, missing fields, or overlapping endpoint validity periods
401Missing or invalid credentials
403Authenticated user does not own the service group
404Service group does not exist

DELETE /{ServiceGroupId}/services/{DocumentTypeId}

Deletes the service metadata (or redirect) for the given participant and document type. Authentication: Required. See Authentication.
ServiceGroupId
string
required
The participant identifier in scheme::value format, URL-encoded.
DocumentTypeId
string
required
The document type identifier in scheme::value format, URL-encoded.
curl -X DELETE \
  'https://smp.example.org/iso6523-actorid-upis%3A%3A0088%3A5060210000007/services/busdox-docid-qns%3A%3Aurn%3Aoasis%3Anames%3Aspecification%3Aubl%3Aschema%3Axsd%3AInvoice-2%3A%3AInvoice%23%23urn%3Acen.eu%3Aen16931%3A2017%23compliant%23urn%3Afdc%3Apeppol.eu%3A2017%3Apoacc%3Abilling%3A3.0%3A%3A2.1' \
  -u [email protected]:password

Response

Returns HTTP 200 OK on success.

Error responses

StatusCondition
400Identifier cannot be parsed
401Missing or invalid credentials
403Authenticated user does not own the service group
404Service group or service metadata not found

Build docs developers (and LLMs) love