Delivery and retries
How it works
Section titled “How it works”mondochat creates one delivery per enabled endpoint subscribed to the event type. It sends each delivery signed, through an egress proxy that refuses private and internal addresses.
- Your endpoint has 15 seconds to answer. Any 2xx answer is a success.
- Any non-2xx answer or a timeout is a failure and the delivery is retried.
- Attempts follow this schedule: 0s, 5s, 5m, 30m, 2h, 5h, 10h, 14h, 20h and 24h. After the last attempt the delivery is marked dead.
- Answering
410 Gonedisables the endpoint. - The dashboard lists every delivery with its status, response code and attempts. It can replay one: a new delivery with the same
webhook-id. - Send test event on the endpoint sends one
webhook.testdelivery to that endpoint alone and shows your response code.
Callouts are different. They are answered within 5 seconds, a network error is retried once and anything else is a failure. See Webhooks overview.
Limits
Section titled “Limits”- Timeout: 15 seconds per attempt. Do slow work after you answer.
- Events arrive in no guaranteed order. When the current state matters, fetch the resource from the API instead of rebuilding it from the order of events.
- A delivery can arrive more than once. The
webhook-idheader is the same on every retry and on a replay: drop duplicates bywebhook-id. - Webhooks go to your server with the real
last_seen_atand read pointer, whatever the users’last_seenandread_receiptssettings say.
Where it ends
Section titled “Where it ends”- After the last attempt, 24 hours in, a delivery is dead and is not retried again. It stays in the dashboard list, where you can replay it.
- mondochat does not promise exactly once delivery. Make your handler safe to run twice.