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>
- Type: string Format: uuididrequired
The note's
id.
The attributes to change, wrapped in a note key. All of them are optional.
- Type: objectnoterequired
- application/json
- application/json
- application/json
- application/json
- application/json
- application/json
- application/json
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"
}
}