Track delivery outcomes for Peppol and email

See whether documents reached their recipients, receive delivery-status webhooks and use email fallback when Peppol delivery fails.

A successful send request confirms that a document was accepted for sending. Delivery can be confirmed—or fail—after that response. Recommand now tracks these outcomes for both Peppol and email.

What changed

  • Delivery status in the API: The send response and documents API include deliveries, with a status of pending, delivered or failed for each recipient and channel. Each delivery includes transport references and failure details when available.
  • Document status at a glance: deliveryStatus summarises the deliveries: delivered when at least one succeeds, failed when all fail, and pending otherwise.
  • Dashboard visibility: Document details show individual deliveries, their statuses and any failure reasons.
  • Delivery-status webhooks: The document.delivery_status_changed event reports status changes. document.sent continues to report acceptance for sending and includes the delivery status known at that moment.
  • Email fallback after sending: With email.when: "on_peppol_failure", email fallback also handles Peppol failures reported after the original send request has returned.

Why this matters

You can follow a document beyond the initial send response and react when delivery fails. For Peppol, delivered means the receiving access point acknowledged delivery. For email, it means the receiving mail server accepted the message. Neither confirms that someone read the document or processed it in their accounting software.

What you need to do

Use deliveryStatus and deliveries to track outcomes, and subscribe to document.delivery_status_changed for updates. The sentOverPeppol and sentOverEmail fields continue to describe what happened during the send request; they do not confirm final delivery.

If you already use email.when: "on_peppol_failure", no request changes are needed to cover later Peppol failures.

See Tracking Delivery for status semantics and historical records, and Working with Webhooks for event setup and payloads.