Skip to main content

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:

AttemptDelay After Previous
1 (initial)Immediate
21 minute
35 minutes
430 minutes
52 hours
68 hours
724 hours
848 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