Webhooks Overview
Receive real-time notifications when events happen in your Formfex account
What are Webhooks?
Webhooks let you receive automatic HTTP POST notifications whenever something happens in your Formfex account — a new form response, a published form, a completed analytics report, and more.
Instead of polling the API to check for changes, Formfex pushes events to your server in real time.
How It Works
Register an endpoint
Create a webhook endpoint with a public HTTPS URL and choose which events to subscribe to.
Formfex sends events
When a subscribed event occurs, Formfex sends an HTTP POST request to your URL with a JSON payload.
Verify and process
Your server verifies the HMAC signature, processes the payload, and returns a 2xx status code.
Payload Format
Every webhook delivery sends a JSON body with this structure:
{
"type": "FORM_RESPONSE_CREATED",
"created_at": "2026-03-06T12:00:00.000Z",
"data": {
"formId": "cm1a2b3c4d5e6f7g8h9i0j",
"formTitle": "Customer Feedback Survey",
"responseId": "cm9z8y7x6w5v4u3t2s1r0q",
"answers": {
"field_1": {
"question": "How satisfied are you?",
"answer": "Very satisfied"
}
}
}
}
| Field | Type | Description |
|---|---|---|
type | string | The event type (e.g. FORM_RESPONSE_CREATED) |
created_at | string | ISO 8601 timestamp of when the event occurred |
data | object | Event-specific payload data |
Headers
Each webhook request includes these headers:
| Header | Description |
|---|---|
Content-Type | application/json |
X-Formfex-Signature | HMAC-SHA256 signature prefixed with sha256= (e.g. sha256=abc123...) |
X-Formfex-Event | The event type |
X-Formfex-Delivery | Unique delivery identifier |
Retry Policy
If your endpoint doesn't respond with a 2xx status within 10 seconds, Formfex retries the delivery:
- Up to 8 retry attempts with exponential backoff
- After 5 consecutive failures, the endpoint is automatically disabled
- You can re-enable disabled endpoints from the dashboard or API
Plan Requirement
Webhooks require a Starter plan or higher. Your API key must have the WEBHOOKS_READ and/or WEBHOOKS_WRITE scopes.
Idempotency
Each delivery has a unique idempotency key. If you receive the same delivery ID twice, you can safely skip the duplicate.