Workflows

Trigger n8n, Make, Zapier, Pipedream or any workflow URL with the route's variables as flat JSON fields, plus the decision under dcision — signed and retried in the background.

A workflow destination starts an automation you built in a no-code or low-code tool. Dcision POSTs the route's variables to the workflow's trigger URL — as flat JSON fields, the shape these tools map with a click — and delivers it in the background, with retries.

Configure it

{
  "key": "sales_crm",
  "type": "workflow",
  "when": { "conditions": [{ "field": "route", "on": "output", "operator": "eq", "value": "sales" }] },
  "params": {
    "message": { "from": "state.message", "required": true },
    "company_size": { "from": "state.company_size" },
    "lead_score": { "from": "composites.lead_score" },
    "team": { "value": "inbound" }
  },
  "workflow": { "platform": "n8n", "url": "{{secrets.N8N_LEADS_WEBHOOK}}", "name": "New sales lead" }
}
FieldTypeDefaultDescription
platformstringcustomn8n, make, zapier, pipedream or custom. It labels the destination and suggests the URL format in the editor; the request is the same for all.
urlstring—The workflow's trigger URL: https://…, or {{secrets.NAME}} holding the whole URL. Up to 2,048 characters, with variables.
namestring—Optional, up to 120 characters. Sent as dcision.workflow.

In the editor, the params of a workflow are called Workflow variables.

PlatformTrigger to create
n8nA Webhook node, method POST; use its production URL.
MakeA Custom webhook module.
ZapierA Webhooks by Zapier → Catch Hook trigger.
PipedreamAn HTTP / Webhook trigger.
CustomAny https endpoint that accepts a JSON POST.

Trigger URLs are secrets in practice — anyone who has one can start your workflow. Store it as a workspace secret and use {{secrets.NAME}} as the URL, as above.

The request

POST body
{
  "message": "We need pricing for 500 users and want to start next month.",
  "company_size": 500,
  "lead_score": 0.8414,
  "team": "inbound",
  "dcision": {
    "decision": "lead-qualification",
    "decision_id": "dec_3fKq9ZtW1mXcV7bN2pLa",
    "version": 4,
    "execution_id": "exec_8HsT2kQw9ZyR4vMn1cXe",
    "result": { "purchase_intent": 0.9412, "priority": "high", "route": "sales" },
    "confidence": { "purchase_intent": 0.8824, "priority": 0.69, "route": 0.85 },
    "action": "continue",
    "action_reason": { "type": "default" },
    "destination": "sales_crm",
    "workflow": "New sales lead",
    "delivery_id": "dlv_8kJx2mQp4LzN7vR1tY6w",
    "livemode": true
  }
}
  • Each param is a top-level field; the decision itself is under dcision. A param named dcision would be replaced by that object — pick another name.
  • dcision.workflow is the destination's name (null without one), dcision.version is null in the Playground, and dcision.livemode is false for test keys and the Playground.
  • The state is never sent as such — only the params you map.

The request carries Content-Type: application/json, the Dcision headers with its Dcision-Signature, and Idempotency-Key set to the delivery ID. Most no-code triggers can't verify an HMAC signature — keep the URL secret instead. When your workflow can run code, verify the signature like a webhook.

Delivery

Workflows are delivered at least once, with six attempts over about seven hours: answer 2xx quickly and let the workflow run asynchronously. A run started twice for the same delivery carries the same dcision.delivery_id — deduplicate on it when a duplicate would hurt, for example before creating a CRM record.

On this page