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.

AttemptDelayNotes
1ImmediateFirst attempt
25 minutesAfter first failure
310 minutesAfter second failure
420 minutesAfter third failure
540 minutesAfter 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

StatusDescription
PENDINGQueued — first attempt in progress
RETRYINGA previous attempt failed, retry scheduled
SUCCESSDelivered successfully (2xx response received)
FAILEDAll 5 attempts exhausted with no success

Failure Types

Each failed delivery log includes an error type describing what went wrong:

TypeDescription
TIMEOUTEndpoint took longer than 30 seconds to respond
CONNECTION_REFUSEDServer refused the connection
DNS_NOT_FOUNDDomain could not be resolved
CONNECTION_RESETConnection was reset by the server
HTTP_ERRORServer 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.

X-Hermon-Delivery-Id: d2a1b3c4-5e6f-7890-abcd-ef1234567890
← same ID on all retry attempts

Best Practices

Respond quickly

Return a 200 OK immediately after verifying the signature, then process the event asynchronously. If your handler takes longer than 30 seconds, Hermon will timeout and retry.

Check the delivery ID

Store processed X-Hermon-Delivery-Id values (e.g. in Redis or a DB table). Before processing, check if the ID has already been seen.

Use a queue

Push events onto an internal queue (SQS, BullMQ, etc.) and process asynchronously. This keeps your HTTP response fast and processing reliable.

Monitor FAILED deliveries

Use the delivery logs API or dashboard to monitor FAILED deliveries and manually retry any that failed due to transient issues in your infrastructure.
You can view and manage delivery logs from the Hermon dashboard under Settings → Webhooks → Delivery Logs, or programmatically via the Management API.