11.6Delivery and failures
Reply fast with 2xx#
- Reply with a 2xx status within 10 seconds. Reply first, then do slow work.
- A 2xx reply counts as delivered. Any other reply, or no reply within 10 seconds, counts as failed.
Retries#
| Your endpoint… | What obsrvly does |
|---|---|
| Replies 2xx | Delivered. Done. |
Does not answer, or replies 429 or a 5xx status | Tries again up to 3 more times: 1, 11 and 41 minutes after the first try. Nothing is retried after one hour. |
Replies any other status, such as 400, 401, 404 or 410 | Failed. Not retried. Fix the endpoint or the channel settings. |
- If the incident closes before a retry, obsrvly drops the old
alert.fireor reminder. You do not get a latealert.fireafter the recovery. - An
alert.resolvedthat gets no answer,429or a5xxis still retried after the incident closes. - If you delete the channel, its pending retries are dropped.
- Reply
401or403to a request with a bad signature. It is not retried.
Duplicates#
After a timeout or a 5xx reply, obsrvly may send a request you already handled. To spot duplicates, use alert_id, event and reminder_number together as the key.
Check what was sent#
Open alerting → notification log (9.10). Each attempt has a row with the subject POST alert.fire or POST alert.resolved, the channel, the result and any error. Select a row to see the JSON that was sent. If a later retry gets through, the row changes to delivered.
| Error in the log | Meaning |
|---|---|
webhook POST <status>: <reply> | Your endpoint replied with this status. The start of your reply body follows. |
webhook POST: <connection error> | obsrvly could not reach your endpoint, or it did not answer in time. |
webhook POST: destination is not a publicly routable address | Your host name now points to a private address. Point it to a public one. |
With the API, call ListNotifications on NotificationService. It takes limit (default 50, up to 200), cursor and an optional monitorId.