Set Up Your n8n Instance
Sign up for n8n Cloud at n8n.io, or self-host using Docker. The free tier includes 5 workflows and 100 executions per month — enough for testing and small automations.
Connect Your Webhook
In your DangWire dashboard, copy your webhook URL. In n8n, create a new workflow and add a 'Webhook' node as the trigger. Set the HTTP Method to POST and paste the webhook URL into your form's webhook settings.
Import the Workflow Template
Download the .json workflow file from your DangWire order confirmation. In n8n, click the three-dot menu in the top right, select 'Import from File', and upload the .json file.
Configure Mappings
Open each node in the imported workflow and map the incoming webhook data fields to the correct destination fields. All fields are labeled in the template for easy identification.
Test the Workflow
Click 'Test Workflow' in n8n, then submit a test form. Watch the data flow through each node. Check the output of each node to verify correct data mapping.
Activate the Workflow
Once tests pass, toggle the workflow to 'Active' in n8n. Your automation is now live and will execute automatically on each new form submission.
Verify webhook signatures
Every forward DangWire sends to your automation URL is HMAC-signed so you can prove it came from us and was not tampered with in transit. The dashboard Test button sends the exact same signed shape, so you can validate your verification logic before going live. Verification is optional — unsigned requests are still delivered — but recommended for production endpoints.
| Header | Meaning |
|---|---|
X-Webhook-Signature | Hex-encoded HMAC-SHA256 digest over `{timestamp}.{raw_body}` using your workflow's signing secret. |
X-Webhook-Timestamp | Unix seconds (string) when the request was signed. Reject anything older than 5 minutes to block replays. |
X-Webhook-Event | Event type — `form_submission` for live submissions and manual test probes alike. |
Verification recipe
- Read the raw request body before JSON parsing — the signature covers the exact bytes on the wire.
- Compute
expected = HMAC_SHA256(secret, timestamp + "." + raw_body)and compare it toX-Webhook-Signaturein constant time. - Reject when
X-Webhook-Timestampis more than 5 minutes old (replay window) or the digest does not match.
import { createHmac, timingSafeEqual } from "crypto";
function verifyDangWire(secret, rawBody, timestamp, signature) {
const expected = createHmac("sha256", secret)
.update(timestamp + "." + rawBody)
.digest("hex");
const ok = timingSafeEqual(
Buffer.from(expected, "hex"),
Buffer.from(signature, "hex"),
);
const fresh = Math.abs(Date.now() / 1000 - Number(timestamp)) <= 300;
return ok && fresh;
}Your signing secret (whsec_…) is per workflow. Read it once from the dashboard integration settings or the management API (GET /api/webhook-signing/workflows/<id>), store it in your platform's credential vault, and rotate it there when needed (POST …/rotate) — rotation invalidates old signatures immediately.