Manage collaborators, emoji reactions, and notebook-wide user roles. Use these endpoints to control who can access a node, who can react to a node, and which users belong to a notebook.
Manage user access on a specific node (section, page, or database) within a notebook. Node-scoped roles use the admin | editor | collaborator | viewer enum.
Returns all collaborators on a node with their roles and user info.
Name In Type Required Description notebookIdpath string Yes Identifier of the notebook containing the node nodeIdpath string Yes Identifier of the node whose collaborators are being listed
This endpoint takes no request body.
curl -X GET " https://api.hoody.com/api/v1/notes/notebooks/nb_8f7d6e5c4b3a2910/nodes/5a4b3c2d1e0f6789abcdef12/collaborators " \
-H " Authorization: Bearer <token> "
const { collaborators } = await client . notes . collaborators . list ( {
notebookId: " nb_8f7d6e5c4b3a2910 " ,
nodeId: " 5a4b3c2d1e0f6789abcdef12 " ,
"userId" : " 3c2b1a0d9e8f7654abcdef12 " ,
"avatar" : " https://cdn.hoody.com/avatars/alice.png " ,
"createdAt" : " 2024-01-15T10:30:00.000Z " ,
"userId" : " 9f8e7d6c5b4a3210fedcba98 " ,
"createdAt" : " 2024-01-16T08:15:00.000Z " ,
"updatedAt" : " 2024-01-17T12:00:00.000Z "
"message" : " You do not have access to this node. " ,
"message" : " Access denied "
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. " ,
"message" : " No node with this ID "
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 Identifier of the notebook containing the node nodeIdpath string Yes Identifier of the node on which to add the collaborator
Name Type Required Description collaboratorIdstring Yes ID of the user to add as a collaborator rolestring Yes Node-scoped role. One of: admin, editor, collaborator, viewer
curl -X POST " https://api.hoody.com/api/v1/notes/notebooks/nb_8f7d6e5c4b3a2910/nodes/5a4b3c2d1e0f6789abcdef12/collaborators " \
-H " Authorization: Bearer <token> " \
-H " Content-Type: application/json " \
"collaboratorId": "3c2b1a0d9e8f7654abcdef12",
const collaborator = await client . notes . collaborators . add ( {
notebookId: " nb_8f7d6e5c4b3a2910 " ,
nodeId: " 5a4b3c2d1e0f6789abcdef12 " ,
collaboratorId: " 3c2b1a0d9e8f7654abcdef12 " ,
"userId" : " 3c2b1a0d9e8f7654abcdef12 " ,
"createdAt" : " 2024-01-15T10:30:00.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 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. " ,
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 Identifier of the notebook containing the node nodeIdpath string Yes Identifier of the node whose collaborator is being updated collaboratorIdpath string Yes ID of the collaborator whose role should change
Name Type Required Description rolestring Yes New node-scoped role. One of: admin, editor, collaborator, viewer
curl -X PATCH " https://api.hoody.com/api/v1/notes/notebooks/nb_8f7d6e5c4b3a2910/nodes/5a4b3c2d1e0f6789abcdef12/collaborators/3c2b1a0d9e8f7654abcdef12 " \
-H " Authorization: Bearer <token> " \
-H " Content-Type: application/json " \
const updated = await client . notes . collaborators . update ( {
notebookId: " nb_8f7d6e5c4b3a2910 " ,
nodeId: " 5a4b3c2d1e0f6789abcdef12 " ,
collaboratorId: " 3c2b1a0d9e8f7654abcdef12 " ,
"userId" : " 3c2b1a0d9e8f7654abcdef12 " ,
"createdAt" : " 2024-01-15T10:30:00.000Z " ,
"updatedAt" : " 2024-01-18T14:22:00.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 Identifier of the notebook containing the node nodeIdpath string Yes Identifier of the node from which to remove the collaborator collaboratorIdpath string Yes ID of the collaborator to remove
This endpoint takes no request body.
curl -X DELETE " https://api.hoody.com/api/v1/notes/notebooks/nb_8f7d6e5c4b3a2910/nodes/5a4b3c2d1e0f6789abcdef12/collaborators/3c2b1a0d9e8f7654abcdef12 " \
-H " Authorization: Bearer <token> "
await client . notes . collaborators . remove ({
notebookId: " nb_8f7d6e5c4b3a2910 " ,
nodeId: " 5a4b3c2d1e0f6789abcdef12 " ,
collaboratorId: " 3c2b1a0d9e8f7654abcdef12 " ,
"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
Manage emoji reactions on nodes. The reaction value is an emoji string of 1–64 characters.
Returns all reactions on a node with the collaborator who reacted.
Name In Type Required Description notebookIdpath string Yes Identifier of the notebook containing the node nodeIdpath string Yes Identifier of the node whose reactions are being listed
This endpoint takes no request body.
curl -X GET " https://api.hoody.com/api/v1/notes/notebooks/nb_8f7d6e5c4b3a2910/nodes/5a4b3c2d1e0f6789abcdef12/reactions " \
-H " Authorization: Bearer <token> "
const { reactions } = await client . notes . reactions . list ( {
notebookId: " nb_8f7d6e5c4b3a2910 " ,
nodeId: " 5a4b3c2d1e0f6789abcdef12 " ,
"collaboratorId" : " 3c2b1a0d9e8f7654abcdef12 " ,
"createdAt" : " 2024-01-15T10:30:00.000Z " ,
"collaboratorId" : " 9f8e7d6c5b4a3210fedcba98 " ,
"createdAt" : " 2024-01-15T11:05:00.000Z " ,
"message" : " You do not have access to this node. " ,
"message" : " Access denied "
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. " ,
"message" : " No node with this ID "
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 Identifier of the notebook containing the node nodeIdpath string Yes Identifier of the node to react to
Name Type Required Description reactionstring Yes Emoji reaction string, between 1 and 64 characters
curl -X POST " https://api.hoody.com/api/v1/notes/notebooks/nb_8f7d6e5c4b3a2910/nodes/5a4b3c2d1e0f6789abcdef12/reactions " \
-H " Authorization: Bearer <token> " \
-H " Content-Type: application/json " \
const reaction = await client . notes . reactions . add ( {
notebookId: " nb_8f7d6e5c4b3a2910 " ,
nodeId: " 5a4b3c2d1e0f6789abcdef12 " ,
"collaboratorId" : " 3c2b1a0d9e8f7654abcdef12 " ,
"createdAt" : " 2024-01-15T10:30:00.000Z "
"message" : " Invalid reaction payload. " ,
"message" : " Must be a non-empty string up to 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 Identifier of the notebook containing the node nodeIdpath string Yes Identifier of the node whose reaction should be removed reactionpath string Yes Emoji reaction string to remove
This endpoint takes no request body.
curl -X DELETE " https://api.hoody.com/api/v1/notes/notebooks/nb_8f7d6e5c4b3a2910/nodes/5a4b3c2d1e0f6789abcdef12/reactions/%F0%9F%8E%89 " \
-H " Authorization: Bearer <token> "
await client . notes . reactions . remove ({
notebookId: " nb_8f7d6e5c4b3a2910 " ,
nodeId: " 5a4b3c2d1e0f6789abcdef12 " ,
"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 and their notebook-wide role. Roles here use the owner | admin | collaborator | guest | none enum.
Creates one or more users in the notebook by username. Returns created users and any per-user errors.
Name In Type Required Description notebookIdpath string Yes Identifier of the notebook to invite users into
Name Type Required Description usersarray Yes List of users to invite. Maximum 50 entries. Each entry requires username and role. users[].usernamestring Yes Username of the user to invite users[].rolestring Yes Notebook-wide role. One of: owner, admin, collaborator, guest, none
curl -X POST " https://api.hoody.com/api/v1/notes/notebooks/nb_8f7d6e5c4b3a2910/users " \
-H " Authorization: Bearer <token> " \
-H " Content-Type: application/json " \
{ "username": "alice", "role": "collaborator" },
{ "username": "bob", "role": "admin" }
const { users , errors } = await client . notes . users . invite ( {
notebookId: " nb_8f7d6e5c4b3a2910 " ,
{ username: " alice " , role: " collaborator " },
{ username: " bob " , role: " admin " },
"id" : " 3c2b1a0d9e8f7654abcdef12 " ,
"avatar" : " https://cdn.hoody.com/avatars/alice.png " ,
"createdAt" : " 2024-01-15T10:30:00.000Z " ,
"revision" : " rev_8a7b6c5d4e3f " ,
"id" : " 9f8e7d6c5b4a3210fedcba98 " ,
"createdAt" : " 2024-01-15T10:30:01.000Z " ,
"revision" : " rev_1b2c3d4e5f6a " ,
"username" : " nonexistent_user " ,
"error" : " Username not found "
"message" : " At least one user is required. " ,
"code" : " user_input_required " ,
"message" : " Array must contain at least one entry "
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. " ,
"message" : " No notebook with this ID "
Changes the notebook role of a user. Requires owner or admin permission.
Name In Type Required Description notebookIdpath string Yes Identifier of the notebook containing the user userIdpath string Yes Identifier of the user whose role should change
Name Type Required Description rolestring Yes New notebook-wide role. One of: owner, admin, collaborator, guest, none
curl -X PATCH " https://api.hoody.com/api/v1/notes/notebooks/nb_8f7d6e5c4b3a2910/users/3c2b1a0d9e8f7654abcdef12/role " \
-H " Authorization: Bearer <token> " \
-H " Content-Type: application/json " \
const user = await client . notes . users . updateRole ( {
notebookId: " nb_8f7d6e5c4b3a2910 " ,
userId: " 3c2b1a0d9e8f7654abcdef12 " ,
"id" : " 3c2b1a0d9e8f7654abcdef12 " ,
"avatar" : " https://cdn.hoody.com/avatars/alice.png " ,
"createdAt" : " 2024-01-15T10:30:00.000Z " ,
"updatedAt" : " 2024-01-18T14:22:00.000Z " ,
"revision" : " rev_2c3d4e5f6a7b " ,
"message" : " Invalid role value. " ,
"message" : " 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. " ,
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