# Comments

The actions of the comment group, with their input fields and their names on every transport.

16 actions: 16 on the command line, 16 as MCP tools, 16 as HTTP endpoints and 16 in the page.

## comment.add

**Comment.** Starts a thread at an anchor (the deck, a slide, a block, a text range, a table cell or the notes) with a plain text body whose \{@n} tokens name its mentions, optionally assigned; server side.

| Field          | Type                                                     | Required | Description                                                                                                                                                                 |
| -------------- | -------------------------------------------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `anchor`       | object \| object \| object \| object \| object \| object | yes      | deck, slide:\<id>, \<slide>#\<block>, \<slide>#\<block>/\<path>:\<start>-\<end>, \<slide>#\<block>/cell:\<r>,\<c> or notes:\<slide> on the CLI; the anchor object elsewhere |
| `body`         | object                                                   | yes      |                                                                                                                                                                             |
| `assignee`     | object \| object                                         | no       |                                                                                                                                                                             |
| `baseRevision` | integer                                                  | no       | The comments revision the caller read; a stale value never refuses (SPEC-3 5.2)                                                                                             |

* Command line: `turboslide comment add <anchor> -m <text> --mention <who> --assign <who>`
* MCP tool: `deck_add_comment`
* HTTP: `POST /api/actions/comment.add`
* Runs on: command line, MCP, HTTP, page.
* Changes the presentation: yes; send the `baseRevision` you read.

## comment.reply

**Reply.** Appends a reply to a thread; server side.

| Field          | Type    | Required | Description                                                                     |
| -------------- | ------- | -------- | ------------------------------------------------------------------------------- |
| `threadId`     | string  | yes      |                                                                                 |
| `body`         | object  | yes      |                                                                                 |
| `baseRevision` | integer | no       | The comments revision after the write, the number comment.list \{ since } takes |

* Command line: `turboslide comment reply <threadId> -m <text> --mention <who>`
* MCP tool: `deck_reply_comment`
* HTTP: `POST /api/actions/comment.reply`
* Runs on: command line, MCP, HTTP, page.
* Changes the presentation: yes; send the `baseRevision` you read.

## comment.edit

**Edit comment.** Rewrites a comment’s body, its author only; 409 with the current thread when the thread moved since expectedUpdatedAt.

| Field               | Type    | Required | Description                                                                     |
| ------------------- | ------- | -------- | ------------------------------------------------------------------------------- |
| `threadId`          | string  | yes      |                                                                                 |
| `commentId`         | string  | yes      |                                                                                 |
| `body`              | object  | yes      |                                                                                 |
| `expectedUpdatedAt` | string  | yes      | The thread’s updatedAt the caller read                                          |
| `baseRevision`      | integer | no       | The comments revision after the write, the number comment.list \{ since } takes |

* Command line: `turboslide comment edit <threadId> <commentId> -m <text>`
* MCP tool: `deck_edit_comment`
* HTTP: `POST /api/actions/comment.edit`
* Runs on: command line, MCP, HTTP, page.
* Changes the presentation: yes; send the `baseRevision` you read.

## comment.delete

**Delete comment.** Tombstones a comment, keeping its replies; the first comment’s tombstone keeps the thread; restore brings it back within 30 days.

| Field          | Type    | Required | Description                                                                     |
| -------------- | ------- | -------- | ------------------------------------------------------------------------------- |
| `threadId`     | string  | yes      |                                                                                 |
| `commentId`    | string  | yes      |                                                                                 |
| `restore`      | boolean | no       | Undo a deletion within 30 days                                                  |
| `baseRevision` | integer | no       | The comments revision after the write, the number comment.list \{ since } takes |

* Command line: `turboslide comment delete <threadId> <commentId> --restore`
* MCP tool: `deck_delete_comment`
* HTTP: `POST /api/actions/comment.delete`
* Runs on: command line, MCP, HTTP, page.
* Changes the presentation: yes; send the `baseRevision` you read.

## comment.resolve

**Resolve.** Marks a thread resolved; last writer wins.

| Field          | Type    | Required | Description                                                                     |
| -------------- | ------- | -------- | ------------------------------------------------------------------------------- |
| `threadId`     | string  | yes      |                                                                                 |
| `baseRevision` | integer | no       | The comments revision after the write, the number comment.list \{ since } takes |

* Command line: `turboslide comment resolve <threadId>`
* MCP tool: `deck_resolve_comment`
* HTTP: `POST /api/actions/comment.resolve`
* Runs on: command line, MCP, HTTP, page.
* Changes the presentation: yes; send the `baseRevision` you read.

## comment.reopen

**Re-open.** Reopens a resolved thread; last writer wins.

| Field          | Type    | Required | Description                                                                     |
| -------------- | ------- | -------- | ------------------------------------------------------------------------------- |
| `threadId`     | string  | yes      |                                                                                 |
| `baseRevision` | integer | no       | The comments revision after the write, the number comment.list \{ since } takes |

* Command line: `turboslide comment reopen <threadId>`
* MCP tool: `deck_reopen_comment`
* HTTP: `POST /api/actions/comment.reopen`
* Runs on: command line, MCP, HTTP, page.
* Changes the presentation: yes; send the `baseRevision` you read.

## comment.assign

**Assign.** Assigns a thread to a principal or an invitation (an agent principal is assignable), or clears the assignment with null; last writer wins.

| Field          | Type                     | Required | Description                                                                     |
| -------------- | ------------------------ | -------- | ------------------------------------------------------------------------------- |
| `threadId`     | string                   | yes      |                                                                                 |
| `assignee`     | object \| object \| null | yes      |                                                                                 |
| `baseRevision` | integer                  | no       | The comments revision after the write, the number comment.list \{ since } takes |

* Command line: `turboslide comment assign <threadId> <who> --clear`
* MCP tool: `deck_assign_comment`
* HTTP: `POST /api/actions/comment.assign`
* Runs on: command line, MCP, HTTP, page.
* Changes the presentation: yes; send the `baseRevision` you read.

## comment.done

**Mark as done.** The assignee marks the thread done; last writer wins.

| Field          | Type    | Required | Description                                                                     |
| -------------- | ------- | -------- | ------------------------------------------------------------------------------- |
| `threadId`     | string  | yes      |                                                                                 |
| `baseRevision` | integer | no       | The comments revision after the write, the number comment.list \{ since } takes |

* Command line: `turboslide comment done <threadId>`
* MCP tool: `deck_done_comment`
* HTTP: `POST /api/actions/comment.done`
* Runs on: command line, MCP, HTTP, page.
* Changes the presentation: yes; send the `baseRevision` you read.

## comment.react

**React.** Toggles the caller’s reaction on a comment from the 24 emoji palette; reactions are a set per emoji keyed by principal.

| Field          | Type             | Required | Description                                                                     |
| -------------- | ---------------- | -------- | ------------------------------------------------------------------------------- |
| `threadId`     | string           | yes      |                                                                                 |
| `commentId`    | string           | yes      |                                                                                 |
| `emoji`        | one of 24 values | yes      |                                                                                 |
| `on`           | boolean          | yes      |                                                                                 |
| `baseRevision` | integer          | no       | The comments revision after the write, the number comment.list \{ since } takes |

* Command line: `turboslide comment react <threadId> <commentId> <emoji> --off`
* MCP tool: `deck_react_comment`
* HTTP: `POST /api/actions/comment.react`
* Runs on: command line, MCP, HTTP, page.
* Changes the presentation: yes; send the `baseRevision` you read.

## comment.list

**Comments.** The threads of the deck or a slide with their anchors resolved against the current document, filtered by block, state, assignment to the caller, author, search text or revision; 403 without readComments.

| Field            | Type                          | Required | Description                                        |
| ---------------- | ----------------------------- | -------- | -------------------------------------------------- |
| `slideId`        | string                        | no       |                                                    |
| `blockId`        | string                        | no       |                                                    |
| `state`          | "open" \| "resolved" \| "all" | no       | open unless set                                    |
| `forMe`          | boolean                       | no       | Threads that mention or are assigned to the caller |
| `author`         | string                        | no       |                                                    |
| `search`         | string                        | no       |                                                    |
| `includeDeleted` | boolean                       | no       | Keep the tombstones in the answer                  |
| `since`          | integer                       | no       | Threads touched after this comments revision       |
| `limit`          | integer                       | no       |                                                    |

* Command line: `turboslide comments <slideId> --block <blockId> --state <state> --for-me --author <author> --search <search> --since <since>`
* MCP tool: `deck_list_comments`
* HTTP: `POST /api/actions/comment.list`
* Runs on: command line, MCP, HTTP, page.
* Changes the presentation: no.

## comment.get

**Comment thread.** One thread with its anchor resolved against the current document.

| Field      | Type   | Required | Description |
| ---------- | ------ | -------- | ----------- |
| `threadId` | string | yes      |             |

* Command line: `turboslide comment get <threadId>`
* MCP tool: `deck_get_comment`
* HTTP: `POST /api/actions/comment.get`
* Runs on: command line, MCP, HTTP, page.
* Changes the presentation: no.

## comment.link

**Link to comment.** The editor and the view URLs that open the deck on the thread’s slide with its card expanded; runs in the page on the window transport.

| Field      | Type   | Required | Description |
| ---------- | ------ | -------- | ----------- |
| `threadId` | string | yes      |             |

* Command line: `turboslide comment link <threadId>`
* MCP tool: `deck_comment_link`
* HTTP: `POST /api/actions/comment.link`
* Runs on: command line, MCP, HTTP, page.
* Changes the presentation: no.

## notification.list

**Notifications.** The caller’s inbox, newest first: mentions, replies, assignments, resolutions, reactions, access requests and grants, coalesced per thread inside a 15 minute window.

| Field    | Type    | Required | Description                           |
| -------- | ------- | -------- | ------------------------------------- |
| `unread` | boolean | no       | Unread records only                   |
| `since`  | string  | no       | An ISO time; records updated after it |
| `limit`  | integer | no       |                                       |

* Command line: `turboslide notifications --unread --since <since>`
* MCP tool: `deck_list_notifications`
* HTTP: `POST /api/actions/notification.list`
* Runs on: command line, MCP, HTTP, page.
* Changes the presentation: no.

## notification.markRead

**Mark as read.** Marks the named notifications read, or every one; answers the unread count.

| Field | Type      | Required | Description |
| ----- | --------- | -------- | ----------- |
| `ids` | string\[] | no       |             |
| `all` | true      | no       |             |

* Command line: `turboslide notifications read <ids> --all`
* MCP tool: `deck_mark_notifications_read`
* HTTP: `POST /api/actions/notification.markRead`
* Runs on: command line, MCP, HTTP, page.
* Changes the presentation: yes.

## notification.settings

**Notification settings.** Reads or writes the caller’s per deck level (All comments, Comments for you, None), the email switch and, for the owner, whether commenters read the Activity panel; a read when every field is absent.

| Field                   | Type                        | Required | Description |
| ----------------------- | --------------------------- | -------- | ----------- |
| `level`                 | "all" \| "forYou" \| "none" | no       |             |
| `email`                 | boolean                     | no       |             |
| `activityForCommenters` | boolean                     | no       |             |

* Command line: `turboslide notifications settings --level <level> --email --activity-for-commenters`
* MCP tool: `deck_notification_settings`
* HTTP: `POST /api/actions/notification.settings`
* Runs on: command line, MCP, HTTP, page.
* Changes the presentation: yes.

## activity.list

**Activity.** The merged activity feed of the deck: version windows, comment events, share events, requests, role changes, renames, restores, named versions, exports, imports and trash; editors and the owner, commenters when allowed.

| Field   | Type                                                                                                                               | Required | Description |
| ------- | ---------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------- |
| `since` | string                                                                                                                             | no       | An ISO time |
| `kinds` | "version" \| "comment" \| "share" \| "request" \| "role" \| "rename" \| "restore" \| "named" \| "export" \| "import" \| "trash"\[] | no       |             |
| `limit` | integer                                                                                                                            | no       |             |

* Command line: `turboslide activity --since <since> --kind <kinds>`
* MCP tool: `deck_list_activity`
* HTTP: `POST /api/actions/activity.list`
* Runs on: command line, MCP, HTTP, page.
* Changes the presentation: no.
