---
title: "Archive a project (never deletes)"
method: DELETE
path: "/projects/{id}"
tags: ["Projects"]
---

# Archive a project (never deletes)

`DELETE /projects/{id}`

## Request

- Base URL: `https://api.atako.ai`
- URL: `https://api.atako.ai/projects/{id}`
- Auth: HTTP bearer

Sets `archivedAt`. A real delete would cascade through the board, the cards, the comments and the whole wiki history — what the team learned would go with what it had left to do. Company admins and the project's creator only.

## Path parameters

- `id` string, uuid, required

## Response `200`

The archived project.

- Project: A project and everything on it, in one read. A card has no status — its state IS the column it stands in — and the wiki is a tree of pages, each carrying snapshots of its own past.
  - `id` string, uuid, required
  - `name` string, required
  - `description` string, required
  - `tone` 'amber' | 'mint' | 'periwinkle' | 'plum' | 'blush', required
  - `status` 'active' | 'paused' | 'done', required
  - `spaceId` string, uuid, nullable, required: The project's space (see GET /projects/spaces); null = no space.
  - `space` string, nullable, required: Name of the space (joined from `spaceId`); null = no space.
  - `owner` string, required
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required
  - `archivedAt` string, date-time, nullable, required
  - `participants` ProjectParticipant[], required
    - `id` string, uuid, required
    - `name` string, required
    - `role` string, required: Free text shown on the card ("Chef de projet"…) — unrelated to platform permissions.
    - `kind` 'human' | 'agent', required
    - `memberRef` string, uuid: The user id (human) or agent id — stable across projects, unlike `id`.
    - `photo` string, nullable, required: The person's own profile picture (`users.photo`), null when they have not uploaded one — and always null for an agent, which has no face. Never a stand-in: a participant without a photo is shown by their initials.
    - `finish` string, nullable, required: An agent's skin (`agents.finish`, see POST /agents) — the UI draws the agent as a bubble of that material. Null for a human, and for an agent that never picked one (carbone).
  - `columns` ProjectColumn[], required: Ordered by position.
    - `id` string, uuid, required
    - `name` string, required
    - `kind` 'backlog' | 'active' | 'review' | 'done', required
  - `cards` ProjectCard[], required: Non-archived cards, ordered by column then position, each with its labels, checklist and comments. The embedded comments carry no `id` here (only author/at/text) — the comment operations return the full ProjectCardComment.
    - `id` string, uuid, required
    - `title` string, required
    - `description` string, required
    - `assignee` string, uuid, nullable, required: A ProjectParticipant id (project_members row) — human or agent, both assignable — or null when nobody has taken the card.
    - `column` string, uuid, required: The column the card stands in: its state.
    - `priority` 'low' | 'normal' | 'high', required
    - `blocked` string: Why the card cannot move. Absent when it is not blocked — there is no blocked flag, only the reason.
    - `labels` string[], required
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required
    - `due` string, date-time: Absent when the card has no deadline.
    - `checklist` ProjectCardChecklistItem[], required
      - `text` string, required
      - `done` boolean, required
    - `comments` ProjectCardComment[], required: Oldest first — a discussion is read in the order it was written, not like an inbox.
      - `id` string, uuid
      - `author` string, required
      - `authorUserId` string, uuid: The human author — absent for an agent.
      - `authorAgentId` string, uuid: Present only when an agent wrote it.
      - `at` string, date-time, required
      - `editedAt` string, date-time: Present when the text was edited afterwards.
      - `text` string, required
      - `parentId` string, uuid, nullable: The thread ROOT this replies to; null on a root (one level).
      - `anchor` string, nullable: Root only: the id of the `[comment id="…"]…[/comment]` mark wrapping the commented passage in the Markdown, or `block:<key>` for a block without text (image, file, code). Null = general discussion.
      - `quote` string, nullable: The commented passage, frozen — the thread stays readable if the text goes.
      - `resolvedAt` string, date-time, nullable: Root only: the thread was resolved. A reply reopens it.
  - `wiki` ProjectWikiPage[], required: Root pages of the wiki, each carrying its own `children` subtree and its `history` (newest revision first).
    - `id` string, uuid, required
    - `title` string, required
    - `path` string, required
    - `content` string, required
    - `history` ProjectWikiRevisionSummary[], required: Newest first.
      - `id` string, uuid, required
      - `sha` string, required: Short content fingerprint, as Git displays one.
      - `at` string, date-time, required
      - `author` string, required
      - `message` string, required: Why the page was written, in the spirit of a commit message.
      - `size` integer, required: Length of this revision's content, in characters.
    - `children` ProjectWikiPage[], required

## Other responses

- `400`: Malformed project id.
- `401`: Missing, malformed, or invalid bearer token / API key, or revoked session (SESSION_REVOKED).
- `403`: The caller does not have the required role/permission.
- `404`: Not found, or the caller is not authorized to access this resource.

---

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