Create a note
Writes a note. content is the only required field.
Pass record_type and record_id together to attach the note to a
client company, a project or a contact — find the id with
GET /public-api/v1/companies, GET /public-api/v1/projects or
GET /public-api/v1/contacts. Leave both out and the note stands on
its own in the workspace.
Formatting
content is Markdown. Bonsai converts it to the rich text the notes
editor renders, so the constructs below all survive the conversion:
- headings,
**bold**,*italic*,~~strikethrough~~ - bullet, numbered and
- [ ]task lists - links,
> quotes,---dividers, tables inline codeand fenced code blocks
A single newline is a soft break and joins lines into one paragraph, as in standard Markdown — leave a blank line between paragraphs. Anything outside the list above, including raw HTML and images, is reduced to its text.
The response returns the stored body as content_html, not as the
Markdown you sent. To edit this note afterwards, read content_html
and send the modified HTML back to
PATCH /public-api/v1/notes/{id} — that endpoint takes HTML, not
Markdown, so nothing is lost on the way through.
That endpoint accepts a wider set of markup than this one can produce: images and mention spans survive an update but cannot be written here, since the Markdown converter reduces them to their text.
Note attributes, wrapped in a note key.
- Type: objectnoterequired
- application/json
- application/json
- application/json
- application/json
- application/json
- application/json
curl https://app.hellobonsai.com/public-api/v1/notes \
--request POST \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
--data '{
"note": {
"content": "## Kickoff call\n\n- Agreed on a May launch\n- **Next:** send the revised quote",
"title": "Kickoff call",
"date": "2026-05-01",
"visibility": "everyone",
"record_type": "company",
"record_id": 42
}
}'
{
"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"
}
}