A note is a short bit of text your team keeps on a record, like the notes on a project, opportunity, company or contact page in Drum. This page covers reading, adding, changing, deleting and restoring notes. All endpoints sit under /api/v1/ and need an account-scoped bearer token. See Drum API authentication, permissions and rate limits.
The notes form in Drum, these endpoints and the MCP tools create_note and update_note (My work and Clients toolsets) run the same operations, so every surface applies the same rules.
Permissions
Notes don't have a permission of their own. A note is as private as its record: if you can see the record in Drum, you can read, add, change, delete and restore its notes. Each request also needs the API verb permission.
Action | API permission |
Read notes |
|
Add a note |
|
Change or restore a note |
|
Delete a note |
|
A note or record you can't read answers 404, so the API doesn't reveal that it exists.
Records that take notes
Name the record with record_kind and record_id.
| Record |
| A delivery project. |
| An opportunity |
| A client or supplier company |
| A contact |
| A location |
| An invoice |
| A credit note |
| A cost |
| A staff member |
| A progress claim |
| An expense claim |
| A contract. REST only: the MCP tools can't reach contracts |
Notes on proposals and proposal templates work differently and don't use these endpoints.
The note
{
"id": 9101,
"record_kind": "company",
"record": {"id": 301, "name": "Harbour Joinery"},
"content": "Send all invoices to the accounts team, not the site team.",
"financial": false,
"ai_generated": false,
"author": {"id": 11, "name": "Sam Taylor"},
"deleted": false,
"created_at": "2026-10-08T01:00:00Z",
"updated_at": "2026-10-08T01:00:00Z"
}Field | Meaning |
| The kind of the record, from the table above |
| The record as |
| The text of the note |
|
|
|
|
| The member who wrote the note. |
|
|
Rules for note text
These rules apply in Drum, in the API and in MCP:
A note can't be blank. Spaces at the start and end are trimmed, and a note with no text left answers
422 missing_input.A note can be up to 10,000 characters. A longer one answers
422 invalid_input.Only a note on a project, invoice or credit note can be a financial comment. Setting
financialtotrueon any other record answers422 invalid_input. A note that's already a financial comment can still be saved.A note on a deleted record, or a record in another account, answers
404.
GET /api/v1/notes
Lists the notes of one record, newest first, one page at a time like the other lists.
Parameter | Meaning |
| Required. The record |
|
|
Example: GET /api/v1/notes?record_kind=company&record_id=301
GET /api/v1/notes/:id
One note. A deleted note is shown too, with "deleted": true.
POST /api/v1/notes
Adds a note. The request needs api_create. Send the fields flat or nested under note.
Field | Meaning |
| Required. The record |
| Required. Plain text, 10,000 characters or fewer |
| Optional, default |
| Optional, and always at the top level, even when the note fields are nested. A retry with the same key and input adds nothing and returns the first note with |
A new note answers 201.
POST /api/v1/notes
{"record_kind": "project", "record_id": 104, "content": "Client wants the site report by Friday.", "idempotency_key": "note-104-site-report"}
PATCH /api/v1/notes/:id
Changes only the fields you send (content, financial). content replaces the whole text. A note stays on its record, so you can't move it to another one. When you edit a note that Drum's AI wrote, Drum records who edited it, as it does in the app. The request needs api_update. The response is the note.
PATCH /api/v1/notes/9101
{"content": "Send all invoices to the accounts team. Copy the project manager."}
DELETE /api/v1/notes/:id
Deletes the note, the same as Delete Note in Drum. It's a soft delete, so you can restore the note later. The request needs api_delete. The response is the note with "deleted": true.
PATCH /api/v1/notes/:id/restore
Brings back a deleted note. The request needs api_update. A note on a deleted record can't come back (404 note_not_found).
Notes in MCP record reads
The MCP tools get_project, get_opportunity, get_company and get_contact return the record's notes too:
recent_notes: the 5 newest notes, each withid,content,content_truncated,financial,ai_generated,author,created_atandupdated_at. Each note's text is cut at 2,000 characters, andcontent_truncatedistruewhen it was.notes_count: how many notes the record has, not counting deleted ones.
On get_project and get_opportunity, the notes come in the notes section, which is included by default. The REST record reads don't include notes. To read more than 5 notes, or the whole text of a long note, use GET /api/v1/notes.
MCP tools
The My work and Clients toolsets have create_note and update_note, with the same fields and rules as the endpoints above.
create_notetakesrecord_kind,record_id,content,financialandidempotency_key. It takes every kind in the table above exceptcontract. Find the record id withsearch_records.update_notetakesnote_id(fromrecent_notes),contentandfinancial. Ifcontent_truncatedistrue, the agent only saw the start of the note, so it should check with you before it replaces the text.To delete a note, use
delete_recordwith kindnote. Bring it back withrestore_recordwith kindnote.
Agents treat note text as information, not as instructions. See How to choose MCP toolsets for Connected Agents and API tokens.
Errors
Status |
| When |
404 |
| The note doesn't exist, is in another account, is on a deleted record, you can't read its record, or (on a change or delete) it's deleted |
404 |
| The record is missing, deleted, in another account, or you can't read it. The code is the |
422 |
|
|
422 |
| A value doesn't parse, |
422 |
| The note doesn't save ( |
409 |
| The key was used before with a different input |
409 |
| The note the key made has since been deleted, or another call with the same key is still running |
404 |
| You can no longer read the note the key made |
403 | A missing verb permission ( |
