For the complete documentation index, see llms.txt. This page is also available as Markdown.

Webhook Notification Retry Rules

When a webhook notification fails to deliver, the system will automatically retry based on the following rules.

Retry Schedule

Retries use an exponential backoff strategy. The delay between each retry attempt increases as follows:

Attempt
Delay before retry

1

Immediate

2

1 minute

3

2 minutes

4

5 minutes

5

10 minutes

6

15 minutes

7

30 minutes

8

1 hour

9

6 hours

10+

1 day

Maximum Attempts

The maximum number of retry attempts is controlled by the system setting System.webhookAttempts. This applies to all subscriptions, including those with "Do Not Unsubscribe" enabled. When the maximum is reached, the individual notification stops retrying, but the subscription remains active for new notifications.

Non-Retryable Errors

Notifications that fail with the following HTTP status codes are never retried, as these indicate permanent errors that will not resolve on their own:

HTTP Status Code
Meaning

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

405

Method Not Allowed

413

Payload Too Large

422

Unprocessable Entity

All other errors are retried, including:

  • Connection timeouts (endpoint unreachable)

  • Server errors (5xx)

  • Rate limiting (429)

  • Request timeouts (408)

  • Conflicts (409)

Circuit Breaker

If a notification fails for a subscription during a retry cycle, all remaining pending notifications for that same subscription are skipped in that cycle. This prevents the system from repeatedly hitting a known failing endpoint. Skipped notifications are not counted as attempts — they will be picked up in the next cycle.

HTTP Timeouts

Webhook HTTP calls use configurable timeouts to prevent indefinite blocking:

Setting
Description
Default

CTIMEOUT

Connect timeout — maximum time to establish a connection

15 seconds

RTIMEOUT

Read timeout — maximum time to wait for a response

60 seconds

These can be configured via System Preferences.

Overlap Protection

If a retry cycle takes longer than the timer interval, the next cycle will not start until the current one finishes. This prevents multiple retry cycles from running simultaneously.

Last updated

Was this helpful?