smartchat

save_automation

Creates an automation. Without status it is a draft and never runs; status active runs it at once and needs the permission automations:run. Steps that call an address need webhooks:write, steps in connected apps need connections:run.

Tool namesave_automation
Permissionautomations:write
readOnlyHintfalse
destructiveHintfalse
idempotentHinttrue
openWorldHinttrue
REST callPOST /v1/automations, PATCH /v1/automations/{automation_id}

#What it does

  • Changes data in your account. It does not send messages to contacts.
  • May start automations of the account, and an automation may send messages. The call itself sends nothing.
  • Setting it active lets messages go to contacts later. The call itself sends nothing.
  • Safe to repeat with the same idempotency_key.

#Input

The tool takes one flat object. Path, query and body fields of the REST call are merged into it.

Create automation (POST /v1/automations)

NameTypeRequiredDescription
namestringyesName of the automation (unique in the account, up to 60 characters). length 1 to 60
triggerobjectyesWhat starts the automation. See get_automation_catalog for the fields of each trigger type.
trigger.typestringyesKind of trigger. one of: signup, keyword, message_received, message_sent, link_clicked, tag_added, tag_removed, contact_created, contact_updated, status_changed, note_added, date, inactivity, purchase, inbound_webhook, api_call
trigger.keywordstringnokeyword: the word to react to. up to 40 characters
trigger.tagstringnotag_added: the tag. up to 60 characters
trigger.linkstringnolink_clicked: part of the link address (empty means any link). up to 200 characters
trigger.daysintegernoinactivity: days without activity. 1 to 365
trigger.run_atstringnodate: when to start, ISO 8601. up to 40 characters; format date-time
trigger.providerstringnopurchase: shopify or generic. one of: shopify, generic
trigger.filtersarray of objectnoinbound_webhook: only events where the field at 'path' equals 'equals' start the automation. up to 5 items
trigger.filters[].pathstringyesPath of the field in the event, for example values.status. up to 120 characters
trigger.filters[].equalsstringyesRequired value. up to 200 characters
trigger.alsoarray of objectnoFurther triggers: any of them starts the automation (OR). up to 5 items
trigger.also[].typestringyesKind of trigger. one of: signup, message_received, message_sent, link_clicked, tag_added, tag_removed, contact_created, contact_updated, status_changed, note_added
trigger.also[].tagstringnotag_added: the tag. up to 60 characters
trigger.also[].linkstringnolink_clicked: part of the link. up to 200 characters
stepsarray of objectyesThe flow after the trigger, in the order of execution. up to 30 items
steps[].typestringyesKind of step. See get_automation_catalog for the fields of each kind. one of: send_message, wait, add_tag, remove_tag, start_followup, send_webhook, condition, order_filter, split, app_action, contact_match
steps[].idstringnoID of the step. Keep it when you change a list of steps; new steps get one from the server. up to 64 characters
steps[].textstringnosend_message: the message text. Variables like {{name}} are allowed. up to 4096 characters
steps[].titlestringnosend_message: name of the message (3 to 40 characters, unique in the automation). up to 40 characters
steps[].buttonobjectnosend_message: one button.
steps[].button.typestringyesquick_reply sends a reply back (up to 25 characters), url opens a link (up to 40 characters). one of: quick_reply, url
steps[].button.textstringyesLabel of the button. up to 40 characters
steps[].button.urlstringnoAddress for a url button (https). up to 2000 characters
steps[].systembooleannosend_message: read-only. True for the confirmation message (double opt-in) that the server puts first. Ignored when you send it back.
steps[].rolestringnosend_message: read-only. opt_in_confirmation for the message the server put first. Ignored when you send it back. up to 40 characters
steps[].templateobjectnosend_message: read-only status of the template. Ignored when you send it back.
steps[].template.idstring or nullnoTemplate ID. up to 40 characters
steps[].template.statusstringnoApproval status. up to 20 characters
steps[].minutesintegernowait: minutes to wait (1 to 525600, which is 365 days). 1 to 525600
steps[].only_daytimebooleannowait: send only between 8 and 20 o'clock local time of the account.
steps[].tagstringnoadd_tag, remove_tag: the tag. up to 60 characters
steps[].sequence_idstringnostart_followup: ID of the follow-up sequence.
steps[].urlstringnosend_webhook: the address to call (https). Shown without secret parts (query, deeper path, user) when you read it; {{secret.NAME}} is not allowed in the address. Needs the permission webhooks:write. up to 2000 characters
steps[].methodstringnosend_webhook: HTTP method (default POST). one of: GET, POST, PUT, PATCH, DELETE
steps[].headersobjectnosend_webhook: extra headers. Values may use {{secret.NAME}} from the vault (names only, the value is never shown). Plain values are shown as when you read the automation (unless the key has hooks:read_secret); send back with the step id to keep the stored value.
steps[].bodyobjectnosend_webhook: content with {{variables}}. Without it the call carries the automation ID, contact ID, email and phone.
steps[].conditionobjectnoCondition on a field of the event or the contact.
steps[].condition.fieldstringyesName of the field, for example total. up to 100 characters
steps[].condition.opstringyesComparison. gt, lt, gte, lte compare numbers; eq, neq, contains, not_contains compare text; exists checks that the field is filled; has_tag and not_has_tag check the tags of the contact. one of: gt, lt, gte, lte, eq, neq, contains, not_contains, exists, has_tag, not_has_tag
steps[].condition.valuestring or numbernoValue to compare with. Not needed for exists, has_tag and not_has_tag with the tag in 'field'. up to 200 characters; -1000000000000 to 1000000000000
steps[].shopstringnoorder_filter: the connected shop. one of: shopify, woocommerce
steps[].expectstringnoorder_filter: yes continues only if the contact has ordered, no continues only if not. one of: yes, no
steps[].since_daysintegernoorder_filter: count only orders of the last N days (0 means no time limit). 0 to 365
steps[].modestringnosplit: percent distributes by share, rule takes the first branch whose condition is true, event and tag choose by event or tag. one of: percent, rule, event, tag
steps[].appstringnoapp_action: name of the connected app. up to 40 characters
steps[].toolstringnoapp_action: ID of the action of the app. up to 100 characters
steps[].intentstringnoapp_action: the wish in a few words, if you do not know the tool. up to 200 characters
steps[].argsobjectnoapp_action: fields of the action with {{variables}}.
steps[].match_keystringnocontact_match: the field used to find the contact in the app. one of: phone, email
steps[].dataobjectnocontact_match: fields to write in the app with {{variables}}.
steps[].notestringnocontact_match: optional note with {{variables}}. up to 500 characters
steps[].branchesarray of objectnosplit: 2 to 6 branches. up to 6 items
steps[].branches[].namestringyesName of the branch. up to 60 characters
steps[].branches[].percentintegernomode percent: share of this branch (the shares add up to 100). 0 to 100
steps[].branches[].eventstringnomode event: the event that selects this branch. up to 60 characters
steps[].branches[].tagstringnomode tag: the tag that selects this branch. up to 60 characters
steps[].branches[].conditionobjectnoCondition on a field of the event or the contact.
steps[].branches[].stepsarray of objectyesSteps of this branch (no split, no condition, no filter). up to 10 items
rulesobjectnoRules of the automation.
rules.max_per_contactintegernoEach person passes the automation at most this many times. 1 to 1000
rules.excluded_namesarray of stringnoContacts with these names (first name or full name) get nothing. up to 50 items
statusstringnodraft (default when you leave it out), active or paused. one of: draft, active, paused

Update automation (PATCH /v1/automations/{automation_id})

NameTypeRequiredDescription
automation_idstringyesAutomation ID.
namestringnoNew name. length 1 to 60
triggerobjectnoWhat starts the automation. See get_automation_catalog for the fields of each trigger type.
trigger.typestringyesKind of trigger. one of: signup, keyword, message_received, message_sent, link_clicked, tag_added, tag_removed, contact_created, contact_updated, status_changed, note_added, date, inactivity, purchase, inbound_webhook, api_call
trigger.keywordstringnokeyword: the word to react to. up to 40 characters
trigger.tagstringnotag_added: the tag. up to 60 characters
trigger.linkstringnolink_clicked: part of the link address (empty means any link). up to 200 characters
trigger.daysintegernoinactivity: days without activity. 1 to 365
trigger.run_atstringnodate: when to start, ISO 8601. up to 40 characters; format date-time
trigger.providerstringnopurchase: shopify or generic. one of: shopify, generic
trigger.filtersarray of objectnoinbound_webhook: only events where the field at 'path' equals 'equals' start the automation. up to 5 items
trigger.filters[].pathstringyesPath of the field in the event, for example values.status. up to 120 characters
trigger.filters[].equalsstringyesRequired value. up to 200 characters
trigger.alsoarray of objectnoFurther triggers: any of them starts the automation (OR). up to 5 items
trigger.also[].typestringyesKind of trigger. one of: signup, message_received, message_sent, link_clicked, tag_added, tag_removed, contact_created, contact_updated, status_changed, note_added
trigger.also[].tagstringnotag_added: the tag. up to 60 characters
trigger.also[].linkstringnolink_clicked: part of the link. up to 200 characters
stepsarray of objectnoThe flow after the trigger, in the order of execution. up to 30 items
steps[].typestringyesKind of step. See get_automation_catalog for the fields of each kind. one of: send_message, wait, add_tag, remove_tag, start_followup, send_webhook, condition, order_filter, split, app_action, contact_match
steps[].idstringnoID of the step. Keep it when you change a list of steps; new steps get one from the server. up to 64 characters
steps[].textstringnosend_message: the message text. Variables like {{name}} are allowed. up to 4096 characters
steps[].titlestringnosend_message: name of the message (3 to 40 characters, unique in the automation). up to 40 characters
steps[].buttonobjectnosend_message: one button.
steps[].button.typestringyesquick_reply sends a reply back (up to 25 characters), url opens a link (up to 40 characters). one of: quick_reply, url
steps[].button.textstringyesLabel of the button. up to 40 characters
steps[].button.urlstringnoAddress for a url button (https). up to 2000 characters
steps[].systembooleannosend_message: read-only. True for the confirmation message (double opt-in) that the server puts first. Ignored when you send it back.
steps[].rolestringnosend_message: read-only. opt_in_confirmation for the message the server put first. Ignored when you send it back. up to 40 characters
steps[].templateobjectnosend_message: read-only status of the template. Ignored when you send it back.
steps[].template.idstring or nullnoTemplate ID. up to 40 characters
steps[].template.statusstringnoApproval status. up to 20 characters
steps[].minutesintegernowait: minutes to wait (1 to 525600, which is 365 days). 1 to 525600
steps[].only_daytimebooleannowait: send only between 8 and 20 o'clock local time of the account.
steps[].tagstringnoadd_tag, remove_tag: the tag. up to 60 characters
steps[].sequence_idstringnostart_followup: ID of the follow-up sequence.
steps[].urlstringnosend_webhook: the address to call (https). Shown without secret parts (query, deeper path, user) when you read it; {{secret.NAME}} is not allowed in the address. Needs the permission webhooks:write. up to 2000 characters
steps[].methodstringnosend_webhook: HTTP method (default POST). one of: GET, POST, PUT, PATCH, DELETE
steps[].headersobjectnosend_webhook: extra headers. Values may use {{secret.NAME}} from the vault (names only, the value is never shown). Plain values are shown as when you read the automation (unless the key has hooks:read_secret); send back with the step id to keep the stored value.
steps[].bodyobjectnosend_webhook: content with {{variables}}. Without it the call carries the automation ID, contact ID, email and phone.
steps[].conditionobjectnoCondition on a field of the event or the contact.
steps[].condition.fieldstringyesName of the field, for example total. up to 100 characters
steps[].condition.opstringyesComparison. gt, lt, gte, lte compare numbers; eq, neq, contains, not_contains compare text; exists checks that the field is filled; has_tag and not_has_tag check the tags of the contact. one of: gt, lt, gte, lte, eq, neq, contains, not_contains, exists, has_tag, not_has_tag
steps[].condition.valuestring or numbernoValue to compare with. Not needed for exists, has_tag and not_has_tag with the tag in 'field'. up to 200 characters; -1000000000000 to 1000000000000
steps[].shopstringnoorder_filter: the connected shop. one of: shopify, woocommerce
steps[].expectstringnoorder_filter: yes continues only if the contact has ordered, no continues only if not. one of: yes, no
steps[].since_daysintegernoorder_filter: count only orders of the last N days (0 means no time limit). 0 to 365
steps[].modestringnosplit: percent distributes by share, rule takes the first branch whose condition is true, event and tag choose by event or tag. one of: percent, rule, event, tag
steps[].appstringnoapp_action: name of the connected app. up to 40 characters
steps[].toolstringnoapp_action: ID of the action of the app. up to 100 characters
steps[].intentstringnoapp_action: the wish in a few words, if you do not know the tool. up to 200 characters
steps[].argsobjectnoapp_action: fields of the action with {{variables}}.
steps[].match_keystringnocontact_match: the field used to find the contact in the app. one of: phone, email
steps[].dataobjectnocontact_match: fields to write in the app with {{variables}}.
steps[].notestringnocontact_match: optional note with {{variables}}. up to 500 characters
steps[].branchesarray of objectnosplit: 2 to 6 branches. up to 6 items
steps[].branches[].namestringyesName of the branch. up to 60 characters
steps[].branches[].percentintegernomode percent: share of this branch (the shares add up to 100). 0 to 100
steps[].branches[].eventstringnomode event: the event that selects this branch. up to 60 characters
steps[].branches[].tagstringnomode tag: the tag that selects this branch. up to 60 characters
steps[].branches[].conditionobjectnoCondition on a field of the event or the contact.
steps[].branches[].stepsarray of objectyesSteps of this branch (no split, no condition, no filter). up to 10 items
rulesobjectnoRules of the automation.
rules.max_per_contactintegernoEach person passes the automation at most this many times. 1 to 1000
rules.excluded_namesarray of stringnoContacts with these names (first name or full name) get nothing. up to 50 items

Arguments added by the MCP server (see Special arguments)

NameTypeRequiredDescription
idempotency_keystringnoOptional. Unique key, for example a UUID. Same key and arguments within 24 hours: first result. Without a key only an identical call within 1 minute counts as a repeat. up to 255 characters

#Result

The result has the same content as the REST answer. Lists have at most 50 items per page (default 20); use cursor for the next page.

Errors come back as a tool result with isError: true. The error codes are the ones in Errors.