Trigger a workflow
/api/v1/workflows/{id}/trigger
Starts an execution and returns 202 immediately; the run proceeds
asynchronously. Poll getExecution until status is terminal
(completed, failed, cancelled, skipped) or awaiting_review,
or subscribe to execution.completed / execution.failed.
Test vs live. execution_mode defaults to test, which uses
synthetic vendor data and never bills — and works on drafts
(active: false), so you can exercise a cascade before activating
it. live requires an account with production access
(403 live_mode_forbidden otherwise) and an active cascade
(409 workflow_inactive otherwise).
Idempotency. Idempotency-Key is required
(422 missing_idempotency_key if absent). Race-safe under concurrent
identical submissions: the loser receives the same execution as the
winner. A reused key with a different body returns
409 idempotency_conflict. Requires executions:write.
Asynchronous: the response is 202 Accepted. Poll
GET /executions/{id}
until status is terminal.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired |
integer |
Workflow id. Only workflows owned by the token's account resolve; a foreign or deleted id returns |
Header parameters
| Name | Type | Description |
|---|---|---|
Idempotency-Keyrequired |
string |
Unique per-business-event key. Identical resubmissions return
the original response; conflicting bodies return The header is accepted up to 200 characters, but the stored key is
namespaced to your client ( 3fa85f64-5717-4562-b3fc-2c963f66afa6
|
Request body
The applicant payload and the execution mode for this run.
-
payloadobject The decision input. Put the subject under `applicant`; arbitrary nested fields are allowed and become the execution's `input_context`. Defaults to `{}` when omitted.-
applicantApplicantPayload Free-form applicant data forwarded to the workflow's first node as `context.applicant`. Field names depend on the workflow definition. -
propertyobject Optional property / tenancy details (as returned by `listWorkflowTestCases`).
-
-
execution_modestring `test` uses synthetic vendor data and never bills; `live` requires production access and an active cascade. One oftestlive -
external_referencestring Your correlation id for this run. Echoed on the execution and on every webhook event.
{
"payload": {
"applicant": {
"first_name": "Jordan",
"last_name": "Lee",
"email": "jordan@example.com"
}
},
"execution_mode": "test",
"external_reference": "rv-app-20491"
}Responses
-
202 Execution accepted
application/json-
dataExecutionSummary The shape returned by `triggerWorkflow`. Compared with `Execution` it carries `execution_mode` and never `assigned_to_user_id`.Schema: ExecutionSummary
-
idinteger required -
objectstring required -
workflow_idinteger required -
statusstring required Lifecycle of an execution. `queued` (batch rows not yet dispatched), `pending`, `running` and `waiting` (paused on a Wait node or adverse-action waiting period) are in flight; `awaiting_review` is paused on human review; `completed`, `failed`, `cancelled` and `skipped` are terminal. One ofqueuedpendingrunningwaitingawaiting_reviewcompletedfailedcancelledskipped -
execution_modestring One oftestlive -
execution_keystring, nullable The namespaced idempotency key (`api_client:<id>:<Idempotency-Key>`). -
external_referencestring, nullable -
needs_human_reviewboolean required -
started_atstring (date-time), nullable -
completed_atstring (date-time), nullable -
created_atstring (date-time) required -
updated_atstring (date-time), nullable
-
-
metaMetaSchema: Meta
-
request_idstring required Correlation id for this request. Also sent as the `X-Request-Id` response header; quote it when contacting support.
-
202 example{ "data": { "id": 1842, "object": "execution", "workflow_id": 27, "status": "pending", "execution_mode": "test", "execution_key": "api_client:12:3fa85f64-5717-4562-b3fc-2c963f66afa6", "external_reference": "rv-app-20491", "needs_human_review": false, "review_status": "none", "started_at": null, "completed_at": null, "created_at": "2026-09-09T14:00:00Z", "updated_at": "2026-09-09T14:00:00Z" }, "meta": { "request_id": "7d4c2f48-9a1b-4c3d-8e2f-1a2b3c4d5e6f" } } -
-
400
malformed_bodyapplication/json400 example{ "error": { "code": "validation_failed", "message": "The request could not be processed.", "details": [ { "field": "execution_mode", "message": "must be test or live" } ], "request_id": "7d4c2f48-9a1b-4c3d-8e2f-1a2b3c4d5e6f", "doc_url": "https://cascades.crscreditapi.com/docs/api/errors/validation_failed" } } -
401 Missing, malformed, expired or revoked bearer token. The
WWW-Authenticateheader carries the RFC 6750 challenge.application/json401 example{ "error": { "code": "unauthorized", "message": "A valid bearer token is required.", "details": [], "request_id": "7d4c2f48-9a1b-4c3d-8e2f-1a2b3c4d5e6f", "doc_url": "https://cascades.crscreditapi.com/docs/api/errors/unauthorized" } } -
403
insufficient_scopeorlive_mode_forbiddenapplication/json403 example{ "error": { "code": "live_mode_forbidden", "message": "Live mode requires production access.", "details": [ { "field": "execution_mode", "message": "live mode requires production access" } ], "request_id": "7d4c2f48-9a1b-4c3d-8e2f-1a2b3c4d5e6f", "doc_url": "https://cascades.crscreditapi.com/docs/api/errors/live_mode_forbidden" } } -
404 Resource does not exist or belongs to another tenant / api_client
application/json404 example{ "error": { "code": "not_found", "message": "The requested resource was not found.", "details": [], "request_id": "7d4c2f48-9a1b-4c3d-8e2f-1a2b3c4d5e6f", "doc_url": "https://cascades.crscreditapi.com/docs/api/errors/not_found" } } -
409
idempotency_conflictorworkflow_inactive(live trigger on a draft)application/json409 example{ "error": { "code": "idempotency_conflict", "message": "The Idempotency-Key has already been used with a different request payload.", "details": [], "request_id": "7d4c2f48-9a1b-4c3d-8e2f-1a2b3c4d5e6f", "doc_url": "https://cascades.crscreditapi.com/docs/api/errors/idempotency_conflict" } } -
422
missing_idempotency_keyorvalidation_failedapplication/json422 example{ "error": { "code": "missing_idempotency_key", "message": "Idempotency-Key header is required.", "details": [], "request_id": "7d4c2f48-9a1b-4c3d-8e2f-1a2b3c4d5e6f", "doc_url": "https://cascades.crscreditapi.com/docs/api/errors/missing_idempotency_key" } } -
429 Rate limit exceeded (60 req/min per IP on
/api/v1, 600 req/hour per token prefix, or 300 req/5 min per IP globally). The body is the standard error envelope andRetry-Aftergives the seconds until the window resets.application/json429 example{ "error": { "code": "rate_limited", "message": "Rate limit exceeded. Retry later.", "details": [], "request_id": "7d4c2f48-9a1b-4c3d-8e2f-1a2b3c4d5e6f", "doc_url": "https://cascades.crscreditapi.com/docs/api/errors/rate_limited" } }