---
title: "Delete a project"
method: DELETE
path: "/v1/projects/{id}"
tags: ["Projects"]
---

# Delete a project

`DELETE /v1/projects/{id}`

## Request

- Base URL: `http://localhost:9998`
- URL: `http://localhost:9998/v1/projects/{id}`
- Auth: HTTP bearer

Without `cascade`, deletes an empty project (`not_empty` otherwise). With
`cascade=true`, the person's confirmed delete also removes the project's chats,
workbenches, media copies and knowledge; it is refused as a whole, deleting nothing,
while a turn runs on one of its chats (`run_in_progress`) or when an Asset outside
the project was made from one of its workbenches or copies (`has_descendants`). The
default project is never deleted (`default_project`). Mirrors `project_delete`; only
this route carries `cascade`.

## Path parameters

- `id` string, required

## Query parameters

- `expectedRevision` integer
- `cascade` boolean

## Response `200`

The deleted project's id

- WireProjectDeleteResponse
  - `id` string, required
  - `deleted` boolean, required

## Other responses

- `400`: Invalid request
- `404`: No project with that id
- `409`: `revision_conflict`, `default_project`, `not_empty`, `run_in_progress` or `has_descendants`.

---

[API](https://skmtc.dev/modelpiper/apis/toolpiper-api.md) · [All operations](https://skmtc.dev/modelpiper/apis/toolpiper-api/llms.txt) · [OpenAPI document](https://skmtc.dev/modelpiper/apis/toolpiper-api/revisions/6722bf56385c?raw)
