# Comments

Source: https://docs.arcweave.com/rest-api/comments
Section: REST API
Description: REST API endpoint for reading project comment threads and replies

Retrieve project discussions, including resolved threads and their replies. The REST API currently supports reading comments only.

## Endpoints

Context: Arcweave docs > REST API > Comments > Endpoints

### List project comments

Context: Arcweave docs > REST API > Comments > Endpoints > List project comments

`GET /api/v1/{hash}/comments`

The key needs **Read projects** (`project:read`), and its owner needs **View projects list** permission for the target project in the key's Team workspace. See [Permissions](https://docs.arcweave.com/rest-api/overview#permissions).

**Request**

```http title="HTTP"
GET /api/v1/{hash}/comments
```

```bash title="curl"
curl --request GET \
  --header "Authorization: Bearer YOUR_API_KEY" \
  --header "Accept: application/json" \
  "https://arcweave.com/api/v1/PROJECT_HASH/comments"
```

The unversioned `/api/{hash}/comments` route is an alias. Use `/api/v1` for new integrations.

There are no filtering or pagination parameters. The response includes threads from every board, including resolved threads, regardless of the token owner's personal comment filters. Reading comments does not mark them as read or change personal comment settings.

This request counts toward the [overall workspace API quota](https://docs.arcweave.com/rest-api/overview#rate-limits) of 60 requests per minute per purchased seat.

**Response**

Returns `200 OK` with an array of threads. Threads and their nested replies retain their stored order. An empty project discussion returns `[]`.

```json
[
  {
    "id": "thread-1",
    "author": {
      "id": 42,
      "fullName": "Alex Morgan"
    },
    "content": "<p>Can we clarify this character's motivation?</p>",
    "createdAt": "2026-09-16T09:00:00.000Z",
    "updatedAt": null,
    "resolved": false,
    "position": {
      "id": "board-1",
      "type": "boards",
      "x": 120,
      "y": 240
    },
    "replies": [
      {
        "id": "reply-1",
        "author": {
          "id": 57,
          "fullName": null
        },
        "content": "<p>I'll add some context to the opening scene.</p>",
        "createdAt": "2026-09-16T09:15:00.000Z",
        "updatedAt": null
      }
    ]
  }
]
```

Fields shared by threads and replies:

| Field             | Type           | Description                                                                                                                                        |
| ----------------- | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`              | String         | Comment ID.                                                                                                                                        |
| `author.id`       | Number         | Author's user ID, retained even when their name is unavailable.                                                                                    |
| `author.fullName` | String or null | Current name for a workspace member or a guest of this project. `null` when the author no longer participates or their user record is unavailable. |
| `content`         | String         | Comment content as HTML.                                                                                                                           |
| `createdAt`       | String or null | Creation timestamp, when available.                                                                                                                |
| `updatedAt`       | String or null | Last edit timestamp, or `null` when no edit timestamp is stored.                                                                                   |

Additional thread fields:

| Field      | Type    | Description                                                                                       |
| ---------- | ------- | ------------------------------------------------------------------------------------------------- |
| `resolved` | Boolean | Whether the thread is resolved.                                                                   |
| `position` | Object  | Board location: `id` is the board ID, `type` is `boards`, and `x` and `y` are canvas coordinates. |
| `replies`  | Array   | Replies in their stored order, or `[]` when there are none.                                       |

The response reflects the current project comments, including recent edits. It does not include personal read/unread state or project version metadata.

## Common errors

Context: Arcweave docs > REST API > Comments > Common errors

| Status | Meaning                                                                       |
| ------ | ----------------------------------------------------------------------------- |
| `401`  | Missing or invalid API key.                                                   |
| `403`  | API access, token permission, workspace access, or project permission denied. |
| `404`  | Project not found.                                                            |
| `429`  | Workspace API quota exhausted.                                                |
