Delivery evidence

Org-scoped delivery evidence for a sent invoice via GET /v1/agent/peppol/sent/{invoiceId}/evidence. Returns the aggregated delivery status, individual layers (transport AS4, MLS, business response), and the full transmission history. A complement to send status , while /peppol/status gives one summary status, here you get a layer-by-layer breakdown for auditing and archiving.

Endpoint

MethodPathScopeHeaders
GET/v1/agent/peppol/sent/{invoiceId}/evidenceinvoice:readX-API-Key, X-Organization-Id

invoiceId is the id of an invoice issued via POST /v1/agent/invoices, or the invoice_idthe platform mirrored for a raw-UBL send (connector, SAPI-SK, SFTP). If no Peppol transmission exists for the invoice (it hasn't been sent yet, or it belongs to a different organization), the endpoint returns 404.

If you only hold a submission id from a raw-UBL send response (SAPI-SK providerDocumentId or connector-send document_id, both are the same value), resolve the invoice_id first via GET /v1/agent/peppol/submissions/{submissionId} (scope invoice:read). It returns invoice_id, status and error_message for the submission.

Response

GET /v1/agent/peppol/sent/b1f0d7a2-…/evidence
X-API-Key: efk_pk_test_...
X-Organization-Id: 0a2c1f3e-…

{
  "data": {
    "invoice_id": "b1f0d7a2-…",
    "document_id": "d4f8…@phase4.phoss-ap",
    "sbdh_instance_id": "5e0a1c9b-…",
    "ubl_sha256": "9f2b…c41d",
    "delivery_status": {
      "state": "delivered",
      "at": "2026-06-22T10:00:05.000Z"
    },
    "layers": {
      "transport": { "state": "accepted", "label": "Transport (AS4)" },
      "mls": { "state": "not_reported", "label": "Message Level Response (MLR)" },
      "businessResponse": { "state": "not_reported", "label": "Business-Level Response (BLR)" }
    },
    "transactions": [
      {
        "state": "SENT",
        "mode": "live",
        "document_id": "d4f8…@phase4.phoss-ap",
        "sbdh_instance_id": "5e0a1c9b-…",
        "ubl_sha256": "9f2b…c41d",
        "mls_status": null,
        "mls_at": null,
        "error_message": null,
        "created_at": "2026-06-22T10:00:00.000Z",
        "updated_at": "2026-06-22T10:00:05.000Z"
      }
    ]
  }
}
FieldTypeDescription
invoice_idUUIDInvoice ID.
document_idstring | nullAS4 message id the Access Point assigned to the latest transmission.
sbdh_instance_idstring | nullImmutable SBDH InstanceIdentifier of the latest transmission: the id an inbound MLS references the document by.
ubl_sha256string | nullSHA-256 (hex) of the exact archived as-sent UBL bytes: cryptographic integrity proof.
delivery_statusobjectAggregated delivery status: state (delivered | failed | pending) and at (ISO 8601 | null).
layersobjectStatus by layer: transport, mls, business_response. Each has state and label.
transactionsarray of objectsTransmission history (newest first). See the table below.

Transaction object

FieldTypeDescription
statestringTransmission state (e.g. SENT, QUEUED, ERROR).
modelive | testlive = a real send (live key), test = sandbox AP (test key).
document_idstring | nullAS4 message id for this transmission.
sbdh_instance_idstring | nullSBDH InstanceIdentifier for this transmission.
ubl_sha256string | nullSHA-256 (hex) of the archived as-sent UBL bytes.
mls_statusaccepted | rejected | nullOutcome of the inbound MLS matched to this transmission; null = no MLS received.
mls_atISO 8601 | nullWhen the MLS was received.
error_messagestring | nullFailure reason, if the transmission failed.
created_atISO 8601Time the transmission was created.
updated_atISO 8601Time of the last status change.

Delivery layers

LayerMeaning
transportAS4 receipt of the document by the Peppol network (transport receipt).
mlsMessage Level Status: acknowledgment/rejection at the message level.
business_responseThe recipient's business response (accepting/rejecting the document), if they send one.
On the Slovak network, many recipients never send an MLS or a business response: the terminal successful state is then transport: accepted and delivery_status.state: delivered, while the mls / businessResponse layers stay not_reported, which isn't an error. When the receiving Access Point does send an MLS, the mls layer reflects it (accepted or failed) and each transaction carries mls_status/mls_at. The evidence JSON is the supported export of the proof; the raw AS4 receipt itself is not exposed as a standalone file: the immutable identifiers (document_id, sbdh_instance_id) plus ubl_sha256 are provided for audit trails instead. For a push notification on delivery, use the peppol.document.delivered webhook.
404 means no Peppol transmission exists for this invoice: send it first via POST /v1/agent/peppol/send/{invoiceId} and track status via Receiving and statuses.