---
title: "Delete Runs"
method: POST
path: "/api/v1/runs/delete"
tags: ["Runs"]
---

# Delete Runs

`POST /api/v1/runs/delete`

Deletes up to 250 runs in one fail-soft, non-transactional request. Each run is processed independently. A valid batch returns `200` even when some items fail; inspect `results` and `summary` for per-run outcomes. Invalid request bodies are rejected before mutating any run.

## Request body

- BatchDeleteRunsRequest — Run IDs to delete as one bounded fail-soft batch.
  - `run_ids` string[], required — Run IDs to process, in result order.
  - `force` boolean — Whether to force deletion of active runs. Defaults to `false`.

## Response `200`

Batch processed

- BatchDeleteRunsResponse — Per-run results for a fail-soft batch delete request.
  - `results` BatchDeleteRunsResult[], required — Results ordered exactly like the request `run_ids`.
    - `run_id` string, required — Run ID from the request item.
    - `ok` boolean, required — Whether this item succeeded.
    - `outcome` 'deleted' | 'already_absent' | 'sandbox_preserved' | 'conflict' | 'error', required — Machine-readable item outcome.
    - `sandbox` DeleteRunSandbox
      - `provider` string, required — Sandbox provider kind. `local`, `docker`, and `daytona` are bundled with the server; any other value names a sandbox-driver plugin configured under `server.sandbox.providers.<kind>`.
      - `id` string, required
    - `error` ErrorResponseEntry — A single error entry in an error response.
      - `status` string, required — HTTP status code as a string.
      - `title` string, required — Short error classification.
      - `detail` string, required — Human-readable error description.
      - `code` string — Optional machine-readable error code for structured client handling.
      - `request_id` string, uuid — Server-generated request identifier; matches the x-request-id response header.
  - `summary` BatchDeleteRunsSummary, required — Aggregate counts for a batch delete request.
    - `requested` integer, required — Number of requested run IDs.
    - `succeeded` integer, required — Number of item results with `ok=true`.
    - `failed` integer, required — Number of item results with `ok=false`.

## Other responses

- `400` — Invalid batch request
- `401` — Not authenticated
- `500` — Request-level server error

## Changes

- **2026-09-10** `478e995209e9` — 4 info
  - removed the `daytona` enum value from the `results/items/sandbox/provider` response property for the response status `200`
  - removed the `docker` enum value from the `results/items/sandbox/provider` response property for the response status `200`
  - removed the `local` enum value from the `results/items/sandbox/provider` response property for the response status `200`
  - the `results/items/sandbox/provider` response's property pattern `^[a-z0-9]([a-z0-9-]{0,62}[a-z0-9])?$` was added for the status `200`
- **2026-09-09** `64d7e2ed03af` — 3 warning, 1 info
  - added the new `daytona` enum value to the `results/items/sandbox/provider` response property for the response status `200`
  - added the new `docker` enum value to the `results/items/sandbox/provider` response property for the response status `200`
  - added the new `local` enum value to the `results/items/sandbox/provider` response property for the response status `200`
  - the `results/items/sandbox/provider` response's property pattern `^[a-z0-9]([a-z0-9-]{0,62}[a-z0-9])?$` was removed for the status `200`
- …earlier changes not shown

[Full history](https://skmtc.dev/fabro-sh/apis/fabro-run-api/changes/api/v1/runs/delete/post.md)

---

[API](https://skmtc.dev/fabro-sh/apis/fabro-run-api.md) · [All operations](https://skmtc.dev/fabro-sh/apis/fabro-run-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fabro-sh/apis/fabro-run-api/revisions/1258a4cf33df?raw)
