Webhooks · Last updated May 16, 2026
Delivery & retries
Every webhook call is logged on the corresponding submission row, together with the HTTP status, response body, and timing. Failures are surfaced visibly rather than silently retried.
Successful deliveries
Any 2xx response counts as a success — the submission row shows a green status and the raw response is kept for inspection. Non-2xx responses are recorded as failures.
Failed deliveries
SaveForm does not auto-retry failed deliveries. Instead, the failure is recorded and surfaced on the submission row in the dashboard with the status code and error body.
Manual retries
From the submissions table, open a submission with a failed delivery and click Retry. The call is re-sent with the current webhook configuration — if you updated the URL or template in the meantime, the retry uses the new values.
- Retries run synchronously and show the new result inline.
- Retrying a success is allowed and counts as a new delivery.
- Retrying a submission that was marked as spam fires the webhook as a manual delivery, bypassing the spam skip.
Test button
On the webhook card in the settings page, click Test to fire a sample payload using fake-but-realistic data. The editor uses the same rendering pipeline as production, so if Test works, real submissions will work too.
Test fires do not count toward your plan's webhook delivery limit and are excluded from usage analytics.
Plan limits
The Personal plan (and legacy Free accounts) allow 1 webhook endpoint per form, enough to wire one destination (Slack, Discord, Zapier, or your own backend). Lite and Pro unlock unlimited endpoints per form, so a single submission can fan out to multiple destinations at once. See Rate limits and the pricing page for the full breakdown.