Orchestration · Errors
Beyond global errors — see Errors (global).
Workflows
| HTTP | Error | Meaning |
|---|---|---|
| 400 | spec.startNodeId not in nodes[] | Validation: starting node missing. |
| 400 | spec contains cycle: a → b → a | Workflows must be DAGs. |
| 400 | spec.edges references unknown node: <id> | Edges must connect declared nodes. |
| 400 | decision.cases must include defaultCase | Required to prevent ambiguity. |
| 409 | slug already exists in org | Slugs unique per org. |
| 409 | workflow is not active (publish first) | Tried to execute a draft. |
Executions
| HTTP | Error | Meaning |
|---|---|---|
| 404 | workflow not found | Wrong slug or not in your org. |
| 409 | execution in terminal state: succeeded | Cancel/approve only valid for in-progress. |
| 409 | execution not awaiting approval | /approve on a not-paused execution. |
| 422 | templating error: step.X.output.Y is undefined | A prior step's output didn't have the referenced field. Check spec. |
| 422 | service_call failed: 502 from sibling | Sibling returned 5xx after retries. See step's error field. |
Service connections
| HTTP | Error | Meaning |
|---|---|---|
| 400 | unknown serviceSlug | Must be one of identity · aml · ... or custom:<slug>. |
| 422 | connection test failed: timeout | Sibling unreachable from our network. |
| 422 | apiKey rejected by sibling: 401 | Wrong key, expired key, or wrong sibling URL. |
Human approval
| HTTP | Error | Meaning |
|---|---|---|
| 403 | not assigned to this approval | Caller's role/team/userId doesn't match assignTo. |
| 400 | notes required (min 20 chars) | Audit policy. |
| 409 | approval already resolved by another user | Race — first action wins. |
Webhooks
| HTTP | Error | Meaning |
|---|---|---|
| 400 | events: at least one required | Empty subscription. |
| 400 | url must be https | HTTPS-only outside sandbox. |