> For the complete documentation index, see [llms.txt](https://docs.monolithforensics.com/monolith/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.monolithforensics.com/monolith/monolith-api/notes-api/get-notes.md).

# Get Notes

Retrieve notes — a single note by UUID, or a filtered, paginated list. Supports full-text search with match snippets and a tree view that nests notes under their parent folders.

```
GET /v1/notes
GET /v1/notes/{uuid}
```

## Query parameters

All parameters are optional.

| Parameter         | Type                | Default | Description                                                                                                                 |
| ----------------- | ------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------- |
| `uuid`            | string or string\[] | —       | Return only the note(s) with these UUIDs. Also settable as the path parameter.                                              |
| `case_uuid`       | string              | —       | Notes belonging to this case.                                                                                               |
| `case_id`         | number              | —       | Notes belonging to this case (numeric id).                                                                                  |
| `case_note_id`    | number              | —       | A note by its numeric id.                                                                                                   |
| `created_by_id`   | number              | —       | Notes authored by this user id.                                                                                             |
| `updated_by_id`   | number              | —       | Notes last updated by this user id.                                                                                         |
| `evidence_uuid`   | string              | —       | Notes linked to this evidence item.                                                                                         |
| `object_id`       | string              | —       | Notes linked to this object (see [Note Object Links](/monolith/monolith-api/notes-api/note-object-links.md)).               |
| `is_folder`       | boolean             | —       | `true` returns only folders, `false` only notes.                                                                            |
| `include_content` | boolean             | `false` | Include the HTML body (`note_data`) and attachments in each result. Off by default to keep list responses small.            |
| `search`          | string              | —       | Full-text search on the note text. Matching notes include a `snippets` array of short excerpts around each match.           |
| `tree`            | boolean             | `false` | Return notes nested under their parent folders via a `children` array instead of a flat list.                               |
| `sort_by`         | string              | —       | One of `created_on`, `updated_on`, `case_note_id`, `uuid`, `case_id`, `parent_id`, `is_folder`, `object_type`, `object_id`. |
| `sort_dir`        | string              | `asc`   | `asc` or `desc`.                                                                                                            |
| `page`            | number              | `1`     | Page number (1-based).                                                                                                      |
| `page_size`       | number              | `3000`  | Results per page, max `3000`.                                                                                               |

Boolean parameters accept `true`/`false`/`1`/`0`.

## Response — `200 OK`

```json
{
  "data": [
    {
      "case_note_id": 118,
      "uuid": "0f8fad5b-d9cb-469f-a165-70867728950e",
      "note_tag": "Initial Triage",
      "note_data": "<p>Device received and photographed.</p>",
      "path": "/Triage/Initial Triage",
      "parent_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "is_folder": false,
      "created_on": "2026-08-01T15:04:05.000Z",
      "updated_on": "2026-08-02T09:12:44.000Z",
      "attachments": [
        { "uuid": "mhvXdrZT4jP5T8vBxuvm75", "key": "Cases/2026-0042/Documents/Note Images/mhvXdrZT4jP5T8vBxuvm75.png" }
      ],
      "linked_case": {
        "case_id": 42,
        "uuid": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d"
      },
      "linked_object": {
        "type": "evidence",
        "uuid": "e7c40f6e-2f19-4b52-9d7a-52a5a24c3f10",
        "name": "EV-2026-0042-001"
      },
      "created_by": {
        "user_id": 7,
        "email": "examiner@example.com",
        "first_name": "Alex",
        "last_name": "Rivera",
        "full_name": "Alex Rivera",
        "title": "Forensic Examiner"
      },
      "updated_by": {
        "user_id": 7,
        "email": "examiner@example.com",
        "first_name": "Alex",
        "last_name": "Rivera",
        "full_name": "Alex Rivera",
        "title": "Forensic Examiner"
      }
    }
  ],
  "page": 1,
  "next_page": null,
  "page_size": 3000,
  "total": 1
}
```

Notes on the response shape:

* `note_data` is only present when `include_content=true`. Image `src` attributes inside it are rewritten to short-lived signed URLs on every read — don't persist them; re-fetch the note when you need fresh links.
* `snippets` is only present on `search` queries.
* With `tree=true`, top-level items gain a `children` array containing their nested notes/folders.

## Examples

### Get a single note with its content

```python
response = session.get(
    f"{BASE_URL}/notes/0f8fad5b-d9cb-469f-a165-70867728950e",
    params={"include_content": "true"},
)
note = response.json()["data"][0]
print(note["note_tag"])
print(note["note_data"])
```

### List all notes in a case

```python
response = session.get(f"{BASE_URL}/notes", params={
    "case_uuid": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
    "sort_by": "updated_on",
    "sort_dir": "desc",
})
for note in response.json()["data"]:
    print(f"{note['updated_on']}  {note['note_tag']}")
```

### Search notes and print match snippets

```python
response = session.get(f"{BASE_URL}/notes", params={
    "case_uuid": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
    "search": "chain of custody",
})
for note in response.json()["data"]:
    print(note["note_tag"])
    for snippet in note.get("snippets", []):
        print(f"  ...{snippet}...")
```

### Fetch a case's notes as a folder tree

```python
response = session.get(f"{BASE_URL}/notes", params={
    "case_uuid": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
    "tree": "true",
})

def print_tree(nodes, depth=0):
    for node in nodes:
        marker = "📁" if node["is_folder"] else "📄"
        print("  " * depth + f"{marker} {node['note_tag']}")
        print_tree(node.get("children", []), depth + 1)

print_tree(response.json()["data"])
```

## Errors

| Status | Body                                                       | Cause                                                           |
| ------ | ---------------------------------------------------------- | --------------------------------------------------------------- |
| `400`  | `{"message": "Invalid query parameters", "errors": [...]}` | Bad parameter type or value (e.g. `page=0`, unknown `sort_by`). |
| `401`  | `Unauthorized`                                             | Missing or invalid API key.                                     |
