Skip to content
Back to News
Changelog

Your recipients can now answer: accepted, refused, paid — and rejected after delivery

webhooksstatuses

Until today, when the platform on the other side answered your invoice — received it, accepted it, refused it, paid it — the answer had no address to reach you at, and your invoice stayed delivered whatever happened next.

What changed

A Peppol participant declares which document types it accepts. Ours declared invoices, and not the document that carries a recipient's answer, the Invoice Response. So nobody could send us one. Not by refusal — by absence of an address.

Every legal entity now declares both, at creation. Entities that predate the change are brought in line as well: in production that was done before this post, in the sandbox on 17 October. Until then, a sandbox entity created before 23 September declared invoices only, so the invoices it sent received no status from their recipient.

What you may see now

Statuses that could never arrive before:

The full per-axis state travels on invoice.status_changed, which is opt-in: the * wildcard deliberately does not match it, so subscribe to it explicitly if you want it.

One existing event changed meaning

invoice.error used to mean one thing: we could not deliver the document. It can now also mean the recipient's accredited platform received it and then rejected it — in France, Rejetée, code 213. Both are final, and both ask for the same thing: fix the document and send it again.

If your handler re-sends automatically on invoice.error, this is the one place to look. A resend after a business rejection reaches the same recipient twice. detail.platformFiscal on the invoice tells the two cases apart: a delivery failure carries no national code, a platform rejection does.

France

This is what makes the French lifecycle reachable. The CDAR — the document that carries a French status — is mandatory to receive under the French reform, and it travels on the same capability. A fr:213 issued by an accredited platform now lands on your invoice as failed, with detail.platformFiscal reading 213 / Rejetée, while the delivery axis keeps the receipt it earned.