Skip to main content

Sending documents

Outbound traffic is sent through the REST API as XML: you POST the raw business document (for example an invoice) in the request body. The API accepts the XML and returns a document identifier; validation against the channel schema and rules, then routing on Peppol or NemHandel, runs asynchronously in a queue after that. If the XML fails validation, the document status is updated to reflect the failure (use webhooks or document details to observe it). Some problems—such as missing headers or participants the system cannot resolve—may still fail the request immediately; see the API reference (under Documents).

Before you can send, your team needs a company and participant configured in the dashboard for the same Test or Live environment as your API key.

Sending as XML

  • Use Content-Type: application/xml (or the appropriate XML media type for your payload).
  • For a successful outcome, the body should follow the rules of the channel you choose—commonly Peppol BIS Billing 3.0 on Peppol and OIOUBL on NemHandel. See the Peppol BIS Billing 3.0 specification and OIOUBL for schema-level detail. Validation of that XML is not completed inside the POST response; it runs shortly after, in the queue, and failures show up on the document’s status.

After you send: delivery status

A successful POST returns a document id (and related identifiers such as e2e_message_uuid) as soon as the payload is accepted. The document then moves through queued validation and, if valid, network delivery—all asynchronous relative to the HTTP response.

You can track progress in two ways:

  1. Webhooks — Subscribe to events in the dashboard and receive HTTP callbacks when the document status changes (for example when it is delivered or fails). See API & webhooks and the webhook API reference.
  2. Follow-up requests — Call document details with the returned id to read the current status and other fields until it reaches a terminal state (delivered, rejected, etc.). See Document details in the REST API reference.

You may use both: webhooks for real-time integration and occasional GET calls for reconciliation or if a callback was missed.