Document-flow en statusberichten

Hoe een document de zes fases van de PSB doorloopt: van Submit tot Delivered of Failed, met statusberichten, webhooks en retry-beleid.

Een document dat je via de PSB verstuurt, doorloopt een vaste reeks verwerkingsfases — van het indienen tot de bevestigde aflevering of definitieve mislukking. Op elk overgangspunt publiceert de PSB een statusbericht dat je kunt ophalen via de status-API of afvangen via een webhook.

Dit artikel beschrijft de flow in detail, welke statuscodes en topics de PSB publiceert, hoe je de status van een document opvraagt en wat er gebeurt als aflevering of webhook-bezorging mislukt.

De zes fases van een document
Submit → Validate → Transform → Route → Acknowledge → Delivered
                                                   ↘ Failed
FaseWat er gebeurtTypische topicsSubmitHet document is aangeboden via de API, een mailfrom-hook, SFTP-pull of een andere inbound methode.PendingValidateDe PSB valideert het document op schema en businessregels (bijv. NLCIUS, Peppol BIS Billing, DICO).Validated, *ReceivedError bij foutTransformOptionele formaatconversie via de Transform-engine (bijv. UBL naar CII, PDF naar UBL via IDR). Dit is een interne stap.(intern, geen afzonderlijk topic)RouteDe PSB bepaalt de bestemming: Peppol, e-mail, SFTP of een ander kanaal of combinatie.RoutedAcknowledgeBevestiging vanuit het ontvangende access point of kanaal.AcknowledgedDelivered / FailedDe aflevering is bevestigd, of definitief mislukt na uitputting van alle herpogingen.*Sent, *SentError

Submit kan worden gestart vanuit verschillende kanalen — REST-upload, mailfrom-hook, SFTP-pull, Office 365 of een ander hook-type. Vanaf Submit is de flow voor elk kanaal identiek.

Statuscodes

De PSB publiceert de volgende canonieke statussen via topics en de status-API:

StatusBetekenisEindstatus?PendingAangeboden, validatie nog niet gestartNeeValidatedValidatie geslaagdNeeRoutedBestemming bepaald, klaar voor afleveringNeeDeliveredAflevering bevestigd door ontvanger of kanaalJaRejectedAfgewezen door ontvanger (bijv. via MLS Reject)JaFailedAflevering definitief mislukt na alle herpogingenJa

Aanvullende fijnmazige topics zoals InvoiceSentRetry, InvoiceSentError en MessageLevelStatusReceived zijn beschikbaar voor monitoring via webhooks.

Status opvragen via de API

De actuele status van een document is op te vragen via een status-endpoint per documenttype:

  • GET /api/v1/{partyId}/salesInvoice/{documentId}/status
  • GET /api/v1/{partyId}/purchaseInvoice/{documentId}/status

De response bevat de huidige status, het tijdstip van de laatste wijziging en bij een fout een foutcode met omschrijving. Via een list-endpoint per documenttype kun je openstaande documenten filteren op status, periode en (waar relevant) ontvanger.

Statusupdates via webhooks

Voor real-time integratie heeft webhook-routing de voorkeur boven polling. Abonneer je op de relevante topics om direct notificaties te ontvangen:

RichtingVeelgebruikte topicsInkomendInvoiceReceived, InvoiceReceivedError, OrderReceived, MessageLevelStatusReceivedUitgaandInvoiceSent, InvoiceSentRetry, InvoiceSentError, OrderSent, OrderSentRetry, OrderSentErrorMonitoringHookSent, HookSentRetry, HookSentError

Zie Webhooks instellen voor de configuratie, payload-structuur en HMAC-handtekening.

Retry-beleid bij documentaflevering

Als een afleverpoging mislukt door een fout aan de ontvangende kant (bijv. 5xx van een Peppol Access Point), hervat de PSB de aflevering automatisch met exponential backoff.

ParameterWaardeMaximaal aantal pogingen8Totale retry-duur~3 dagen (circa 72 uur) vanaf de eerste pogingRetrybare codes5xx en 429Niet retrybaar4xx (behalve 429) — directe *SentErrorBackoffExponential (oplopende wachttijd per poging)

Bij elke afleverpoging publiceert de PSB een {DocumentType}SentRetry-topic. Na definitief falen volgt {DocumentType}SentError. Ontvang je een InvoiceSentError of OrderSentError? Neem dan contact op met de ontvanger of escaleer via eConnect Support.

Tip: abonneer je op InvoiceSentRetry en InvoiceSentError via een webhook zodat je afleveringsproblemen direct detecteert.

Retry-beleid bij webhook-bezorging

Het retry-beleid voor webhook-bezorging — notificaties naar jouw eigen endpoint — staat los van het afleveringsretry-beleid.

ParameterWaardeMaximaal aantal pogingen12Totale retry-duur~6 dagen (circa 137 uur) vanaf de eerste pogingBackoffExponential (oplopende wachttijd per poging)Timeout per poging100 secondenEvent per pogingHookSentRetryEvent na definitief falenHookSentError

De PSB verwacht binnen 100 seconden een 2xx-response van je endpoint. Verwerk inkomende webhooks zo snel mogelijk: bevestig ontvangst met 200 OK en doe zware verwerking asynchroon in een achtergrondproces.

Optioneel: voeg de query-parameter noRetryCodes toe om specifieke HTTP-codes uit te sluiten van retry (bijv. ?noRetryCodes=400,401,403). Stel een mailhook of secundaire webhook in op HookSentError als operationele monitoring.

Let op: na circa 6 dagen (137 uur) zonder geslaagde bezorging stopt de PSB met herpogingen. Gemiste events haal je op via het batch-endpoint. Zie Batch hooks.

Idempotency in de flow

Submit-endpoints ondersteunen idempotency via de header X-EConnect-DocumentId. Bij een duplicaat-aanbieding retourneert de PSB HTTP 409 Conflict. Zo worden herverzoeken — bijv. na een netwerkfout — nooit dubbel verwerkt. Zie Idempotency voor de volledige uitleg.

Veelgestelde vragen
Hoe volg ik de status van een verzonden document?

Je hebt twee opties. Via de status-API (GET …/salesInvoice/{documentId}/status) vraag je de actuele status op. Voor real-time monitoring stel je webhooks in op de relevante topics, zoals InvoiceSent, InvoiceSentRetry en InvoiceSentError. Webhooks verdienen de voorkeur boven polling.

Wat gebeurt er als een document niet kan worden afgeleverd?

De PSB herprobeert de aflevering automatisch tot 8 keer verspreid over circa 3 dagen (72 uur). Bij elke poging ontvang je een {DocumentType}SentRetry-notificatie (als je een webhook hebt ingesteld). Na definitief falen volgt {DocumentType}SentError en is handmatige actie nodig.

Hoe lang probeert de PSB een webhook te bezorgen?

De PSB probeert een webhook-notificatie maximaal 12 keer te bezorgen, verspreid over circa 6 dagen (137 uur). Per poging is er een timeout van 100 seconden. Na definitief falen volgt het HookSentError-event.

Wat is het verschil tussen Rejected en Failed?

Rejected betekent dat de ontvanger het document actief heeft afgewezen — bijvoorbeeld via een MLS Reject-bericht. Failed betekent dat de aflevering definitief is mislukt na uitputting van alle herpogingen, zonder dat de ontvanger bereikbaar was of het document expliciet afwees.

Kan ik het retry-beleid voor webhooks aanpassen?

Gedeeltelijk. Met de query-parameter noRetryCodes sluit je specifieke HTTP-codes uit van retry, zodat een bewuste 400- of 403-response geen verdere pogingen triggert. Het maximale aantal pogingen en de retry-duur zijn niet aanpasbaar.

Bekijk de interactieve API-documentatie