> For the complete documentation index, see [llms.txt](https://api.dataloy.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://api.dataloy.com/dataloy-rest-api/webhook-notification-retry-rules.md).

# 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:

<table data-header-hidden data-search="false"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td>Attempt</td><td>Delay before retry</td></tr><tr><td>1</td><td>Immediate</td></tr><tr><td>2</td><td>1 minute</td></tr><tr><td>3</td><td>2 minutes</td></tr><tr><td>4</td><td>5 minutes</td></tr><tr><td>5</td><td>10 minutes</td></tr><tr><td>6</td><td>15 minutes</td></tr><tr><td>7</td><td>30 minutes</td></tr><tr><td>8</td><td>1 hour</td></tr><tr><td>9</td><td>6 hours</td></tr><tr><td>10+</td><td>1 day</td></tr></tbody></table>

**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:

<table data-header-hidden data-search="false"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td>HTTP Status Code</td><td>Meaning</td></tr><tr><td>400</td><td>Bad Request</td></tr><tr><td>401</td><td>Unauthorized</td></tr><tr><td>403</td><td>Forbidden</td></tr><tr><td>404</td><td>Not Found</td></tr><tr><td>405</td><td>Method Not Allowed</td></tr><tr><td>413</td><td>Payload Too Large</td></tr><tr><td>422</td><td>Unprocessable Entity</td></tr></tbody></table>

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.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://api.dataloy.com/dataloy-rest-api/webhook-notification-retry-rules.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
