---
title: "Cancel a plan execution"
method: PUT
path: "/orgs/{orgName}/plans/executions/{executionID}/cancel"
tags: ["PlanExecutions"]
---

# Cancel a plan execution

`PUT /orgs/{orgName}/plans/executions/{executionID}/cancel`

## Request

- Base URL: `https://api.signadot.com/api/v2`
- URL: `https://api.signadot.com/api/v2/orgs/{orgName}/plans/executions/{executionID}/cancel`
- Auth: API key in header `signadot-api-key`

Cancel a running plan execution. Returns 409 if already terminal.

## Path parameters

- `orgName` string, required
- `executionID` string, required

## Response `200`

OK

- PlanExecution
  - `id` string
  - `spec` PlanExecutionSpec
    - `cluster` string: Cluster is the target cluster for this execution.
    - `params` object: Params are the actual values bound to the plan's declared parameters.
    - `planID` string: PlanID is the ID of the compiled plan being executed.
    - `runner` string: Runner is the runner group name assigned to execute the plan.
    - `secrets` object: Secrets maps plan param names to org secret names. At dispatch time, the control plane resolves each secret name to its decrypted value and delivers it to the runner alongside regular params. API responses return the name mapping (never decrypted values).
  - `status` PlanExecutionStatus
    - `completedAt` string: CompletedAt is when the execution finished. Serialized as RFC3339.
    - `createdAt` string: CreatedAt is when the execution was created. Serialized as RFC3339.
    - `error` string: Error is a human-readable error message for execution-level failures (e.g. artifact upload failures, plan output resolution errors). Step-level errors are in StepStatus.Error.
    - `inputs` PlanInputStatus[]: Inputs records how each plan-level input was resolved at dispatch time. Populated at the transition to dispatching. Mirrors Outputs.
      - `name` string: Name is the plan param name.
      - `resolvedVia` 'literal' | 'callerSecret' | 'ref' | 'default' | 'unbound'
      - `secretName` string: SecretName is the caller-supplied secret name when ResolvedVia == callerSecret. Empty otherwise.
    - `outputs` PlanOutputStatus[]: Outputs contains the resolved plan-level outputs, populated on completion.
      - `artifact` PlanArtifactRef
        - `checksum` string: Checksum is the base64-encoded SHA-256 digest.
        - `error` string: Error is set if the artifact upload failed.
        - `ready` boolean: Ready is true once the artifact has been uploaded to S3.
        - `size` integer: Size is the artifact size in bytes.
      - `drill` string[]: Drill is the path of segments to walk inside the source step output's parsed JSON to extract the actual plan output value. Set only for drill plan outputs (e.g. ["response", "statusCode"] for "steps.send.outputs.capture.response.statusCode"). The drill is applied at download time by the apiserver — the runner records it but does not materialize the drilled value, so the source step's existing artifact (or inline Value) is reused without any extra upload.
      - `metadata` object: Metadata carries presentation hints (e.g. contentType, displayName).
      - `name` string: Name is the output field name.
      - `stepRef` PlanStepOutputRef
        - `outputName` string
        - `stepID` string
      - `value` object: Value holds the inlined output value (small text/JSON).
    - `phase` 'pending' | 'dispatching' | 'running' | 'finalizing' | 'completed' | 'failed' | 'cancelled' | 'redispatch-needed'
    - `runnerHost` string: RunnerHost is the hostname of the runner executing the plan.
    - `stepCounts` PhaseCounts
      - `completed` integer: Completed is the number of steps that finished successfully.
      - `failed` integer: Failed is the number of steps that finished with an error.
      - `init` integer: Init is the number of steps that have not yet started.
      - `running` integer: Running is the number of steps currently executing.
      - `skipped` integer: Skipped is the number of steps that were not executed.
      - `waiting` integer: Waiting is the number of steps waiting for routing context readiness.
    - `steps` PlanStepStatus[]: Steps contains the per-step runtime status.
      - `error` string: Error is a human-readable error message, populated when Phase is failed.
      - `id` string: ID is the step identifier, matching the corresponding Step.ID in the spec.
      - `inputs` PlanStepInputStatus[]: Inputs records how each of this step's declared inputs was resolved. Populated at the transition to running. Mirrors Outputs.
        - `name` string: Name is the step input name (action param or extra input).
        - `ref` string: Ref is the ref expression text when ResolvedVia == ref (e.g. "params.region", "steps.s1.outputs.token").
        - `resolvedVia` 'literal' | 'callerSecret' | 'ref' | 'default' | 'unbound'
      - `logs` PlanLogStatus[]: Logs contains the step's captured log streams (stdout, stderr), populated when the step reaches a terminal phase.
        - `artifact` PlanArtifactRef
          - `checksum` string: Checksum is the base64-encoded SHA-256 digest.
          - `error` string: Error is set if the artifact upload failed.
          - `ready` boolean: Ready is true once the artifact has been uploaded to S3.
          - `size` integer: Size is the artifact size in bytes.
        - `stream` 'stdout' | 'stderr'
        - `value` string: Value holds the log content inline if small enough.
      - `outputs` PlanStepOutputStatus[]: Outputs contains the step's output statuses, populated when Phase is completed.
        - `artifact` PlanArtifactRef
          - `checksum` string: Checksum is the base64-encoded SHA-256 digest.
          - `error` string: Error is set if the artifact upload failed.
          - `ready` boolean: Ready is true once the artifact has been uploaded to S3.
          - `size` integer: Size is the artifact size in bytes.
        - `metadata` object: Metadata carries presentation hints (e.g. contentType, displayName).
        - `name` string: Name is the output field name.
        - `value` object: Value holds the inlined output value (small text/JSON).
      - `phase` 'init' | 'waiting' | 'running' | 'completed' | 'failed' | 'skipped'
    - `updatedAt` string: UpdatedAt is when the execution status was last updated. Serialized as RFC3339.

## Other responses

- `401`: Unauthorized
- `404`: Not Found
- `409`: Conflict
- `502`: Bad Gateway

## Changes

- **2026-05-07** `942b3992433f`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/signadot/apis/signadot-api/changes/orgs/:orgName/plans/executions/:executionID/cancel/put.md)

---

[API](https://skmtc.dev/signadot/apis/signadot-api.md) - [All operations](https://skmtc.dev/signadot/apis/signadot-api/llms.txt) - [OpenAPI document](https://skmtc.dev/signadot/apis/signadot-api/revisions/5e80b0f9c718?raw)
