---
title: "List notes"
method: GET
path: "/public-api/v1/notes"
tags: ["Notes"]
---

# List notes

`GET /public-api/v1/notes`

## Request

- Base URL: `https://app.hellobonsai.com`
- URL: `https://app.hellobonsai.com/public-api/v1/notes`
- Auth: one of:
  - OAuth 2
    - Authorization code: `https://app.hellobonsai.com/oauth/authorize`
    - Token URL: `https://app.hellobonsai.com/oauth/token`
  - HTTP bearer

Lists notes, newest first, a page at a time. The note body is not part
of a list response.

Each note carries the records it is attached to in `note_links`, leaving
out any record the token cannot reach — so a note can come back with an
empty `note_links` even though somebody else can see what it is about.

## Filtering

- `filter[record_type]` and `filter[record_id]` — the record the notes
  are attached to. Both are required together; neither narrows anything
  on its own.
- `filter[created_by_member_id]` — one or more team member ids, or `me`
  for whoever the token belongs to.
- `filter[date_from]` and `filter[date_to]` — a date range over the day
  each note is about. Both bounds are inclusive, and either works alone.

## Query parameters

- `page[number]` integer
- `page[size]` integer
- `filter[record_type]` 'company' | 'project' | 'contact' | 'deal'
- `filter[record_id]` string
- `filter[created_by_member_id]` string
- `filter[date_from]` string, date
- `filter[date_to]` string, date

## Response `200`

A page of notes, newest first.

- object
  - `data` Note[], required
    - `id` string, uuid, required: Unique identifier for the note.
    - `title` string, required: Note title. Empty when the note was written without one.
    - `date` string, date, nullable, required: The day the note is about, which is what the app sorts and groups notes by. Defaults to today in your account timezone.
    - `visibility` 'everyone' | 'author_only', required: `everyone` for a note the whole account can read, `author_only` for one only its author can. Defaults to `everyone`, and only the member who wrote the note can change it.
    - `created_by_member_id` integer, nullable, required: Team member id of the author, or `null` when they are no longer a member of your account.
    - `created_at` string, date-time, required: When the note was written.
    - `updated_at` string, date-time, required: When the note was last edited.
    - `note_links` NoteLink[], required: The records this note is attached to, leaving out any your token cannot reach. Empty for a workspace note that stands on its own.
      - `id` integer, required: Unique identifier for the attachment between the note and the record.
      - `record_id` integer, required: Id of the attached record, in the resource named by `record_type`.
      - `record_type` 'company' | 'project' | 'contact' | 'deal' | 'null', nullable, required: Which kind of record the note is attached to.
  - `meta` PaginatedMeta, required: Metadata returned alongside every list response.
    - `request_id` string, required: Identifier for this request. Quote it when contacting support about a specific call.
    - `pagination` Pagination, required: Where the returned page sits in the full result set.
      - `page` integer, required: The page that was returned.
      - `page_size` integer, required: How many records this page can hold.
      - `has_more` boolean, required: Whether at least one more page follows this one. Keep incrementing `page[number]` while this is `true`.

## Other responses

- `400`: A filter key is unknown, a filter value is not allowed, or a pagination parameter is not an integer.
- `401`: The access token is missing, expired or invalid.
- `403`: This token is not allowed to read notes.
- `429`: Rate limit exceeded. Wait at least `Retry-After` seconds before trying again.

---

[API](https://skmtc.dev/hellobonsai/apis/bonsai-api.md) - [All operations](https://skmtc.dev/hellobonsai/apis/bonsai-api/llms.txt) - [OpenAPI document](https://skmtc.dev/hellobonsai/apis/bonsai-api/revisions/abf12ed6a8d3?raw)
