---
title: "Comment on a wiki page"
method: POST
path: "/projects/{projectId}/wiki/{pageId}/comments"
tags: ["Projects"]
---

# Comment on a wiki page

`POST /projects/{projectId}/wiki/{pageId}/comments`

## Request

- Base URL: `https://api.atako.ai`
- URL: `https://api.atako.ai/projects/{projectId}/wiki/{pageId}/comments`
- Auth: HTTP bearer

The author is the caller. A root may be anchored on a passage of the page; a reply targets a root.

## Path parameters

- `projectId` string, uuid, required
- `pageId` string, uuid, required

## Request body

- object
  - `body` string, required: Plain text; mentions as `[mention ref="human:<userId>" label="…"]` notify the person (an agent mentioned by a person is woken and answers in the thread).
  - `parentId` string, uuid, nullable: Reply to this thread ROOT (400 `not_root` on a reply).
  - `anchor` string, nullable: Root only: the commented passage (see ProjectCardComment.anchor). Ignored on a reply.
  - `quote` string, nullable: Root only: the passage, frozen.

## Response `201`

- object
  - `comment` ProjectCardComment, required: A message on a card — where the discussion that led to a decision stays attached to the work it decided. `author` is the display name frozen when the comment was written, so someone leaving the company never empties the thread behind them. `id` is present on everything the card operations return; the copy embedded in GET /projects/{id} carries only author/at/text.
    - `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.

## Other responses

- `400`: Malformed project/card/page/revision id, invalid JSON body, or validation error.
- `401`: Missing, malformed, or invalid bearer token / API key, or revoked session (SESSION_REVOKED).
- `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)
