Skip to content

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.

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

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

Returns all collaborators on a node with their roles and user info.

NameInTypeRequiredDescription
notebookIdpathstringYesIdentifier of the notebook containing the node
nodeIdpathstringYesIdentifier of the node whose collaborators are being listed

This endpoint takes no request body.

Terminal window
curl -X GET "https://api.hoody.com/api/v1/notes/notebooks/nb_8f7d6e5c4b3a2910/nodes/5a4b3c2d1e0f6789abcdef12/collaborators" \
-H "Authorization: Bearer <token>"
{
"collaborators": [
{
"userId": "3c2b1a0d9e8f7654abcdef12",
"role": "editor",
"name": "Alice Johnson",
"username": "alice",
"avatar": "https://cdn.hoody.com/avatars/alice.png",
"createdAt": "2024-01-15T10:30:00.000Z",
"updatedAt": null
},
{
"userId": "9f8e7d6c5b4a3210fedcba98",
"role": "viewer",
"name": "Bob Smith",
"username": "bob",
"avatar": null,
"createdAt": "2024-01-16T08:15:00.000Z",
"updatedAt": "2024-01-17T12:00:00.000Z"
}
]
}

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

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

Adds a user as a collaborator on a node with a specified role. Requires admin permission.

NameInTypeRequiredDescription
notebookIdpathstringYesIdentifier of the notebook containing the node
nodeIdpathstringYesIdentifier of the node on which to add the collaborator
NameTypeRequiredDescription
collaboratorIdstringYesID of the user to add as a collaborator
rolestringYesNode-scoped role. One of: admin, editor, collaborator, viewer
Terminal window
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" \
-d '{
"collaboratorId": "3c2b1a0d9e8f7654abcdef12",
"role": "editor"
}'
{
"userId": "3c2b1a0d9e8f7654abcdef12",
"role": "editor",
"createdAt": "2024-01-15T10:30:00.000Z",
"updatedAt": null
}

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

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

Changes the role of an existing collaborator. Requires admin permission.

NameInTypeRequiredDescription
notebookIdpathstringYesIdentifier of the notebook containing the node
nodeIdpathstringYesIdentifier of the node whose collaborator is being updated
collaboratorIdpathstringYesID of the collaborator whose role should change
NameTypeRequiredDescription
rolestringYesNew node-scoped role. One of: admin, editor, collaborator, viewer
Terminal window
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" \
-d '{
"role": "viewer"
}'
{
"userId": "3c2b1a0d9e8f7654abcdef12",
"role": "viewer",
"createdAt": "2024-01-15T10:30:00.000Z",
"updatedAt": "2024-01-18T14:22:00.000Z"
}

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

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

Removes a collaborator from a node. Requires admin permission.

NameInTypeRequiredDescription
notebookIdpathstringYesIdentifier of the notebook containing the node
nodeIdpathstringYesIdentifier of the node from which to remove the collaborator
collaboratorIdpathstringYesID of the collaborator to remove

This endpoint takes no request body.

Terminal window
curl -X DELETE "https://api.hoody.com/api/v1/notes/notebooks/nb_8f7d6e5c4b3a2910/nodes/5a4b3c2d1e0f6789abcdef12/collaborators/3c2b1a0d9e8f7654abcdef12" \
-H "Authorization: Bearer <token>"
{
"success": true
}

Manage emoji reactions on nodes. The reaction value is an emoji string of 1–64 characters.

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

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

Returns all reactions on a node with the collaborator who reacted.

NameInTypeRequiredDescription
notebookIdpathstringYesIdentifier of the notebook containing the node
nodeIdpathstringYesIdentifier of the node whose reactions are being listed

This endpoint takes no request body.

Terminal window
curl -X GET "https://api.hoody.com/api/v1/notes/notebooks/nb_8f7d6e5c4b3a2910/nodes/5a4b3c2d1e0f6789abcdef12/reactions" \
-H "Authorization: Bearer <token>"
{
"reactions": [
{
"reaction": "🎉",
"collaboratorId": "3c2b1a0d9e8f7654abcdef12",
"createdAt": "2024-01-15T10:30:00.000Z",
"name": "Alice Johnson",
"username": "alice"
},
{
"reaction": "👍",
"collaboratorId": "9f8e7d6c5b4a3210fedcba98",
"createdAt": "2024-01-15T11:05:00.000Z",
"name": "Bob Smith",
"username": "bob"
}
]
}

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

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

Adds an emoji reaction to a node on behalf of the current user.

NameInTypeRequiredDescription
notebookIdpathstringYesIdentifier of the notebook containing the node
nodeIdpathstringYesIdentifier of the node to react to
NameTypeRequiredDescription
reactionstringYesEmoji reaction string, between 1 and 64 characters
Terminal window
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" \
-d '{
"reaction": "🎉"
}'
{
"reaction": "🎉",
"collaboratorId": "3c2b1a0d9e8f7654abcdef12",
"createdAt": "2024-01-15T10:30:00.000Z"
}

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

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

Removes an emoji reaction from a node for the current user.

NameInTypeRequiredDescription
notebookIdpathstringYesIdentifier of the notebook containing the node
nodeIdpathstringYesIdentifier of the node whose reaction should be removed
reactionpathstringYesEmoji reaction string to remove

This endpoint takes no request body.

Terminal window
curl -X DELETE "https://api.hoody.com/api/v1/notes/notebooks/nb_8f7d6e5c4b3a2910/nodes/5a4b3c2d1e0f6789abcdef12/reactions/%F0%9F%8E%89" \
-H "Authorization: Bearer <token>"
{
"success": true
}

Manage users and their notebook-wide role. Roles here use the owner | admin | collaborator | guest | none enum.

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

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

Creates one or more users in the notebook by username. Returns created users and any per-user errors.

NameInTypeRequiredDescription
notebookIdpathstringYesIdentifier of the notebook to invite users into
NameTypeRequiredDescription
usersarrayYesList of users to invite. Maximum 50 entries. Each entry requires username and role.
users[].usernamestringYesUsername of the user to invite
users[].rolestringYesNotebook-wide role. One of: owner, admin, collaborator, guest, none
Terminal window
curl -X POST "https://api.hoody.com/api/v1/notes/notebooks/nb_8f7d6e5c4b3a2910/users" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"users": [
{ "username": "alice", "role": "collaborator" },
{ "username": "bob", "role": "admin" }
]
}'
{
"users": [
{
"id": "3c2b1a0d9e8f7654abcdef12",
"name": "Alice Johnson",
"avatar": "https://cdn.hoody.com/avatars/alice.png",
"role": "collaborator",
"customName": null,
"customAvatar": null,
"createdAt": "2024-01-15T10:30:00.000Z",
"updatedAt": null,
"revision": "rev_8a7b6c5d4e3f",
"status": 1
},
{
"id": "9f8e7d6c5b4a3210fedcba98",
"name": "Bob Smith",
"avatar": null,
"role": "admin",
"customName": "Robert",
"customAvatar": null,
"createdAt": "2024-01-15T10:30:01.000Z",
"updatedAt": null,
"revision": "rev_1b2c3d4e5f6a",
"status": 2
}
],
"errors": [
{
"username": "nonexistent_user",
"error": "Username not found"
}
]
}

PATCH /api/v1/notes/notebooks/{notebookId}/users/{userId}/role

Section titled “PATCH /api/v1/notes/notebooks/{notebookId}/users/{userId}/role”

Changes the notebook role of a user. Requires owner or admin permission.

NameInTypeRequiredDescription
notebookIdpathstringYesIdentifier of the notebook containing the user
userIdpathstringYesIdentifier of the user whose role should change
NameTypeRequiredDescription
rolestringYesNew notebook-wide role. One of: owner, admin, collaborator, guest, none
Terminal window
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" \
-d '{
"role": "admin"
}'
{
"id": "3c2b1a0d9e8f7654abcdef12",
"name": "Alice Johnson",
"avatar": "https://cdn.hoody.com/avatars/alice.png",
"role": "admin",
"customName": null,
"customAvatar": null,
"createdAt": "2024-01-15T10:30:00.000Z",
"updatedAt": "2024-01-18T14:22:00.000Z",
"revision": "rev_2c3d4e5f6a7b",
"status": 1
}