Manage notebook nodes (sections, pages, channels, databases, records) and their associated rich-text documents. These endpoints cover node CRUD, alias resolution, child traversal, document read/write, idempotent block append, HTML export tickets, drawing-block SVG rendering, and user interaction tracking (open/seen events).
Use these endpoints when building editor surfaces, content importers, automated doc pipelines, or analytics dashboards that need to read or mutate notebook content.
Returns a paginated list of nodes the user has access to. Filterable by type, parentId, and rootId.
Name In Type Required Description notebookIdpath string Yes Notebook identifier typequery string No Filter by node type parentIdquery string No Filter by parent node ID rootIdquery string No Filter by root node ID limitquery integer No Page size (default 50) offsetquery integer No Page offset (default 0)
await client . notes . nodes . list ( " nb_abc123 " , { type: " page " , limit: 25 });
"parentId" : " node_root01 " ,
"name" : " Onboarding checklist " ,
"createdAt" : " 2025-01-12T09:21:00.000Z " ,
"updatedAt" : " 2025-03-04T14:08:00.000Z "
"parentId" : " node_root01 " ,
"createdAt" : " 2025-01-10T11:02:00.000Z " ,
"updatedAt" : " 2025-01-10T11:02:00.000Z "
"message" : " You do not have access to this node. " ,
Error Code Title Description Resolution forbiddenAccess denied User does not have permission to access this node Check collaborator list or request access from the node admin
Returns the full details of a single node by ID.
Name In Type Required Description notebookIdpath string Yes Notebook identifier nodeIdpath string Yes Node identifier
await client . notes . nodes . get ( " nb_abc123 " , " node_8f3a2b " );
"parentId" : " node_root01 " ,
"name" : " Onboarding checklist " ,
"description" : " First-day steps for new hires "
"createdAt" : " 2025-01-12T09:21:00.000Z " ,
"createdBy" : " user_alice " ,
"updatedAt" : " 2025-03-04T14:08:00.000Z " ,
"message" : " You do not have access to this node. " ,
Error Code Title Description Resolution forbiddenAccess denied User does not have permission to access this node Check collaborator list or request access from the node admin
"message" : " Node not found. " ,
Error Code Title Description Resolution not_foundNode not found No node exists with the provided ID in this notebook Verify node ID using listNodes or listNodeChildren
Resolves a page node by its safe alias within the notebook scope.
Name In Type Required Description notebookIdpath string Yes Notebook identifier aliaspath string Yes Node alias
await client . notes . nodes . getByAlias ( " nb_abc123 " , " onboarding " );
"parentId" : " node_root01 " ,
"name" : " Onboarding checklist " ,
"createdAt" : " 2025-01-12T09:21:00.000Z " ,
"updatedAt" : " 2025-03-04T14:08:00.000Z "
"message" : " Invalid alias format. " ,
"message" : " You do not have access to this node. " ,
"message" : " Node not found. " ,
Returns a paginated list of direct children of the specified node.
Name In Type Required Description notebookIdpath string Yes Notebook identifier nodeIdpath string Yes Parent node identifier limitquery integer No Page size (default 50) offsetquery integer No Page offset (default 0)
await client . notes . nodes . listChildren ( " nb_abc123 " , " node_root01 " , { limit: 10 });
"parentId" : " node_root01 " ,
"attributes" : { "name" : " Onboarding checklist " },
"createdAt" : " 2025-01-12T09:21:00.000Z "
"parentId" : " node_root01 " ,
"attributes" : { "name" : " Engineering " },
"createdAt" : " 2025-01-10T11:02:00.000Z "
"message" : " You do not have access to this node. " ,
Error Code Title Description Resolution forbiddenAccess denied User does not have permission to access this node Check collaborator list or request access from the node admin
"message" : " Node not found. " ,
Error Code Title Description Resolution not_foundNode not found No node exists with the provided ID in this notebook Verify node ID using listNodes or listNodeChildren
Creates a new node (section, page, channel, message, database, or record) in the notebook.
Name In Type Required Description notebookIdpath string Yes Notebook identifier
Name Type Required Description idstring No Optional client-supplied node ID typestring Yes Node type (e.g. page, section, channel, database, record, message) parentIdstring No Parent node ID attributesobject Yes Type-specific attributes (e.g. name, description, alias, icon)
"parentId" : " node_root01 " ,
"alias" : " release-notes " ,
"description" : " Track weekly product releases "
await client . notes . nodes . create ( " nb_abc123 " , {
attributes: { name: " Release notes " , alias: " release-notes " }
"parentId" : " node_root01 " ,
"alias" : " release-notes " ,
"createdAt" : " 2025-04-01T08:00:00.000Z " ,
"createdBy" : " user_alice "
"message" : " Invalid node type. " ,
Error Code Title Description Resolution bad_requestInvalid node data The request body is invalid — missing required fields or unsupported node type Check the node type is valid and all required attributes are provided
"message" : " You do not have permission to perform this action. " ,
Error Code Title Description Resolution forbiddenInsufficient permissions User role does not have permission for this action Request a higher role from the notebook or node admin
"message" : " Idempotency key conflict. " ,
Error Code Title Description Resolution bad_requestIdempotency conflict A different request was already made with the same idempotency key Use a new idempotency key for a different request
"message" : " An unexpected error occurred. " ,
Error Code Title Description Resolution unknownInternal server error An unexpected error occurred while processing the request Retry the request; if it persists, contact support
Updates node attributes (name, description, etc.). Type and parentId cannot be changed.
Name In Type Required Description notebookIdpath string Yes Notebook identifier nodeIdpath string Yes Node identifier
Name Type Required Description attributesobject Yes Partial attribute map to merge (e.g. name, description, icon)
"name" : " Release notes (Q2) " ,
"description" : " Weekly product release notes for Q2 2025 "
await client . notes . nodes . update ( " nb_abc123 " , " node_8f3a2b " , {
attributes: { name: " Release notes (Q2) " , description: " Weekly product release notes for Q2 2025 " }
"parentId" : " node_root01 " ,
"name" : " Release notes (Q2) " ,
"description" : " Weekly product release notes for Q2 2025 "
"createdAt" : " 2025-01-12T09:21:00.000Z " ,
"updatedAt" : " 2025-04-01T08:42:00.000Z " ,
"updatedBy" : " user_alice "
"message" : " Cannot change node type or parent. " ,
"message" : " You do not have access to this node. " ,
Error Code Title Description Resolution forbiddenAccess denied User does not have permission to access this node Check collaborator list or request access from the node admin
"message" : " Node not found. " ,
Error Code Title Description Resolution not_foundNode not found No node exists with the provided ID in this notebook Verify node ID using listNodes or listNodeChildren
"message" : " Conflict updating node. " ,
"message" : " An unexpected error occurred. " ,
Error Code Title Description Resolution unknownInternal server error An unexpected error occurred while processing the request Retry the request; if it persists, contact support
Permanently deletes a node and its associated data (documents, files, reactions).
Name In Type Required Description notebookIdpath string Yes Notebook identifier nodeIdpath string Yes Node identifier
await client . notes . nodes . delete ( " nb_abc123 " , " node_8f3a2b " );
"message" : " You do not have permission to perform this action. " ,
Error Code Title Description Resolution forbiddenInsufficient permissions User role does not have permission for this action Request a higher role from the notebook or node admin
"message" : " Node not found. " ,
Error Code Title Description Resolution not_foundNode not found No node exists with the provided ID in this notebook Verify node ID using listNodes or listNodeChildren
"message" : " An unexpected error occurred. " ,
Error Code Title Description Resolution unknownInternal server error An unexpected error occurred while processing the request Retry the request; if it persists, contact support
Danger
Deletion is permanent and cascades to documents, comments, reactions, and child nodes. There is no soft-delete or recovery.
Retrieves document content for a node. Supports block filtering via blockIds and line range queries.
Name In Type Required Description notebookIdpath string Yes Notebook identifier nodeIdpath string Yes Node identifier blockIdsquery string No Comma-separated list of block IDs to fetch linesquery string No Line range, e.g. 0-50 outputquery string No Output format: json, md, or html includeCommentsquery string No none (default) or appendixticketquery string No Export ticket (required when output=html)
await client . notes . documents . get ( " nb_abc123 " , " node_8f3a2b " , {
"content" : [{ "type" : " text " , "text" : " Onboarding checklist " }]
{ "type" : " text " , "text" : " Welcome to the team — start here. " }
"createdAt" : " 2025-01-12T09:21:00.000Z " ,
"createdBy" : " user_alice " ,
"updatedAt" : " 2025-03-04T14:08:00.000Z " ,
"message" : " Missing or invalid export ticket. " ,
"message" : " You do not have access to this node. " ,
Error Code Title Description Resolution forbiddenAccess denied User does not have permission to access this node Check collaborator list or request access from the node admin
"message" : " Document not found. " ,
Error Code Title Description Resolution not_foundDocument not found No document content exists for this node, or the node type does not support documents Create document content with putDocument first
Creates a new document or fully replaces an existing document for a node.
Name In Type Required Description notebookIdpath string Yes Notebook identifier nodeIdpath string Yes Node identifier
Name Type Required Description contentobject Yes Full document content tree (block tree)
"content" : [{ "type" : " text " , "text" : " Release notes " }]
"content" : [{ "type" : " text " , "text" : " Initial cut. " }]
await client . notes . documents . put ( " nb_abc123 " , " node_8f3a2b " , {
{ type: " heading1 " , content: [{ type: " text " , text: " Release notes " }] }
"content" : [{ "type" : " text " , "text" : " Release notes " }]
"createdAt" : " 2025-04-01T08:00:00.000Z " ,
"createdBy" : " user_alice " ,
"updatedAt" : " 2025-04-01T08:00:00.000Z " ,
"updatedBy" : " user_alice "
"message" : " Node type does not support documents. " ,
Error Code Title Description Resolution bad_requestUnsupported node type This node type does not support document content Only page, channel, and similar node types support documents
"message" : " You do not have access to this node. " ,
Error Code Title Description Resolution forbiddenAccess denied User does not have permission to access this node Check collaborator list or request access from the node admin forbiddenInsufficient permissions User role does not have permission for this action Request a higher role from the notebook or node admin
"message" : " Node not found. " ,
Error Code Title Description Resolution not_foundNode not found No node exists with the provided ID in this notebook Verify node ID using listNodes or listNodeChildren
"message" : " An unexpected error occurred. " ,
Error Code Title Description Resolution unknownInternal server error An unexpected error occurred while processing the request Retry the request; if it persists, contact support
Merges content into an existing document at the top level. Existing blocks are preserved unless overwritten.
Name In Type Required Description notebookIdpath string Yes Notebook identifier nodeIdpath string Yes Node identifier
Name Type Required Description contentobject Yes Partial content to merge into the top-level document
"content" : [{ "type" : " text " , "text" : " Added a new paragraph on 2025-04-02. " }]
await client . notes . documents . patch ( " nb_abc123 " , " node_8f3a2b " , {
{ type: " paragraph " , content: [{ type: " text " , text: " Added a new paragraph. " }] }
{ "type" : " heading1 " , "content" : [{ "type" : " text " , "text" : " Release notes " }] },
{ "type" : " paragraph " , "content" : [{ "type" : " text " , "text" : " Added a new paragraph. " }] }
"createdAt" : " 2025-04-01T08:00:00.000Z " ,
"createdBy" : " user_alice " ,
"updatedAt" : " 2025-04-02T10:14:00.000Z " ,
"message" : " Node type does not support documents. " ,
Error Code Title Description Resolution bad_requestUnsupported node type This node type does not support document content Only page, channel, and similar node types support documents
"message" : " You do not have access to this node. " ,
Error Code Title Description Resolution forbiddenAccess denied User does not have permission to access this node Check collaborator list or request access from the node admin forbiddenInsufficient permissions User role does not have permission for this action Request a higher role from the notebook or node admin
"message" : " Document not found. " ,
Error Code Title Description Resolution not_foundDocument not found No document exists for this node — create it with putDocument first Use putDocument to create the document before patching
"message" : " An unexpected error occurred. " ,
Error Code Title Description Resolution unknownInternal server error An unexpected error occurred while processing the request Retry the request; if it persists, contact support
Appends one or more blocks to the END of a node’s rich-text document. The server assigns each block id, parentId, and index — any client-supplied values (including attrs.id) are rejected.
You must send exactly one of:
text — a single block from plain text. Newlines are not split; the text is stored as one literal block.
blocks — an array of 1–100 flat root blocks.
If the document does not exist yet, it is created. Pass X-Idempotency-Key to make retries safe: a repeated key + identical body replays the original response; a different body with the same key returns 409.
Allowed block types: paragraph, heading1, heading2, heading3, codeBlock, horizontalRule.
Name In Type Required Description notebookIdpath string Yes Notebook identifier nodeIdpath string Yes Node identifier X-Idempotency-Keyheader string No Optional idempotency key (max 256 chars). Reusing the same key with an identical request body and node replays the original response; reusing it with a different body or node returns 409.
You must provide one of these two shapes:
Shape A — plain text block:
Name Type Required Description textstring Yes Non-empty plain text for a single block typestring No Block type — paragraph (default), heading1, heading2, heading3, or codeBlock attrsobject | null No Block-level attributes (e.g. language for codeBlock)
"text" : " This change went live on April 2nd. " ,
Shape B — array of blocks:
Name Type Required Description blocksarray Yes 1–100 flat root blocks. Each block has type (paragraph, heading1, heading2, heading3, codeBlock, horizontalRule), content (array of { type: "text", text, marks }), and optional attrs.
"content" : [{ "type" : " text " , "text" : " April 2nd updates " }]
{ "type" : " text " , "text" : " Shipped the new export pipeline. " }
{ "type" : " horizontalRule " }
await client . notes . documents . appendDocument (
text: " This change went live on April 2nd. " ,
{ XIdempotencyKey: " key_123 " }
{ "type" : " heading1 " , "content" : [{ "type" : " text " , "text" : " Release notes " }] },
{ "type" : " paragraph " , "content" : [{ "type" : " text " , "text" : " Initial cut. " }] },
{ "type" : " paragraph " , "content" : [{ "type" : " text " , "text" : " This change went live on April 2nd. " }] }
"createdAt" : " 2025-04-01T08:00:00.000Z " ,
"createdBy" : " user_alice " ,
"updatedAt" : " 2025-04-02T10:14:00.000Z " ,
"updatedBy" : " user_alice " ,
"appendedBlockIds" : [ " block_d12 " , " block_d13 " ]
"message" : " This node type does not support documents. " ,
Error Code Title Description Resolution bad_requestInvalid append request The request body is invalid — provide exactly one of text or blocks, a non-empty text, an allowed block type, no server-managed fields (id/parentId/index/attrs.id), at most 100 blocks, and content under the size limit. Also returned when the node type does not support documents. Send a valid append payload to a page (or other document-bearing) node
"message" : " You do not have access to this node. " ,
Error Code Title Description Resolution forbiddenAccess denied User does not have permission to access this node Check collaborator list or request access from the node admin forbiddenInsufficient permissions User role does not have permission for this action Request a higher role from the notebook or node admin
"message" : " Node not found. " ,
Error Code Title Description Resolution not_foundNode not found No node exists with the provided ID in this notebook Verify node ID using listNodes or listNodeChildren
"message" : " Idempotency key already used with a different request. " ,
Error Code Title Description Resolution bad_requestIdempotency key conflict The X-Idempotency-Key was already used with a different request body or node Use a fresh X-Idempotency-Key for a different append, or resend the identical request to replay
"message" : " An unexpected error occurred. " ,
Error Code Title Description Resolution unknownInternal server error An unexpected error occurred while processing the request Retry the request; if it persists, contact support
Note
Do not set id, parentId, index, or attrs.id on incoming blocks. The server rejects any request that includes those fields and returns 400 bad_request.
Creates a short-lived export ticket for static HTML document delivery. Ticket is required to fetch output=html.
Name In Type Required Description notebookIdpath string Yes Notebook identifier nodeIdpath string Yes Node identifier
Name Type Required Description outputstring No Output format (default "html") includeCommentsstring No none (default) or appendixincludeBackgroundboolean No Include page background in export (default true) themeModestring No light or dark (default "dark")themeIdstring | null No Theme identifier (max 64 chars) themeVariablesobject No Map of theme variable name to string value fileNamestring No Suggested download filename (max 128 chars)
"includeComments" : " appendix " ,
"fileName" : " Onboarding.html "
await client . notes . documents . createExportTicket ( " nb_abc123 " , " node_8f3a2b " , {
includeComments: " appendix " ,
fileName: " Onboarding.html "
"ticket" : " tkt_8f4a2c91 " ,
"expiresAt" : " 2025-04-02T09:30:00.000Z " ,
"message" : " You do not have permission to export this document. " ,
"message" : " Node not found. " ,
Renders a drawing block as an SVG image. Supports optional background color and scale factor.
Name In Type Required Description notebookIdpath string Yes Notebook identifier nodeIdpath string Yes Node identifier blockIdpath string Yes Drawing block identifier bgquery string No Background color (e.g. transparent, #ffffff) scalequery number No Scale factor (e.g. 2 for 2× resolution)
await client . notes . documents . exportBlockSvg ( " nb_abc123 " , " node_8f3a2b " , " block_d12 " , {
Returns an image/svg+xml body containing the rendered drawing.
< svg xmlns = " http://www.w3.org/2000/svg " viewBox = " 0 0 800 600 " >
<!-- Drawing strokes and shapes rendered here -->
Records that the current user has opened the node. Tracks first and last opened timestamps.
Name In Type Required Description notebookIdpath string Yes Notebook identifier nodeIdpath string Yes Node identifier
Name Type Required Description openedAtstring No ISO timestamp of the open event (defaults to server time)
"openedAt" : " 2025-04-02T10:14:00.000Z "
await client . notes . interactions . markOpened ( " nb_abc123 " , " node_8f3a2b " , {
openedAt: " 2025-04-02T10:14:00.000Z "
"collaboratorId" : " user_bob " ,
"firstSeenAt" : " 2025-03-28T08:00:00.000Z " ,
"lastSeenAt" : " 2025-04-02T10:14:00.000Z " ,
"firstOpenedAt" : " 2025-03-28T08:01:12.000Z " ,
"lastOpenedAt" : " 2025-04-02T10:14:00.000Z "
"message" : " You do not have access to this node. " ,
Error Code Title Description Resolution forbiddenAccess denied User does not have permission to access this node Check collaborator list or request access from the node admin
"message" : " Node not found. " ,
Error Code Title Description Resolution not_foundNode not found No node exists with the provided ID in this notebook Verify node ID using listNodes or listNodeChildren
"message" : " Idempotency key conflict. " ,
Error Code Title Description Resolution bad_requestIdempotency conflict A different request was already made with the same idempotency key Use a new idempotency key for a different request
"message" : " An unexpected error occurred. " ,
Error Code Title Description Resolution unknownInternal server error An unexpected error occurred while processing the request Retry the request; if it persists, contact support
Records that the current user has seen the node. Tracks first and last seen timestamps.
Name In Type Required Description notebookIdpath string Yes Notebook identifier nodeIdpath string Yes Node identifier
Name Type Required Description seenAtstring No ISO timestamp of the seen event (defaults to server time)
"seenAt" : " 2025-04-02T10:14:00.000Z "
await client . notes . interactions . markSeen ( " nb_abc123 " , " node_8f3a2b " , {
seenAt: " 2025-04-02T10:14:00.000Z "
"collaboratorId" : " user_bob " ,
"firstSeenAt" : " 2025-03-28T08:00:00.000Z " ,
"lastSeenAt" : " 2025-04-02T10:14:00.000Z " ,
"firstOpenedAt" : " 2025-03-28T08:01:12.000Z " ,
"lastOpenedAt" : " 2025-04-02T10:14:00.000Z "
"message" : " You do not have access to this node. " ,
Error Code Title Description Resolution forbiddenAccess denied User does not have permission to access this node Check collaborator list or request access from the node admin
"message" : " Node not found. " ,
Error Code Title Description Resolution not_foundNode not found No node exists with the provided ID in this notebook Verify node ID using listNodes or listNodeChildren
"message" : " Idempotency key conflict. " ,
Error Code Title Description Resolution bad_requestIdempotency conflict A different request was already made with the same idempotency key Use a new idempotency key for a different request
"message" : " An unexpected error occurred. " ,
Error Code Title Description Resolution unknownInternal server error An unexpected error occurred while processing the request Retry the request; if it persists, contact support