Skip to content

Workflow runs

Cancel workflow run

Request cancellation of a running, queued, or paused workflow run with workspace write access. Cancellation is best effort; inspect the outcome flags and `reason`. A terminal run returns `200` with `success: false` and an `already_*` reason. A table workflow-group run returns `409` when its cell can no longer accept cancellation. OAuth scope: `api:write`.

POST/api/v2/workflows/{workflowId}/runs/{runId}/cancel

Request cancellation of a running, queued, or paused workflow run with workspace write access. Cancellation is best effort; inspect the outcome flags and reason. A terminal run returns 200 with success: false and an already_* reason. A table workflow-group run returns 409 when its cell can no longer accept cancellation.

OAuth scope: api:write.

Authentication

Send a personal or workspace API key in X-API-Key. See key types and access; operations that reject workspace keys say so in their description.

Send X-API-Key in the request header.

Alternatively

Send a Sim OAuth access token in Authorization: Bearer. See OAuth authentication and scopes.

Authorization: Bearer YOUR_ACCESS_TOKEN

Required scopes: api:write

OAuth flows
json
{
  "authorizationCode": {
    "authorizationUrl": "https://www.sim.ai/api/auth/oauth2/authorize",
    "tokenUrl": "https://www.sim.ai/api/auth/oauth2/token",
    "refreshUrl": "https://www.sim.ai/api/auth/oauth2/token",
    "scopes": {
      "api:read": "Read your workspaces, workflows, files, tables, and logs",
      "api:write": "Read, create, change, run, and delete resources in your workspaces",
      "offline_access": "Stay signed in without asking again"
    }
  }
}

OAuth scope: api:write.

Path parameters

workflowIdstringRequired

Unique workflow identifier.

minLength
1
runIdstringRequired

Unique workflow run identifier.

minLength
1
maxLength
128
pattern
^[A-Za-z0-9._:-]+$

Responses

200

The cancellation outcome.

object

Outcome of the cancellation request.

1 field
dataobjectRequired

Response data.

7 fields
successbooleanRequired

Whether this request cancelled anything. false with an already_* reason means the run had already reached that terminal state, so there was nothing to cancel — still 200, because a no-op is not an error. false with any other reason identifies a degraded or incomplete cancellation step.

runIdstringRequired

Unique workflow run identifier.

minLength
1
maxLength
128
pattern
^[A-Za-z0-9._:-]+$
redisAvailablebooleanRequired

Whether the distributed cancellation channel was available.

durablyRecordedbooleanRequired

Whether this request durably recorded a cancellation. Always false for a run that was already terminal, where the request is satisfied but nothing was written.

locallyAbortedbooleanRequired

Whether an in-process execution was aborted.

pausedCancelledbooleanRequired

Whether a paused execution was cancelled.

reasonstring

Machine-readable cancellation outcome, present on every cancellation including full successes. recorded and queue_cancelled are successful cancellation values. already_cancelled, already_completed, and already_failed mean the run had already reached that terminal state, so nothing was cancelled and durablyRecorded is false. The remaining values identify a degraded or incomplete cancellation step.

enum
["recorded","already_cancelled","already_completed","already_failed","redis_unavailable","redis_write_failed","paused_event_publish_failed","paused_database_cancel_failed","queue_cancelled","active_resume_signal_failed","cancellation_not_finalized"]

Additional properties are not allowed.

Additional properties are not allowed.

Response example 1

json
{
  "data": {
    "success": true,
    "runId": "run_8f14e45f-ceea-467f-a",
    "redisAvailable": true,
    "durablyRecorded": true,
    "locallyAborted": true,
    "pausedCancelled": false,
    "reason": "recorded"
  }
}

Response headers

X-RateLimit-Limitinteger

Maximum requests allowed in the current window.

minimum
0
maximum
9007199254740991
X-RateLimit-Remaininginteger

Requests remaining in the current window.

minimum
0
maximum
9007199254740991
X-RateLimit-Resetstring

ISO 8601 timestamp when the current rate-limit window resets.

format
date-time
pattern
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
Was this helpful?
Suggest an edit