Orchestrations Commands
See Orchestrations module docs for permissions and data model.
soat create-orchestration
Create an orchestration
- Method:
POST - Path:
/api/v1/orchestrations
Usage
soat create-orchestration --name <string> --nodes <array<object>> --edges <array<object>>
Options
--project-id
Public ID of the project. Optional when authenticating with a project-scoped API key, which defaults to the key's project; required otherwise.
- Source:
body - Required: no
- Type:
string
--name
Human-readable name.
- Source:
body - Required: yes
- Type:
string
--description
—
- Source:
body - Required: no
- Type:
string \| null
--nodes
—
- Source:
body - Required: yes
- Type:
array<object>
--edges
—
- Source:
body - Required: yes
- Type:
array<object>
--state-schema
—
- Source:
body - Required: no
- Type:
object
--input-schema
—
- Source:
body - Required: no
- Type:
object
--version-label
Optional tag for the version this create archives, e.g. initial.
- Source:
body - Required: no
- Type:
string - Example:
initial
soat list-orchestrations
List orchestrations
- Method:
GET - Path:
/api/v1/orchestrations
Usage
soat list-orchestrations
Options
--project-id
Filter by project public ID
- Source:
query - Required: no
- Type:
string
--limit
Maximum number of results to return
- Source:
query - Required: no
- Type:
integer - Default:
50
--offset
Number of results to skip
- Source:
query - Required: no
- Type:
integer - Default:
0
soat validate-orchestration
Validate an orchestration graph
- Method:
POST - Path:
/api/v1/orchestrations/validate
Usage
soat validate-orchestration
Options
--nodes
—
- Source:
body - Required: no
- Type:
array<object>
--edges
—
- Source:
body - Required: no
- Type:
array<object>
--input-schema
Optional JSON Schema for run inputs; its top-level properties seed state.
- Source:
body - Required: no
- Type:
object
soat get-queue-stats
Get orchestration queue stats
- Method:
GET - Path:
/api/v1/orchestrations/queue/stats
Usage
soat get-queue-stats
Options
This command has no options.
soat get-orchestration
Get an orchestration
- Method:
GET - Path:
/api/v1/orchestrations/{orchestration_id}
Usage
soat get-orchestration
Options
This command has no options.
soat update-orchestration
Update an orchestration
- Method:
PATCH - Path:
/api/v1/orchestrations/{orchestration_id}
Usage
soat update-orchestration
Options
--name
—
- Source:
body - Required: no
- Type:
string
--description
—
- Source:
body - Required: no
- Type:
string \| null
--nodes
—
- Source:
body - Required: no
- Type:
array<object>
--edges
—
- Source:
body - Required: no
- Type:
array<object>
--state-schema
—
- Source:
body - Required: no
- Type:
object
--input-schema
—
- Source:
body - Required: no
- Type:
object
--version-label
Optional tag for the version this write archives, e.g. pre-rewire. Ignored when the write changes no graph field, since no version is archived.
- Source:
body - Required: no
- Type:
string - Example:
pre-rewire
soat delete-orchestration
Delete an orchestration
- Method:
DELETE - Path:
/api/v1/orchestrations/{orchestration_id}
Usage
soat delete-orchestration
Options
This command has no options.
soat list-orchestration-versions
List an orchestration's graph versions
- Method:
GET - Path:
/api/v1/orchestrations/{orchestration_id}/versions
Usage
soat list-orchestration-versions
Options
--limit
Maximum number of results to return
- Source:
query - Required: no
- Type:
integer - Default:
50
--offset
Number of results to skip
- Source:
query - Required: no
- Type:
integer - Default:
0
soat get-orchestration-version
Fetch an archived orchestration version
- Method:
GET - Path:
/api/v1/orchestrations/{orchestration_id}/versions/{version}
Usage
soat get-orchestration-version --version <integer>
Options
--version
The archived version number
- Source:
path - Required: yes
- Type:
integer
soat restore-orchestration-version
Restore an archived orchestration graph
- Method:
POST - Path:
/api/v1/orchestrations/{orchestration_id}/versions/{version}/restore
Usage
soat restore-orchestration-version --version <integer>
Options
--version
The archived version number
- Source:
path - Required: yes
- Type:
integer
--label
Optional tag for the version the restore creates. Defaults to restored from v<version>.
- Source:
body - Required: no
- Type:
string - Example:
rollback to pre-incident graph
soat start-orchestration-run
Start an orchestration run
- Method:
POST - Path:
/api/v1/orchestration-runs
Usage
soat start-orchestration-run --orchestration-id <string>
Options
--orchestration-id
Orchestration to run (orch_...).
- Source:
body - Required: yes
- Type:
string - Example:
orch_V1StGXR8Z5jdHi6B
--input
Initial state for the run (merged with orchestration defaults).
- Source:
body - Required: no
- Type:
object
--tool-context
Key-value pairs forwarded as X-Soat-Context-<key> headers on every http, mcp and builtin tool call made by an agent node of this run — including the agents of any child run a loop or sub_orchestration node starts. The header name is X-Soat-Context- plus the key verbatim; no character is re-cased. The bag is stored on the run and re-read on every step, so it survives an awaiting_input pause, a sleeping wait, a background worker drive and a crash redrive. A key that is not a valid HTTP header name, or two keys that map to the same header, are rejected with 400 INVALID_TOOL_CONTEXT_KEY and no run is created. The reserved identity keys (session_id, actor_id, actor_external_id) are stripped at generation time — a caller cannot address them from here.
- Source:
body - Required: no
- Type:
object<string, string> - Example:
\{"ocaToken":"eyJhbGciOiJIUzI1NiJ9.abc"\}
--metadata
Caller-supplied key/value metadata attached to the run record for per-run attribution (e.g. which of your own tenants this run belongs to, or the dispatch batch that started it). Round-trips verbatim on every read of the run, on the list as well as the single read. The bag is caller-owned and no key is reserved: server-owned state (status, the pinned orchestration version, the trace, usage, artifacts, the run's own input and accumulated state) lives in its own top-level field and cannot be written from here. It is not merged into run state: no graph node sees it, and an input_schema never has to tolerate it — which is what makes it the place for an infrastructural label, rather than input. Keys are never transformed. It is not inherited by the child runs a loop or sub_orchestration node starts; each child carries whatever the graph gives it, which today is nothing.
- Source:
body - Required: no
- Type:
object<string, unknown> - Example:
\{"tenant_account_id":"42","dispatch_batch":"nightly-2026-08-25"\}
--wait
When true, block until the run reaches a terminal (succeeded/failed) or awaiting_input state and return the settled run. When false (default), return immediately with status "queued" and execute the run in the background.
- Source:
body - Required: no
- Type:
boolean - Default:
false
soat list-orchestration-runs
List orchestration runs
- Method:
GET - Path:
/api/v1/orchestration-runs
Usage
soat list-orchestration-runs
Options
--orchestration-id
Filter by orchestration public ID (orch_...)
- Source:
query - Required: no
- Type:
string
--parent-orchestration-run-id
Filter to the runs one specific parent run's loop / sub_orchestration nodes started (run_...). This is how a caller holding a parent names the individual children behind its usage.
- Source:
query - Required: no
- Type:
string
--nested
Filter by whether the run was started by another run. false returns only the runs a caller started (no parent), which is the set to sum usage over; true returns only the runs a loop / sub_orchestration node started, across every parent. Omit to return both. Contradicting parent_orchestration_run_id with nested=false is a 400; any value other than true or false is a 400.
- Source:
query - Required: no
- Type:
boolean
--limit
Maximum number of results to return
- Source:
query - Required: no
- Type:
integer - Default:
50
--offset
Number of results to skip
- Source:
query - Required: no
- Type:
integer - Default:
0
soat cancel-orchestration-run
Cancel an orchestration run
- Method:
POST - Path:
/api/v1/orchestration-runs/{orchestration_run_id}/cancel
Usage
soat cancel-orchestration-run
Options
This command has no options.
soat submit-human-input
Submit human input
- Method:
POST - Path:
/api/v1/orchestration-runs/{orchestration_run_id}/human-input
Usage
soat submit-human-input --node-id <string>
Options
--node-id
ID of the human node to satisfy.
- Source:
body - Required: yes
- Type:
string
--output
Output/response provided by the human reviewer.
- Source:
body - Required: no
- Type:
object
soat resume-orchestration-run
Resume an orchestration run
- Method:
POST - Path:
/api/v1/orchestration-runs/{orchestration_run_id}/resume
Usage
soat resume-orchestration-run
Options
This command has no options.
soat get-orchestration-run
Get an orchestration run
- Method:
GET - Path:
/api/v1/orchestration-runs/{orchestration_run_id}
Usage
soat get-orchestration-run
Options
This command has no options.