Skip to content

Integrations & Webhooks

When a form is submitted, ProjME Forms can deliver the submission to your endpoint via a webhook.

Create a webhook from the form’s settings: set the URL, HTTP method (POST/PUT/PATCH), the events to trigger on, and optional custom headers.

A form_submitted delivery is a JSON POST like:

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

formData contains the raw field values; formatted is a human-friendly rendering.

Two ways to authenticate deliveries, so your endpoint knows the request is genuine.

Set a secret on the webhook. Every delivery then includes:

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

Verify on your side by recomputing HMAC-SHA256(raw_body, secret) and comparing with the header.

Set a static token on the webhook. It is sent in a header (default X-Form-Token). Your endpoint checks the header value. Tokens are only sent over HTTPS — the webhook URL must use https://.

Pasting a Slack or Discord webhook URL automatically formats the payload for that service.

Deliveries are retried up to 3 times with exponential backoff. Every attempt is logged (status, response, error), and you can optionally receive email notifications on success/failure.

  • Static token: use the n8n Webhook node with Authentication = Header Auth, header X-Form-Token = your token.
  • HMAC: use a Webhook node with Authentication = None and verify X-Webhook-Signature in a Code node (recompute HMAC over the raw body).