SDDC Manager exposes a supported Tasks API for canceling some running workflows. The important word is some: a task must be in the IN_PROGRESS state and its task record must report isCancellable: true. Cancellation is not a rollback. Work already completed by the task can remain in place.

This guide uses only the public /v1/tasks and /v1/tokens endpoints documented in the current SDDC Manager API, reviewed against the VCF 9.x API selector on August 25, 2026. For an older VCF release, confirm that release’s API Explorer exposes the same operations and schema before using the commands. It does not delete internal task registrations or modify SDDC Manager’s database.

Before You Cancel a Task

Before proceeding:

  1. Confirm why the task should be canceled and record its task ID.
  2. Check the affected resources and the task’s current subtasks. A stage already in progress may need to reach a safe stopping point before cancellation completes.
  3. Use an SDDC Manager account authorized to view and cancel tasks.
  4. Run these commands from a trusted administrative system that trusts the SDDC Manager certificate. Do not disable TLS verification.
  5. Set the SDDC Manager URL. Do not add a trailing slash:
VCF_URL="https://sddc-manager.example.com"

The examples use jq to create and inspect JSON.

Obtain an Access Token

Read the credentials without placing the password in shell history or on the command line, then request a bearer token from POST /v1/tokens:

read -rp "SDDC Manager username: " VCF_USER
read -srp "SDDC Manager password: " VCF_PASSWORD
printf '\n'

VCF_TOKEN="$(
  printf '%s' "$VCF_PASSWORD" |
  jq -Rs \
    --arg username "$VCF_USER" \
    '{username: $username, password: .}' |
  curl --fail-with-body --silent --show-error \
    --request POST \
    --header 'Accept: application/json' \
    --header 'Content-Type: application/json' \
    --data-binary @- \
    "$VCF_URL/v1/tokens" |
  jq -er '.accessToken'
)"

unset VCF_PASSWORD

VCF_AUTH_HEADER="$(mktemp /tmp/vcf-task-auth.XXXXXX)"
chmod 600 "$VCF_AUTH_HEADER"
printf 'Authorization: Bearer %s\n' "$VCF_TOKEN" > "$VCF_AUTH_HEADER"
unset VCF_TOKEN

The token endpoint returns an access token and a refresh-token ID. Keep both out of logs and shared terminal transcripts. The mode-600 header file prevents the bearer token from being expanded directly into each curl process argument; remove it immediately after validation.

Find the Running Task

You can filter the task collection for tasks in progress:

curl --fail-with-body --silent --show-error \
  --header @"$VCF_AUTH_HEADER" \
  --header 'Accept: application/json' \
  "$VCF_URL/v1/tasks?taskStatus=IN_PROGRESS&pageSize=100" |
jq '.elements[] | {
  id,
  name,
  type,
  status,
  isCancellable,
  creationTimestamp,
  resources
}'

The collection can be paginated. If the response reports more than one page, query additional pages with pageNumber rather than assuming the first 100 results are complete.

Inspect the Exact Task

Set the ID, retrieve the task again immediately before cancellation, and inspect its status, cancellability, resources, subtasks, and errors:

TASK_ID="00000000-0000-0000-0000-000000000000"

TASK_JSON="$(
  curl --fail-with-body --silent --show-error \
    --header @"$VCF_AUTH_HEADER" \
    --header 'Accept: application/json' \
    "$VCF_URL/v1/tasks/$TASK_ID"
)"

jq '{
  id,
  name,
  type,
  status,
  isCancellable,
  resources,
  subTasks,
  errors
}' <<<"$TASK_JSON"

Stop here unless both of these conditions are true:

  • status is IN_PROGRESS.
  • isCancellable is true.

This check can be enforced before issuing the destructive request:

TASK_STATUS="$(
  jq -r '.status | ascii_upcase | gsub(" "; "_")' <<<"$TASK_JSON"
)"

if [[ "$TASK_STATUS" != "IN_PROGRESS" ]] ||
   [[ "$(jq -r '.isCancellable' <<<"$TASK_JSON")" != "true" ]]; then
  echo "The task is not currently eligible for cancellation."
  exit 1
fi

Cancel the Eligible Task

The supported cancellation operation is DELETE /v1/tasks/{id}:

curl --silent --show-error \
  --request DELETE \
  --header @"$VCF_AUTH_HEADER" \
  --header 'Accept: application/json' \
  --write-out '\nHTTP status: %{http_code}\n' \
  "$VCF_URL/v1/tasks/$TASK_ID"

The documented successful response is HTTP 200 with no response body. HTTP 409 means the task cannot be canceled, including when it is no longer IN_PROGRESS. HTTP 404 means the supplied task ID was not found. Do not work around these responses by deleting an internal task record.

Verify the Result

Retrieve the task after the cancellation request:

curl --fail-with-body --silent --show-error \
  --header @"$VCF_AUTH_HEADER" \
  --header 'Accept: application/json' \
  "$VCF_URL/v1/tasks/$TASK_ID" |
jq '{id, name, status, completionTimestamp, resources, errors}'

Verify that the task reaches CANCELLED. Then inspect the associated resources in SDDC Manager and the relevant product interfaces. Cancellation prevents the workflow from completing normally; it does not guarantee that completed stages were reversed.

If the task remains in progress, returns an unexpected server error, or leaves a resource in an inconsistent state, collect the task ID, error details, and reference token and contact Broadcom Support. Avoid manipulating internal task-registration endpoints or database records unless Broadcom provides a procedure for the exact product version and failure.

Remove the temporary authorization header and task data when validation is complete:

rm -f -- "$VCF_AUTH_HEADER"
unset VCF_AUTH_HEADER VCF_TOKEN VCF_USER VCF_PASSWORD TASK_JSON TASK_STATUS TASK_ID

For the authoritative request and response definitions, see Get Task and Cancel Task.