volanea_update_workflow
Update a workflow by id — edit the graph/trigger, or set status to 'active' (start processing live events) or 'paused'. Activation is deliberately separate from creation so a human-reviewable draft always exists first. graph replaces the stored graph wholesale, so read it with volanea_get_workflow first if you are amending one.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New display name. Omit to leave it unchanged — this is a partial update, not a replace. | |
| graph | No | Automation graph. Exactly one `trigger` node is the entry point; edges connect node ids. Node types and their `config`: - trigger: entry node, no config. - send_email: { templateId? } and/or { subject?, body? (HTML), fromEmail?, fromName? } — template fields fill anything omitted. - delay: { minutes?, hours?, days? } (defaults to 1 minute if all omitted). - wait_event: { event: "<eventName>", timeoutHours? (default 72) }. The unlabeled outgoing edge fires when the event arrives; an edge labeled "timeout" is taken on timeout. - condition: { conditions: <same condition tree as segments> }. Outgoing edges must be labeled "yes" and "no". - update_contact: { set: { <customField>: value, ... }, subscribed? }. - webhook: { url, payload? } — POSTs workflow/contact context to your URL (5s timeout). - exit: ends the walk. `x`/`y` are canvas coordinates for the dashboard editor — space nodes out (e.g. x = index * 260, y = 80). | |
| status | No | `draft` and `paused` workflows enrol NO ONE: matching events are silently ignored, which is the usual reason a workflow "does not fire". Set `active` to go live — that starts affecting real contacts immediately. | |
| reentry | No | Whether a contact can enter again. `never` = once per contact, ever (welcome series). `after_exit` = again once they have finished (abandoned cart). `always` = every trigger enrols them, even mid-run — the only option that can send one contact overlapping copies, so choose it deliberately. | |
| trigger | No | Event name that enrols a contact, e.g. `order.placed`. Must match what your app actually sends, character for character: a mismatch is not an error, it simply never fires. Check volanea_list_resources { event_names } for what this project has really recorded. | |
| workflowId | Yes | The wf-… id. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Machine-readable failure code to branch on. Present only when success is false. | |
| data | No | Present when success is true. | |
| error | No | Human-readable failure reason. Present only when success is false. | |
| success | Yes | False when the call failed; read `error` and `code` in that case. |