Databases and fields
The workspace field registry, databases and their bound fields, saved views, and row memberships.
29 operations. Every path is relative to the instance origin; every response body is JSON unless stated. See API for authentication, errors and pagination.
GET /api/v1/workspaces/{workspaceId}/fields
List a workspace's registry fields.
listFields · token scope: content:read
Path parameters
workspaceId· string (uuid) — required
Query parameters
cursor· string — length 1–∞limit· integer — 1–100
Response 200 — application/json
items· object[] — requiredid· string (uuid) — requiredworkspaceId· string (uuid) — requiredkey· string — required, length 1–100name· string — requiredtype·"text"|"number"|"select"|"multi_select"|"date"|"person"|"checkbox"|"url"|"relation"|"formula"— requiredconfig· object — requiredcreatedAt· string (date-time) — required
nextCursor· string | null — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
POST /api/v1/workspaces/{workspaceId}/fields
Create a workspace field (typed registry column).
createField · token scope: content:write
Path parameters
workspaceId· string (uuid) — required
Request body — application/json, required
key· string — length 1–100name· string — required, length 1–200type·"text"|"number"|"select"|"multi_select"|"date"|"person"|"checkbox"|"url"|"relation"|"formula"— requiredconfig· object
Response 200 — application/json
id· string (uuid) — requiredworkspaceId· string (uuid) — requiredkey· string — required, length 1–100name· string — requiredtype·"text"|"number"|"select"|"multi_select"|"date"|"person"|"checkbox"|"url"|"relation"|"formula"— requiredconfig· object — requiredcreatedAt· string (date-time) — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
GET /api/v1/workspaces/{workspaceId}/fields/{fieldId}
Get a single field.
getField · token scope: content:read
Path parameters
workspaceId· string (uuid) — requiredfieldId· string (uuid) — required
Response 200 — application/json
id· string (uuid) — requiredworkspaceId· string (uuid) — requiredkey· string — required, length 1–100name· string — requiredtype·"text"|"number"|"select"|"multi_select"|"date"|"person"|"checkbox"|"url"|"relation"|"formula"— requiredconfig· object — requiredcreatedAt· string (date-time) — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
PATCH /api/v1/workspaces/{workspaceId}/fields/{fieldId}
Update a field name and/or config (type changes go through retype).
updateField · token scope: content:write
Path parameters
workspaceId· string (uuid) — requiredfieldId· string (uuid) — required
Request body — application/json, required
name· string — length 1–200config· object
Response 200 — application/json
id· string (uuid) — requiredworkspaceId· string (uuid) — requiredkey· string — required, length 1–100name· string — requiredtype·"text"|"number"|"select"|"multi_select"|"date"|"person"|"checkbox"|"url"|"relation"|"formula"— requiredconfig· object — requiredcreatedAt· string (date-time) — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
DELETE /api/v1/workspaces/{workspaceId}/fields/{fieldId}
Delete a field from the registry (unbinds it everywhere and strips its page values). Returns the deleted field.
deleteField · token scope: content:write
Path parameters
workspaceId· string (uuid) — requiredfieldId· string (uuid) — required
Response 200 — application/json
id· string (uuid) — requiredworkspaceId· string (uuid) — requiredkey· string — required, length 1–100name· string — requiredtype·"text"|"number"|"select"|"multi_select"|"date"|"person"|"checkbox"|"url"|"relation"|"formula"— requiredconfig· object — requiredcreatedAt· string (date-time) — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
POST /api/v1/workspaces/{workspaceId}/fields/{fieldId}/retype
Change a field type, converting stored page values (bounded/chunked). Illegal targets (to/from relation or formula) are rejected (400).
retypeField · token scope: content:write
Path parameters
workspaceId· string (uuid) — requiredfieldId· string (uuid) — required
Request body — application/json, required
type·"text"|"number"|"select"|"multi_select"|"date"|"person"|"checkbox"|"url"|"relation"|"formula"— requiredconfig· object
Response 200 — application/json
id· string (uuid) — requiredworkspaceId· string (uuid) — requiredkey· string — required, length 1–100name· string — requiredtype·"text"|"number"|"select"|"multi_select"|"date"|"person"|"checkbox"|"url"|"relation"|"formula"— requiredconfig· object — requiredcreatedAt· string (date-time) — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
POST /api/v1/workspaces/{workspaceId}/fields/{fieldId}/merge
Merge this field into a target field: move page values, rebind databases, then delete this (source) field. Returns the target field.
mergeField · token scope: content:write
Path parameters
workspaceId· string (uuid) — requiredfieldId· string (uuid) — required
Request body — application/json, required
targetFieldId· string (uuid) — required
Response 200 — application/json
id· string (uuid) — requiredworkspaceId· string (uuid) — requiredkey· string — required, length 1–100name· string — requiredtype·"text"|"number"|"select"|"multi_select"|"date"|"person"|"checkbox"|"url"|"relation"|"formula"— requiredconfig· object — requiredcreatedAt· string (date-time) — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
GET /api/v1/workspaces/{workspaceId}/fields/{fieldId}/usage
Report how widely a field is used (databases bound, pages carrying it).
getFieldUsage · token scope: content:read
Path parameters
workspaceId· string (uuid) — requiredfieldId· string (uuid) — required
Response 200 — application/json
fieldId· string (uuid) — requireddatabaseCount· integer — required, 0–9007199254740991pageCount· integer — required, 0–9007199254740991
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
GET /api/v1/workspaces/{workspaceId}/databases
List databases in a workspace (optionally filtered to a collection).
listDatabases · token scope: content:read
Path parameters
workspaceId· string (uuid) — required
Query parameters
cursor· string — length 1–∞limit· integer — 1–100collectionId· string (uuid)
Response 200 — application/json
items· object[] — requiredid· string (uuid) — requiredworkspaceId· string (uuid) — requiredcollectionId· string (uuid) — requiredparentPageId· string (uuid) | null — requiredposition· string — requiredname· string — requiredicon· string | null — requiredcreatedBy· string (uuid) | null — requiredupdatedBy· string (uuid) | null — requiredcreatedAt· string (date-time) — requiredupdatedAt· string (date-time) — requireddeletedAt· string (date-time) | null — required
nextCursor· string | null — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
POST /api/v1/workspaces/{workspaceId}/databases
Create a database in a collection, optionally under a parent page.
createDatabase · token scope: content:write
Path parameters
workspaceId· string (uuid) — required
Request body — application/json, required
collectionId· string (uuid) — requiredparentPageId· string (uuid)name· string — required, length 1–200icon· string — length 0–2048
Response 200 — application/json
id· string (uuid) — requiredworkspaceId· string (uuid) — requiredcollectionId· string (uuid) — requiredparentPageId· string (uuid) | null — requiredposition· string — requiredname· string — requiredicon· string | null — requiredcreatedBy· string (uuid) | null — requiredupdatedBy· string (uuid) | null — requiredcreatedAt· string (date-time) — requiredupdatedAt· string (date-time) — requireddeletedAt· string (date-time) | null — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
GET /api/v1/workspaces/{workspaceId}/databases/{databaseId}
Get a single database.
getDatabase · token scope: content:read
Path parameters
workspaceId· string (uuid) — requireddatabaseId· string (uuid) — required
Response 200 — application/json
id· string (uuid) — requiredworkspaceId· string (uuid) — requiredcollectionId· string (uuid) — requiredparentPageId· string (uuid) | null — requiredposition· string — requiredname· string — requiredicon· string | null — requiredcreatedBy· string (uuid) | null — requiredupdatedBy· string (uuid) | null — requiredcreatedAt· string (date-time) — requiredupdatedAt· string (date-time) — requireddeletedAt· string (date-time) | null — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
PATCH /api/v1/workspaces/{workspaceId}/databases/{databaseId}
Update a database name and/or icon.
updateDatabase · token scope: content:write
Path parameters
workspaceId· string (uuid) — requireddatabaseId· string (uuid) — required
Request body — application/json, required
name· string — length 1–200icon· string | null
Response 200 — application/json
id· string (uuid) — requiredworkspaceId· string (uuid) — requiredcollectionId· string (uuid) — requiredparentPageId· string (uuid) | null — requiredposition· string — requiredname· string — requiredicon· string | null — requiredcreatedBy· string (uuid) | null — requiredupdatedBy· string (uuid) | null — requiredcreatedAt· string (date-time) — requiredupdatedAt· string (date-time) — requireddeletedAt· string (date-time) | null — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
POST /api/v1/workspaces/{workspaceId}/databases/{databaseId}/trash
Soft-delete a database (move to trash). Deep: the pages HOMED in it are trashed with it. Row memberships are kept, not dropped, so restoring is lossless; they are removed only by a permanent delete.
trashDatabase · token scope: content:write
Path parameters
workspaceId· string (uuid) — requireddatabaseId· string (uuid) — required
Response 200 — application/json
id· string (uuid) — requiredworkspaceId· string (uuid) — requiredcollectionId· string (uuid) — requiredparentPageId· string (uuid) | null — requiredposition· string — requiredname· string — requiredicon· string | null — requiredcreatedBy· string (uuid) | null — requiredupdatedBy· string (uuid) | null — requiredcreatedAt· string (date-time) — requiredupdatedAt· string (date-time) — requireddeletedAt· string (date-time) | null — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
POST /api/v1/workspaces/{workspaceId}/databases/{databaseId}/restore
Restore a database from the trash, together with exactly the pages that were trashed in the same batch (pages already in the trash beforehand stay there). Row memberships survived the trash, so the restored database shows its rows again. Restoring under a still-trashed parent re-parents the database to the collection root, mirroring restorePage.
restoreDatabase · token scope: content:write
Path parameters
workspaceId· string (uuid) — requireddatabaseId· string (uuid) — required
Response 200 — application/json
id· string (uuid) — requiredworkspaceId· string (uuid) — requiredcollectionId· string (uuid) — requiredparentPageId· string (uuid) | null — requiredposition· string — requiredname· string — requiredicon· string | null — requiredcreatedBy· string (uuid) | null — requiredupdatedBy· string (uuid) | null — requiredcreatedAt· string (date-time) — requiredupdatedAt· string (date-time) — requireddeletedAt· string (date-time) | null — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
DELETE /api/v1/workspaces/{workspaceId}/databases/{databaseId}/permanent
Permanently delete a TRASHED database and everything below it — irreversible. Refuses with 409 when the database is not in the trash. Same cascade as deletePagePermanently, plus the database-specific rows: every membership (db_row) of the database, its column bindings (database_field), and every view targeting it. Returns what was deleted.
deleteDatabasePermanently · token scope: content:write
Path parameters
workspaceId· string (uuid) — requireddatabaseId· string (uuid) — required
Response 200 — application/json
roots· integer — required, 0–9007199254740991pages· integer — required, 0–9007199254740991databases· integer — required, 0–9007199254740991views· integer — required, 0–9007199254740991blocks· integer — required, 0–9007199254740991
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
GET /api/v1/workspaces/{workspaceId}/databases/{databaseId}/fields
List a database's field bindings, in column order.
listDatabaseFields · token scope: content:read
Path parameters
workspaceId· string (uuid) — requireddatabaseId· string (uuid) — required
Query parameters
cursor· string — length 1–∞limit· integer — 1–100
Response 200 — application/json
items· object[] — requiredworkspaceId· string (uuid) — requireddatabaseId· string (uuid) — requiredfieldId· string (uuid) — requiredposition· string — requiredrequired· boolean — requireddefaultValue· object | null — required
nextCursor· string | null — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
POST /api/v1/workspaces/{workspaceId}/databases/{databaseId}/fields
Bind a registry field into a database as a column.
bindField · token scope: content:write
Path parameters
workspaceId· string (uuid) — requireddatabaseId· string (uuid) — required
Request body — application/json, required
fieldId· string (uuid) — requiredrequired· booleandefaultValue· object | nullbeforeId· string (uuid)afterId· string (uuid)
Response 200 — application/json
workspaceId· string (uuid) — requireddatabaseId· string (uuid) — requiredfieldId· string (uuid) — requiredposition· string — requiredrequired· boolean — requireddefaultValue· object | null — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
PATCH /api/v1/workspaces/{workspaceId}/databases/{databaseId}/fields/{fieldId}
Update a binding: required, default value, and/or column position.
updateBinding · token scope: content:write
Path parameters
workspaceId· string (uuid) — requireddatabaseId· string (uuid) — requiredfieldId· string (uuid) — required
Request body — application/json, required
required· booleandefaultValue· object | nullbeforeId· string (uuid)afterId· string (uuid)
Response 200 — application/json
workspaceId· string (uuid) — requireddatabaseId· string (uuid) — requiredfieldId· string (uuid) — requiredposition· string — requiredrequired· boolean — requireddefaultValue· object | null — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
DELETE /api/v1/workspaces/{workspaceId}/databases/{databaseId}/fields/{fieldId}
Remove a field binding from a database (values on pages are kept).
unbindField · token scope: content:write
Path parameters
workspaceId· string (uuid) — requireddatabaseId· string (uuid) — requiredfieldId· string (uuid) — required
Response 200 — application/json
workspaceId· string (uuid) — requireddatabaseId· string (uuid) — requiredfieldId· string (uuid) — requiredposition· string — requiredrequired· boolean — requireddefaultValue· object | null — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
GET /api/v1/workspaces/{workspaceId}/views
List views in a workspace (optionally filtered to one database).
listViews · token scope: content:read
Path parameters
workspaceId· string (uuid) — required
Query parameters
cursor· string — length 1–∞limit· integer — 1–100targetDatabaseId· string (uuid)
Response 200 — application/json
items· object[] — requiredid· string (uuid) — requiredworkspaceId· string (uuid) — requiredcollectionId· string (uuid) — requiredparentPageId· string (uuid) | null — requiredposition· string — requiredtargetDatabaseId· string (uuid) — requiredlayout·"table"|"list"— requiredfilters· object[] — requiredfieldId· string (uuid) — requiredop·"eq"|"ne"|"contains"|"is_empty"|"is_not_empty"— requiredvalue· any
sorts· object[] — requiredfieldId· string (uuid) — requireddirection·"asc"|"desc"— required
createdAt· string (date-time) — requiredupdatedAt· string (date-time) — requireddeletedAt· string (date-time) | null — required
nextCursor· string | null — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
POST /api/v1/workspaces/{workspaceId}/views
Create a saved view (table or list) over a database.
createView · token scope: content:write
Path parameters
workspaceId· string (uuid) — required
Request body — application/json, required
collectionId· string (uuid) — requiredparentPageId· string (uuid)targetDatabaseId· string (uuid) — requiredlayout·"table"|"list"— requiredfilters· object[]fieldId· string (uuid) — requiredop·"eq"|"ne"|"contains"|"is_empty"|"is_not_empty"— requiredvalue· any
sorts· object[]fieldId· string (uuid) — requireddirection·"asc"|"desc"— required
Response 200 — application/json
id· string (uuid) — requiredworkspaceId· string (uuid) — requiredcollectionId· string (uuid) — requiredparentPageId· string (uuid) | null — requiredposition· string — requiredtargetDatabaseId· string (uuid) — requiredlayout·"table"|"list"— requiredfilters· object[] — requiredfieldId· string (uuid) — requiredop·"eq"|"ne"|"contains"|"is_empty"|"is_not_empty"— requiredvalue· any
sorts· object[] — requiredfieldId· string (uuid) — requireddirection·"asc"|"desc"— required
createdAt· string (date-time) — requiredupdatedAt· string (date-time) — requireddeletedAt· string (date-time) | null — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
GET /api/v1/workspaces/{workspaceId}/views/{viewId}
Get a single view.
getView · token scope: content:read
Path parameters
workspaceId· string (uuid) — requiredviewId· string (uuid) — required
Response 200 — application/json
id· string (uuid) — requiredworkspaceId· string (uuid) — requiredcollectionId· string (uuid) — requiredparentPageId· string (uuid) | null — requiredposition· string — requiredtargetDatabaseId· string (uuid) — requiredlayout·"table"|"list"— requiredfilters· object[] — requiredfieldId· string (uuid) — requiredop·"eq"|"ne"|"contains"|"is_empty"|"is_not_empty"— requiredvalue· any
sorts· object[] — requiredfieldId· string (uuid) — requireddirection·"asc"|"desc"— required
createdAt· string (date-time) — requiredupdatedAt· string (date-time) — requireddeletedAt· string (date-time) | null — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
PATCH /api/v1/workspaces/{workspaceId}/views/{viewId}
Update a view layout, filters, and/or sorts.
updateView · token scope: content:write
Path parameters
workspaceId· string (uuid) — requiredviewId· string (uuid) — required
Request body — application/json, required
layout·"table"|"list"filters· object[]fieldId· string (uuid) — requiredop·"eq"|"ne"|"contains"|"is_empty"|"is_not_empty"— requiredvalue· any
sorts· object[]fieldId· string (uuid) — requireddirection·"asc"|"desc"— required
Response 200 — application/json
id· string (uuid) — requiredworkspaceId· string (uuid) — requiredcollectionId· string (uuid) — requiredparentPageId· string (uuid) | null — requiredposition· string — requiredtargetDatabaseId· string (uuid) — requiredlayout·"table"|"list"— requiredfilters· object[] — requiredfieldId· string (uuid) — requiredop·"eq"|"ne"|"contains"|"is_empty"|"is_not_empty"— requiredvalue· any
sorts· object[] — requiredfieldId· string (uuid) — requireddirection·"asc"|"desc"— required
createdAt· string (date-time) — requiredupdatedAt· string (date-time) — requireddeletedAt· string (date-time) | null — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
POST /api/v1/workspaces/{workspaceId}/views/{viewId}/trash
Soft-delete a view (move to trash).
trashView · token scope: content:write
Path parameters
workspaceId· string (uuid) — requiredviewId· string (uuid) — required
Response 200 — application/json
id· string (uuid) — requiredworkspaceId· string (uuid) — requiredcollectionId· string (uuid) — requiredparentPageId· string (uuid) | null — requiredposition· string — requiredtargetDatabaseId· string (uuid) — requiredlayout·"table"|"list"— requiredfilters· object[] — requiredfieldId· string (uuid) — requiredop·"eq"|"ne"|"contains"|"is_empty"|"is_not_empty"— requiredvalue· any
sorts· object[] — requiredfieldId· string (uuid) — requireddirection·"asc"|"desc"— required
createdAt· string (date-time) — requiredupdatedAt· string (date-time) — requireddeletedAt· string (date-time) | null — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
POST /api/v1/workspaces/{workspaceId}/databases/{databaseId}/rows/query
The main read path: run a view (filters/sorts) over a database and page through the rows with a composite keyset cursor. Cells are projected at read time from page props + relation_link + formula evaluation.
queryDatabaseRows · token scope: content:write
Path parameters
workspaceId· string (uuid) — requireddatabaseId· string (uuid) — required
Request body — application/json, required
filters· object[]fieldId· string (uuid) — requiredop·"eq"|"ne"|"contains"|"is_empty"|"is_not_empty"— requiredvalue· any
sorts· object[]fieldId· string (uuid) — requireddirection·"asc"|"desc"— required
cursor· string — length 1–∞limit· integer — 1–100
Response 200 — application/json
items· object[] — requiredpageId· string (uuid) — requiredworkspaceId· string (uuid) — requireddatabaseId· string (uuid) — requiredposition· string — requiredtitle· string — requiredicon· string | null — requiredcells· object — requiredcreatedAt· string (date-time) — required
nextCursor· string | null — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
POST /api/v1/workspaces/{workspaceId}/databases/{databaseId}/rows
Create a new page as a row of this database, seeding its props from the supplied cells and the bindings' default values (D2 materialize-at-create).
createRow · token scope: content:write
Path parameters
workspaceId· string (uuid) — requireddatabaseId· string (uuid) — required
Request body — application/json, required
title· string — length 0–1000icon· string — length 0–2048cells· objectbeforeId· string (uuid)afterId· string (uuid)
Response 200 — application/json
pageId· string (uuid) — requiredworkspaceId· string (uuid) — requireddatabaseId· string (uuid) — requiredposition· string — requiredtitle· string — requiredicon· string | null — requiredcells· object — requiredcreatedAt· string (date-time) — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
POST /api/v1/workspaces/{workspaceId}/databases/{databaseId}/rows/add
Add an existing page to this database as a row (membership).
addExistingPage · token scope: content:write
Path parameters
workspaceId· string (uuid) — requireddatabaseId· string (uuid) — required
Request body — application/json, required
pageId· string (uuid) — requiredcells· objectbeforeId· string (uuid)afterId· string (uuid)
Response 200 — application/json
pageId· string (uuid) — requiredworkspaceId· string (uuid) — requireddatabaseId· string (uuid) — requiredposition· string — requiredtitle· string — requiredicon· string | null — requiredcells· object — requiredcreatedAt· string (date-time) — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
POST /api/v1/workspaces/{workspaceId}/databases/{databaseId}/rows/{pageId}/move
Reorder a row within its database membership.
moveRow · token scope: content:write
Path parameters
workspaceId· string (uuid) — requireddatabaseId· string (uuid) — requiredpageId· string (uuid) — required
Request body — application/json, required
beforeId· string (uuid)afterId· string (uuid)
Response 200 — application/json
pageId· string (uuid) — requiredworkspaceId· string (uuid) — requireddatabaseId· string (uuid) — requiredposition· string — requiredtitle· string — requiredicon· string | null — requiredcells· object — requiredcreatedAt· string (date-time) — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required
DELETE /api/v1/workspaces/{workspaceId}/databases/{databaseId}/rows/{pageId}
Remove a page from this database (drops the membership; the page is kept). 409 with a needs-new-home code when this is the page's home database — reparent it via movePage first.
removeRow · token scope: content:write
Path parameters
workspaceId· string (uuid) — requireddatabaseId· string (uuid) — requiredpageId· string (uuid) — required
Response 200 — application/json
pageId· string (uuid) — requiredworkspaceId· string (uuid) — requireddatabaseId· string (uuid) — requiredposition· string — requiredtitle· string — requiredicon· string | null — requiredcells· object — requiredcreatedAt· string (date-time) — required
Response default — application/json
error· object — requiredcode·"bad_request"|"validation_failed"|"unauthorized"|"forbidden"|"not_found"|"conflict"|"rate_limited"|"internal"— requiredmessage· string — required