Update a note

Rewrites what a note says. Every field is optional, and anything you leave out keeps its current value.

Anyone can edit a note they wrote; editing someone else's needs permission to write notes. A note the token cannot see returns 404, and one it can see but may not change returns 403.

visibility is the author's to set: an edit from anybody else that changes it returns 403 and writes nothing at all, not even the rest of the payload. Sending back the value the note already has is accepted, so reading a note, changing one field and returning the whole thing works whoever you are.

The records a note is attached to are fixed once it is written, so record_type and record_id are not accepted here.

Formatting

content_html is HTML and replaces the whole body. It is the same shape GET /public-api/v1/notes/{id} hands back, so read that field, change the part you need and send the result — whatever you leave alone survives the edit untouched.

Markdown is not accepted here; sending the content that POST /public-api/v1/notes takes returns 422 naming content_html, rather than leaving the edit to vanish. The create endpoint takes Markdown because a new note has nothing to preserve, while an edit does, and Markdown cannot express mentions, images or merged table cells.

Task list items carry the state the editor reads back, so keep their attributes as they came:

<ul data-type="taskList">
  <li data-type="taskItem" data-checked="true"><p>Confirm budget</p></li>
  <li data-type="taskItem" data-checked="false"><p>Send the quote</p></li>
</ul>
Path Parameters
  • id
    Type: string Format: uuid
    required

    The note's id.

Body
required
application/json

The attributes to change, wrapped in a note key. All of them are optional.

  • note
    Type: object
    required
Responses
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for patch/public-api/v1/notes/{id}
curl https://app.hellobonsai.com/public-api/v1/notes/123e4567-e89b-12d3-a456-426614174000 \
  --request PATCH \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "note": {
    "content_html": "<h2>Renewal call</h2><p>Signed off on the May launch.</p>",
    "title": "Renewal call",
    "date": "2026-06-15",
    "visibility": "author_only"
  }
}'
{
  "data": {
    "id": "3f1c9b64-0c2d-4d19-9d4e-6c9a1f7b2f11",
    "title": "Kickoff call",
    "date": "2026-05-01",
    "visibility": "everyone",
    "created_by_member_id": 314,
    "created_at": "2026-04-14T09:12:04.000Z",
    "updated_at": "2026-04-14T09:12:04.000Z",
    "note_links": [
      {
        "id": 907,
        "record_id": 42,
        "record_type": "company"
      }
    ],
    "content_html": "<h2>Renewal call</h2><p>Agreed to send a <strong>revised quote</strong>.</p>",
    "content_plain_text": "Discussed the renewal and agreed to send a revised quote."
  },
  "meta": {
    "request_id": "b1f0d2c4-7a9e-4c3b-8d5f-1e2a3b4c5d6e"
  }
}