Retry Behavior & Delivery Logs
If your endpoint doesn't respond with a 2xx status within 30 seconds, Hermon automatically retries delivery up to 5 times with exponential backoff.
Retry Schedule
After a failed delivery attempt, Hermon waits an increasing amount of time before retrying. The same X-Hermon-Delivery-Id is used across all retry attempts — use it to implement idempotency.
| Attempt | Delay | Notes |
|---|---|---|
| 1 | Immediate | First attempt |
| 2 | 5 minutes | After first failure |
| 3 | 10 minutes | After second failure |
| 4 | 20 minutes | After third failure |
| 5 | 40 minutes | After fourth failure |
After all 5 attempts are exhausted, the delivery is marked FAILED. No further automatic retries occur. You can trigger a manual retry from the dashboard or via the Retry endpoint.
Delivery Statuses
| Status | Description |
|---|---|
| PENDING | Queued — first attempt in progress |
| RETRYING | A previous attempt failed, retry scheduled |
| SUCCESS | Delivered successfully (2xx response received) |
| FAILED | All 5 attempts exhausted with no success |
Failure Types
Each failed delivery log includes an error type describing what went wrong:
| Type | Description |
|---|---|
| TIMEOUT | Endpoint took longer than 30 seconds to respond |
| CONNECTION_REFUSED | Server refused the connection |
| DNS_NOT_FOUND | Domain could not be resolved |
| CONNECTION_RESET | Connection was reset by the server |
| HTTP_ERROR | Server returned a non-2xx HTTP status code |
Idempotency
On retries, Hermon sends the exact same payload with the same X-Hermon-Delivery-Id. Your endpoint may receive the same event multiple times — you should store processed delivery IDs and skip duplicates.
← same ID on all retry attempts
Best Practices
Respond quickly
Check the delivery ID
Use a queue
Monitor FAILED deliveries