Send waitlist signups, feedback and changelog entries to n8n
Feed Nordva Launch events into an n8n workflow, cloud or self-hosted: enrich a signup, open a Linear issue for a bug, write a row to Google Sheets, or call a model on the feedback text.
How do I connect Nordva Launch to n8n?
Add a Webhook node to an n8n workflow (method POST, respond immediately), activate the workflow and paste its Production URL as a Nordva Launch webhook. The signed JSON envelope arrives as the node's body. Self-hosted n8n must be reachable over public https; Launch refuses private hostnames and does not follow redirects.
01Get the n8n URL
- Add a Webhook trigger node. HTTP method POST, Respond: Immediately, authentication None (verify the signature in a Code node instead, or rely on the unguessable path).
- n8n shows a Test URL and a Production URL. The Test URL only listens while you press Listen for test event; paste the Production URL into Launch and activate the workflow.
- Self-hosted: the instance needs a public https hostname on the default port. localhost, LAN names and IP addresses are refused by Launch when the endpoint is created.
02Create the endpoint
Three ways, same result. In the dashboard: Webhooks → Add webhook, paste the URL, tick the events, press Test. Over the API with a secret key:
curl -X POST https://api.nordva.dev/v1/webhooks \
-H "Authorization: Bearer nv_live_…" \
-H "Content-Type: application/json" \
-d '{
"url": "https://<your-n8n>/webhook/<path>",
"events": ["waitlist.signup.created", "feedback.created"],
"description": "n8n"
}'
# → data.signing_secret is returned once; keep it if you verify signatures Or from an AI agent with the MCP server connected: “send new waitlist signups and feedback to n8n, here is the URL”. The agent calls create_webhook, then test_webhook, and reads the delivery log if the test fails.
Events you can subscribe to: waitlist.signup.created, waitlist.signups.invited, changelog.entry.published, changelog.subscriber.created, feedback.created, or "*" for all of them.
03What n8n receives
A POST with the JSON envelope. Every event has the same outer shape; data depends on the type. A signup:
{
"id": "evt_01K5…",
"type": "waitlist.signup.created",
"created_at": "2026-09-17T20:41:07.512Z",
"project_id": "prj_01K4…",
"data": {
"signup_id": "ws_01K5…",
"email": "jane@example.com",
"position": 42,
"referral_code": "JANE42",
"referred": false,
"source": "hn",
"utm_source": null,
"created_at": "2026-09-17T20:41:07.512Z"
}
} Headers: Nordva-Event-Id, Nordva-Event-Type, Nordva-Delivery-Id, Nordva-Signature (HMAC-SHA256, t=…,v1=…). The full field list per event is in the webhooks guide.
- Press Test in Launch. The ping shows in the node's output as body.id, body.type and body.data.
- A Code node can verify Nordva-Signature: HMAC-SHA256 of `${t}.${rawBody}` with the signing secret, compared to v1. Enable Raw Body on the Webhook node to get the exact bytes.
- Branch with a Switch node on body.type when one endpoint subscribes to several events.
- The request is the signed JSON envelope: id, type, created_at, project_id and data. Nordva-Event-Id is the same across retries, so use it to ignore a duplicate.
Delivery, retries, limits
- Any 2xx within 10 seconds counts as delivered. A 3xx, 4xx, 5xx or a timeout is retried after 1 minute, 5 minutes, 30 minutes, 2 hours and 6 hours, then given up.
- An endpoint that fails 20 deliveries in a row is switched off; the dashboard says why, and one click switches it back on.
- Every delivery of the last 30 days is in the log with what was sent and what n8n answered.
- Indie includes 2 endpoints per project, Builder 5. Webhooks are not on the Free plan.
- A webhook never slows or fails the API call that caused it: if n8n is down, the signup still succeeds.
Questions
Test works but real events never arrive.
Almost always the Test URL was pasted instead of the Production URL, or the workflow is not activated. Check the endpoint's delivery log in the Launch dashboard: a 404 from n8n means the path is not listening.
Can n8n verify the signature?
Yes. Turn on the Webhook node's Raw Body option and compute HMAC-SHA256 over the timestamp, a dot and the raw body in a Code node. The docs guide has the exact algorithm.