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

1

Register an endpoint

Create a webhook endpoint with a public HTTPS URL and choose which events to subscribe to.

2

Formfex sends events

When a subscribed event occurs, Formfex sends an HTTP POST request to your URL with a JSON payload.

3

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:

json
{
  "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"
      }
    }
  }
}
FieldTypeDescription
typestringThe event type (e.g. FORM_RESPONSE_CREATED)
created_atstringISO 8601 timestamp of when the event occurred
dataobjectEvent-specific payload data

Headers

Each webhook request includes these headers:

HeaderDescription
Content-Typeapplication/json
X-Formfex-SignatureHMAC-SHA256 signature prefixed with sha256= (e.g. sha256=abc123...)
X-Formfex-EventThe event type
X-Formfex-DeliveryUnique 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.