API reference
Every operation Basalt calls under /api/v1 — 193 of them across 146 paths, generated from the OpenAPI 3.1.0 document the server emits from its own route table. If an endpoint is documented here, it exists.
One server answers more than one product, and this reference covers the areas this one uses. An endpoint absent from these pages is not necessarily absent from the server — it belongs to a surface you have not been given.
Start with API for authentication, error shapes, pagination and webhooks.
Workspaces and people
Workspaces, their members, groups and invitations, the capabilities of the calling account, and what the workspace has used of its plan.
GET /api/v1/workspacesPOST /api/v1/workspacesGET /api/v1/workspaces/activatableGET /api/v1/workspaces/{workspaceId}PATCH /api/v1/workspaces/{workspaceId}DELETE /api/v1/workspaces/{workspaceId}POST /api/v1/workspaces/{workspaceId}/activationGET /api/v1/workspaces/{workspaceId}/membersGET /api/v1/workspaces/{workspaceId}/collections/{collectionId}/membersPUT /api/v1/workspaces/{workspaceId}/collections/{collectionId}/membersDELETE /api/v1/workspaces/{workspaceId}/collections/{collectionId}/members/{subjectType}/{subjectId}POST /api/v1/me/avatarDELETE /api/v1/me/avatarGET /api/v1/users/{userId}/avatarGET /api/v1/workspaces/{workspaceId}/usageGET /api/v1/workspaces/{workspaceId}/me/capabilitiesPATCH /api/v1/workspaces/{workspaceId}/members/{userId}DELETE /api/v1/workspaces/{workspaceId}/members/{userId}GET /api/v1/workspaces/{workspaceId}/groupsPOST /api/v1/workspaces/{workspaceId}/groupsPATCH /api/v1/workspaces/{workspaceId}/groups/{groupId}DELETE /api/v1/workspaces/{workspaceId}/groups/{groupId}GET /api/v1/workspaces/{workspaceId}/groups/{groupId}/membersPUT /api/v1/workspaces/{workspaceId}/groups/{groupId}/members/{userId}DELETE /api/v1/workspaces/{workspaceId}/groups/{groupId}/members/{userId}GET /api/v1/workspaces/{workspaceId}/invitationsPOST /api/v1/workspaces/{workspaceId}/invitationsDELETE /api/v1/workspaces/{workspaceId}/invitations/{invitationId}POST /api/v1/invitations/accept
Collections
The top level of the page tree, and who may see each one.
GET /api/v1/workspaces/{workspaceId}/collectionsPOST /api/v1/workspaces/{workspaceId}/collectionsPATCH /api/v1/workspaces/{workspaceId}/collections/{collectionId}DELETE /api/v1/workspaces/{workspaceId}/collections/{collectionId}GET /api/v1/workspaces/{workspaceId}/collections/{collectionId}/contentsGET /api/v1/workspaces/{workspaceId}/collections/{collectionId}/fieldsPOST /api/v1/workspaces/{workspaceId}/collections/{collectionId}/fieldsPATCH /api/v1/workspaces/{workspaceId}/collections/{collectionId}/fields/{fieldId}DELETE /api/v1/workspaces/{workspaceId}/collections/{collectionId}/fields/{fieldId}
Pages
Creating, moving, trashing and restoring pages; their Markdown surface, field values, relations, backlinks, search, and the pages a person pins.
GET /api/v1/workspaces/{workspaceId}/pagesPOST /api/v1/workspaces/{workspaceId}/pagesGET /api/v1/workspaces/{workspaceId}/pages/{pageId}PUT /api/v1/workspaces/{workspaceId}/pages/{pageId}PATCH /api/v1/workspaces/{workspaceId}/pages/{pageId}POST /api/v1/workspaces/{workspaceId}/pages/{pageId}/movePOST /api/v1/workspaces/{workspaceId}/pages/{pageId}/duplicatePOST /api/v1/workspaces/{workspaceId}/pages/{pageId}/trashPOST /api/v1/workspaces/{workspaceId}/pages/{pageId}/restoreGET /api/v1/workspaces/{workspaceId}/trashGET /api/v1/workspaces/{workspaceId}/trash/summaryDELETE /api/v1/workspaces/{workspaceId}/pages/{pageId}/permanentPOST /api/v1/workspaces/{workspaceId}/trash/emptyGET /api/v1/workspaces/{workspaceId}/searchGET /api/v1/workspaces/{workspaceId}/favoritesPOST /api/v1/workspaces/{workspaceId}/favoritesDELETE /api/v1/workspaces/{workspaceId}/favorites/{pageId}POST /api/v1/workspaces/{workspaceId}/favorites/{pageId}/moveGET /api/v1/workspaces/{workspaceId}/pages/{pageId}/boardsGET /api/v1/workspaces/{workspaceId}/pages/{pageId}/backlinksGET /api/v1/workspaces/{workspaceId}/blocks/{blockId}/referencesGET /api/v1/workspaces/{workspaceId}/pages/{pageId}/referenced-blocksGET /api/v1/workspaces/{workspaceId}/blocks/{blockId}/ref-targetGET /api/v1/workspaces/{workspaceId}/pages/{pageId}/fieldsGET /api/v1/workspaces/{workspaceId}/pages/{pageId}/propsPATCH /api/v1/workspaces/{workspaceId}/pages/{pageId}/propsGET /api/v1/workspaces/{workspaceId}/pages/{pageId}/relationsPUT /api/v1/workspaces/{workspaceId}/pages/{pageId}/relations/{fieldId}
Databases and fields
The workspace field registry, databases and their bound fields, saved views, and row memberships.
GET /api/v1/workspaces/{workspaceId}/fieldsPOST /api/v1/workspaces/{workspaceId}/fieldsGET /api/v1/workspaces/{workspaceId}/fields/{fieldId}PATCH /api/v1/workspaces/{workspaceId}/fields/{fieldId}DELETE /api/v1/workspaces/{workspaceId}/fields/{fieldId}POST /api/v1/workspaces/{workspaceId}/fields/{fieldId}/retypePOST /api/v1/workspaces/{workspaceId}/fields/{fieldId}/mergeGET /api/v1/workspaces/{workspaceId}/fields/{fieldId}/usagePOST /api/v1/workspaces/{workspaceId}/fields/{fieldId}/optionsGET /api/v1/workspaces/{workspaceId}/databasesPOST /api/v1/workspaces/{workspaceId}/databasesGET /api/v1/workspaces/{workspaceId}/databases/{databaseId}PATCH /api/v1/workspaces/{workspaceId}/databases/{databaseId}POST /api/v1/workspaces/{workspaceId}/databases/{databaseId}/trashPOST /api/v1/workspaces/{workspaceId}/databases/{databaseId}/restoreDELETE /api/v1/workspaces/{workspaceId}/databases/{databaseId}/permanentGET /api/v1/workspaces/{workspaceId}/databases/{databaseId}/fieldsPOST /api/v1/workspaces/{workspaceId}/databases/{databaseId}/fieldsPATCH /api/v1/workspaces/{workspaceId}/databases/{databaseId}/fields/{fieldId}DELETE /api/v1/workspaces/{workspaceId}/databases/{databaseId}/fields/{fieldId}GET /api/v1/workspaces/{workspaceId}/field-bindingsPOST /api/v1/workspaces/{workspaceId}/field-bindingsPATCH /api/v1/workspaces/{workspaceId}/field-bindings/{fieldId}DELETE /api/v1/workspaces/{workspaceId}/field-bindings/{fieldId}GET /api/v1/workspaces/{workspaceId}/viewsPOST /api/v1/workspaces/{workspaceId}/viewsGET /api/v1/workspaces/{workspaceId}/views/{viewId}PATCH /api/v1/workspaces/{workspaceId}/views/{viewId}POST /api/v1/workspaces/{workspaceId}/views/{viewId}/trashPOST /api/v1/workspaces/{workspaceId}/databases/{databaseId}/rows/queryPOST /api/v1/workspaces/{workspaceId}/databases/{databaseId}/rowsPOST /api/v1/workspaces/{workspaceId}/databases/{databaseId}/rows/addPOST /api/v1/workspaces/{workspaceId}/databases/{databaseId}/rows/{pageId}/moveDELETE /api/v1/workspaces/{workspaceId}/databases/{databaseId}/rows/{pageId}
Collaboration
Comments, page history, activity, notifications, attachments and the workspace symbol library.
POST /api/v1/workspaces/{workspaceId}/attachmentsGET /api/v1/workspaces/{workspaceId}/attachments/{attachmentId}GET /api/v1/workspaces/{workspaceId}/symbolsPOST /api/v1/workspaces/{workspaceId}/symbolsPATCH /api/v1/workspaces/{workspaceId}/symbols/{symbolId}DELETE /api/v1/workspaces/{workspaceId}/symbols/{symbolId}GET /api/v1/workspaces/{workspaceId}/pages/{pageId}/commentsPOST /api/v1/workspaces/{workspaceId}/pages/{pageId}/commentsGET /api/v1/workspaces/{workspaceId}/commentsGET /api/v1/workspaces/{workspaceId}/comment-threads/{threadId}POST /api/v1/workspaces/{workspaceId}/comment-threads/{threadId}/commentsPOST /api/v1/workspaces/{workspaceId}/comment-threads/{threadId}/resolvePATCH /api/v1/workspaces/{workspaceId}/comment-threads/{threadId}/comments/{commentId}DELETE /api/v1/workspaces/{workspaceId}/comment-threads/{threadId}/comments/{commentId}GET /api/v1/workspaces/{workspaceId}/pages/{pageId}/historyPOST /api/v1/workspaces/{workspaceId}/pages/{pageId}/historyGET /api/v1/workspaces/{workspaceId}/pages/{pageId}/history/{versionId}DELETE /api/v1/workspaces/{workspaceId}/pages/{pageId}/history/{versionId}POST /api/v1/workspaces/{workspaceId}/pages/{pageId}/history/{versionId}/restoreGET /api/v1/workspaces/{workspaceId}/pages/{pageId}/activityGET /api/v1/workspaces/{workspaceId}/activityGET /api/v1/workspaces/{workspaceId}/notificationsGET /api/v1/workspaces/{workspaceId}/notifications/summaryPOST /api/v1/workspaces/{workspaceId}/notifications/{notificationId}/readPOST /api/v1/workspaces/{workspaceId}/notifications/readDELETE /api/v1/workspaces/{workspaceId}/notifications/{notificationId}
Permissions and sharing
Per-page access control lists, restriction boundaries, public share links, and the token routes a stranger reads them through.
GET /api/v1/public/shares/{token}GET /api/v1/public/shares/{token}/pages/{pageId}GET /api/v1/public/shares/{token}/attachments/{attachmentId}GET /api/v1/workspaces/{workspaceId}/pages/{pageId}/public-sharePUT /api/v1/workspaces/{workspaceId}/pages/{pageId}/public-shareDELETE /api/v1/workspaces/{workspaceId}/pages/{pageId}/public-shareGET /api/v1/workspaces/{workspaceId}/pages/{pageId}/accessPUT /api/v1/workspaces/{workspaceId}/pages/{pageId}/permissionsDELETE /api/v1/workspaces/{workspaceId}/pages/{pageId}/permissions/{subjectType}/{subjectId}POST /api/v1/workspaces/{workspaceId}/pages/{pageId}/restrict
Automation
Personal access tokens, webhooks, export, and link unfurling — the operations where the instance talks to the outside world. Plus the few that run the other way: the early-access signup and the sign-in screen’s question about which ways in this deployment has, the parts of this API a caller reaches with no session at all.
GET /api/v1/auth/methodsPOST /api/v1/waitlistPOST /api/v1/waitlist/confirmPOST /api/v1/waitlist/unsubscribePOST /api/v1/workspaces/{workspaceId}/unfurlGET /api/v1/workspaces/{workspaceId}/exportGET /api/v1/workspaces/{workspaceId}/tokensPOST /api/v1/workspaces/{workspaceId}/tokensDELETE /api/v1/workspaces/{workspaceId}/tokens/{tokenId}GET /api/v1/workspaces/{workspaceId}/webhooksPOST /api/v1/workspaces/{workspaceId}/webhooksPATCH /api/v1/workspaces/{workspaceId}/webhooks/{webhookId}DELETE /api/v1/workspaces/{workspaceId}/webhooks/{webhookId}POST /api/v1/workspaces/{workspaceId}/webhooks/{webhookId}/secretGET /api/v1/workspaces/{workspaceId}/webhooks/{webhookId}/deliveries
Connected accounts
A person’s own authorisation at a foreign service — Google, Microsoft, a CalDAV server or a plain ICS subscription — and the calendar mirror it feeds. Personal, not workspace-shared: these routes answer with the calling account’s connections and nobody else’s, so a workspace admin sees their own and no colleague’s. Two routes change a meeting at the provider, and only on a calendar switched on for it; everything else here reads. No route returns a credential: a refresh token, an app-specific password and a subscription URL all stay on the server, and a subscription URL is treated as the bearer secret it is.
GET /api/v1/workspaces/{workspaceId}/connected-accountsPOST /api/v1/workspaces/{workspaceId}/connected-accountsDELETE /api/v1/workspaces/{workspaceId}/connected-accounts/{connectionId}GET /api/v1/workspaces/{workspaceId}/connected-accounts/{connectionId}/calendarsPOST /api/v1/workspaces/{workspaceId}/connected-accounts/{connectionId}/resyncPATCH /api/v1/workspaces/{workspaceId}/connected-accounts/{connectionId}/calendars/{sourceId}GET /api/v1/workspaces/{workspaceId}/calendar/eventsPATCH /api/v1/workspaces/{workspaceId}/calendar/eventsDELETE /api/v1/workspaces/{workspaceId}/calendar/eventsGET /api/v1/workspaces/{workspaceId}/calendar/ticksPUT /api/v1/workspaces/{workspaceId}/calendar/ticksGET /api/v1/workspaces/{workspaceId}/calendar/publicationsPUT /api/v1/workspaces/{workspaceId}/calendar/publication-scopesPOST /api/v1/workspaces/{workspaceId}/calendar/publications/retryPOST /api/v1/workspaces/{workspaceId}/connected-accounts/oauth/startPOST /api/v1/connectors/oauth/callback
Import
Bringing a Notion export, a Confluence space or a folder of Markdown into a collection, and the read-only connections that keep doing it.
POST /api/v1/workspaces/{workspaceId}/importGET /api/v1/workspaces/{workspaceId}/import/runsGET /api/v1/workspaces/{workspaceId}/import/runs/{runId}GET /api/v1/workspaces/{workspaceId}/import/runs/{runId}/linksGET /api/v1/workspaces/{workspaceId}/import-connectionsPOST /api/v1/workspaces/{workspaceId}/import-connectionsDELETE /api/v1/workspaces/{workspaceId}/import-connections/{connectionId}POST /api/v1/workspaces/{workspaceId}/import-connections/{connectionId}/probePOST /api/v1/workspaces/{workspaceId}/import-connections/testPOST /api/v1/workspaces/{workspaceId}/import-connections/{connectionId}/runPOST /api/v1/workspaces/{workspaceId}/import-connections/{connectionId}/purge
Billing and invoices
The workspace’s subscription and billing details, and the invoices this instance issues in the operator’s own number range — plus the payment provider’s callback.
POST /api/v1/billing/webhookGET /api/v1/workspaces/{workspaceId}/billing/subscriptionGET /api/v1/workspaces/{workspaceId}/billing/customerPUT /api/v1/workspaces/{workspaceId}/billing/customerGET /api/v1/workspaces/{workspaceId}/billing/invoicesGET /api/v1/workspaces/{workspaceId}/billing/invoices/{invoiceId}GET /api/v1/workspaces/{workspaceId}/billing/invoices/{invoiceId}/documentPOST /api/v1/workspaces/{workspaceId}/billing/checkout
Feedback
Filing a bug report or an idea from inside the app. Authenticated, and deliberately outside /workspaces/{workspaceId}: the report is addressed to the people who run the instance rather than to a workspace, which is also why it is session-only and why the workspace it names carries no authority. It travels with the screen it was written on, the build, the window, the pointer and a structural recording of what the app did — never with anything anybody wrote. Operators read them through the back office.
Instance administration
The operator back office: every workspace on this instance with its metadata and plan, the plan assignment, the append-only trail of operator actions, and the inbox of reports people have sent (see Feedback). Metadata only, with that one exception — the operator of a hosted instance is a data processor, so these routes cannot return page titles, page contents or comments, and a report is readable here only because somebody wrote and sent it to the operator. Session-only, and restricted to the operators named in OPERATORS.