The Hoody Notes: Databases API provides endpoints for managing individual records within a notebook database. Use these endpoints to list, retrieve, search, create, update, and delete database records, and to filter and sort records by custom field values.
Returns a paginated list of records in a database. Supports JSON-encoded filters and sorts.
GET /api/v1/notes/notebooks/{notebookId}/databases/{databaseId}/records
Name In Type Required Description filtersquery string No JSON-encoded filter expression applied to records sortsquery string No JSON-encoded sort expression pagequery integer No Page number (default: 1) countquery integer No Records per page (default: 50) notebookIdpath string Yes ID of the parent notebook databaseIdpath string Yes ID of the target database
curl -G " https://api.hoody.com/api/v1/notes/notebooks/nb_5f8e7d6c5b4a39281706f5e4/databases/db_1a2b3c4d5e6f7890abcdef12/records " \
-H " Authorization: Bearer <token> " \
--data-urlencode ' filters=[{"field":"status","op":"eq","value":"active"}] ' \
--data-urlencode ' page=1 ' \
--data-urlencode ' count=50 '
const iterator = await client . notes . databases . listIterator ( {
notebookId: " nb_5f8e7d6c5b4a39281706f5e4 " ,
databaseId: " db_1a2b3c4d5e6f7890abcdef12 " ,
filters: ' [{"field":"status","op":"eq","value":"active"}] ' ,
sorts: ' [{"field":"createdAt","dir":"desc"}] ' ,
for await ( const record of iterator) {
"id" : " rec_a1b2c3d4e5f6789012345678 " ,
"status" : { "type" : " string " , "value" : " active " },
"owner" : { "type" : " string " , "value" : " Jane Cooper " }
"createdAt" : " 2025-01-15T10:32:00.000Z " ,
"updatedAt" : " 2025-03-04T08:15:00.000Z "
"message" : " Invalid JSON in filters parameter. " ,
Error Code Title Description Resolution bad_requestInvalid filter or sort parameters The filters or sorts query parameter contains invalid JSON Verify the JSON structure of filter and sort parameters
"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" : " Database not found. " ,
Error Code Title Description Resolution not_foundDatabase not found No database node exists with the provided ID Verify database ID using listNodes
Returns a single record by ID from a database.
GET /api/v1/notes/notebooks/{notebookId}/databases/{databaseId}/records/{recordId}
Name In Type Required Description notebookIdpath string Yes ID of the parent notebook databaseIdpath string Yes ID of the target database recordIdpath string Yes ID of the record to retrieve
curl " https://api.hoody.com/api/v1/notes/notebooks/nb_5f8e7d6c5b4a39281706f5e4/databases/db_1a2b3c4d5e6f7890abcdef12/records/rec_a1b2c3d4e5f6789012345678 " \
-H " Authorization: Bearer <token> "
const record = await client . notes . databases . get ( {
notebookId: " nb_5f8e7d6c5b4a39281706f5e4 " ,
databaseId: " db_1a2b3c4d5e6f7890abcdef12 " ,
recordId: " rec_a1b2c3d4e5f6789012345678 " ,
"id" : " rec_a1b2c3d4e5f6789012345678 " ,
"avatar" : " https://cdn.hoody.com/avatars/acme.png " ,
"status" : { "type" : " string " , "value" : " active " },
"priority" : { "type" : " number " , "value" : 3 },
"tags" : { "type" : " string_array " , "value" : [ " enterprise " , " q1 " ] }
"createdAt" : " 2025-01-15T10:32:00.000Z " ,
"updatedAt" : " 2025-03-04T08:15: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" : " Record not found. " ,
Error Code Title Description Resolution not_foundRecord not found No record with the given ID exists in the database Verify record ID using listRecords or searchRecords
Searches records in a database by name. Supports excluding specific record IDs.
GET /api/v1/notes/notebooks/{notebookId}/databases/{databaseId}/records/search
Name In Type Required Description qquery string No Name query string (default: "") excludequery string No JSON array of record IDs to exclude from results notebookIdpath string Yes ID of the parent notebook databaseIdpath string Yes ID of the target database
curl -G " https://api.hoody.com/api/v1/notes/notebooks/nb_5f8e7d6c5b4a39281706f5e4/databases/db_1a2b3c4d5e6f7890abcdef12/records/search " \
-H " Authorization: Bearer <token> " \
--data-urlencode ' q=Acme ' \
--data-urlencode ' exclude=["rec_a1b2c3d4e5f6789012345678"] '
const results = await client . notes . databases . search ( {
notebookId: " nb_5f8e7d6c5b4a39281706f5e4 " ,
databaseId: " db_1a2b3c4d5e6f7890abcdef12 " ,
exclude: ' ["rec_a1b2c3d4e5f6789012345678"] ' ,
"id" : " rec_9876543210abcdef12345678 " ,
"name" : " Acme Industries " ,
"status" : { "type" : " string " , "value" : " prospect " }
"createdAt" : " 2025-02-20T14:05:00.000Z " ,
"updatedAt" : " 2025-03-01T09:42:00.000Z "
"message" : " Invalid JSON in exclude parameter. " ,
Error Code Title Description Resolution bad_requestInvalid exclude parameter The exclude query parameter contains invalid JSON Provide a valid JSON array of record IDs to exclude
"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" : " Database not found. " ,
Error Code Title Description Resolution not_foundDatabase not found No database node exists with the provided ID Verify database ID using listNodes
Creates a new record in a database with a name and custom field values.
POST /api/v1/notes/notebooks/{notebookId}/databases/{databaseId}/records
Name In Type Required Description notebookIdpath string Yes ID of the parent notebook databaseIdpath string Yes ID of the target database
Field Type Required Description idstring No Optional client-supplied record ID namestring No Record name (default: "Untitled") avatarstring | null No Avatar URL or null fieldsobject No Map of custom field names to values (default: {})
curl -X POST " https://api.hoody.com/api/v1/notes/notebooks/nb_5f8e7d6c5b4a39281706f5e4/databases/db_1a2b3c4d5e6f7890abcdef12/records " \
-H " Authorization: Bearer <token> " \
-H " Content-Type: application/json " \
"tags": ["q1", "outbound"]
const record = await client . notes . databases . create ( {
notebookId: " nb_5f8e7d6c5b4a39281706f5e4 " ,
databaseId: " db_1a2b3c4d5e6f7890abcdef12 " ,
tags: [ " q1 " , " outbound " ] ,
"id" : " rec_abcdef1234567890fedcba98 " ,
"tags" : [ " q1 " , " outbound " ]
"createdAt" : " 2025-04-10T16:20:00.000Z " ,
"updatedAt" : " 2025-04-10T16:20:00.000Z "
"message" : " Invalid request body. " ,
{ "path" : " name " , "message" : " Expected string " }
"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" : " Database not found. " ,
Error Code Title Description Resolution not_foundDatabase not found No database node exists with the provided ID Verify database ID using listNodes
"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 a record name, avatar, or field values. Fields are merged with existing values.
PATCH /api/v1/notes/notebooks/{notebookId}/databases/{databaseId}/records/{recordId}
Name In Type Required Description notebookIdpath string Yes ID of the parent notebook databaseIdpath string Yes ID of the target database recordIdpath string Yes ID of the record to update
Field Type Required Description namestring No New record name avatarstring | null No New avatar URL or null fieldsobject No Map of field names to typed { type, value } objects to merge into the existing record
Each entry in fields must specify a type and a matching value. Supported type values are boolean, string, string_array, number, and text.
curl -X PATCH " https://api.hoody.com/api/v1/notes/notebooks/nb_5f8e7d6c5b4a39281706f5e4/databases/db_1a2b3c4d5e6f7890abcdef12/records/rec_a1b2c3d4e5f6789012345678 " \
-H " Authorization: Bearer <token> " \
-H " Content-Type: application/json " \
"name": "Acme Corp - Enterprise",
"status": { "type": "string", "value": "closed-won" },
"priority": { "type": "number", "value": 1 }
const record = await client . notes . databases . update ( {
notebookId: " nb_5f8e7d6c5b4a39281706f5e4 " ,
databaseId: " db_1a2b3c4d5e6f7890abcdef12 " ,
recordId: " rec_a1b2c3d4e5f6789012345678 " ,
name: " Acme Corp - Enterprise " ,
status: { type: " string " , value: " closed-won " },
priority: { type: " number " , value: 1 },
"id" : " rec_a1b2c3d4e5f6789012345678 " ,
"name" : " Acme Corp - Enterprise " ,
"avatar" : " https://cdn.hoody.com/avatars/acme.png " ,
"status" : { "type" : " string " , "value" : " closed-won " },
"priority" : { "type" : " number " , "value" : 1 },
"owner" : { "type" : " string " , "value" : " Jane Cooper " }
"createdAt" : " 2025-01-15T10:32:00.000Z " ,
"updatedAt" : " 2025-04-12T11:08:00.000Z "
"message" : " Invalid field type. " ,
{ "path" : " fields.priority " , "message" : " Type must be one of: boolean, string, string_array, number, text " }
"message" : " You do not have permission to perform this action. " ,
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" : " Record not found. " ,
Error Code Title Description Resolution not_foundRecord not found No record with the given ID exists in the database Verify record ID using listRecords or searchRecords
"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 record from a database.
DELETE /api/v1/notes/notebooks/{notebookId}/databases/{databaseId}/records/{recordId}
Name In Type Required Description notebookIdpath string Yes ID of the parent notebook databaseIdpath string Yes ID of the target database recordIdpath string Yes ID of the record to delete
curl -X DELETE " https://api.hoody.com/api/v1/notes/notebooks/nb_5f8e7d6c5b4a39281706f5e4/databases/db_1a2b3c4d5e6f7890abcdef12/records/rec_a1b2c3d4e5f6789012345678 " \
-H " Authorization: Bearer <token> "
const result = await client . notes . databases . delete ( {
notebookId: " nb_5f8e7d6c5b4a39281706f5e4 " ,
databaseId: " db_1a2b3c4d5e6f7890abcdef12 " ,
recordId: " rec_a1b2c3d4e5f6789012345678 " ,
"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" : " Record not found. " ,
Error Code Title Description Resolution not_foundRecord not found No record with the given ID exists in the database Verify record ID using listRecords or searchRecords
"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