Connect forms to n8n

Submissions trigger n8n workflows. Self-hostable.

Updated March 2026

n8n is a workflow tool you can self-host. Add a Webhook node in n8n, point a Sutrena webhook at it, and submissions trigger your workflow. You can verify signatures with a Code node if you want. Works with n8n Cloud too.

Setup

1. Add a Webhook node in n8n

In the workflow editor, add a Webhook node. Set it to POST. Copy the production URL (not the test one).

2. Get a Sutrena API key

Grab a trial key or use yours.

curl -X POST https://sutrena.com/api/trial

3. Create a Sutrena webhook

Point it at your n8n URL and link it to your form. Save the secret from the response if you want signature verification.

curl -X POST https://sutrena.com/api/webhooks \
  -H "Authorization: Bearer st_trial_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-instance.app.n8n.cloud/webhook/abc-123",
    "description": "Submissions to n8n workflow"
  }'

# Response includes: "secret": "whsec_xxx"

# Link to your form
curl -X PATCH https://sutrena.com/api/forms/frm_xxx \
  -H "Authorization: Bearer st_trial_xxx" \
  -H "Content-Type: application/json" \
  -d '{ "webhookIds": ["wh_xxx"] }'

4. Verify HMAC signature in n8n

Add a Code node after the Webhook node. Check the signature header against an HMAC of the body. If it doesn't match, throw.

// n8n Code node (JavaScript)
const crypto = require('crypto');

const secret = 'whsec_xxx'; // your webhook secret
const signature = $input.first().headers['x-webhook-signature'];
const body = JSON.stringify($input.first().json);

const expected = 'sha256=' + crypto
  .createHmac('sha256', secret)
  .update(body)
  .digest('hex');

if (signature !== expected) {
  throw new Error('Invalid webhook signature');
}

return $input.all();

5. Build your workflow

Add nodes after the verification step. Access fields via $json.data.payload.name, $json.data.payload.email, etc. Save to a database, send an email, call an API -- whatever you need.

Webhook payload

Every submission triggers a POST to your webhook URL with this payload:

{
  "id": "del_xxx",
  "event": "form.submission",
  "timestamp": "2026-01-15T10:30:00Z",
  "data": {
    "formId": "frm_xxx",
    "submissionId": "sub_xxx",
    "payload": {
      "name": "Jane",
      "email": "[email protected]"
    }
  }
}

FAQ

Does this work with self-hosted n8n?

Yes. Same setup. But your n8n instance needs to be publicly reachable so Sutrena can deliver to it. If it's behind a firewall, something like ngrok works. Use the production webhook URL, not the test one.

Can I use n8n's built-in webhook authentication?

You can, but HMAC is stronger -- it signs the entire body, not just a header token. The Code node approach is worth the extra step.

What if my n8n instance is temporarily down?

Sutrena retries with exponential backoff over several hours. When n8n comes back, the queued deliveries go through. Check the logs with GET /api/webhooks/{id}/deliveries.

Can I trigger different workflows for different forms?

Two ways. Either make a separate webhook for each n8n workflow URL and link each to a different form. Or use one webhook and add an IF node in n8n that routes based on data.formId.

What is Sutrena?

Sutrena is the web runtime for AI agents. Three primitives — pages, forms, and dashboards — accessible through one API. Your agent creates web artifacts, humans interact with them, and your agent gets the data back. Framework-agnostic. Works from any MCP client or HTTP client.

Get started in two API calls

1. Get a trial key (no auth, no signup)

curl -X POST https://sutrena.com/api/trial

2. Create a form + dashboard from a template

curl -X POST https://sutrena.com/api/forms \
  -H "Authorization: Bearer st_trial_xxx" \
  -H "Content-Type: application/json" \
  -d '{"templateId": "waitlist", "createDashboard": true}'

Ready to build?

Get a trial API key instantly with no signup, or create an account for the full experience.

n8n Integration -- Trigger n8n Workflows from Forms | Sutrena | Sutrena