Skip to main content

The automation object

Internal beta — not released yet

The Automation API is an internal beta and is not released yet. Its endpoints and payloads are not final and may change or be withdrawn at any time without notice.

The automation object is returned — wrapped as { "automation": … } — by retrieve, create, update, the lifecycle endpoints and delete, and in automations[] by the list endpoints. Its three substantive blocks — trigger, filter and actions — each have their own reference page.

⬅️ Response
{
"automation": {
"id": 4021,
"app_id": 87,
"workspace_id": 12,
"name": "Email the owner on a new high-priority lead",
"description": "Notifies the record owner whenever a lead is created.",
"paused": false,
"broken": false,
"broken_reason": null,
"trigger": { "type": "record_created", "config": {} },
"filter": {
"operator": "and",
"rows": [
{
"id": "6a1f…",
"subject": { "kind": "variable", "source": "field", "field_id": 512, "field_type": "single_category", "previous": false, "collection": false, "triggering": false },
"operator": "is_any_of",
"value": { "type": "ids", "ids": [9001] }
}
]
},
"actions": [
{ "id": "3f9a2c", "type": "send_email", "group": "action", "config": { "subject": ["A new lead was created"] } }
],
"created_at": "2024-05-14 09:12:31",
"updated_at": "2024-05-20 16:03:08"
}
}

Fields​

FieldTypeDescription
idintegerID of the automation.
app_idintegerThe app the automation belongs to. Only database apps can have automations.
workspace_idintegerThe workspace the app belongs to.
namestringName of the automation.
descriptionstringOptional. Absent when the automation has none.
pausedbooleanWhether the automation is paused. See status.
brokenbooleanWhether the definition is not executable. Reflects the last validation, not the current edit — see the note below.
broken_reasonobject | null{ errors: [...] } when broken, else null. Same entry shape as validate.
triggerobject | nullThe single trigger { type, config }, or null.
filterobject | nullThe root filter group, or null when there is no filter.
actionsarrayThe ordered action list. [] when none.
created_atstringCreation time, UTC YYYY-MM-DD HH:mm:ss.
updated_atstringLast-modified time, UTC YYYY-MM-DD HH:mm:ss.

There is no status field (state is the paused + broken pair) and no owner/author field in this release.

broken reflects the last validation, not the current definition

Create and update do not re-validate. A freshly written definition that references something invalid still reads broken: false until you activate it (which recomputes validity and refuses a broken automation with 409) or call validate for a fresh verdict. So broken_reason on the object can differ from what validate returns.

Identifiers​

id, app_id and workspace_id are plain JSON integers. The only string-wrapped ID in this resource is a revision ID (a 64-bit value). Node IDs inside filter and actions are opaque strings — a caller-supplied id is preserved verbatim; server-minted ones (when you omit an id) are UUIDs. Treat them as handles, not numbers.