---
title: "Delete a workflow"
method: DELETE
path: "/v1/workflows/{workflowId}"
tags: ["Workflows"]
---

# Delete a workflow

`DELETE /v1/workflows/{workflowId}`

Delete a workflow. Successful deletion returns `204 No Content`. If the workflow is currently sending or has queued contacts, Loops returns `409 Conflict` with a message instead of deleting. Retry with `confirmDelete: true` to delete the workflow, stop sending, and cancel queued contacts.

## Request body

- DeleteWorkflowRequest
  - `expectedRevisionId` string, nullable, required — The workflow revision token returned by the latest workflow read or mutation. Older workflows may return `null` before their first revision-aware mutation; pass `null` back as `expectedRevisionId` in that case. If the token is stale, the API returns a `409 Conflict` error.
  - `confirmDelete` boolean — Set to `true` after a confirmation-required `409 Conflict` response to confirm deleting a sending workflow or a workflow with queued contacts.

## Response `204`

Workflow deleted. No response body.

## Other responses

- `400` — Invalid `workflowId`, request body, or delete target.
- `401` — Invalid API key.
- `404` — Workflow not found. Deleted workflows are returned as not found.
- `405` — Wrong HTTP request method.
- `409` — `expectedRevisionId` is stale, or workflow deletion requires confirmation because the workflow is currently sending or has queued contacts.

## Changes

> 10 revisions in range; 1 not diffed.

- **2026-09-01** `e3230f79929e` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/loops/apis/loops-openapi-spec/changes/v1/workflows/:workflowId/delete.md)

---

[API](https://skmtc.dev/loops/apis/loops-openapi-spec.md) · [All operations](https://skmtc.dev/loops/apis/loops-openapi-spec/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/loops/loops-openapi-spec/revisions/e3230f79929e/schema)
