---
title: runs_cancel
description: Cancel a queued or running run, same as POST /v1/runs/{id}/cancel. Already-settled runs come back unchanged.
---

<WorksIn />

Cancel a queued or running run, the same as `POST /v1/runs/{id}/cancel`. Marked destructive
because it changes a run's state, not because it costs money. Returns the run's current state
either way: an already-settled run comes back unchanged, never an error.

## Inputs

| Argument | Type | Required | Default | Limits | Meaning |
| --- | --- | --- | --- | --- | --- |
| `runId` | string | Yes | - | - | A run id from [`run`](/mcp-tools/run) or [`runs_list`](/mcp-tools/runs-list). |

## Example call

```json
{
  "runId": "run_807967cc4b7f468fa5d7dbcaefdee859"
}
```

## Example answer

Abridged: a cancelled run reports `status: "stopped"`; a run that had already settled comes back
with its settled status unchanged.

```json
{
  "runId": "run_807967cc4b7f468fa5d7dbcaefdee859",
  "endpointId": "linkup-search",
  "status": "stopped",
  "completedAt": "2026-09-24T21:14:37.377607+00:00"
}
```

## Errors

A missing `runId` returns [`validation_error`](/errors/rest-errors#validation_error) naming it. An unknown `runId` in this workspace
returns [`not_found`](/errors/rest-errors#not_found) with the id you sent. Cancelling a run that already settled is not an error:
it returns that run's settled state as is.

## REST and CLI

- REST: [`POST /v1/runs/{runId}/cancel`](/reference/runs/post-v1-runs-runid-cancel)
- CLI: `looot runs cancel <run-id>`

<Related />
