Skip to content

Integrations & Webhooks

When a form is submitted, forms.projme can deliver the response to your endpoint via a webhook.

Create a webhook in the form settings (Settings → Webhooks): set a name, URL, HTTP method (GET/POST/PUT/PATCH/DELETE/HEAD), trigger events, and optional headers. The creation wizard also offers a payload template and an email for delivery success/failure notifications.

The UI lists form_submitted, form_viewed, and form_started. Currently, deliveries are triggered by form_submitted — the primary event covering “send the response to my system” scenarios.

A form_submitted delivery is a JSON request of this shape:

{
"event": "form_submitted",
"formId": "…",
"submissionId": "…",
"ipAddress": "…",
"formData": { "field_id": "value" },
"formatted": { "field_label": "value" }
}

formData holds the raw field values; formatted is a human-readable view (question labels instead of ids).

Use one of the methods below so your endpoint knows the request is genuine. Secret/token management is coming to the webhook UI; if you need it now (HMAC is already supported by the platform), contact us and we will set it up.

A webhook can carry a secret. Every delivery includes the header:

X-Webhook-Signature: HMAC-SHA256(request-body, secret) (hex)

Verify on your side: recompute HMAC-SHA256(raw_body, secret) and compare it with the header.

Arbitrary headers can be attached to every delivery — e.g. a static token like X-Form-Token: <value> that your endpoint checks. For security, use https:// webhook URLs.

If the webhook URL points to Slack or Discord, the payload is automatically formatted for that service (embeds/attachments).

Deliveries are retried up to 3 attempts with exponential backoff. Every attempt is logged (status, response, error) — the history is available in the webhook settings; email notifications for success/failure are configurable. A failed delivery can be retried manually.

  • Header token: a Webhook node with Authentication = Header Auth, header (e.g. X-Form-Token) = the value passed in the webhook’s custom headers.
  • HMAC: a Webhook node with Authentication = None, then verify X-Webhook-Signature in a Code node (recompute the HMAC over the raw body).