workflows_manage
Destructive
Automations. create (a trigger and steps; active by default and then acts by itself, so confirm), update (isActive false pauses), delete (confirm first).
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| name | No | ||
| steps | No | Ordered steps, each { id?, type, config: {...} }. Types and config: send_sms { to?, body }; send_email { to?, subject, body_html?, body_text? } (blank to = the run's contact); add_to_campaign { campaign_id } (ongoing, sending campaigns only); apply_tag / remove_tag { tag_name }; create_note { body }; create_task { title, description?, due_at?, due_in_days?, kind?, location?, contact_id? }; fire_webhook { url, method?, headers?, body? }; update_field { field, value } (first_name, last_name, email, phone, position, city, source, notes, primary_phone, company_id); set_custom_field { field_key, value } ("cf." prefix optional); delay { delay_seconds, stop_if?: { reply?, meeting?, optout? } } (stop_if ends the run if the contact did that during the wait; top-level waits over 60s); branch { condition, then: [steps], else: [steps] }. Record-targeting steps also take entity_type/entity_id. Strings support {{first_name}}, {{trigger.event}}, {{steps.<id>.output.<key>}}; give steps an explicit id to keep those references stable. On 400 INVALID_WORKFLOW, fix what the message lists rather than retrying. | |
| action | Yes | ||
| isActive | No | Default true. | |
| condition | No | Skip the run (status skipped) unless true. { all|any: [{ field, op, value }] }. Fields: entity.<column>, cf.<field_key>, trigger.event|entity_type|entity_id, trigger.payload.<key> (not payload.<key>). Ops: equals, not_equals, contains, not_contains, starts_with, ends_with, is_set, is_not_empty, is_empty, includes_tag, greater_than, greater_or_equal, less_than, less_or_equal, older_than_days, newer_than_days. entity.last_contacted_at older_than_days N includes contacts never contacted (last_contacted_at empty). | |
| description | No | ||
| triggerType | No | ||
| triggerEvent | No | Event name, or inbound webhook id. | |
| triggerConfig | No | Scheduled only: { recurrence: one_time|hourly|daily|weekly, run_at?, time_of_day?, days_of_week?, minute_of_hour?, timezone?, audience?: { tags: [1-5 names] } }. With audience it runs once per contact carrying any tag (max 500, else the fire fails); without, once with no contact. |