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 code and 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.

Body
required
application/json

Note attributes, wrapped in a note key.

  • note
    Type: object
    required
Responses
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for post/public-api/v1/notes
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"
  }
}