Delivery Guarantees
Because delivery is at-least-once, always use
event_id as an idempotency key to prevent processing the same event twice. See Event Types & Payload Structure for an example.Responding to Webhooks
Your endpoint must return an HTTP response within 30 seconds. To meet this reliably:- Acknowledge immediately — return a
2xxresponse as soon as you’ve received and validated the request - Process asynchronously — push the event to an internal queue and process it in the background
- Verify the signature first — return
401if the signature is invalid (this will not be retried)
Success Responses
Any2xx status code is treated as a successful delivery:
Client Error Responses — Not Retried
Server Error Responses — Will Retry
5xx responses and network failures trigger automatic retries:
Retry Policy
When delivery fails with a5xx response or a network error, Baanx automatically retries with exponential backoff:
Retry rules:
- Maximum 5 retry attempts after the initial delivery (6 total attempts)
- Only
5xxstatus codes and network failures trigger retries 4xxerrors are not retried — they indicate a client-side problem- The same
event_idis used across all attempts - After all retries are exhausted, the event is marked
failedand can be manually retried
Handling Duplicates
Since retries use the sameevent_id, your endpoint should store processed event IDs and skip re-processing:
Monitoring Deliveries
Use the API to inspect delivery history and troubleshoot failures:Webhook Delivery Logs
View recent delivery attempts for a specific webhook endpoint
Event Delivery Logs
See all delivery attempts for a specific event across all webhooks
Retry an Event
Manually trigger re-delivery of a failed event
List Events
Browse events and filter by status to find failures