Webhooks
LocalForm can POST every submission as JSON to an external endpoint - for payment flows, CRMs, automation tools, or custom backends.
Configuration
- Per form: set Webhook URL in the form editor's General panel.
- Default: set a fallback URL under LocalForm → Settings → Webhooks, used by forms without their own URL.
- Webhook-only mode: uncheck Save submissions in WordPress (also in the General panel) to skip local storage and only deliver to the webhook.

Payload
{
"form_id": 12,
"submission_id": 345,
"timestamp": "2026-07-23T10:00:00+00:00",
"event_date": "2026-09-01",
"payment_price": 25.0,
"fields": { "name": "…", "email": "…" },
"custom_fields": { "any": "key-value pairs from the form's Custom Fields panel" }
}
submission_id is null in webhook-only mode. Custom fields are key-value pairs that ride along in every payload without being shown on the form itself:

A form with multiple event dates (Pro) also carries an event_dates array holding the full schedule in machine-readable form.
LocalForm Pro adds Global Webhook Fields (LocalForm → Settings → Webhooks → Fields) - key-value pairs merged into every form's payload. A per-form custom field overrides a global one that shares the same key.

Signing
When a secret key is configured (LocalForm → Settings → Webhooks → Webhook Secret Key), requests carry an HMAC-SHA256 signature of the JSON body so the receiver can verify authenticity.

Delivery and retries
Deliveries are queued (via WP-Cron) and retried up to 3 times with exponential backoff (0s / 1 min / 5 min). Every attempt is recorded under LocalForm → Settings → Webhooks → Logs (payload, response code, response body), with 30-day retention.

Redirecting after submission
Two ways to send visitors elsewhere after a successful submission:
- Redirect URL on the form itself (General panel) always redirects there, regardless of the webhook.
- If the receiving endpoint responds with an
X-LocalForm-Redirectheader (or aredirect_urlkey in its JSON response - both names configurable under Settings → Webhooks → Redirect), the visitor is redirected there instead - useful for payment checkouts. A form-level Redirect URL takes priority over one returned by the webhook.
The frontend polls the delivery status briefly and falls back to the normal success message.