Skip to content

The Notes Nodes & Documents API lets you manage the tree structure of a notebook, read and write block-based document content, export pages to static formats, and track read interactions. Use these endpoints to build notebook navigation, sync editor content, and surface read receipts.

GET /api/v1/notes/notebooks/{notebookId}/nodes

Section titled “GET /api/v1/notes/notebooks/{notebookId}/nodes”

Returns a paginated list of nodes the user has access to. Filterable by type, parentId, and rootId.

NameInTypeRequiredDescription
typequerystringNoFilter by node type.
parentIdquerystringNoFilter by parent node ID.
rootIdquerystringNoFilter by root node ID.
limitqueryintegerNoPage size. Default: 50.
offsetqueryintegerNoPagination offset. Default: 0.
notebookIdpathstringYesNotebook ID.
Terminal window
curl -X GET "https://api.hoody.com/api/v1/notes/notebooks/nb_abc123/nodes?type=page&limit=25" \
-H "Authorization: Bearer <token>"

GET /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}

Section titled “GET /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}”

Returns the full details of a single node by ID.

NameInTypeRequiredDescription
notebookIdpathstringYesNotebook ID.
nodeIdpathstringYesNode ID.
Terminal window
curl -X GET "https://api.hoody.com/api/v1/notes/notebooks/nb_abc123/nodes/node_8f3a2b" \
-H "Authorization: Bearer <token>"

GET /api/v1/notes/notebooks/{notebookId}/nodes/alias/{alias}

Section titled “GET /api/v1/notes/notebooks/{notebookId}/nodes/alias/{alias}”

Resolves a page node by its safe alias within the notebook scope.

NameInTypeRequiredDescription
notebookIdpathstringYesNotebook ID.
aliaspathstringYesPage alias.
Terminal window
curl -X GET "https://api.hoody.com/api/v1/notes/notebooks/nb_abc123/nodes/alias/onboarding" \
-H "Authorization: Bearer <token>"

GET /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}/children

Section titled “GET /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}/children”

Returns a paginated list of direct children of the specified node.

NameInTypeRequiredDescription
limitqueryintegerNoPage size. Default: 50.
offsetqueryintegerNoPagination offset. Default: 0.
notebookIdpathstringYesNotebook ID.
nodeIdpathstringYesParent node ID.
Terminal window
curl -X GET "https://api.hoody.com/api/v1/notes/notebooks/nb_abc123/nodes/node_root01/children?limit=10" \
-H "Authorization: Bearer <token>"

POST /api/v1/notes/notebooks/{notebookId}/nodes

Section titled “POST /api/v1/notes/notebooks/{notebookId}/nodes”

Creates a new node (section, page, channel, message, database, or record) in the notebook.

NameInTypeRequiredDescription
notebookIdpathstringYesNotebook ID.
NameTypeRequiredDescription
idstringNoOptional client-provided ID.
typestringYesNode type (e.g. page, section, channel).
parentIdstringNoParent node ID.
attributesobjectYesType-specific attributes (name, icon, etc.).
Terminal window
curl -X POST "https://api.hoody.com/api/v1/notes/notebooks/nb_abc123/nodes" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"type": "page",
"parentId": "node_root01",
"attributes": { "name": "Onboarding", "icon": "🚀" }
}'

PATCH /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}

Section titled “PATCH /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}”

Updates node attributes (name, description, etc.). Type and parentId cannot be changed.

NameInTypeRequiredDescription
notebookIdpathstringYesNotebook ID.
nodeIdpathstringYesNode ID.
NameTypeRequiredDescription
attributesobjectYesPartial attributes object to merge.
Terminal window
curl -X PATCH "https://api.hoody.com/api/v1/notes/notebooks/nb_abc123/nodes/node_8f3a2b" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"attributes": { "name": "Onboarding Guide", "icon": "📘" }
}'

DELETE /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}

Section titled “DELETE /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}”

Permanently deletes a node and its associated data (documents, files, reactions).

NameInTypeRequiredDescription
notebookIdpathstringYesNotebook ID.
nodeIdpathstringYesNode ID.
Terminal window
curl -X DELETE "https://api.hoody.com/api/v1/notes/notebooks/nb_abc123/nodes/node_8f3a2b" \
-H "Authorization: Bearer <token>"

GET /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}/document

Section titled “GET /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}/document”

Retrieves document content for a node. Supports block filtering via blockIds and line range queries.

NameInTypeRequiredDescription
blockIdsquerystringNoComma-separated list of block IDs to include.
linesquerystringNoLine range in the form start-end (e.g. 1-50).
outputquerystringNoOutput format. One of json, md, html.
includeCommentsquerystringNoInclude comments. One of none, appendix. Default: "none".
ticketquerystringNoPre-issued export ticket (required when output=html).
notebookIdpathstringYesNotebook ID.
nodeIdpathstringYesNode ID.
Terminal window
curl -X GET "https://api.hoody.com/api/v1/notes/notebooks/nb_abc123/nodes/node_8f3a2b/document?output=md" \
-H "Authorization: Bearer <token>"

PUT /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}/document

Section titled “PUT /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}/document”

Creates a new document or fully replaces an existing document for a node.

NameInTypeRequiredDescription
notebookIdpathstringYesNotebook ID.
nodeIdpathstringYesNode ID.
NameTypeRequiredDescription
contentobjectYesFull document content (block tree).
Terminal window
curl -X PUT "https://api.hoody.com/api/v1/notes/notebooks/nb_abc123/nodes/node_8f3a2b/document" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"content": {
"type": "doc",
"content": [
{ "type": "heading", "level": 1, "text": "Onboarding" },
{ "type": "paragraph", "text": "Welcome to the team." }
]
}
}'

PATCH /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}/document

Section titled “PATCH /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}/document”

Merges content into an existing document at the top level. Existing blocks are preserved unless overwritten.

NameInTypeRequiredDescription
notebookIdpathstringYesNotebook ID.
nodeIdpathstringYesNode ID.
NameTypeRequiredDescription
contentobjectYesBlock-level content to merge.
Terminal window
curl -X PATCH "https://api.hoody.com/api/v1/notes/notebooks/nb_abc123/nodes/node_8f3a2b/document" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"content": {
"type": "doc",
"content": [
{ "type": "paragraph", "text": "Added in patch." }
]
}
}'

GET /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}/blocks/{blockId}/svg

Section titled “GET /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}/blocks/{blockId}/svg”

Renders a drawing block as an SVG image. Supports optional background color and scale factor.

NameInTypeRequiredDescription
bgquerystringNoCSS-compatible background color (e.g. #ffffff, transparent).
scalequerynumberNoScale factor applied to the output dimensions.
notebookIdpathstringYesNotebook ID.
nodeIdpathstringYesNode ID.
blockIdpathstringYesDrawing block ID.
Terminal window
curl -X GET "https://api.hoody.com/api/v1/notes/notebooks/nb_abc123/nodes/node_8f3a2b/blocks/block_d12/svg?bg=transparent&scale=2" \
-H "Authorization: Bearer <token>" \
-o drawing.svg

POST /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}/export-ticket

Section titled “POST /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}/export-ticket”

Creates a short-lived export ticket for static HTML document delivery. Pass the returned ticket to getDocument with output=html.

NameInTypeRequiredDescription
notebookIdpathstringYesNotebook ID.
nodeIdpathstringYesNode ID.
NameTypeRequiredDefaultDescription
outputstringNo"html"Export format. Must be html.
includeCommentsstringNo"none"Whether to append comments. One of none, appendix.
includeBackgroundbooleanNotrueWhether to render the page background.
themeModestringNo"dark"Theme mode. One of light, dark.
themeIdstring | nullNoOptional theme identifier (max 64 chars).
themeVariablesobjectNoMap of theme variable name to value.
fileNamestringNoSuggested file name (max 128 chars).
Terminal window
curl -X POST "https://api.hoody.com/api/v1/notes/notebooks/nb_abc123/nodes/node_8f3a2b/export-ticket" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"output": "html",
"includeComments": "appendix",
"themeMode": "light",
"fileName": "Onboarding.html"
}'

POST /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}/interactions/opened

Section titled “POST /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}/interactions/opened”

Records that the current user has opened the node. Tracks first and last opened timestamps.

NameInTypeRequiredDescription
notebookIdpathstringYesNotebook ID.
nodeIdpathstringYesNode ID.
NameTypeRequiredDescription
openedAtstringNoISO-8601 timestamp; defaults to server time.
Terminal window
curl -X POST "https://api.hoody.com/api/v1/notes/notebooks/nb_abc123/nodes/node_8f3a2b/interactions/opened" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{}'

POST /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}/interactions/seen

Section titled “POST /api/v1/notes/notebooks/{notebookId}/nodes/{nodeId}/interactions/seen”

Records that the current user has seen the node. Tracks first and last seen timestamps.

NameInTypeRequiredDescription
notebookIdpathstringYesNotebook ID.
nodeIdpathstringYesNode ID.
NameTypeRequiredDescription
seenAtstringNoISO-8601 timestamp; defaults to server time.
Terminal window
curl -X POST "https://api.hoody.com/api/v1/notes/notebooks/nb_abc123/nodes/node_8f3a2b/interactions/seen" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{}'