Retry Policy
Failed webhook deliveries are automatically retried with exponential backoff.
Retry Schedule
| Attempt | Delay |
|---|---|
| 1 | Immediate |
| 2 | 1 minute |
| 3 | 5 minutes |
| 4 | 30 minutes |
| 5 | 2 hours |
| 6 | 8 hours |
| 7 | 16 hours |
After 7 attempts, the delivery is marked as failed.
What Triggers a Retry
- HTTP 5xx response
- Connection timeout (10 seconds)
- Network error
What Doesn't Retry
- HTTP 2xx — Success
- HTTP 4xx — Client error (except 429)
- HTTP 410 — Endpoint disabled
Auto-Disable
Endpoints are automatically disabled when:
- 25 deliveries fail within 24 hours
- Endpoint returns HTTP 410 Gone
When disabled, you'll receive a notification via email.
Re-enabling an Endpoint
curl -X POST "https://api.kula.ai/v1/webhooks/{id}/enable" \
-H "Authorization: Bearer your_api_token_here"
Self-Disable with 410
To permanently stop receiving webhooks, return HTTP 410 Gone:
app.post('/webhooks/kula', (req, res) => {
// Return 410 to stop receiving webhooks
res.status(410).send('Gone');
});
Delivery Guarantees
Webhooks provide at-least-once delivery. Use the event_id to deduplicate events in case of retries.