Notes
A Note resource looks like this:
{
"id": "note_3kf8d92h",
"title": "Quarterly planning",
"body": "# Goals\n- Ship v2 API\n- Hire two engineers",
"notebook_id": "nb_2a9c4e",
"tags": ["work", "planning"],
"created_at": "2026-04-12T09:14:22Z",
"updated_at": "2026-05-18T16:02:47Z",
"archived": false
}GET /notes — List notes
Returns a paginated list of notes in the authenticated workspace.
Query parameters
| Name | Type | Description |
|---|---|---|
notebook_id | string | Filter to a specific notebook. |
tag | string | Filter by tag name. Repeatable. |
archived | boolean | Defaults to false. Pass true to include archived notes. |
limit | integer | 1–100. Defaults to 25. |
cursor | string | Pagination cursor from a previous response. |
Example
GET /v2/notes?notebook_id=nb_2a9c4e&limit=10 Authorization: Bearer qk_live_...
Response:
{
"data": [ /* array of Note objects */ ],
"has_more": true,
"next_cursor": "eyJpZCI6Im5vdGVfM2tmOGQ5Mmgi"
}POST /notes — Create a note
Body parameters
| Name | Type | Required | Description |
|---|---|---|---|
title | string | yes | Max 200 characters. |
body | string | no | Markdown-formatted content. Max 1 MB. |
notebook_id | string | no | If omitted, the note lands in the default Inbox notebook. |
tags | array | no | Tags will be created if they don't exist. |
Returns the created Note with status 201 Created.
PATCH /notes/{id} — Update a note
Accepts any subset of the fields above. Fields not included in the body are left unchanged.
PATCH /v2/notes/note_3kf8d92h
Content-Type: application/json
{
"title": "Q3 planning (revised)",
"tags": ["work", "planning", "q3"]
}Returns the updated Note with status 200 OK.
DELETE /notes/{id} — Delete a note
Permanently deletes a note. Once deleted, a note cannot be recovered through the API — if you want a reversible operation, set archived: true via PATCH instead.
Returns 204 No Content on success.
Notebooks
A Notebook resource:
{
"id": "nb_2a9c4e",
"name": "Engineering",
"color": "#4F46E5",
"note_count": 142,
"created_at": "2025-11-03T12:00:00Z"
}GET /notebooks — List notebooks
Returns all notebooks in the workspace. Notebooks are not paginated unless you have more than 500.
GET /notebooks/{id} — Retrieve a single notebook
Returns a Notebook object, or 404 Not Found if it doesn't exist or your key lacks access.
POST /notebooks — Create a notebook
{
"name": "Research",
"color": "#10B981"
}Returns the created Notebook with 201 Created. Notebook names must be unique within a workspace; duplicates return 409 Conflict.
PUT /notebooks/{id} — Replace a notebook
Unlike PATCH /notes, this is a full replacement — any fields you omit are reset to defaults. Use this when you want predictable, idempotent updates (for example, when syncing state from another system).
DELETE /notebooks/{id} — Delete a notebook
By default, deleting a notebook fails if it still contains notes. Pass ?cascade=true to delete all notes inside it as well. This is irreversible.
DELETE /v2/notebooks/nb_2a9c4e?cascade=true
Returns 204 No Content on success, or 409 Conflict with code notebook_not_empty if cascade is not set and the notebook contains notes.
Errors
All error responses follow the same shape:
{
"error": {
"type": "validation_error",
"message": "title is required",
"param": "title",
"request_id": "req_8d3f9a2c1e"
}
}Include request_id whenever you contact support — it lets us trace the exact call through our logs.
Comments
0 comments
Please sign in to leave a comment.