# Retries and replays

> How MailBlastr retries failed webhook deliveries on an exponential-backoff schedule, and how to manually replay a webhook message that failed or already succeeded.

When MailBlastr POSTs an event to your endpoint, it expects a `2xx` response within a few seconds. If your endpoint returns a non-`2xx` status, times out, or is unreachable, the delivery is marked **failed** and queued for retry.

Delivery is never lost on a single transient error — each message is retried on a fixed schedule before it is given up on, and you can always **replay** a message by hand from the dashboard.

## Automatic retries

MailBlastr attempts to deliver each webhook message on a schedule with **exponential backoff**. Each delay is measured from the failure of the preceding attempt, not from the original event time.

- Immediately
- 5 seconds
- 5 minutes
- 30 minutes
- 2 hours
- 5 hours
- 10 hours
- 10 hours (a final attempt, in addition to the previous one)

For example, a message that fails its first three attempts before eventually succeeding is delivered roughly **35 minutes and 5 seconds** after the first attempt (immediate + 5s + 5m + 30m).

> **Note:** If an endpoint is removed or disabled, all pending delivery attempts to that endpoint are cancelled as well. Re-enable the endpoint and replay the message to retry it.

## Inspecting the next attempt

To see when a message will be retried next, open the **Webhooks** page in the dashboard, select the endpoint, and open the message. Each message lists every attempt with its HTTP status, response body, and the timestamp of the next scheduled retry (if any attempts remain).

Each delivery carries the same `svix-id` header across every attempt, so your handler can treat retries idempotently — see [How to store webhooks data](https://www.mailblastr.com/docs/webhooks/store-data) for the dedup pattern.

## Manual replays

If a webhook message fails (or you simply want to re-process one), you can manually replay it. You can replay both **`failed`** and **`succeeded`** messages — a replay re-sends the original payload to the current endpoint URL with a fresh signature.

1. **Open the Webhooks page** — Go to the Webhooks section of the MailBlastr dashboard.
2. **Select the endpoint** — Navigate to the webhook endpoint you are using.
3. **Find the message** — Open the specific webhook message you want to replay.
4. **Replay it** — Click the "Replay" button. A new delivery attempt is made immediately and recorded as a separate attempt on the message.

> **Warning:** A replayed message reuses the original event payload (including its `id` and `created_at`). Because the `svix-id` is unchanged on a replay, an idempotent handler will recognize it as a duplicate — replay is for re-delivering to your endpoint, not for generating a new event.
