atteq API
  • Guides
  • Recipes
  • Cookbook
  • API Reference
Information
agents
    List AgentsgetCreate AgentpostDocument AttachmentsgetGet VersiongetEdit DraftpatchReplace Draft GraphputPublish VersionpostGet AgentgetDelete AgentdeleteCopy AgentpostGet DraftgetGet Agent MapgetPending ChangesgetList PlacementsgetRestore VersionpostList VersionsgetGet Mapget
voice_agent
    Open Browser CallpostEnd Browser CalldeleteGet Agent Test LinkgetGet Bridge CeilinggetSet Bridge Ceilingpatch
ai_profiles
    Get Ai Profile CapabilitiesgetList Live SettingsgetCreate Live SettingspostDelete Live SettingsdeleteUpdate Live SettingspatchList Llm SettingsgetCreate Llm SettingspostDelete Llm SettingsdeleteUpdate Llm SettingspatchList ProfilesgetCreate ProfilepostGet ProfilegetDelete ProfiledeleteUpdate ProfilepatchCopy ProfilepostSet Text SectionputSet Voice SectionputList Stt SettingsgetCreate Stt SettingspostDelete Stt SettingsdeleteUpdate Stt SettingspatchList Tts SettingsgetCreate Tts SettingspostDelete Tts SettingsdeleteUpdate Tts SettingspatchList Vad SettingsgetCreate Vad SettingspostDelete Vad SettingsdeleteUpdate Vad Settingspatch
analyst
    List Agent FindingsgetCall Back FindingpostDismiss FindingpostUndo Finding DismissaldeleteTeach FindingpostWatch FindingpostList Question ChartsgetList Tracked QuestionsgetCreate Tracked QuestionpostGet Question Search CostgetSearch For Tracked QuestionpostPropose Tracked QuestionpostDelete Tracked QuestiondeleteUpdate Tracked QuestionpatchGet Reading SwitchgetSet Reading SwitchputGet Agent Summaryget
analytics
    List ChartsgetCreate ChartpostPreview ChartpostGet ChartgetDelete ChartdeleteUpdate ChartpatchRun ChartpostList DatasetsgetList BoardsgetCreate BoardpostGet TraversalgetGet BoardgetDelete BoarddeleteUpdate Boardpatch
authentication
    List InvitationsgetInvite MemberpostRevoke InvitationdeleteResend InvitationpostList MembersgetRemove MemberdeleteGet Member Conversation AccessgetSet Member Conversation AccesspatchSet Member FlagspatchSet Member RolepatchGet OrganizationgetUpdate OrganizationpatchGet Role FlagsgetSet Role Flagspatch
automations
    List AutomationsgetCreate AutomationpostGet AutomationgetDelete AutomationdeleteUpdate AutomationpatchSet Automation EnabledputGet Automation MapgetRun AutomationpostList Automation RunsgetGet Automation Runget
billable-metrics
    List MetricsgetUsage SummarygetGet Metricget
outbound_calls
    Place CallpostList CampaignsgetCreate CampaignpostGet CampaigngetDelete CampaigndeleteUpdate CampaignpatchActivate CampaignpostLink CollectionpostAdd ContactspostAdd Contacts From CollectionpostRemove Contacts From CollectionpostSet Campaign HoursputPreview Campaign HourspostPause CampaignpostGet Campaign SummarygetExclude ContactpostInclude Contactpost
channels
    List ChannelsgetCreate ChannelpostList Thread SubjectsgetClose Channel ThreadpostList Thread DecisionsgetGet Thread Contact FilegetHand Thread To AgentpostList Thread MailgetGet Prepared ReplygetAsk Again For Prepared ReplypostDiscard Prepared ReplypostSend Prepared ReplypostReply On Channel ThreadpostGet ChannelgetDelete ChanneldeleteUpdate ChannelpatchSend On ChannelpostList Channel ThreadsgetList RostergetCreate Roster EntrypostGet Own Roster EntrygetGet Roster EntrygetDelete Roster EntrydeleteUpdate Roster EntrypatchAdd Roster AddresspostChange Roster AddressputRemove Roster Addressdelete
custom-data
    List CollectionsgetCreate CollectionpostList Collection NamesgetGet CollectiongetDelete CollectiondeleteUpdate CollectionpatchAdd FieldpostDelete FielddeleteUpdate FieldpatchImport RecordspostPlan ImportpostPropose ImportpostGet ImportgetList RecordsgetCreate RecordpostBulk Delete RecordspostBulk Set FieldpostCount RecordsgetList Records Of ContactgetDelete Records Of ContactdeleteGet RecordgetDelete RecorddeleteUpdate Recordpatch
connections
    List ConnectionsgetCreate ConnectionpostCreate Forwarded AddresspostCreate Mail ServerpostDiscover Mail ServerpostAuthorize Microsoft MailboxpostList ProvidersgetGet ConnectiongetDelete ConnectiondeleteUpdate ConnectionpatchGet Forwarded AddressgetCheck Forwarded AddresspostList Person GrantsgetSet Person GrantputRemove Person GrantdeleteGet Mail ServergetUpdate Mail ServerpatchList Mail Server FoldersgetEnter Mail Server PasswordputChange Mail Server ServersputTest Mail Server AgainpostGet Microsoft MailboxgetUpdate Microsoft MailboxpatchList Microsoft Mailbox FoldersgetConsent To Microsoft Mailbox WritespostWithdraw Microsoft Mailbox Writesdelete
custom-tools
    List Custom ToolsgetCreate Custom ToolpostGet Custom ToolgetDelete Custom TooldeleteGet Custom Tool DraftgetEdit Custom Tool DraftpatchPublish Custom ToolpostRestore Custom Tool VersionpostTry Custom ToolpostList Custom Tool Versionsget
rag
    List DocumentsgetUpload DocumentpostSearch DocumentspostGet DocumentgetDelete DocumentdeleteDownload DocumentgetReingest Documentpost
flows
    List FlowsgetCreate FlowpostGet FlowgetDelete FlowdeleteRename FlowpatchAdd Flow EdgepostDelete Flow EdgedeleteSet Entry SteppatchAdd SteppostDelete StepdeleteUpdate SteppatchTest FlowpostList Flow Testsget
dynamic_context
    Create GraphpostGet GraphgetDelete GraphdeleteAdd EdgepostDelete EdgedeleteAdd NodepostDelete NodedeleteUpdate NodepatchSet Rootput
inbox
    Get Inbox Open CountgetSet Inbox PreferencespatchGet Inbox RailgetCreate Inbox ViewpostDelete Inbox ViewdeleteUpdate Inbox Viewpatch
handoff
    Assign Threadpost
interactions
    List InteractionsgetCount InteractionsgetGet InteractiongetSet Conversation LabelspostGet TracegetGet TranscriptgetList LabelsgetCreate LabelpostDelete LabeldeleteUpdate Labelpatch
legal
    Agree To Processing AgreementpostAgree To TermspostLegal BoxesgetList Legal DocumentsgetRead Legal DocumentgetList Legal VersionsgetRead Legal VersiongetDownload Legal VersiongetOrganization Legal HistorygetOwn Legal HistorygetObject To SubprocessorspostWithdraw ObjectionpostLegal Pendingget
not-a-tool
    Agree To Processing AgreementpostAgree To TermspostObject To SubprocessorspostWithdraw Objectionpost
memory
    List MemoriesgetList Memory LinesgetCreate Memory LinepostDelete Memory LinedeleteUpdate Memory LinepatchList Memory PeoplegetGet Memory PersongetForget PersondeleteGet Memory SwitchgetSet Memory SwitchputWipe ContactdeleteGet Conversation MemorygetRecall MemoriespostGet MemorygetDelete MemorydeletePatch Memorypatch
notifications
    List InboxgetGet Unread CountgetMark ReadpostMark Unreaddelete
recipes
    List RecipesgetList Installed RecipesgetGet Installed RecipegetUninstall RecipedeleteSet Recipe EnabledputUpdate Recipe ParameterspatchUpdate RecipepostInstall Recipepost
data-retention
    Get RetentiongetSet Retentionpatch
text
    Open ConversationpostClose ConversationpostAnswer ConfirmationpostGet Sent FilegetSend MessagepostSet Modepatch
tools
    List ToolsgetCreate ToolpostList BuiltinsgetImport Mcp ServerpostImport OpenapipostPreview Openapi ImportpostSuggest Tool ExamplespostGet ToolgetDelete TooldeleteUpdate ToolpatchTest ToolpostList Tool Testsget
trunks
    List Transfer DirectorygetCreate Transfer Directory EntrypostGet Transfer Directory EntrygetDelete Transfer Directory EntrydeleteUpdate Transfer Directory EntrypatchList TrunksgetCreate TrunkpostGet TrunkgetDelete TrunkdeleteUpdate TrunkpatchList Forward Recordsget
Schemas
powered by Zudoku
attek API
attek API

automations


List Automations

GET
/api/v1/automations

List this organization's automations, oldest first: each one's trigger, the flow it runs, whether it is enabled or paused after repeated failures (and why), and when it last fired, ran and succeeded.

List Automations › Responses

200

Successful Response

​AutomationOut[]
AutomationOut
consecutive_failures
​integer · required
enabled
​boolean · required
​required
flow_id
​string · uuid · required
has_webhook_secret
​boolean · required
id
​string · uuid · required
​required
​required
​required
min_interval_seconds
​integer · required
name
​string · required
org_id
​string · uuid · required
​required
​required
​TriggerConfig · required

The small typed shape a trigger is configured by. Every field is optional here and required by service for the kind that needs it, so one column stores four vocabularies without four columns of nulls.

trigger_kind
​TriggerKind · enum · required

What sets an automation off. Closed, and each member names exactly one place in this deployment where it is detected — see tasks.py and the webhook route.

Four, and four is all the spec asks for. automations.md used to list a fifth, "when a message or call arrives — including on channels we do not answer conversationally", and withdrew it on 2026-09-13 when channels.md was specified: "a channel nobody answers conversationally is simply a flow with no branch that hands to an agent", so an arriving message runs the channel's own flow and there is nothing left for a trigger to do. What an automation does with a channel is send on one — channels' send_on_channel built-in inside a scheduled flow, which is SCHEDULE. #395 closed.

Enum values:
interaction_ended
schedule
record_written
webhook
​
GET/api/v1/automations
curl /api/v1/automations \ --header 'Authorization: Bearer <token>'
Example Responses
[ { "consecutive_failures": 0, "enabled": true, "fan_out": { "collection_id": "00000000-0000-0000-0000-000000000000", "filters": {}, "limit": 200 }, "flow_id": "00000000-0000-0000-0000-000000000000", "has_webhook_secret": true, "id": "00000000-0000-0000-0000-000000000000", "last_run_at": "2024-08-25T15:00:00Z", "last_success_at": "2024-08-25T15:00:00Z", "last_triggered_at": "2024-08-25T15:00:00Z", "min_interval_seconds": 0, "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "owner": { "id": "00000000-0000-0000-0000-000000000000", "kind": "kind" }, "paused_at": "2024-08-25T15:00:00Z", "paused_reason": "string", "trigger_config": { "agent_id": "00000000-0000-0000-0000-000000000000", "collection_id": "00000000-0000-0000-0000-000000000000", "cron": "string", "end_reasons": [ "string" ], "leave_out_tests": false }, "trigger_kind": "interaction_ended" } ]
json
application/json

Create Automation

POST
/api/v1/automations

Declare an automation: a trigger plus the flow it runs, for work that happens with no conversation. Use when a job should start on a schedule, a record change, an interaction ending, or a webhook, rather than when a person talks to the agent. The trigger is a schedule (trigger_config.cron), a record written in a collection (trigger_config.collection_id), an interaction ended, or a webhook the client's system calls. The flow decides what happens; the automation only decides when. A message arriving on a channel is not a trigger here: the channel's own flow already runs on it.

It is created switched off and runs nothing until it is enabled. A webhook automation's secret is in the answer, once — it is stored as a hash and cannot be shown again.

Create Automation › Request Body

AutomationCreate
flow_id
​string · uuid · required
name
​string · minLength: 1 · maxLength: 200 · required
trigger_kind
​TriggerKind · enum · required

What sets an automation off. Closed, and each member names exactly one place in this deployment where it is detected — see tasks.py and the webhook route.

Four, and four is all the spec asks for. automations.md used to list a fifth, "when a message or call arrives — including on channels we do not answer conversationally", and withdrew it on 2026-09-13 when channels.md was specified: "a channel nobody answers conversationally is simply a flow with no branch that hands to an agent", so an arriving message runs the channel's own flow and there is nothing left for a trigger to do. What an automation does with a channel is send on one — channels' send_on_channel built-in inside a scheduled flow, which is SCHEDULE. #395 closed.

Enum values:
interaction_ended
schedule
record_written
webhook
​
min_interval_seconds
​integer
Default: 300
​TriggerConfig

The small typed shape a trigger is configured by. Every field is optional here and required by service for the kind that needs it, so one column stores four vocabularies without four columns of nulls.

Create Automation › Responses

Successful Response

What `create_automation` answers with: the automation, plus the webhook secret **in clear, once**, for a `WEBHOOK` automation. The same posture `api_keys` takes with a key. Nothing stores the clear value, so a client that loses it rotates rather than recovers it.
AutomationCreated
consecutive_failures
​integer · required
enabled
​boolean · required
​required
flow_id
​string · uuid · required
has_webhook_secret
​boolean · required
id
​string · uuid · required
​required
​required
​required
min_interval_seconds
​integer · required
name
​string · required
org_id
​string · uuid · required
​required
​required
​TriggerConfig · required

The small typed shape a trigger is configured by. Every field is optional here and required by service for the kind that needs it, so one column stores four vocabularies without four columns of nulls.

trigger_kind
​TriggerKind · enum · required

What sets an automation off. Closed, and each member names exactly one place in this deployment where it is detected — see tasks.py and the webhook route.

Four, and four is all the spec asks for. automations.md used to list a fifth, "when a message or call arrives — including on channels we do not answer conversationally", and withdrew it on 2026-09-13 when channels.md was specified: "a channel nobody answers conversationally is simply a flow with no branch that hands to an agent", so an arriving message runs the channel's own flow and there is nothing left for a trigger to do. What an automation does with a channel is send on one — channels' send_on_channel built-in inside a scheduled flow, which is SCHEDULE. #395 closed.

Enum values:
interaction_ended
schedule
record_written
webhook
​
​
POST/api/v1/automations
curl /api/v1/automations \ --request POST \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "fan_out": { "collection_id": "00000000-0000-0000-0000-000000000000", "filters": {}, "limit": 200 }, "flow_id": "00000000-0000-0000-0000-000000000000", "min_interval_seconds": 300, "name": "name", "trigger_config": { "agent_id": "00000000-0000-0000-0000-000000000000", "collection_id": "00000000-0000-0000-0000-000000000000", "cron": "string", "end_reasons": [ "string" ], "leave_out_tests": false }, "trigger_kind": "interaction_ended" }'
Example Request Body
{ "fan_out": { "collection_id": "00000000-0000-0000-0000-000000000000", "filters": {}, "limit": 200 }, "flow_id": "00000000-0000-0000-0000-000000000000", "min_interval_seconds": 300, "name": "name", "trigger_config": { "agent_id": "00000000-0000-0000-0000-000000000000", "collection_id": "00000000-0000-0000-0000-000000000000", "cron": "string", "end_reasons": [ "string" ], "leave_out_tests": false }, "trigger_kind": "interaction_ended" }
json
Example Responses
{ "consecutive_failures": 0, "enabled": true, "fan_out": { "collection_id": "00000000-0000-0000-0000-000000000000", "filters": {}, "limit": 200 }, "flow_id": "00000000-0000-0000-0000-000000000000", "has_webhook_secret": true, "id": "00000000-0000-0000-0000-000000000000", "last_run_at": "2024-08-25T15:00:00Z", "last_success_at": "2024-08-25T15:00:00Z", "last_triggered_at": "2024-08-25T15:00:00Z", "min_interval_seconds": 0, "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "owner": { "id": "00000000-0000-0000-0000-000000000000", "kind": "kind" }, "paused_at": "2024-08-25T15:00:00Z", "paused_reason": "string", "trigger_config": { "agent_id": "00000000-0000-0000-0000-000000000000", "collection_id": "00000000-0000-0000-0000-000000000000", "cron": "string", "end_reasons": [ "string" ], "leave_out_tests": false }, "trigger_kind": "interaction_ended", "webhook_secret": "string" }
json
application/json

Get Automation

GET
/api/v1/automations/{automation_id}

Read one automation: its trigger, the flow it runs, whether it is enabled or paused after repeated failures (and why), and when it last fired, ran and succeeded. The webhook secret is never shown again after creation.

Get Automation › path Parameters

automation_id
​string · uuid · required

Get Automation › Responses

Successful Response

AutomationOut
consecutive_failures
​integer · required
enabled
​boolean · required
​required
flow_id
​string · uuid · required
has_webhook_secret
​boolean · required
id
​string · uuid · required
​required
​required
​required
min_interval_seconds
​integer · required
name
​string · required
org_id
​string · uuid · required
​required
​required
​TriggerConfig · required

The small typed shape a trigger is configured by. Every field is optional here and required by service for the kind that needs it, so one column stores four vocabularies without four columns of nulls.

trigger_kind
​TriggerKind · enum · required

What sets an automation off. Closed, and each member names exactly one place in this deployment where it is detected — see tasks.py and the webhook route.

Four, and four is all the spec asks for. automations.md used to list a fifth, "when a message or call arrives — including on channels we do not answer conversationally", and withdrew it on 2026-09-13 when channels.md was specified: "a channel nobody answers conversationally is simply a flow with no branch that hands to an agent", so an arriving message runs the channel's own flow and there is nothing left for a trigger to do. What an automation does with a channel is send on one — channels' send_on_channel built-in inside a scheduled flow, which is SCHEDULE. #395 closed.

Enum values:
interaction_ended
schedule
record_written
webhook
​
GET/api/v1/automations/{automation_id}
curl /api/v1/automations/:automation_id \ --header 'Authorization: Bearer <token>'
Example Responses
{ "consecutive_failures": 0, "enabled": true, "fan_out": { "collection_id": "00000000-0000-0000-0000-000000000000", "filters": {}, "limit": 200 }, "flow_id": "00000000-0000-0000-0000-000000000000", "has_webhook_secret": true, "id": "00000000-0000-0000-0000-000000000000", "last_run_at": "2024-08-25T15:00:00Z", "last_success_at": "2024-08-25T15:00:00Z", "last_triggered_at": "2024-08-25T15:00:00Z", "min_interval_seconds": 0, "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "owner": { "id": "00000000-0000-0000-0000-000000000000", "kind": "kind" }, "paused_at": "2024-08-25T15:00:00Z", "paused_reason": "string", "trigger_config": { "agent_id": "00000000-0000-0000-0000-000000000000", "collection_id": "00000000-0000-0000-0000-000000000000", "cron": "string", "end_reasons": [ "string" ], "leave_out_tests": false }, "trigger_kind": "interaction_ended" }
json
application/json

Delete Automation

DELETE
/api/v1/automations/{automation_id}

Delete an automation and the record of every run it made. Use when the automation should no longer exist at all.

Delete Automation › path Parameters

automation_id
​string · uuid · required

Delete Automation › Responses

Successful Response

No data returned
DELETE/api/v1/automations/{automation_id}
curl /api/v1/automations/:automation_id \ --request DELETE \ --header 'Authorization: Bearer <token>'
Example Responses
No example specified for this content type

Update Automation

PATCH
/api/v1/automations/{automation_id}

Change what an automation watches or what it runs. Use when the trigger or the flow should change, not to switch it on or off — that is a separate operation.

Update Automation › path Parameters

automation_id
​string · uuid · required

Update Automation › Request Body

A partial edit. `enabled` is deliberately **not** here: enabling an automation is a consequential operation with its own route, and folding it into a general patch would let it happen inside an edit that was about something else.
AutomationUpdate
​
​
​
​
​

Update Automation › Responses

Successful Response

AutomationOut
consecutive_failures
​integer · required
enabled
​boolean · required
​required
flow_id
​string · uuid · required
has_webhook_secret
​boolean · required
id
​string · uuid · required
​required
​required
​required
min_interval_seconds
​integer · required
name
​string · required
org_id
​string · uuid · required
​required
​required
​TriggerConfig · required

The small typed shape a trigger is configured by. Every field is optional here and required by service for the kind that needs it, so one column stores four vocabularies without four columns of nulls.

trigger_kind
​TriggerKind · enum · required

What sets an automation off. Closed, and each member names exactly one place in this deployment where it is detected — see tasks.py and the webhook route.

Four, and four is all the spec asks for. automations.md used to list a fifth, "when a message or call arrives — including on channels we do not answer conversationally", and withdrew it on 2026-09-13 when channels.md was specified: "a channel nobody answers conversationally is simply a flow with no branch that hands to an agent", so an arriving message runs the channel's own flow and there is nothing left for a trigger to do. What an automation does with a channel is send on one — channels' send_on_channel built-in inside a scheduled flow, which is SCHEDULE. #395 closed.

Enum values:
interaction_ended
schedule
record_written
webhook
​
PATCH/api/v1/automations/{automation_id}
curl /api/v1/automations/:automation_id \ --request PATCH \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "fan_out": { "collection_id": "00000000-0000-0000-0000-000000000000", "filters": {}, "limit": 200 }, "flow_id": "00000000-0000-0000-0000-000000000000", "min_interval_seconds": 0, "name": "string", "trigger_config": { "agent_id": "00000000-0000-0000-0000-000000000000", "collection_id": "00000000-0000-0000-0000-000000000000", "cron": "string", "end_reasons": [ "string" ], "leave_out_tests": false } }'
Example Request Body
{ "fan_out": { "collection_id": "00000000-0000-0000-0000-000000000000", "filters": {}, "limit": 200 }, "flow_id": "00000000-0000-0000-0000-000000000000", "min_interval_seconds": 0, "name": "string", "trigger_config": { "agent_id": "00000000-0000-0000-0000-000000000000", "collection_id": "00000000-0000-0000-0000-000000000000", "cron": "string", "end_reasons": [ "string" ], "leave_out_tests": false } }
json
Example Responses
{ "consecutive_failures": 0, "enabled": true, "fan_out": { "collection_id": "00000000-0000-0000-0000-000000000000", "filters": {}, "limit": 200 }, "flow_id": "00000000-0000-0000-0000-000000000000", "has_webhook_secret": true, "id": "00000000-0000-0000-0000-000000000000", "last_run_at": "2024-08-25T15:00:00Z", "last_success_at": "2024-08-25T15:00:00Z", "last_triggered_at": "2024-08-25T15:00:00Z", "min_interval_seconds": 0, "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "owner": { "id": "00000000-0000-0000-0000-000000000000", "kind": "kind" }, "paused_at": "2024-08-25T15:00:00Z", "paused_reason": "string", "trigger_config": { "agent_id": "00000000-0000-0000-0000-000000000000", "collection_id": "00000000-0000-0000-0000-000000000000", "cron": "string", "end_reasons": [ "string" ], "leave_out_tests": false }, "trigger_kind": "interaction_ended" }
json
application/json

Set Automation Enabled

PUT
/api/v1/automations/{automation_id}/enabled

Switch an automation on or off. Use when turning unattended work on or off for this automation's trigger.

Switching one on starts unattended work against the client's real systems, and clears a pause a run of failures had set. Reach for it once the flow's steps have each been tested (test_tool) and the flow reads what the trigger hands it ("$ref:trigger.<key>"): nothing fires, run_automation included, while it is off. Turning it off is the way to stop it without losing it; to change what it watches or runs, use update_automation.

Set Automation Enabled › path Parameters

automation_id
​string · uuid · required

Set Automation Enabled › Request Body

Body_set_automation_enabled
enabled
​boolean · required

Set Automation Enabled › Responses

Successful Response

AutomationOut
consecutive_failures
​integer · required
enabled
​boolean · required
​required
flow_id
​string · uuid · required
has_webhook_secret
​boolean · required
id
​string · uuid · required
​required
​required
​required
min_interval_seconds
​integer · required
name
​string · required
org_id
​string · uuid · required
​required
​required
​TriggerConfig · required

The small typed shape a trigger is configured by. Every field is optional here and required by service for the kind that needs it, so one column stores four vocabularies without four columns of nulls.

trigger_kind
​TriggerKind · enum · required

What sets an automation off. Closed, and each member names exactly one place in this deployment where it is detected — see tasks.py and the webhook route.

Four, and four is all the spec asks for. automations.md used to list a fifth, "when a message or call arrives — including on channels we do not answer conversationally", and withdrew it on 2026-09-13 when channels.md was specified: "a channel nobody answers conversationally is simply a flow with no branch that hands to an agent", so an arriving message runs the channel's own flow and there is nothing left for a trigger to do. What an automation does with a channel is send on one — channels' send_on_channel built-in inside a scheduled flow, which is SCHEDULE. #395 closed.

Enum values:
interaction_ended
schedule
record_written
webhook
​
PUT/api/v1/automations/{automation_id}/enabled
curl /api/v1/automations/:automation_id/enabled \ --request PUT \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "enabled": true }'
Example Request Body
{ "enabled": true }
json
Example Responses
{ "consecutive_failures": 0, "enabled": true, "fan_out": { "collection_id": "00000000-0000-0000-0000-000000000000", "filters": {}, "limit": 200 }, "flow_id": "00000000-0000-0000-0000-000000000000", "has_webhook_secret": true, "id": "00000000-0000-0000-0000-000000000000", "last_run_at": "2024-08-25T15:00:00Z", "last_success_at": "2024-08-25T15:00:00Z", "last_triggered_at": "2024-08-25T15:00:00Z", "min_interval_seconds": 0, "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "owner": { "id": "00000000-0000-0000-0000-000000000000", "kind": "kind" }, "paused_at": "2024-08-25T15:00:00Z", "paused_reason": "string", "trigger_config": { "agent_id": "00000000-0000-0000-0000-000000000000", "collection_id": "00000000-0000-0000-0000-000000000000", "cron": "string", "end_reasons": [ "string" ], "leave_out_tests": false }, "trigger_kind": "interaction_ended" }
json
application/json

Get Automation Map

GET
/api/v1/automations/{automation_id}/map

Read one automation's frame of the map: the automation's card, what sets it off, the flow it runs, the tools that flow's steps run, the collections it reads and writes, and the connections it uses -- each with its owner and whether it is working. An automation set off by a conversation ending that an agent's frame holds has no frame of its own (it sits in each agent's): not found. Parts you may not see are counted in hidden, never named. Give owner to see one recipe's parts, or only the organization's own. Changes nothing.

Get Automation Map › path Parameters

automation_id
​string · uuid · required

Get Automation Map › query Parameters

owner
​

Narrow the map to one owner: organization for the organization's own parts, or an installed recipe's id for that recipe's.

Narrow the map to one owner: organization for the organization's own parts, or an installed recipe's id for that recipe's.

Get Automation Map › Responses

Successful Response

One automation's frame, as this reader may see it (rule 40): the automation's own card, the outer cards its frame names (the collection whose record sets it off, what its flow reads and writes), the lines between those, and the frame.
AutomationMapOut
automation_id
​string · uuid · required
​MapPartOut · required

One card. key is the map's own handle for it (<kind>:<id>), what every line and lane names; id is the part's own id, for opening its screen (rule 23) -- for a documents or capability card, the agent's.

state is None for a card that carries no dot (rule 35): a collection, documents, a capability, a number. failure -- why it failed -- is filled only for a reader who may read where the failure was recorded (rule 30). missing marks a part something points at that no longer exists, or a part an incomplete recipe lacks; name is then the last name known, or None (rule 37).

​MapPartOut[] · required
​MapFrameOut · required

One opened card's inside (rule 11). parts are the cards inside it, each with frame set to key; lines every line drawn inside it, including those from a part inside to an outer card it reads or writes. reads and writes name the outer cards drawn above and below it; one both read and written is in writes alone (rule 17).

​MapGroupOut[] · required
hidden
​integer · required
​MapLineOut[] · required
name
​string · required
​required
read_at
​string · date-time · required
GET/api/v1/automations/{automation_id}/map
curl /api/v1/automations/:automation_id/map \ --header 'Authorization: Bearer <token>'
Example Responses
{ "automation_id": "00000000-0000-0000-0000-000000000000", "card": { "count": 0, "detail": "string", "failure": "string", "frame": "string", "id": "00000000-0000-0000-0000-000000000000", "key": "key", "kind": "agent", "label": "string", "missing": false, "name": "string", "never_run": false, "nodes": 0, "on_every_node": false, "openable": false, "owner": { "id": "00000000-0000-0000-0000-000000000000", "key": "string", "kind": "recipe", "name": "string" }, "reaches_no_agent": false, "reason": "last_run_failed", "recipes": [], "runs_flow_as_step": false, "scope": "every_conversation", "seen_by": [], "state": "failing", "state_at": "2024-08-25T15:00:00Z", "steps_run": [] }, "cards": [ { "count": 0, "detail": "string", "failure": "string", "frame": "string", "id": "00000000-0000-0000-0000-000000000000", "key": "key", "kind": "agent", "label": "string", "missing": false, "name": "string", "never_run": false, "nodes": 0, "on_every_node": false, "openable": false, "owner": { "id": "00000000-0000-0000-0000-000000000000", "key": "string", "kind": "recipe", "name": "string" }, "reaches_no_agent": false, "reason": "last_run_failed", "recipes": [], "runs_flow_as_step": false, "scope": "every_conversation", "seen_by": [], "state": "failing", "state_at": "2024-08-25T15:00:00Z", "steps_run": [] } ], "frame": { "alone": true, "draft": false, "hidden": 0, "key": "key", "lanes": { "after": [], "before": [], "during": [], "inbound": [] }, "lines": [ { "kind": "brings_conversations", "source": "source", "target": "target" } ], "parts": [ { "count": 0, "detail": "string", "failure": "string", "frame": "string", "id": "00000000-0000-0000-0000-000000000000", "key": "key", "kind": "agent", "label": "string", "missing": false, "name": "string", "never_run": false, "nodes": 0, "on_every_node": false, "openable": false, "owner": { "id": "00000000-0000-0000-0000-000000000000", "key": "string", "kind": "recipe", "name": "string" }, "reaches_no_agent": false, "reason": "last_run_failed", "recipes": [], "runs_flow_as_step": false, "scope": "every_conversation", "seen_by": [], "state": "failing", "state_at": "2024-08-25T15:00:00Z", "steps_run": [] } ], "published": true, "reads": [ "string" ], "version_id": "00000000-0000-0000-0000-000000000000", "writes": [ "string" ] }, "groups": [ { "owner": { "id": "00000000-0000-0000-0000-000000000000", "key": "string", "kind": "recipe", "name": "string" }, "parts": [ "string" ], "recipe": { "enabled": true, "error": "string", "key": "key", "state": "installed", "switched_off_reason": "string" }, "worst": "failing" } ], "hidden": 0, "lines": [ { "kind": "brings_conversations", "source": "source", "target": "target" } ], "name": "name", "owner": "organization", "read_at": "2024-08-25T15:00:00Z" }
json
application/json

Run Automation

POST
/api/v1/automations/{automation_id}/run

Run this automation now, as if its trigger had fired. Use to see a newly enabled automation's flow run end to end, or for work wanted once, right now, rather than waiting on the schedule or trigger.

It really runs, against whatever the flow's steps reach. The runs are recorded immediately and executed by a worker; the answer is the records, not the results (get_automation_run has those). An automation that fans out over a query answers with one record per row, and with none when the query matches nothing. Reach for it to see a newly enabled automation's flow run end to end, or for work wanted once, now; a switched-off or paused automation is refused, so enable it first. A flow step reading "$ref:trigger.<key>" sees a manual run's payload, {"manual": true}, not a schedule's or a record's. Refused with 402, opening nothing, while the organization's balance is spent.

Run Automation › path Parameters

automation_id
​string · uuid · required

Run Automation › Responses

Successful Response

​AutomationRunOut[]
AutomationRunOut
attempts
​integer · required
automation_id
​string · uuid · required
​required
​required
id
​string · uuid · required
​object · required
org_id
​string · uuid · required
outcome
​RunOutcome · enum · required

Where one run got to.

Enum values:
pending
running
succeeded
failed
did_not_terminate
​required
​required
​object[] · required
​required
trigger_key
​string · required
POST/api/v1/automations/{automation_id}/run
curl /api/v1/automations/:automation_id/run \ --request POST \ --header 'Authorization: Bearer <token>'
Example Responses
[ { "attempts": 0, "automation_id": "00000000-0000-0000-0000-000000000000", "error": "string", "finished_at": "2024-08-25T15:00:00Z", "id": "00000000-0000-0000-0000-000000000000", "inputs": {}, "org_id": "00000000-0000-0000-0000-000000000000", "outcome": "pending", "result": {}, "started_at": "2024-08-25T15:00:00Z", "steps": [ {} ], "trigger_interaction_id": "00000000-0000-0000-0000-000000000000", "trigger_key": "trigger_key" } ]
json
application/json

List Automation Runs

GET
/api/v1/automations/{automation_id}/runs

This automation's history, newest first: when each run fired, what set it off, and how it ended. Use when reviewing past runs instead of starting a new one.

List Automation Runs › path Parameters

automation_id
​string · uuid · required

List Automation Runs › query Parameters

limit
​integer · min: 1 · max: 200
Default: 50
offset
​integer · min: 0
Default: 0

List Automation Runs › Responses

Successful Response

​AutomationRunOut[]
AutomationRunOut
attempts
​integer · required
automation_id
​string · uuid · required
​required
​required
id
​string · uuid · required
​object · required
org_id
​string · uuid · required
outcome
​RunOutcome · enum · required

Where one run got to.

Enum values:
pending
running
succeeded
failed
did_not_terminate
​required
​required
​object[] · required
​required
trigger_key
​string · required
GET/api/v1/automations/{automation_id}/runs
curl /api/v1/automations/:automation_id/runs \ --header 'Authorization: Bearer <token>'
Example Responses
[ { "attempts": 0, "automation_id": "00000000-0000-0000-0000-000000000000", "error": "string", "finished_at": "2024-08-25T15:00:00Z", "id": "00000000-0000-0000-0000-000000000000", "inputs": {}, "org_id": "00000000-0000-0000-0000-000000000000", "outcome": "pending", "result": {}, "started_at": "2024-08-25T15:00:00Z", "steps": [ {} ], "trigger_interaction_id": "00000000-0000-0000-0000-000000000000", "trigger_key": "trigger_key" } ]
json
application/json

Get Automation Run

GET
/api/v1/automations/{automation_id}/runs/{run_id}

Read one run of an automation: what set it off, the inputs the flow received, its outcome and attempts, the last step's result or the error, and each tool call it made (name, outcome, duration).

Get Automation Run › path Parameters

automation_id
​string · uuid · required
run_id
​string · uuid · required

Get Automation Run › Responses

Successful Response

AutomationRunOut
attempts
​integer · required
automation_id
​string · uuid · required
​required
​required
id
​string · uuid · required
​object · required
org_id
​string · uuid · required
outcome
​RunOutcome · enum · required

Where one run got to.

Enum values:
pending
running
succeeded
failed
did_not_terminate
​required
​required
​object[] · required
​required
trigger_key
​string · required
GET/api/v1/automations/{automation_id}/runs/{run_id}
curl /api/v1/automations/:automation_id/runs/:run_id \ --header 'Authorization: Bearer <token>'
Example Responses
{ "attempts": 0, "automation_id": "00000000-0000-0000-0000-000000000000", "error": "string", "finished_at": "2024-08-25T15:00:00Z", "id": "00000000-0000-0000-0000-000000000000", "inputs": {}, "org_id": "00000000-0000-0000-0000-000000000000", "outcome": "pending", "result": {}, "started_at": "2024-08-25T15:00:00Z", "steps": [ {} ], "trigger_interaction_id": "00000000-0000-0000-0000-000000000000", "trigger_key": "trigger_key" }
json
application/json

authenticationbillable-metrics