---
title: "Delete a project (two-step; ?confirm=true, ?dryRun=true)"
method: DELETE
path: "/projects/{projectId}"
tags: ["Projects"]
---

# Delete a project (two-step; ?confirm=true, ?dryRun=true)

`DELETE /projects/{projectId}`

Deletes the project (child org) and cascades across its whole
entity tree. Follows the v2 deletes convention — deliberately
two-step:

1. Without `?confirm=true` (or with `?dryRun=true`) → HTTP 200
   with the impact preview
   `{ id, name, confirmationRequired: true, willDelete: { workspaces, tables, rows } }`;
   nothing removed.
2. With `?confirm=true` → deletes and returns
   `{ id, name, deleted: true }`.

## Query parameters

- `confirm` boolean
- `dryRun` boolean

## Response `200`

The impact preview (unconfirmed / dryRun) or the delete receipt (confirmed).

- union
  - ProjectDeletePreview — Impact preview returned by `DELETE /projects/{projectId}` when `?confirm=true` is absent (or `?dryRun=true` is set). Nothing has been removed.
    - `id` string, uuid, required
    - `name` string, required
    - `confirmationRequired` true, required
    - `willDelete` object, required
      - `workspaces` integer, required
      - `tables` integer, required
      - `rows` integer, required
  - object
    - `id` string, uuid, required
    - `name` string, required
    - `deleted` true, required

## Other responses

- `404` — Project not found (unknown, cross-parent, or deleted — no existence leak)

---

[API](https://skmtc.net/origami/apis/origami-agent-api.md) · [All operations](https://skmtc.net/origami/apis/origami-agent-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/origami/origami-agent-api/versions/8083ad7fe081/schema)
