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

# Delete a project

`DELETE /v1/projects/{project_id}`

## Request

- Base URL: `https://api.naturali.ai`
- URL: `https://api.naturali.ai/v1/projects/{project_id}`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://api.naturali.ai/authorize`, token URL `https://api.naturali.ai/token`, scopes: `mcp:access`)

Permanently deletes the project and its backing runtime project. Fails with 409 if the runtime project still has dependent resources — remove them first, or pass `force=true` to delete the project and all its dependents (agents, providers, tools, sessions, generations, traces). Forcing is destructive and irreversible.
Requires the `owner` role — an `admin` runs the project day to day, but destroying it is the billing owner's call.
The project's spend so far is settled on the owner's balance first, and its runs this cycle stay on the owner's run allowance and statement.

## Query parameters

- `force` boolean

## Response `204`

Project deleted.

## Other responses

- `401`: Missing or invalid credentials.
- `403`: The credential is scoped to a different project, or the caller's role in the project does not carry this action.
- `404`: The resource does not exist (existence is not leaked).
- `409`: The project still has dependent resources on the runtime (retry with `force=true`).
- `502`: The project's usage could not be read to settle it before the delete (`upstream_unavailable`); nothing was deleted.

---

[API](https://skmtc.dev/naturali/apis/naturali-ai-api.md) · [All operations](https://skmtc.dev/naturali/apis/naturali-ai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/naturali/apis/naturali-ai-api/revisions/e4905b78f422?raw)
