Overview
Webhooks let you receive an HTTP POST request to your server whenever a form submission is completed. This enables real-time integrations with your backend, CRM, notification systems, or any external service. A webhook fires when all required questions on a form have been answered.Configuring a Webhook
Use the Update Form endpoint to set a webhook URL and enable delivery:Disabling a Webhook
SetwebhookEnabled to false to stop deliveries without removing the URL:
webhookUrl to null. This automatically disables the webhook:
Payload Format
When a form submission is completed, GeniusForms sends aPOST request with a JSON body:
| Field | Description |
|---|---|
form_id | The numeric ID of the form |
form_name | The form’s title |
submission_id | Unique session ID for this submission |
submitted_at | ISO 8601 timestamp |
data | Key-value pairs mapping question text to the respondent’s answer |
| Header | Value |
|---|---|
Content-Type | application/json |
User-Agent | GeniusFormsAI-Webhook/1.0 |
Testing Your Webhook
Before going live, verify your endpoint works with the Test Webhook endpoint:url is provided in the request body, it tests the form’s currently configured webhook URL.
Checking Delivery Logs
Use the Get Webhook Logs endpoint to review delivery history:Checking Webhook Status
Get a quick summary of the current configuration and the last delivery attempt with the Get Webhook Status endpoint:Security Notes
- HTTPS recommended - Use HTTPS URLs for webhook endpoints to protect payload data in transit.
- Localhost blocked in production -
localhost,127.0.0.1, and private IP ranges (192.168.*,10.*,172.*) are blocked in production to prevent SSRF attacks. - 10-second timeout - Webhook requests time out after 10 seconds. Return a
2xxresponse quickly and process the data asynchronously if needed. - Non-blocking - Webhook failures never prevent form submissions from being saved. Failed deliveries are logged for debugging.
- No retries - Failed webhook deliveries are not automatically retried. Check the delivery logs to identify and resolve issues.
Validation Rules
| Rule | Detail |
|---|---|
| URL format | Must be a valid HTTP or HTTPS URL |
| URL length | Maximum 2000 characters |
| Enabling | webhookEnabled: true requires a webhookUrl to be set (on the form or in the same request) |
| Clearing URL | Setting webhookUrl to null or "" automatically sets webhookEnabled to false |