Webhook Retry Policy
When a webhook delivery fails, AudioSpliter retries with exponential backoff.
What Counts as a Failure
A delivery is considered failed if:
- Your endpoint returns a non-2xx HTTP status code
- Your endpoint does not respond within 30 seconds
- A network error prevents delivery (DNS failure, connection refused, etc.)
Retry Schedule
AudioSpliter retries up to 8 times with exponential backoff:
| Attempt | Delay After Previous |
|---|---|
| 1 (initial) | Immediate |
| 2 | 1 minute |
| 3 | 5 minutes |
| 4 | 30 minutes |
| 5 | 2 hours |
| 6 | 8 hours |
| 7 | 24 hours |
| 8 | 48 hours |
Total retry window: approximately 3 days from the initial attempt.
Idempotency
Each delivery includes a unique X-AudioSpliter-Delivery header. Use this to deduplicate webhook processing in case the same event is delivered more than once.
// Track processed deliveries
const processedDeliveries = new Set();
app.post('/webhooks/audiospliter', (req, res) => {
const deliveryId = req.headers['x-audiospliter-delivery'];
if (processedDeliveries.has(deliveryId)) {
// Already processed - return 200 to stop retries
return res.status(200).json({ received: true, duplicate: true });
}
processedDeliveries.add(deliveryId);
// Process the webhook...
res.status(200).json({ received: true });
});
Monitoring Failures
View webhook delivery history and failures in the Dashboard under Settings > Webhooks > Delivery Log.
Each delivery log entry includes:
- Delivery ID
- Event type
- HTTP status code returned
- Response body (first 1 KB)
- Timestamp
- Next retry time (if applicable)
Disabling Webhooks
If your endpoint fails consistently (all 8 retries for 3 consecutive events), AudioSpliter automatically disables the webhook and sends an email notification. Re-enable it from the dashboard after fixing your endpoint.
Best Practices
- Return 200 quickly -- do heavy processing asynchronously after acknowledging receipt
- Implement idempotency -- the same event may be delivered more than once
- Monitor your endpoint -- set up alerting for webhook failures
- Use a queue -- write webhook payloads to a message queue for reliable processing