# List notes in a project

`GET /api/project/{projectId}/note`

URL: https://repsona.com/api/get-project-projectid-note

Returns notes of the project page by page. Use parent_id to list child notes (a note id) or only top-level notes (root). Ordered by tree order (sortOrder) when parent_id is given, otherwise by id.

## Parameters

| name | in | type | required | description |
| --- | --- | --- | --- | --- |
| `projectId` | path | integer | required | ID of the project. |
| `page` | query | integer |  | Page number, starting at 1. |
| `limit` | query | integer |  | Items per page (up to 500). |
| `parent_id` | query | "root" \| integer |  | Note id, or "root" for top-level notes only |
| `tag_ids` | query | string |  | Comma-separated ids (any match) |

## Request

```sh
curl -X GET "https://<space>.repsona.com/api/project/{projectId}/note" \
  -H "Authorization: Bearer $REPSONA_API_KEY"
```

## Responses

- 200: { notes, page, limit, hasMore }
- 400: Invalid query parameters
- 401: Authentication is required
- 403: Not a project member
- 404: Project not found

## Example response

```json
{
  "notes": [
    {
      "id": 187,
      "parentId": null,
      "projectId": 288,
      "spaceId": 603,
      "name": "Release checklist (v1)",
      "sortOrder": null,
      "isWip": false,
      "createdAt": 1793662619233,
      "updatedAt": 1793662619295,
      "deletedAt": null,
      "tags": [
        {
          "id": 86,
          "name": "launch",
          "color": "#3b82f6"
        },
        {
          "id": 87,
          "name": "checklist",
          "color": "#3b82f6"
        }
      ],
      "description": "## Before launch\n\n- Run the full regression suite\n- Confirm the redirect map with marketing\n- Announce the maintenance window\n- Back up the old site"
    }
  ],
  "page": 1,
  "limit": 20,
  "hasMore": false
}
```
