Retries and Delivery Behavior
How retries are configured per output, automatic retry behavior for non-webhook targets, and idempotency best practices.
Use this guide to configure retries correctly and interpret delivery behavior.
Purpose
This guide covers:
- Per-output retry configuration for webhooks.
- Automatic retry behavior for Slack, Discord, email, and Google Sheets targets.
- Plan-based retry caps for webhooks.
- Activity outcomes tied to failed deliveries.
- Idempotency guidance for receivers.
How retries work
Retries are configured per output, not per endpoint.
Webhook targets
Delivery retriesis set individually on each webhook output in the Target destination tab.- Uses exponential backoff according to the selected retry preset.
- Default is
0(no retries). - Effective retries are capped by your plan tier.
Plan caps for webhooks:
| Plan | Max retries per webhook |
|---|---|
| Basic | 0 |
| Pro | 3 |
| Ultimate | 5 |
| Unlimited | 5 |
If a webhook's retry count exceeds the plan cap, the API rejects the configuration.
The webhook retry schedule depends on the retry preset chosen for each output. See Webhook Retry Presets for full details.
Default preset (STANDARD) schedule:
| Retry | Delay |
|---|---|
| 1 | 30 seconds |
| 2 | 2 minutes |
| 3 | 10 minutes |
| 4 | 30 minutes |
| 5 | 1 hour |
Only as many delays as needed are used based on the configured retry count. Other presets (AGGRESSIVE, CONSERVATIVE) use different schedules and require Pro or higher tier.
Slack and Discord targets
Slack and Discord targets automatically retry 5 times with a fast backoff schedule. This is not user-configurable.
| Retry | Delay |
|---|---|
| 1 | 1 second |
| 2 | 2 seconds |
| 3 | 5 seconds |
| 4 | 10 seconds |
| 5 | 30 seconds |
Email and Google Sheets targets
Email targets automatically retry up to 5 times using the same backoff schedule as the STANDARD webhook preset. Google Sheets retries transient failures on the same backoff buckets until the message is older than 24 hours. These settings are not user-configurable.
| Retry | Delay |
|---|---|
| 1 | 30 seconds |
| 2 | 2 minutes |
| 3 | 10 minutes |
| 4 | 30 minutes |
| 5 | 1 hour |
Email retries apply to transient/provider failures; permanent SMTP failures such as authentication errors and SMTP 5xx recipient rejections fail immediately. Google Sheets retries apply only to retryable failures (rate limits, server errors, and connection errors). A non-retryable error such as a 400 or 403 response from the Google Sheets API will not be retried.
Failover behavior
Failover provides a backup delivery path when your primary webhook target is unavailable. It is available on webhook outputs only.
How failover works
- The primary webhook output attempts delivery (including all configured retries).
- If all retries are exhausted and the delivery still fails, PayloadRelay dispatches the request to the configured failover target.
- The failover delivery is logged with outcome
FAILOVER_TRIGGEREDin Activity. - If the failover target is itself a webhook, it has its own independent retry setting. Supported non-webhook failover targets (email, Slack, Discord) use their standard automatic retry schedules.
Configuring failover
- Open the endpoint edit page and go to the Target destinations tab.
- Expand the webhook output you want a failover for.
- Check Enable failover delivery.
- Select a failover target from the dropdown. Supported failover delivery targets are webhook, email, Slack, and Discord. Google Sheets targets are not supported for failover.
- Configure the failover target's own output settings (email subject, Slack markdown, etc.) if needed.
- Save the endpoint.
Failover behavior notes
- Failover activates only after all primary retries are exhausted. If you set 0 retries on the webhook, failover triggers immediately on the first failure.
- The
FAILOVER_TRIGGEREDoutcome is logged separately from the primary delivery attempt, so you can see both in Activity. - If both the primary and the failover target fail, no further fallback occurs — the overall outcome remains
DELIVERY_FAILED. - Test deliveries (from the Send test button) never trigger failover. Failover is a production-only mechanism.
Incoming request
│
▼
Primary webhook target → fails after 3 retries
│
▼
Email failover target → delivers to [email protected]This pattern is common for alerting — try the real-time webhook first, and if it's down, send an email so no event is lost.
Incoming request
│
▼
Primary webhook (api.example.com) → fails after retries
│
▼
Failover webhook (backup.example.com) → has its own 2 retriesUse this when both destinations are webhooks and you want the failover to also retry independently.
Prerequisites and permissions
- Endpoint edit access.
- Billing page access to check plan limits.
- Activity access for monitoring outcomes.
Step-by-step workflow
1. Confirm plan retry cap
- Open
Billing. - Check the delivery retry cap for your tier.
2. Configure webhook retries
- Open endpoint edit page.
- Go to the Target destination tab.
- For each webhook output, set
Delivery retrieswithin plan range. - Save.
Non-webhook targets (email, Slack, Discord, Google Sheets) automatically retry and do not have a configurable retry setting.
3. Monitor outcomes
In Request activity, monitor for:
DELIVERY_FAILED(delivery failed after all retries)FAILOVER_TRIGGERED(failover target was activated after primary webhook exhausted retries)TEST_REJECTED/TEST_RATE_LIMITED(target-test-only outcomes)
4. Make downstream handling idempotent
Receivers should tolerate repeated deliveries:
- Deduplicate on stable event identifiers when available.
- Make writes idempotent.
- Avoid side effects that fail on replays.
Expected result and verification checks
- Webhook retry settings match plan constraints.
- Non-webhook targets retry automatically without configuration.
- Delivery failures are visible and actionable in Activity.
- Failover triggers are logged with
FAILOVER_TRIGGEREDoutcome. - Downstream systems process repeated deliveries safely.
Common issues and fixes
- Retry value rejected: reduce value to plan max.
- Frequent
DELIVERY_FAILED: validate destination auth, connectivity, TLS. - Unexpected duplicates downstream: add idempotency controls.
- Failover not triggering: ensure
Delivery retriesis configured on the webhook (failover activates after retries are exhausted).