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" }
}| Field | Type | Default | Description |
|---|---|---|---|
platform | string | custom | n8n, make, zapier, pipedream or custom. It labels the destination and suggests the URL format in the editor; the request is the same for all. |
url | string | — | The workflow's trigger URL: https://…, or {{secrets.NAME}} holding the whole URL. Up to 2,048 characters, with variables. |
name | string | — | Optional, up to 120 characters. Sent as dcision.workflow. |
In the editor, the params of a workflow are called Workflow variables.
| Platform | Trigger to create |
|---|---|
| n8n | A Webhook node, method POST; use its production URL. |
| Make | A Custom webhook module. |
| Zapier | A Webhooks by Zapier → Catch Hook trigger. |
| Pipedream | An HTTP / Webhook trigger. |
| Custom | Any 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
{
"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 nameddcisionwould be replaced by that object — pick another name. dcision.workflowis the destination'sname(nullwithout one),dcision.versionisnullin the Playground, anddcision.livemodeisfalsefor 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.
Agents
Hand a result to your own agent endpoint with the route's instructions and tools — wait for its reply in the response, or hand off in the background with retries.
Webhooks
Receive the signed decision.completed event at your URL — the envelope, its headers, verifying Dcision-Signature with and without the SDKs, raw bodies in Express and Next.js, rotation and deduplication.