Tracking
Status values
Every state a transaction, its delivery, or its tax report can be in, and whether it's final.
Transaction status
The status field on a transaction — the same word delivery.status
carries on an outbound row.
| Value | Meaning | Final |
|---|---|---|
queued | Accepted, awaiting transmission | no |
sent | Handed to the Peppol network | no |
delivered | The receiver's Access Point signed for it | yes |
failed | Undeliverable after all retries, or the receiver explicitly refused it — see below | yes |
skipped | Not deliverable over Peppol by design — e.g. a B2C or non-Peppol buyer. Not a failure | yes |
received | Inbound only — arrived for one of your taxpayers. There is no transmission of ours to track, so this is the only status an inbound row ever carries | yes |
draft | Saved with save_as_draft, never issued. No delivery and no tax report exist yet — both come back null until it's finalised | no |
A refusal and an undeliverable document share one status word
failed covers two different outcomes: retries genuinely exhausted, and a receiver actively
declining the document — a commercial refusal, not a transport failure. Nothing in status or
delivery.status distinguishes them. What does: SUMU fires a transaction.rejected webhook for a
refusal and transaction.failed for an exhausted retry budget, and delivery.response_code carries
the Access Point's own code (RE on a refusal) either way.
Tax report
| Value | Meaning | Final |
|---|---|---|
pending | Not yet reported | no |
submitted | Sent to the Tax Authority, awaiting acknowledgement | no |
acknowledged | Accepted by the Authority | yes |
rejected | Refused. reason explains why | yes |