45 operations. Call each with POST https://app.chirply.io/api/v1/actions/<name> and a bearer token; the response is { "data": { "action", "summary", "result" } }. A read badge means the operation changes nothing; write requires the credential’s write scope.
Activate a workflow
automations.activatewriteconfirm
ARMS A LIVE AUTOMATION. Once active, every matching event fires this workflow's steps for real — sending SMS/email, placing calls, dropping voicemails, enrolling contacts in campaigns, spending the tenant's money — with no further human approval. Check the steps before turning it on.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
shared_page_acknowledged
boolean
optional
Set true only after acknowledging that this Page is connected to another Chirply account and enabling automation may send duplicate messages, replies or comments.
Over MCP the same operation is the tool automations_activate at https://app.chirply.io/api/mcp, same bearer token, same input.
Add a workflow step
automations.add_stepwrite
Append an action to the end of a workflow. Adding a step does not run it; it runs on the next trigger or manual run. The action must be one the shared registry knows — see automations.list_action_types.
The action's settings, keyed by the field keys automations.list_action_types reports for this action type. For webhook/Call an API this includes url, method, query_params, auth_type plus its credential fields, headers, body_mode and the matching body field. Values support {{merge}} tokens where the field does. Default: {}
Over MCP the same operation is the tool automations_add_step at https://app.chirply.io/api/mcp, same bearer token, same input.
Claim a send
automations.claimwrite
Atomically take a named claim for this account, so that exactly one caller proceeds and every other caller is told to stop. Intended for workflow steps that must not run twice when two separate events start two separate runs — a booking and a reschedule, for example, which are different events and legitimately start different runs. Returns claimed=true for the single winner and claimed=false for everyone else; treat false, and any error or timeout, as 'do not send'. Sends no messages, spends no money and reads no contact data; it only records that the key is taken until it expires.
Parameters
Field
Type
Required
Description
key
string
required
Your own name for the thing being done once, for example "appt-followup:<contact id>:reminder-1". Opaque to Chirply: two callers race only when they use the SAME string, so compose it from whatever makes two sends duplicates of each other.
ttl_seconds
integer
optional
How long the claim holds before the key can be won again, in seconds. Defaults to 86400 (24 hours); maximum 7776000 (90 days). Set it to the period over which a second send would be wrong, not to the length of the race.
detail
map of string → object
optional
Optional free-form JSON recorded against the claim — a run id, a step name — so a person reading it later can tell which run took the send. Never interpreted by Chirply.
Over MCP the same operation is the tool automations_claim at https://app.chirply.io/api/mcp, same bearer token, same input.
Create automation
automations.createwriteconfirm
Create a complete automation/workflow/drip/nurture/follow-up sequence in one call. This is the right action for 'when a new lead is added, send a welcome message', even if the user calls it an autoresponder or campaign. Supply steps and this builds the real editable flow, generates a useful name when omitted, and turns it on by default. Active message/call steps later reach real people and incur the org's provider charges. Omit steps to create a paused visual-canvas draft.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Also answers to set up autoresponder, create workflow, build drip, welcome campaign, nurture sequence.
Parameters
Field
Type
Required
Description
shared_page_acknowledged
boolean
optional
Set true only after acknowledging that this Page is connected to another Chirply account and enabling automation may send duplicate messages, replies or comments.
name
string
optional
What to call it. Omit it and a useful name is generated.
What this step does. Use send_sms/send_email for messages and wait for a real durable delay.
steps[].action_config
map of string → object
optional
Settings for this step. send_sms: {body}; send_email: {subject, body}; wait: {duration, unit}; create_task: {title, description, priority, due_in_days, assignee_id — a workspace member id; omit it to create the task unassigned}; add_tag: {tag}. Default: {}
stop_on_reply
boolean
optional
Stop an in-flight sequence when the contact replies. Defaults true for multi-step follow-up.
is_active
boolean
optional
Arm it immediately. Defaults true when steps are supplied and false for an empty shell.
webhook_secret
string (or null)
optional
Require this value in the x-automation-secret header to trigger via the API.
Over MCP the same operation is the tool automations_create at https://app.chirply.io/api/mcp, same bearer token, same input.
Build this flow
automations.create_from_templatewrite
Create a PAUSED normal automation from a private automation template. Bot-flow templates are rejected, nothing is sent, and the new automation cannot react to live events until separately activated.
Parameters
Field
Type
Required
Description
template_id
string
required
Permanent built-in starter id or private saved-template UUID returned by automations.list_templates.
name
string
optional
Optional name for the new paused workflow; defaults to the template name.
asset_id
string (or null)
optional
Connected Instagram account id, Facebook Page id, or WhatsApp phone-number id required by built-in social starters; private saved templates retain their same-account binding.
keyword
string (or null)
optional
Case-insensitive word or phrase that must appear in the inbound comment or message. Required for whatsapp_lead_followup so an answer cannot restart the same workflow.
media_id
string (or null)
optional
Optional Instagram post or Reel id. When omitted, a comment template listens across that account.
destination_url
string (uri) (or null)
optional
Public http:// or https:// link delivered after the person replies. Required for instagram_comment_link; that template is rejected without it.
Over MCP the same operation is the tool automations_create_from_template at https://app.chirply.io/api/mcp, same bearer token, same input.
Delete a workflow
automations.deletewriteconfirm
Permanently delete a workflow along with its steps and its entire run history. This cannot be undone.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool automations_delete at https://app.chirply.io/api/mcp, same bearer token, same input.
Delete saved step
automations.delete_saved_stepwriteconfirm
Permanently delete one saved reusable step from this account. Automations that already had it inserted keep their own copies and are unaffected, but the saved entry cannot be recovered.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
saved_step_id
string (uuid)
required
Saved-step UUID returned by automations.list_saved_steps.
Over MCP the same operation is the tool automations_delete_saved_step at https://app.chirply.io/api/mcp, same bearer token, same input.
Delete a workflow step
automations.delete_stepwriteconfirm
Remove a step from a workflow. The remaining steps keep their order. This cannot be undone.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Over MCP the same operation is the tool automations_delete_step at https://app.chirply.io/api/mcp, same bearer token, same input.
Delete workflow template
automations.delete_templatewriteconfirm
Permanently delete one private saved workflow template from this account. Existing workflows installed from it are unaffected, but the frozen template cannot be recovered; built-in Chirply starters cannot be deleted.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
template_id
string (uuid)
required
Private saved-template UUID to permanently delete.
Over MCP the same operation is the tool automations_delete_template at https://app.chirply.io/api/mcp, same bearer token, same input.
Duplicate workflow
automations.duplicatewrite
Create a separate PAUSED copy of one workflow's current graph in this account. It copies no runs, history, legacy steps, or inbound-webhook secret and sends nothing until separately reviewed and activated.
Parameters
Field
Type
Required
Description
workflow_id
string (uuid)
required
Workflow in this account to copy.
name
string
optional
Optional name for the paused copy; defaults to the source name plus 'copy'.
Over MCP the same operation is the tool automations_duplicate at https://app.chirply.io/api/mcp, same bearer token, same input.
Duplicate steps
automations.duplicate_stepswrite
Copy one or more of a workflow's steps back into the SAME workflow with new node ids. Works on normal automations and bot flows alike. The copy arrives unconnected, so the sequence that already runs is unchanged until the copy is wired to a path in the builder. Nothing is sent and no contact is enrolled by this call.
Parameters
Field
Type
Required
Description
workflow_id
string (uuid)
required
Workflow in this account holding the steps to copy — a normal automation or a bot flow.
node_ids
string[]
required
Node ids to copy. Connections between the chosen nodes are kept.
include_downstream
boolean
optional
When true, every step reachable from the given nodes is copied too. Default: false
Over MCP the same operation is the tool automations_duplicate_steps at https://app.chirply.io/api/mcp, same bearer token, same input.
Add contacts to an automation
automations.enroll_contactswriteconfirm
STARTS THE WORKFLOW FOR REAL for every contact given — the bulk 'Add to automation' action. Immediate steps can send real SMS/email/calls and incur real charges; wait steps remain scheduled and resume later. This works even while automatic enrollment is paused. Continues past individual failures and reports the tally.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
workflow_id
string (uuid)
required
The workflow to enroll into.
contact_ids
array of (string (uuid))
required
Contacts to enroll. Each one gets a full run of every step.
Over MCP the same operation is the tool automations_enroll_contacts at https://app.chirply.io/api/mcp, same bearer token, same input.
Fetch sample data
automations.fetch_mapping_sampleread
Read a recent saved contact, a recent Facebook lead submission, or the most recent completed submission of one of this account's own forms, for data mapping before a workflow has run. A native form sample returns the exact payload the form-submitted trigger emits, including the submission's own response id and the time it came in. Facebook reads use the connected Page and count toward Meta API limits. Creates no contacts, starts no runs, sends no messages and buys no ads. Samples contain only available values; provider samples do not imply a saved contact.
Read the newest saved contact, a recent submission from a connected Facebook lead form, or the most recent completed submission of one of this account's own forms.
form_id
string
optional
Connected Facebook instant form ID. Required for facebook_lead; select a specific form in the trigger.
native_form_id
string (uuid)
optional
One of this account's own forms. Required for native_form; select a specific form in the Form submitted entry point.
mapping
any
optional
Optional JSON input containing trigger references to resolve against this sample without running a workflow step.
Over MCP the same operation is the tool automations_get at https://app.chirply.io/api/mcp, same bearer token, same input.
Check a claim
automations.get_claimread
Report whether a named claim is currently held in this account, when it was taken and when it expires. Read-only and does NOT compete for the claim: by the time the answer arrives another run may have taken it, so never use this to decide whether to send — use Claim a send for that. Intended for dashboards and for working out why a workflow stopped.
Parameters
Field
Type
Required
Description
key
string
required
Your own name for the thing being done once, for example "appt-followup:<contact id>:reminder-1". Opaque to Chirply: two callers race only when they use the SAME string, so compose it from whatever makes two sends duplicates of each other.
Over MCP the same operation is the tool automations_get_claim at https://app.chirply.io/api/mcp, same bearer token, same input.
Open the automation flow
automations.get_flowread
Fetch a workflow's flow graph — the nodes and connections the visual builder draws, and the exact structure the runtime walks. A workflow that predates the builder is lifted from its stored steps on the way out, so this always returns a graph. Read-only.
Over MCP the same operation is the tool automations_get_flow at https://app.chirply.io/api/mcp, same bearer token, same input.
List automation mapping fields
automations.get_mapping_fieldsread
List eligible preceding steps and declared or observed output fields for a workflow node. Optionally reads a retained run sample in this account. Resolves no credentials, runs no actions, sends no messages and makes no provider calls.
Over MCP the same operation is the tool automations_get_run at https://app.chirply.io/api/mcp, same bearer token, same input.
View saved step
automations.get_saved_stepread
Return one saved automation step with the frozen nodes and connections it inserts. Read-only: it creates nothing, changes no workflow and sends no messages.
Parameters
Field
Type
Required
Description
saved_step_id
string (uuid)
required
Saved-step UUID returned by automations.list_saved_steps.
Over MCP the same operation is the tool automations_get_saved_step at https://app.chirply.io/api/mcp, same bearer token, same input.
Inspect automation step data
automations.get_step_dataread
Read bounded, redacted trigger data and executed step inputs, outputs and status for a run in this account. Includes persisted results across waits. No actions execute, messages are sent or provider charges incurred.
Over MCP the same operation is the tool automations_get_step_data at https://app.chirply.io/api/mcp, same bearer token, same input.
View workflow template
automations.get_templateread
Return one private normal-automation template with its frozen visual graph. Bot-flow templates are not exposed; this read creates nothing and sends no messages.
Parameters
Field
Type
Required
Description
template_id
string
required
Built-in starter id or private saved-template UUID returned by automations.list_templates.
Over MCP the same operation is the tool automations_get_template at https://app.chirply.io/api/mcp, same bearer token, same input.
Copy AI instructions
automations.get_webhook_briefread
Produce a complete, paste-ready integration brief for one workflow's inbound webhook — the URL, the secret header when it has one, every contact field the endpoint accepts including this organization's own custom fields, the contact-matching rules, runnable curl and fetch examples, and what each response code means. Written for a person or an AI assistant wiring up another system; it is the same document the workflow builder's "Copy AI instructions" button copies. Reads only: nothing is sent, started or charged. The brief embeds the webhook secret, so treat the result as a credential.
Also answers to webhook instructions, how do I send data to this automation, webhook docs, integrate with this automation.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The workflow whose inbound webhook should be documented.
Over MCP the same operation is the tool automations_get_webhook_brief at https://app.chirply.io/api/mcp, same bearer token, same input.
Open webhook settings
automations.get_webhook_settingsread
Read one automation's inbound-webhook intake settings and activity, as the Webhook settings card on its Test & settings tab shows them: the field mapping (incoming key → contact field, for form posts such as Elementor's Webhook action), the tag policy (any tag the request names, or only an allow-list), what a request may do to a contact that already exists (create and update / create only / update only chosen fields), the per-minute rate limit, and the email-consent setup — plus how many requests were received and how many were rejected (over the rate limit, or a missing/wrong secret) and when, the KEYS of the last request (never its values), and what the last request did (tags ignored, fields protected, consent result). Reads only; never returns the webhook secret.
Also answers to webhook field mapping, webhook rate limit, webhook rejected requests, webhook allowed tags, elementor webhook settings.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The automation (workflow) whose inbound webhook settings to read.
Over MCP the same operation is the tool automations_get_webhook_settings at https://app.chirply.io/api/mcp, same bearer token, same input.
Insert saved step
automations.insert_saved_stepwrite
Add a saved step's frozen steps to a workflow's graph in this account, with new node ids. Works on normal automations and bot flows alike. The copy arrives UNCONNECTED — it changes nothing that already runs until it is wired to a path in the builder — and the workflow's live or paused state is untouched. Nothing is sent and no contact is enrolled by this call.
Parameters
Field
Type
Required
Description
workflow_id
string (uuid)
required
Workflow in this account to insert the saved steps into — a normal automation or a bot flow.
saved_step_id
string (uuid)
required
Saved-step UUID returned by automations.list_saved_steps.
Over MCP the same operation is the tool automations_insert_saved_step at https://app.chirply.io/api/mcp, same bearer token, same input.
List workflows
automations.listread
List the organization's automation workflows, newest first, with each one's trigger, whether it is active, and how many steps and runs it has. Other products may call these drips, nurture sequences, follow-up campaigns, or autoresponders.
Also answers to automations, drips, sequences, nurture campaigns, autoresponders.
Over MCP the same operation is the tool automations_list at https://app.chirply.io/api/mcp, same bearer token, same input.
List available step actions
automations.list_action_typesread
The shared action registry — every action a workflow step (or a call disposition, or a bulk action) can run, with its editable fields. Read this before writing steps so action_config uses the right keys. A bot flow's action nodes run these same actions, but its conversation node types (messages, asks, AI replies, Messenger actions, webviews, handoffs) are documented by bot_flows.list_node_types, not here.
Only actions in this category. 'projects' holds create_project_task and update_project_task, which act on a project's tasks rather than the enrolled contact (ids come from projects.list / projects.overview / projects.list_items, or from a project-task trigger's taskId/projectId); 'clients' holds the reseller/white-label actions for managing an agency's client accounts (entitled agency accounts only); 'billing' holds Stripe actions that act on a contact's subscription on its connected Stripe account.
Over MCP the same operation is the tool automations_list_action_types at https://app.chirply.io/api/mcp, same bearer token, same input.
List automation node events
automations.list_node_eventsread
Read the account's durable visual-workflow execution ledger, including run and node starts, waits, resumes, completions, failures, replies and timeouts. Filter it to one workflow, run, node, event type or time window when diagnosing automation behavior. This is read-only and sends no messages.
Parameters
Field
Type
Required
Description
limit
integer
optional
Max rows to return (1–100). Default: 25
offset
integer
optional
Rows to skip. Default: 0
workflow_id
string (uuid)
optional
Only events for this workflow id.
run_id
string (uuid)
optional
Only events for this workflow run id.
node_id
string
optional
Only events for this persisted visual-flow node id.
Over MCP the same operation is the tool automations_list_node_events at https://app.chirply.io/api/mcp, same bearer token, same input.
List automation runs
automations.list_runsread
Execution history: every time a workflow fired, with its status, how far it got, the contact it ran for and any error. Newest first. Filter by workflow or status.
Over MCP the same operation is the tool automations_list_runs at https://app.chirply.io/api/mcp, same bearer token, same input.
Saved steps
automations.list_saved_stepsread
List this account's reusable saved steps — the pieces of a workflow saved once and inserted into others, such as a configured webhook or a three-email follow-up. They serve normal automations AND bot flows: every capability here accepts either kind of workflow id. Returns each saved step's name, description and how many steps it adds, without the stored graph. Read-only: nothing is created, no workflow changes and no messages are sent.
Parameters
Field
Type
Required
Description
query
string
optional
Optional case-insensitive search across the saved step's name.
Over MCP the same operation is the tool automations_list_saved_steps at https://app.chirply.io/api/mcp, same bearer token, same input.
List workflow templates
automations.list_templatesread
List this account's private normal-automation templates. Bot-flow starters and saved bot templates are deliberately excluded; the list omits full graphs and changes nothing.
Parameters
Field
Type
Required
Description
source
"starter" | "saved"
optional
Optional source filter: Chirply starters or private templates saved by this account.
query
string
optional
Optional case-insensitive search across template name, description, category, and channel.
category
string
optional
Optional exact template category, such as social, sales, or support.
Over MCP the same operation is the tool automations_list_templates at https://app.chirply.io/api/mcp, same bearer token, same input.
List available triggers
automations.list_trigger_typesread
Every event an automation can start on or stop on. Start and stop use the same fully wired catalog and the same optional filters. Read this before writing trigger or stop_trigger nodes with automations.set_flow. A workflow may have SEVERAL start triggers (any one begins a run) and any number of stop triggers (any matching event ends the contact's in-flight run). Bot flows restrict their START entries to the social/manual set in bot_flows.list_triggers, while their stop triggers draw from this catalog. Read-only.
Parameters
Field
Type
Required
Description
usable_as
"start" | "stop"
optional
Only triggers usable in this position. Start and stop intentionally return the same catalog.
wired_only
boolean
optional
Only triggers something in the app actually raises today.
Over MCP the same operation is the tool automations_move_step at https://app.chirply.io/api/mcp, same bearer token, same input.
Pause a workflow
automations.pausewrite
Turn a workflow off. Its trigger stops firing it; the steps and run history are kept and it can be activated again. Manual runs still work while paused.
Over MCP the same operation is the tool automations_pause at https://app.chirply.io/api/mcp, same bearer token, same input.
Preview automation data mapping
automations.preview_step_dataread
Resolve JSON input mappings against a retained workflow run without executing any step. Preserves whole-value JSON types, reports missing values and leaves existing merge fields untouched. Sends no messages and makes no provider calls.
Parameters
Field
Type
Required
Description
run_id
string (uuid)
required
Account workflow run supplying retained samples.
input
any
required
JSON action input containing trigger or steps references to preview.
Over MCP the same operation is the tool automations_preview_step_data at https://app.chirply.io/api/mcp, same bearer token, same input.
Release a claim
automations.release_claimwriteconfirm
Give a claim back before it expires, so the next caller can win it. Use this only after a send that you KNOW delivered nothing — a step that failed before dispatch. Releasing a claim whose send may have succeeded is how the duplicate message this mechanism prevents gets sent anyway, so when the outcome is uncertain, leave the claim held and let it expire. Sends nothing and spends nothing.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
key
string
required
Your own name for the thing being done once, for example "appt-followup:<contact id>:reminder-1". Opaque to Chirply: two callers race only when they use the SAME string, so compose it from whatever makes two sends duplicates of each other.
Over MCP the same operation is the tool automations_release_claim at https://app.chirply.io/api/mcp, same bearer token, same input.
Rename a workflow step
automations.rename_stepwrite
Give one card on a workflow's visual canvas its own name, so six steps that all send email can be told apart. The name replaces the summary the card derives from its settings — on the canvas, in the next-step pickers and in a contact's run history — and an empty name puts that summary back. A caption only: the step keeps its id, its settings, its connections and its place in the sequence, so nothing about what the automation does or who it reaches changes. Use automations.get to read the current graph and its node ids.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The workflow the step belongs to.
node_id
string
required
The canvas node to rename, as `id` on that node in automations.get's `flow.nodes`.
name
string
required
What to call this step, up to 60 characters. An empty string clears the name and restores the derived summary.
Over MCP the same operation is the tool automations_rename_step at https://app.chirply.io/api/mcp, same bearer token, same input.
Run a workflow now
automations.run_for_contactwriteconfirm
RUNS THE WORKFLOW FOR REAL, RIGHT NOW, against one contact — the 'Run manually' panel. Every step executes immediately through the tenant's own providers: real SMS and email leave, real calls and voicemails are placed, tags and deals change, and the tenant is billed. Works whether or not the workflow is active. Returns the run id and each step's outcome.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
workflow_id
string (uuid)
required
The workflow to run.
contact_id
string (uuid) (or null)
optional
The contact to run it against. null runs steps that need no contact. Default: null
context
map of string → object
optional
Extra data merged into the run context and available as {{tokens}}.
Over MCP the same operation is the tool automations_run_for_contact at https://app.chirply.io/api/mcp, same bearer token, same input.
Save as template
automations.save_as_templatewrite
Save a private frozen copy of one workflow's current visual graph for reuse in this account. This does not activate, run, or send the workflow; later edits to the source do not change the template.
Parameters
Field
Type
Required
Description
workflow_id
string (uuid)
required
Workflow in this account whose current graph should be frozen.
name
string
required
Private template name shown in the workflow library.
description
string (or null)
optional
Optional explanation of what the template does, or null.
category
string
optional
Searchable template category, such as sales, support, or social. Default: "other"
Over MCP the same operation is the tool automations_save_as_template at https://app.chirply.io/api/mcp, same bearer token, same input.
Save as reusable step
automations.save_steps_as_templatewrite
Save a frozen copy of one or more steps from a workflow so they can be inserted into other automations in this account. Entry points and exit rules cannot be saved, because they say when an automation runs rather than what it does. The source workflow is not changed, nothing runs and no messages are sent; saving over an existing name replaces what that name holds.
Parameters
Field
Type
Required
Description
workflow_id
string (uuid)
required
Workflow in this account holding the steps to freeze — a normal automation or a bot flow.
node_ids
string[]
required
Node ids from that workflow's graph to save. Connections between the chosen nodes are kept; a connection leading out of the selection is not, because it describes where the original went.
include_downstream
boolean
optional
When true, every step reachable from the given nodes is included as well — the way to save a whole follow-up sequence by naming only its first step. Default: false
name
string
required
Name shown in the builder's saved-step list. Reusing a name replaces that saved step.
description
string (or null)
optional
Optional explanation of what these steps do and when to reach for them, or null.
Over MCP the same operation is the tool automations_save_steps_as_template at https://app.chirply.io/api/mcp, same bearer token, same input.
Save the automation flow
automations.set_flowwriteconfirm
Replace a normal automation's entire process graph — business triggers, actions, waits, branches and their connections — in one call. Facebook, Instagram and WhatsApp conversation messages live in the separate Bot Flow product. A graph may hold SEVERAL 'trigger' nodes, all leading to the same beginning, plus stop_trigger nodes that cancel an in-flight run. Destructive: pass the complete graph, not just changes. Saving sends nothing; activating only makes future matching events eligible to run real actions through the account's provider accounts. Blocking graphs may be saved as drafts but cannot be active.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
shared_page_acknowledged
boolean
optional
Set true only after acknowledging that this Page is connected to another Chirply account and enabling automation may send duplicate messages, replies or comments.
workflow_id
string (uuid)
required
The workflow to rewrite.
is_active
boolean
optional
Turn the automation on or off as part of the save. Turning it on is refused while the graph has blocking problems. Omit to leave it as it is.
flow
object
required
The complete flow graph.
flow.version
number
optional
Graph schema version. Omit for the current one.
flow.nodes
object[]
required
Every node in the graph, including at least one trigger.
'trigger' enrolls a contact; 'stop_trigger' cancels their in-flight run; 'action' performs a registry action; 'wait' defers the run; 'branch' and 'switch' route it; 'end' finishes it; 'note' is canvas-only documentation.
flow.nodes[].label
string
required
Non-empty caption drawn on the builder's card.
flow.nodes[].position
object
required
Where the card sits on the canvas. Layout only; does not affect execution.
flow.nodes[].position.x
number
required
Horizontal canvas coordinate in pixels, increasing to the right.
flow.nodes[].position.y
number
required
Vertical canvas coordinate in pixels, increasing downward.
flow.nodes[].ends
string[]
optional
Outlet names on this node whose path deliberately finishes — the graph's way of saying "nothing runs after this" without an extra 'end' node. Purely a statement of intent: an unconnected outlet already stops the run either way, and an outlet named here that also has a connection is ignored (the connection wins). Omit it unless you are recording that choice.
flow.nodes[].data
map of string → object
required
Type-specific settings. trigger/stop_trigger: {trigger,config}. action: {action:{type,config}}. wait: {amount,unit}. branch: {condition:{type,key?,value?,op?}} where type is one of has_tag (key = tag id), lifecycle_is (value), has_email / has_phone (whether an address is HELD), can_email / can_text (whether it may be USED right now — reads the same unsubscribed list the send itself reads, so the branch and the send cannot disagree), form_answer (key = the submitted field's key, op = is | is_not | is_ticked | is_not_ticked | is_blank | is_not_blank, value for the first two; only meaningful below a form_submitted trigger, and is_blank is the only operator that tells an explicitly unticked box apart from a question that was never asked), has_upcoming_appointment (key = an appointment type id to narrow to one type, or omit it for any — answers Yes when the calendar holds a confirmed appointment for the contact that has not happened yet, read live at the moment the branch runs, so a reschedule keeps answering Yes and cancelling one of two bookings leaves the other answering Yes), has_active_subscription (value = a Stripe product id 'prod_…', a comma-separated list of them, or a word matched case-insensitively against the plan/product name; omit it for any subscription at all — answers Yes when the contact holds a subscription that is 'active' or 'trialing', read live at the moment the branch runs, which is what makes it safe under a cancellation trigger: a contact who cancels one plan while still paying for another stays Yes), or field_equals / field_contains, where key is a contact column ('lifecycle', 'source', 'title', 'business_name', 'website', 'notes'), one of the organization's OWN contact custom fields written as 'custom.<field key>' (call contacts.list_fields for the keys), or a data reference such as '{{trigger.price_id}}' — a reference is resolved and compared against `value` itself, which is how a run is routed by what the enrolling event carried rather than by the contact record. switch: {key,cases} where key accepts the same three forms. end: {}. note: {text}.
flow.edges
object[]
required
The connections that define execution order.
flow.edges[].id
string
required
Unique within this graph.
flow.edges[].source
string
required
Node id this connection leaves.
flow.edges[].sourceHandle
string
required
Which outlet it leaves by: 'next' on most nodes, 'answered'/'invalid'/'timeout' on a conversation_ask, 'true'/'false' on a branch, or 'case:<key>'/'default' on a switch. One connection per outlet. Every start trigger's 'next' must point at the same node.
Over MCP the same operation is the tool automations_set_flow at https://app.chirply.io/api/mcp, same bearer token, same input.
Replace all workflow steps
automations.set_stepswriteconfirm
Replace a workflow's entire step list in one call, in the order given. Every existing step is deleted first, so this is destructive — pass the complete sequence, not just the changes. Nothing runs until the workflow is triggered.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
workflow_id
string (uuid)
required
The workflow to rewrite.
steps
object[]
required
The full ordered list of steps. An empty array clears the workflow.
The action's settings, keyed by the field keys automations.list_action_types reports for this action type. For webhook/Call an API this includes url, method, query_params, auth_type plus its credential fields, headers, body_mode and the matching body field. Values support {{merge}} tokens where the field does. Default: {}
Over MCP the same operation is the tool automations_set_steps at https://app.chirply.io/api/mcp, same bearer token, same input.
Send test request
automations.test_api_callwriteconfirm
Send one real HTTPS request using the same Call an API configuration that a workflow step uses, then return the external service's HTTP status, timing, headers, and bounded response body. This does not save or run a workflow, but POST, PUT, PATCH, or DELETE may create data, trigger downstream work, spend money, or otherwise change the external system.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Also answers to test webhook, try API call, inspect API response.
Parameters
Field
Type
Required
Description
contact_id
string (uuid) (or null)
optional
A contact whose account fields fill {{merge}} tokens. The contact is not enrolled or changed.
url
string
required
The complete public HTTPS request URL. It may contain {{merge}} tokens.
method
"GET" | "POST" | "PUT" | "PATCH" | "DELETE"
optional
HTTP method to send. Write methods may change the external system. Default: "POST"
query_params
string
optional
Optional query parameters, one name=value pair per line. Do not put JSON here.
auth_type
"none" | "bearer" | "basic" | "api_key"
optional
Authentication scheme added to the request. Default: "none"
auth_token
string
optional
Bearer token when auth_type is bearer. Supports {{merge}} tokens.
auth_username
string
optional
Basic authentication username when auth_type is basic.
auth_password
string
optional
Basic authentication password when auth_type is basic.
api_key_location
"header" | "query"
optional
Whether an API key is sent as a request header or query parameter. Default: "header"
api_key_name
string
optional
Header or query-parameter name for API-key authentication, such as X-API-Key.
api_key_value
string
optional
API-key value when auth_type is api_key. Supports {{merge}} tokens.
headers
string
optional
Optional custom headers, one Header-Name: value pair per line.
body_mode
"context" | "json" | "form" | "raw" | "none"
optional
Request-body format. GET never sends a body. Default: "context"
body_json
string
optional
JSON request body when body_mode is json. It must remain valid after merge tokens are filled.
body_form
string
optional
Form body when body_mode is form, one name=value pair per line.
body_raw
string
optional
Unencoded request text when body_mode is raw.
content_type
string
optional
Content-Type header for a raw body, such as text/plain or application/xml.
Over MCP the same operation is the tool automations_test_api_call at https://app.chirply.io/api/mcp, same bearer token, same input.
Edit workflow details
automations.updatewriteconfirm
Update a workflow's name, description, first visual start trigger, webhook secret, or its whole visual flow graph. Omitted fields are left alone. Supplying `flow` REPLACES the entire canvas — branches, actions and all — so read the workflow first and send the complete graph, not a patch. Changing the trigger or the flow of an ACTIVE workflow changes which real events fire it and can cause its real messages, calls or paid actions to run for a different audience.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Parameters
Field
Type
Required
Description
shared_page_acknowledged
boolean
optional
Set true only after acknowledging that this Page is connected to another Chirply account and enabling automation may send duplicate messages, replies or comments.
id
string (uuid)
required
The workflow to edit.
name
string
optional
New name.
description
string (or null)
optional
What this automation does, for the team. null clears it.
The complete visual flow graph, replacing whatever the canvas holds now. This is the only way to give a workflow branches — `steps` on automations.create builds a straight line, and automations.add_step appends to one. Nodes are {id, type, label?, position?, data}, where type is trigger | action | branch | switch | wait | end | note, and edges are {id, source, target, sourceHandle} with sourceHandle 'next' for a plain step or 'true'/'false' out of a branch. The graph is validated before it is saved and rejected if it would not run. Cannot be combined with `trigger` — the flow's own trigger node decides that.
flow.nodes
object[]
required
Every card on the canvas, including notes.
flow.nodes[].id
string
required
Unique within the flow; edges reference it.
flow.nodes[].type
string
required
trigger | action | branch | switch | wait | end | note, or a conversation node type.
flow.nodes[].label
string
optional
The palette caption for this node type, stamped when the card is created. Use `name` to give one card its own title.
flow.nodes[].name
string
optional
The author's own name for this step, shown instead of the derived summary on the canvas, in the step pickers and in run history. Omit it, or send an empty string, to fall back to that summary. A caption only — it never changes what the step does.
flow.nodes[].position
object
optional
Canvas coordinates. Omitted nodes stack at the origin and are awkward to read.
flow.nodes[].position.x
number
required
Horizontal position on the canvas, in pixels.
flow.nodes[].position.y
number
required
Vertical position on the canvas, in pixels. Steps read top to bottom.
flow.nodes[].data
map of string → object
optional
Node payload: {trigger, config} for a trigger, {action:{type,config}} for an action, {condition:{type,key,value}} for a branch, {text} for a note.
flow.edges
object[]
optional
The connections between them. Default: []
flow.edges[].id
string
required
Unique within the flow.
flow.edges[].source
string
required
Node id this leaves.
flow.edges[].target
string
required
Node id this arrives at.
flow.edges[].sourceHandle
string
optional
Which outlet it leaves by: 'next' for a plain step, 'true' or 'false' out of a branch.
flow.version
number
optional
Graph format version. Omit it and the current one is stamped.
webhook_secret
string (or null)
optional
New x-automation-secret value. null or empty removes the requirement.
The action's settings, keyed by the field keys automations.list_action_types reports for this action type. For webhook/Call an API this includes url, method, query_params, auth_type plus its credential fields, headers, body_mode and the matching body field. Values support {{merge}} tokens where the field does. Default: {}
Over MCP the same operation is the tool automations_update_step at https://app.chirply.io/api/mcp, same bearer token, same input.
Save webhook settings
automations.update_webhook_settingswriteconfirm
Change how one automation's public inbound webhook treats requests. Omitted fields keep their current value. This rewrites what an UNAUTHENTICATED caller holding the URL can do to the CRM: the field mapping decides which incoming keys become contact fields (and creates contacts from form posts); tag_mode 'any' lets a request apply — and create — any tag it names, 'allowlist' only the listed names; write_policy 'create_and_update' overwrites a matched contact's fields including email and phone, 'create_only' never changes an existing contact, 'update_fields' writes only the chosen fields (email/phone only ever fill a blank). A consent setup makes ticked requests record an email opt-in on the contact — and, when the account's double opt-in covers Automation webhooks, send each new address a real confirmation email from the account's sending address. Nothing is sent at the moment of saving; it applies to the next request.
Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.
Also answers to map webhook fields, webhook tag allow list, limit webhook requests, stop webhook updating contacts, webhook email consent.
Parameters
Field
Type
Required
Description
id
string (uuid)
required
The automation (workflow) whose inbound webhook to configure.
field_map
object[]
optional
The complete mapping, replacing the current one. An empty array removes it. Unmapped keys stay run data (merge fields) as before.
field_map[].key
string
required
The incoming key: a top-level body key (an Elementor field label such as 'Your Email'), a dotted path into nested JSON ('lead.email'), or an Elementor Advanced Data field id ('email').
field_map[].target
string
required
The contact field it fills: email, phone, full_name, first_name, last_name, business_name, title, website, birthday, notes, address.line1, address.city, address.state, address.postal_code, address.country, tags (values become tag names, still subject to the tag policy), or custom.<field key> for one of the account's custom contact fields.
tag_mode
"any" | "allowlist"
optional
'any' (the original behaviour): a request may apply any tag name it sends, creating tags that do not exist. 'allowlist': only names in allowed_tags are applied; anything else is ignored, never created, and reported in the response and the run log.
allowed_tags
string[]
optional
The tag names a request may apply when tag_mode is 'allowlist', replacing the current list. An empty list with 'allowlist' means no request may apply any tag.
What a request may do to a contact that already exists. 'create_and_update' (the original behaviour) overwrites every field sent, email and phone included. 'create_only' adds new people but never changes an existing contact or its tags (the automation still runs for them). 'update_fields' changes only the fields in update_fields. New contacts are always created in full.
update_fields
string[]
optional
For write_policy 'update_fields': the fields a request may change on an existing contact, replacing the current list.
rate_limit_per_minute
integer
optional
Requests accepted per minute (a fixed one-minute window; default 120). Requests over it get HTTP 429 with Retry-After and are counted as rejected on the settings card.
consent_mode
"off" | "field" | "always"
optional
Email consent. 'off': requests record no consent. 'field': consent_field says whether the person ticked an email opt-in. 'always': every request is an opt-in (a newsletter-only form). A tick is recorded in the contact's communication-preferences history exactly like a native form's consent question, through double opt-in when it covers Automation webhooks. An unticked or missing box changes nothing.
consent_field
string (or null)
optional
For consent_mode 'field': the incoming key of the opt-in checkbox (for example Elementor's acceptance field id). Ticked = any value other than blank, no, false, 0 or off.
consent_text
string
optional
The opt-in wording shown beside the checkbox, recorded with every consent and quoted in a double opt-in email. Required while consent is on.
consent_text_field
string (or null)
optional
Optional incoming key that carries the wording; its value is recorded instead of consent_text when present.