The Notes Collaboration API manages user access and engagement on notebook nodes. Use these endpoints to list and modify collaborators (with per-node roles), add and remove emoji reactions, and invite users to a notebook or change their notebook-wide role.
Note
Collaborator roles on a node (admin, editor, collaborator, viewer) are distinct from a user’s notebook-wide role (owner, admin, collaborator, guest, none). Use the node-scoped endpoints to control access to individual sections, pages, and databases.
Manage per-node collaborators and their roles. Node-level collaborator management requires admin permission on the target node.
Returns all collaborators on a node with their roles and user info.
Name In Type Required Description notebookIdpath string Yes The notebook that contains the node nodeIdpath string Yes The node whose collaborators should be listed
curl -X GET " https://api.hoody.com/api/v1/notes/notebooks/nb_8f3a1c2b/nodes/node_4d2e9f1a/collaborators " \
-H " Authorization: Bearer <token> "
const collaborators = await client . notes . collaborators . list ( {
notebookId: " nb_8f3a1c2b " ,
"userId" : " user_3a8c1f0e " ,
"avatar" : " https://cdn.hoody.com/avatars/ada.png " ,
"createdAt" : " 2024-11-02T10:15:32.000Z " ,
"updatedAt" : " 2024-12-01T14:08:11.000Z "
"userId" : " user_5b9d2a14 " ,
"createdAt" : " 2024-11-04T09:22:01.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
Adds a user as a collaborator on a node with a specified role. Requires admin permission.
Name In Type Required Description notebookIdpath string Yes The notebook that contains the node nodeIdpath string Yes The node to add the collaborator to
Field Type Required Description collaboratorIdstring Yes The user ID to add as a collaborator rolestring Yes The role to assign. One of: admin, editor, collaborator, viewer
curl -X POST " https://api.hoody.com/api/v1/notes/notebooks/nb_8f3a1c2b/nodes/node_4d2e9f1a/collaborators " \
-H " Authorization: Bearer <token> " \
-H " Content-Type: application/json " \
"collaboratorId": "user_5b9d2a14",
await client . notes . collaborators . add ({
notebookId: " nb_8f3a1c2b " ,
collaboratorId: " user_5b9d2a14 " ,
"userId" : " user_5b9d2a14 " ,
"createdAt" : " 2024-12-05T11:42:17.000Z " ,
"message" : " Node type does not support collaborators. " ,
"message" : " This node type cannot have collaborators "
Error Code Title Description Resolution bad_requestUnsupported node type This node type does not support collaborators Collaborators can only be added to sections, pages, and databases
"message" : " You do not have permission to manage collaborators. " ,
Error Code Title Description Resolution forbiddenNot an admin Only admins can manage collaborators on this node Request admin access from the node owner
"message" : " Collaborator user was not found. " ,
"code" : " user_not_found " ,
Error Code Title Description Resolution user_not_foundUser not found The collaborator user does not exist in this notebook Verify user ID or create the user with createUsers first
"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
Changes the role of an existing collaborator. Requires admin permission.
Name In Type Required Description notebookIdpath string Yes The notebook that contains the node nodeIdpath string Yes The node whose collaborator is being updated collaboratorIdpath string Yes The collaborator user ID to update
Field Type Required Description rolestring Yes The new role to assign. One of: admin, editor, collaborator, viewer
curl -X PATCH " https://api.hoody.com/api/v1/notes/notebooks/nb_8f3a1c2b/nodes/node_4d2e9f1a/collaborators/user_5b9d2a14 " \
-H " Authorization: Bearer <token> " \
-H " Content-Type: application/json " \
await client . notes . collaborators . update ({
notebookId: " nb_8f3a1c2b " ,
collaboratorId: " user_5b9d2a14 " ,
"userId" : " user_5b9d2a14 " ,
"createdAt" : " 2024-11-04T09:22:01.000Z " ,
"updatedAt" : " 2024-12-05T12:00:44.000Z "
"message" : " Node type does not support collaborators. " ,
Error Code Title Description Resolution bad_requestUnsupported node type This node type does not support collaborators Collaborators can only be managed on sections, pages, and databases
"message" : " You do not have permission to manage collaborators. " ,
Error Code Title Description Resolution forbiddenNot an admin Only admins can change collaborator roles Request admin access from the node owner
"message" : " Collaborator not found. " ,
Error Code Title Description Resolution not_foundCollaborator not found No collaborator with the given ID exists on this node Verify collaborator ID using listCollaborators
"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
Removes a collaborator from a node. Requires admin permission.
Name In Type Required Description notebookIdpath string Yes The notebook that contains the node nodeIdpath string Yes The node to remove the collaborator from collaboratorIdpath string Yes The collaborator user ID to remove
curl -X DELETE " https://api.hoody.com/api/v1/notes/notebooks/nb_8f3a1c2b/nodes/node_4d2e9f1a/collaborators/user_5b9d2a14 " \
-H " Authorization: Bearer <token> "
await client . notes . collaborators . remove ({
notebookId: " nb_8f3a1c2b " ,
collaboratorId: " user_5b9d2a14 "
"message" : " Node type does not support collaborators. " ,
Error Code Title Description Resolution bad_requestUnsupported node type This node type does not support collaborators Collaborators can only be managed on sections, pages, and databases
"message" : " You do not have permission to manage collaborators. " ,
Error Code Title Description Resolution forbiddenNot an admin Only admins can remove collaborators Request admin access from the node owner
"message" : " Collaborator not found. " ,
Error Code Title Description Resolution not_foundCollaborator not found No collaborator with the given ID exists on this node Verify collaborator ID using listCollaborators
"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
Add, list, and remove emoji reactions on nodes. Reactions are scoped to the current authenticated user.
Returns all reactions on a node with the collaborator who reacted.
Name In Type Required Description notebookIdpath string Yes The notebook that contains the node nodeIdpath string Yes The node whose reactions should be listed
curl -X GET " https://api.hoody.com/api/v1/notes/notebooks/nb_8f3a1c2b/nodes/node_4d2e9f1a/reactions " \
-H " Authorization: Bearer <token> "
const reactions = await client . notes . reactions . list ( {
notebookId: " nb_8f3a1c2b " ,
"collaboratorId" : " user_3a8c1f0e " ,
"createdAt" : " 2024-12-05T10:00:12.000Z " ,
"collaboratorId" : " user_5b9d2a14 " ,
"createdAt" : " 2024-12-05T10:05:33.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
Adds an emoji reaction to a node on behalf of the current user.
Name In Type Required Description notebookIdpath string Yes The notebook that contains the node nodeIdpath string Yes The node to react to
Field Type Required Description reactionstring Yes The reaction to add (1–64 characters). Typically an emoji.
curl -X POST " https://api.hoody.com/api/v1/notes/notebooks/nb_8f3a1c2b/nodes/node_4d2e9f1a/reactions " \
-H " Authorization: Bearer <token> " \
-H " Content-Type: application/json " \
await client . notes . reactions . add ({
notebookId: " nb_8f3a1c2b " ,
"collaboratorId" : " user_3a8c1f0e " ,
"createdAt" : " 2024-12-05T10:00:12.000Z "
"message" : " Invalid request payload. " ,
"message" : " reaction must be between 1 and 64 characters "
"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
Removes an emoji reaction from a node for the current user.
Name In Type Required Description notebookIdpath string Yes The notebook that contains the node nodeIdpath string Yes The node from which to remove the reaction reactionpath string Yes The exact reaction string to remove (e.g. 🎉)
curl -X DELETE " https://api.hoody.com/api/v1/notes/notebooks/nb_8f3a1c2b/nodes/node_4d2e9f1a/reactions/%F0%9F%8E%89 " \
-H " Authorization: Bearer <token> "
await client . notes . reactions . remove ({
notebookId: " nb_8f3a1c2b " ,
"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" : " 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
Manage users that belong to a notebook and their notebook-wide role. These endpoints require owner or admin permission on the notebook.
Creates one or more users in the notebook by username. Returns created users and any errors.
Name In Type Required Description notebookIdpath string Yes The notebook to invite users to
Field Type Required Description usersarray Yes List of users to invite (max 50). Each item requires username and role. users[].usernamestring Yes The username of the user to invite users[].rolestring Yes The notebook role to assign. One of: owner, admin, collaborator, guest, none
curl -X POST " https://api.hoody.com/api/v1/notes/notebooks/nb_8f3a1c2b/users " \
-H " Authorization: Bearer <token> " \
-H " Content-Type: application/json " \
{ "username": "grace", "role": "editor" },
{ "username": "linus", "role": "collaborator" }
await client . notes . users . invite ({
notebookId: " nb_8f3a1c2b " ,
{ username: " grace " , role: " editor " },
{ username: " linus " , role: " collaborator " }
"avatar" : " https://cdn.hoody.com/avatars/grace.png " ,
"createdAt" : " 2024-12-05T10:15:32.000Z " ,
"revision" : " rev_1a2b3c4d " ,
"error" : " Username already exists in notebook "
"message" : " At least one user is required. " ,
"code" : " user_input_required " ,
Error Code Title Description Resolution user_input_requiredUser input required At least one user must be provided in the request body Provide a non-empty users array with username and role
"message" : " You do not have permission to add users. " ,
"code" : " user_invite_no_access " ,
Error Code Title Description Resolution notebook_readonlyNotebook is read-only The notebook is in read-only mode and cannot be modified Contact the notebook owner to restore write access user_invite_no_accessNo permission to add users User role does not have permission to add users to this notebook Only owners and admins can add users
"message" : " Notebook not found. " ,
Changes the notebook role of a user. Requires owner or admin permission.
Name In Type Required Description notebookIdpath string Yes The notebook that contains the user userIdpath string Yes The user whose role should be changed
Field Type Required Description rolestring Yes The new notebook role. One of: owner, admin, collaborator, guest, none
curl -X PATCH " https://api.hoody.com/api/v1/notes/notebooks/nb_8f3a1c2b/users/user_5b9d2a14/role " \
-H " Authorization: Bearer <token> " \
-H " Content-Type: application/json " \
await client . notes . users . updateRole ({
notebookId: " nb_8f3a1c2b " ,
"avatar" : " https://cdn.hoody.com/avatars/grace.png " ,
"createdAt" : " 2024-12-05T10:15:32.000Z " ,
"updatedAt" : " 2024-12-05T12:30:11.000Z " ,
"revision" : " rev_9z8y7x6w " ,
"message" : " Invalid role value. " ,
"message" : " role must be one of: owner, admin, collaborator, guest, none "
"message" : " You do not have permission to update user roles. " ,
"code" : " user_update_no_access " ,
Error Code Title Description Resolution notebook_readonlyNotebook is read-only The notebook is in read-only mode and cannot be modified Contact the notebook owner to restore write access user_update_no_accessNo permission to update users User role does not have permission to change user roles Only owners and admins can change user roles
"message" : " User not found. " ,
"code" : " user_not_found " ,
Error Code Title Description Resolution user_not_foundUser not found No user exists with the provided ID in this notebook Verify user ID using the users list