AddActionBody
Body for Add Action. `action_id` is the template; `after` (optional) is an `action_instance_id`; `name` (optional) overrides the template's default display name. Everything Configure Action accepts — `inputs`, `run_if`, `continue_workflow_if_action_fails`, `note` — can be sent here too, so an action can be created and fully configured in one request instead of two. Same shapes, same semantics, same `warnings[]`.
Properties
action_idstringrequiredAction template identifier from the action catalog (e.g. `enrich_company_linkedin_profile`).
afterstringInsert after this `action_instance_id`. Omit to append to the end of the chain. NOTE: this is an instance ID, not an `action_id`.
namestringOptional display name for the new action instance. Whitespace-only values are ignored.
inputsobjectOptional. Configure the action in the same request instead of following up with Configure Action — one call per action instead of two. Identical semantics to Configure Action's `inputs` (same accepted value shapes, same reference translation, same `warnings[]` codes), because it runs the same engine. Any warnings come back on the 201. References may point at actions upstream of this one; a reference to an action that runs later is reported as a `downstream_reference` warning. On a hard validation failure nothing is created — you do not get a half-configured action to clean up.
run_ifobject | nullOptional gate deciding whether this action runs for a given row. Pass `null` to clear an existing condition. Omit to leave the existing condition unchanged. `conditions` is an array of AND/OR condition GROUPS — the same shape as the filter action's `path_conditions`. The outer array is groups, joined by each group's `combinator` (AND/OR); each group's `conditions` are leaf conditions, joined by each leaf's `combinator`. The first group's and first leaf's `combinator` is ignored. A single condition is just one group with one leaf. **Supported `operator` values depend on the variable's stored type** — the type is derived from the sheet's chain, so you don't pass it. - **Universal** (any type): `is`, `is not`, `is empty`, `is not empty`. `is empty` / `is not empty` ignore `values`. - **String / email / url / imageUrl**: `contains`, `does not contain`, `starts with`, `does not start with`, `ends with`, `does not end with`. Matching is case-insensitive. - **Number / currency**: `greater than`, `less than`, `greater than or equal to`, `less than or equal to`, `is between` (pass `[min, max]`). - **Date**: `is after`, `is before`, `is between` (pass `[start, end]`). Values are parsed by `moment(...)`. - **Array / structured_array / json**: `contains`, `does not contain`. Pass `values` as an array of strings — number / date matchers coerce as needed.
continue_workflow_if_action_failsboolean | nullWhen `true`, downstream actions still run for a row even if this action fails. When `false`, the row stops at this action on failure and downstream cells stay queued. Send `null` to clear the action's own setting so it follows the sheet's `continue_on_fail` (default off). Omit to leave it unchanged. Absent in responses means the action follows the sheet.
notestringOptional free-text note to save on the action. Same upsert behaviour as Save Action Note — overwrites any existing note. Whitespace-only values are ignored.
Example
{
"action_id": "enrich_company_linkedin_profile",
"after": "enrich_company_linkedin_profile_1",
"name": "Enrich primary contact",
"inputs": {
"linkedin_url": "{{input.linkedin_url}}"
},
"run_if": null,
"continue_workflow_if_action_fails": null,
"note": "Skip until Phase 2 — vendor still negotiating contract terms."
}