Retry Logic
How Clipform handles failed webhook deliveries.
If your endpoint returns a non-2xx status code or is unreachable, Clipform automatically retries with exponential backoff.
Retry schedule
| Attempt | Delay after previous |
|---|---|
| 1 | Immediate |
| 2 | 1 minute |
| 3 | 5 minutes |
| 4 | 30 minutes |
| 5 | 2 hours |
After 5 failed attempts, the event is marked as failed and no further retries are attempted.
What counts as success
A delivery is considered successful when your endpoint returns any 2xx HTTP status code (200, 201, 202, etc.).
What counts as failure
- Any non-2xx response (4xx, 5xx)
- Connection timeout
- DNS resolution failure
- TLS handshake failure
Idempotency
Each webhook event has a unique webhook-id header (format: msg_<uuid>). If you receive the same webhook-id more than once, you can safely ignore the duplicate.
Monitoring
You can monitor webhook delivery status in the dashboard:
- Go to your form's Webhooks page
- View the delivery log showing status, response code, and timing for each attempt
- Filter by success/failure to identify issues
Best practices
- Return 200 quickly - process the payload asynchronously if your logic takes time. Acknowledge receipt immediately and handle the data in a background job.
- Use idempotency - check the
webhook-idto avoid processing the same event twice. - Verify signatures - always verify the webhook signature before processing.