The Notes Databases API lets you read, search, create, update, and delete individual records inside a database notebook node. Use these endpoints to enumerate pages of records with JSON-encoded filters and sorts, fetch a single record by ID, search records by name, create new records with typed field values, merge updates into an existing record, or permanently remove a record.
All requests target the Notes service running inside a container. The base URL is https://{projectId}-{containerId}-notes-1.{server}.containers.hoody.com, where {projectId} and {containerId} are 24-character hexadecimal identifiers and {server} is the cluster node label such as node-us.
GET /api/v1/notes/notebooks/{notebookId}/databases/{databaseId}/records
Returns a paginated list of records in a database. Supports JSON-encoded filters and sorts.
Name In Type Required Description filtersquery string No JSON-encoded filter expression applied to records. sortsquery string No JSON-encoded sort expression applied to records. pagequery integer No Page number to retrieve. Default: 1. countquery integer No Number of records per page. Default: 50. notebookIdpath string Yes Identifier of the parent notebook. databaseIdpath string Yes Identifier of the database node.
This endpoint takes no request body.
curl -X GET " https://{projectId}-{containerId}-notes-1.{server}.containers.hoody.com/api/v1/notes/notebooks/{notebookId}/databases/{databaseId}/records?page=1&count=50 " \
-H " Authorization: Bearer <token> "
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-notes-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . notes . databases . listIterator ( ' 67e89abc123def456789abcd ' , ' 890abcdef12345678901cdef ' , { page : 1 , count : 50 });
" id " : " 456789abcd67e89abc123def " ,
" status " : { " type " : " string " , " value " : " active " },
" priority " : { " type " : " number " , " value " : 3 }
" id " : " 56789abcd67e89abc123def0 " ,
" name " : " Globex Industries " ,
" status " : { " type " : " string " , " value " : " pending " },
" tags " : { " type " : " string_array " , " value " : [ " q1 " , " review " ] }
" message " : " Invalid JSON in filters parameter. " ,
" message " : " Unexpected token at position 4 "
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 the 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 the 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 the database ID using listNodes
GET /api/v1/notes/notebooks/{notebookId}/databases/{databaseId}/records/{recordId}
Returns a single record by ID from a database.
Name In Type Required Description notebookIdpath string Yes Identifier of the parent notebook. databaseIdpath string Yes Identifier of the database node. recordIdpath string Yes Identifier of the record.
This endpoint takes no request body.
curl -X GET " https://{projectId}-{containerId}-notes-1.{server}.containers.hoody.com/api/v1/notes/notebooks/{notebookId}/databases/{databaseId}/records/{recordId} " \
-H " Authorization: Bearer <token> "
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-notes-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . notes . databases . get ( ' 67e89abc123def456789abcd ' , ' 890abcdef12345678901cdef ' , ' 456789abcd67e89abc123def ' );
" id " : " 456789abcd67e89abc123def " ,
" status " : { " type " : " string " , " value " : " active " },
" priority " : { " type " : " number " , " value " : 3 },
" notes " : { " type " : " text " , " value " : " Key enterprise account. " }
" 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 the 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 the record ID using listRecords or searchRecords
GET /api/v1/notes/notebooks/{notebookId}/databases/{databaseId}/records/search
Searches records in a database by name. Supports excluding specific record IDs from the result set.
Name In Type Required Description qquery string No Search query matched against record names. Default: "". excludequery string No JSON-encoded array of record IDs to exclude from the results. notebookIdpath string Yes Identifier of the parent notebook. databaseIdpath string Yes Identifier of the database node.
This endpoint takes no request body.
curl -X GET " https://{projectId}-{containerId}-notes-1.{server}.containers.hoody.com/api/v1/notes/notebooks/{notebookId}/databases/{databaseId}/records/search?q=acme " \
-H " Authorization: Bearer <token> "
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-notes-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . notes . databases . search ( ' 67e89abc123def456789abcd ' , ' 890abcdef12345678901cdef ' , { q : ' acme ' });
" id " : " 456789abcd67e89abc123def " ,
" status " : { " type " : " string " , " value " : " active " }
" message " : " Invalid JSON in exclude parameter. " ,
" message " : " Expected JSON array of strings. "
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 the 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 the database ID using listNodes
POST /api/v1/notes/notebooks/{notebookId}/databases/{databaseId}/records
Creates a new record in a database with a name and custom field values.
Name In Type Required Description notebookIdpath string Yes Identifier of the parent notebook. databaseIdpath string Yes Identifier of the database node.
Field Type Required Description idstring No Optional client-supplied record ID. namestring No Display name of the record. Default: "Untitled". avatarstring | null No Optional avatar identifier or URL. fieldsobject No Map of field IDs to typed field values. Default: {}.
" name " : " Vendor onboarding " ,
" status " : { " type " : " string " , " value " : " pending " },
" priority " : { " type " : " number " , " value " : 2 },
" tags " : { " type " : " string_array " , " value " : [ " q1 " , " review " ] }
curl -X POST " https://{projectId}-{containerId}-notes-1.{server}.containers.hoody.com/api/v1/notes/notebooks/{notebookId}/databases/{databaseId}/records " \
-H " Authorization: Bearer <token> " \
-H " Content-Type: application/json " \
"name": "Vendor onboarding",
"status": { "type": "string", "value": "pending" },
"priority": { "type": "number", "value": 2 },
"tags": { "type": "string_array", "value": ["q1", "review"] }
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-notes-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . notes . databases . create ( ' 67e89abc123def456789abcd ' , ' 890abcdef12345678901cdef ' , {
name : ' Vendor onboarding ' ,
status : { type : ' string ' , value : ' pending ' },
priority : { type : ' number ' , value : 2 },
tags : { type : ' string_array ' , value : [ ' q1 ' , ' review ' ] },
" id " : " abc456789abcd67e89abc12 " ,
" name " : " Vendor onboarding " ,
" status " : { " type " : " string " , " value " : " pending " },
" priority " : { " type " : " number " , " value " : 2 },
" tags " : { " type " : " string_array " , " value " : [ " q1 " , " review " ] }
" message " : " Validation failed. " ,
{ " path " : " fields.priority.type " , " message " : " Unknown field type 'integer'. " }
" 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 the 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 the 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
PATCH /api/v1/notes/notebooks/{notebookId}/databases/{databaseId}/records/{recordId}
Updates a record name, avatar, or field values. Submitted fields are merged with the existing field map.
Name In Type Required Description notebookIdpath string Yes Identifier of the parent notebook. databaseIdpath string Yes Identifier of the database node. recordIdpath string Yes Identifier of the record.
Field Type Required Description namestring No New display name for the record. avatarstring | null No New avatar identifier or URL. fieldsobject No Map of field IDs to typed field values. Values are merged with existing fields.
" name " : " Vendor onboarding - in progress " ,
" status " : { " type " : " string " , " value " : " in_progress " }
curl -X PATCH " https://{projectId}-{containerId}-notes-1.{server}.containers.hoody.com/api/v1/notes/notebooks/{notebookId}/databases/{databaseId}/records/{recordId} " \
-H " Authorization: Bearer <token> " \
-H " Content-Type: application/json " \
"name": "Vendor onboarding - in progress",
"status": { "type": "string", "value": "in_progress" }
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-notes-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . notes . databases . update ( ' 67e89abc123def456789abcd ' , ' 890abcdef12345678901cdef ' , ' 456789abcd67e89abc123def ' , {
name : ' Vendor onboarding - in progress ' ,
status : { type : ' string ' , value : ' in_progress ' },
" id " : " 456789abcd67e89abc123def " ,
" name " : " Vendor onboarding - in progress " ,
" status " : { " type " : " string " , " value " : " in_progress " },
" priority " : { " type " : " number " , " value " : 2 }
" message " : " Validation failed. " ,
{ " path " : " fields.status.type " , " message " : " Unknown field type 'enum'. " }
" 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 the 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 the 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
DELETE /api/v1/notes/notebooks/{notebookId}/databases/{databaseId}/records/{recordId}
Permanently deletes a record from a database.
Name In Type Required Description notebookIdpath string Yes Identifier of the parent notebook. databaseIdpath string Yes Identifier of the database node. recordIdpath string Yes Identifier of the record.
This endpoint takes no request body.
curl -X DELETE " https://{projectId}-{containerId}-notes-1.{server}.containers.hoody.com/api/v1/notes/notebooks/{notebookId}/databases/{databaseId}/records/{recordId} " \
-H " Authorization: Bearer <token> "
import { HoodyClient } from ' hoody-sdk ' ;
const client = new HoodyClient ({ baseURL : ' https://{projectId}-{containerId}-notes-1.{server}.containers.hoody.com ' , token : process . env . HOODY_TOKEN });
await client . notes . databases . delete ( ' 67e89abc123def456789abcd ' , ' 890abcdef12345678901cdef ' , ' 456789abcd67e89abc123def ' );
" 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 the 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