The Notes: Databases API lets you manage the individual records stored inside database nodes within a notebook. Use these endpoints to list, retrieve, search, create, update, and delete records — including the custom field values defined by the database schema.
Returns a paginated list of records in a database. Supports JSON-encoded filters and sorts.
Name In Type Required Description notebookIdpath string Yes ID of the parent notebook databaseIdpath string Yes ID of the database node filtersquery string No JSON-encoded filter expression applied to record fields sortsquery string No JSON-encoded sort expression applied to record fields pagequery integer No Page number to retrieve. Default: 1 countquery integer No Number of records to return per page. Default: 50
curl -G " https://api.hoody.com/api/v1/notes/notebooks/nb_8f3c1a2b/databases/db_4e9d6f0a/records " \
-H " Authorization: Bearer <token> " \
--data-urlencode ' filters=[{"field":"status","op":"eq","value":"active"}] ' \
--data-urlencode ' sorts=[{"field":"name","dir":"asc"}] ' \
--data-urlencode ' page=1 ' \
--data-urlencode ' count=50 '
const page = await client . notes . databases . listIterator ( {
notebookId: " nb_8f3c1a2b " ,
databaseId: " db_4e9d6f0a " ,
filters: ' [{"field":"status","op":"eq","value":"active"}] ' ,
sorts: ' [{"field":"name","dir":"asc"}] ' ,
"id" : " rec_01HQ2XK9A1B2C3D4E5F6G7H8J9 " ,
"status" : { "type" : " string " , "value" : " active " },
"owner" : { "type" : " string " , "value" : " user_abc123 " }
"id" : " rec_01HQ2XK9B2C3D4E5F6G7H8J9K0 " ,
"status" : { "type" : " string " , "value" : " active " },
"owner" : { "type" : " string " , "value" : " user_def456 " }
"message" : " Invalid JSON in filters parameter. " ,
{ "path" : " filters " , "message" : " Unexpected token at position 12 " }
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.
Name In Type Required Description notebookIdpath string Yes ID of the parent notebook databaseIdpath string Yes ID of the database node recordIdpath string Yes ID of the record to retrieve
curl " https://api.hoody.com/api/v1/notes/notebooks/nb_8f3c1a2b/databases/db_4e9d6f0a/records/rec_01HQ2XK9A1B2C3D4E5F6G7H8J9 " \
-H " Authorization: Bearer <token> "
const record = await client . notes . databases . get ( {
notebookId: " nb_8f3c1a2b " ,
databaseId: " db_4e9d6f0a " ,
recordId: " rec_01HQ2XK9A1B2C3D4E5F6G7H8J9 " ,
"id" : " rec_01HQ2XK9A1B2C3D4E5F6G7H8J9 " ,
"avatar" : " https://cdn.hoody.com/avatars/acme.png " ,
"status" : { "type" : " string " , "value" : " active " },
"renewal" : { "type" : " number " , "value" : 365 },
"tags" : { "type" : " string_array " , "value" : [ " enterprise " , " us-east " ] },
"notes" : { "type" : " text " , "value" : " Renewal in Q4. " }
"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.
Name In Type Required Description notebookIdpath string Yes ID of the parent notebook databaseIdpath string Yes ID of the database node qquery string No Name query string. Default: "" excludequery string No JSON-encoded array of record IDs to exclude from results
curl -G " https://api.hoody.com/api/v1/notes/notebooks/nb_8f3c1a2b/databases/db_4e9d6f0a/records/search " \
-H " Authorization: Bearer <token> " \
--data-urlencode ' q=Acme ' \
--data-urlencode ' exclude=["rec_01HQ2XK9A1B2C3D4E5F6G7H8J9"] '
const result = await client . notes . databases . search ( {
notebookId: " nb_8f3c1a2b " ,
databaseId: " db_4e9d6f0a " ,
exclude: ' ["rec_01HQ2XK9A1B2C3D4E5F6G7H8J9"] ' ,
"id" : " rec_01HQ2XK9B2C3D4E5F6G7H8J9K0 " ,
"name" : " Acme Industries " ,
"status" : { "type" : " string " , "value" : " active " }
"message" : " Invalid JSON in exclude parameter. " ,
{ "path" : " exclude " , "message" : " Expected an array of record IDs " }
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.
Name In Type Required Description notebookIdpath string Yes ID of the parent notebook databaseIdpath string Yes ID of the database node
Name Type Required Description idstring No Optional client-supplied record ID namestring No Record name. Default: "Untitled" avatarstring | null No Avatar image URL for the record, or null to clear fieldsobject No Key-value map of field names to field values. Default: {}
curl -X POST " https://api.hoody.com/api/v1/notes/notebooks/nb_8f3c1a2b/databases/db_4e9d6f0a/records " \
-H " Authorization: Bearer <token> " \
-H " Content-Type: application/json " \
"status": { "type": "string", "value": "prospect" },
"tags": { "type": "string_array", "value": ["smb", "emea"] }
const record = await client . notes . databases . create ( {
notebookId: " nb_8f3c1a2b " ,
databaseId: " db_4e9d6f0a " ,
status: { type: " string " , value: " prospect " },
tags: { type: " string_array " , value: [ " smb " , " emea " ] },
"id" : " rec_01HQ2XL1C3D4E5F6G7H8J9K0L1 " ,
"status" : { "type" : " string " , "value" : " prospect " },
"tags" : { "type" : " string_array " , value : [ " smb " , " emea " ] }
"message" : " Invalid request body. " ,
{ "path" : " fields.tags " , "message" : " Field type does not match the database schema " }
"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" : " 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.
Name In Type Required Description notebookIdpath string Yes ID of the parent notebook databaseIdpath string Yes ID of the database node recordIdpath string Yes ID of the record to update
Name Type Required Description namestring No New record name avatarstring | null No New avatar image URL, or null to clear the existing avatar fieldsobject No Partial map of field names to field values. Each value is an object with a type and a typed value (boolean, string, string_array, number, or text). Provided fields are merged with existing values
curl -X PATCH " https://api.hoody.com/api/v1/notes/notebooks/nb_8f3c1a2b/databases/db_4e9d6f0a/records/rec_01HQ2XK9A1B2C3D4E5F6G7H8J9 " \
-H " Authorization: Bearer <token> " \
-H " Content-Type: application/json " \
"name": "Acme Corp (Renewed)",
"status": { "type": "string", "value": "renewed" },
"renewal": { "type": "number", "value": 730 }
const record = await client . notes . databases . update ( {
notebookId: " nb_8f3c1a2b " ,
databaseId: " db_4e9d6f0a " ,
recordId: " rec_01HQ2XK9A1B2C3D4E5F6G7H8J9 " ,
name: " Acme Corp (Renewed) " ,
status: { type: " string " , value: " renewed " },
renewal: { type: " number " , value: 730 },
"id" : " rec_01HQ2XK9A1B2C3D4E5F6G7H8J9 " ,
"name" : " Acme Corp (Renewed) " ,
"avatar" : " https://cdn.hoody.com/avatars/acme.png " ,
"status" : { "type" : " string " , "value" : " renewed " },
"renewal" : { "type" : " number " , "value" : 730 },
"owner" : { "type" : " string " , "value" : " user_abc123 " }
"message" : " Invalid field value type. " ,
{ "path" : " fields.renewal " , "message" : " Expected type \" number \" " }
"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
Note
Field values supplied on update are typed. Each value object must include a type field that matches the value’s runtime type: boolean, string, string_array, number, or text. Mismatched types return a 400.
Permanently deletes a record from a database.
Name In Type Required Description notebookIdpath string Yes ID of the parent notebook databaseIdpath string Yes ID of the database node recordIdpath string Yes ID of the record to delete
curl -X DELETE " https://api.hoody.com/api/v1/notes/notebooks/nb_8f3c1a2b/databases/db_4e9d6f0a/records/rec_01HQ2XK9A1B2C3D4E5F6G7H8J9 " \
-H " Authorization: Bearer <token> "
await client . notes . databases . delete ({
notebookId: " nb_8f3c1a2b " ,
databaseId: " db_4e9d6f0a " ,
recordId: " rec_01HQ2XK9A1B2C3D4E5F6G7H8J9 " ,
"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