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.
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/trial3. 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.
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]"
}
}
}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.
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.
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.
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.
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.
1. Get a trial key (no auth, no signup)
curl -X POST https://sutrena.com/api/trial2. 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}'Get a trial API key instantly with no signup, or create an account for the full experience.