Integrations & Webhooks
When a form is submitted, forms.projme can deliver the response to your endpoint via a webhook.
Setting up a webhook
Section titled “Setting up 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.
Events
Section titled “Events”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.
Payload
Section titled “Payload”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).
Authentication
Section titled “Authentication”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.
1. HMAC signature
Section titled “1. HMAC signature”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.
2. Custom headers
Section titled “2. Custom headers”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.
Slack and Discord
Section titled “Slack and Discord”If the webhook URL points to Slack or Discord, the payload is automatically formatted for that service (embeds/attachments).
Delivery and retries
Section titled “Delivery and retries”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.
Example: n8n
Section titled “Example: n8n”- 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-Signaturein a Code node (recompute the HMAC over the raw body).
