Render a page against a record for printing
Resolves the page or note surface and the record named by `recordId` independently, then returns a print-ready render of the page with the record's values substituted, laid out for the requested `preset` (`a4` or `80mm`, default `a4`). The caller must have read access to both the surface and the record; surfaces of any other kind are rejected as a validation error.
Authorization
apiKey Workspace API key created in Workspace settings → API keys. Scopes on the key bound what it can read and write.
In: header
Path Parameters
Query Parameters
Response Body
application/json
application/json
application/json
curl -X GET "https://example.com/v1/workspaces/string/surfaces/string/print?recordId=string"{ "data": { "preset": "80mm", "surface": { "id": "string", "workspaceId": "string", "kind": "page", "title": "string", "icon": "string", "manifest": {}, "createdAt": "string", "updatedAt": "string", "itemId": "string" }, "record": { "id": "1d8a44e0-7c93-4f21-b60a-3e8d2f5a9c14", "workspaceId": "4b81aa0c-6d2f-4b19-9f0e-1a7c3d5e8b02", "databaseId": "9f2c1e7a-3b58-4d0c-8e27-6a1f9d4b3c85", "contentSurfaceId": "string", "title": "Ship the desktop app", "data": { "status": "in_progress", "due": "2026-08-01" }, "relations": {}, "computed": {}, "system": {}, "related": {}, "archived": false, "externalId": "string", "createdByUserId": "string", "updatedByUserId": "string", "createdAt": "2026-07-10T08:00:00.000Z", "updatedAt": "2026-07-14T11:26:02.000Z" }, "blocks": [ { "id": "string", "workspaceId": "string", "surfaceId": "string", "parentBlockId": "string", "kind": "paragraph", "orderKey": "string", "manifest": {}, "layout": { "x": 0, "y": 0, "w": 0, "h": 0, "tab": "string" }, "plainText": "string", "createdAt": "string", "updatedAt": "string" } ] }}{ "_tag": "ApiNotFound", "error": "not_found", "message": "That item does not exist, or this key cannot see it.", "status": 404}{ "_tag": "ApiNotFound", "error": "not_found", "message": "That item does not exist, or this key cannot see it.", "status": 404}List a surface's blocks in document order
Returns a window of the surface's block tree flattened into depth-first document order, together with the workspace version the window was read at. Requires `surfaces:read` on the surface. Paginated: pass `limit` (default 200, maximum 500) and the `cursor` from the previous response; a cursor that does not decode is rejected as a validation error.
Apply a batch of block operations to a surface
Applies an ordered batch of insert, update, move, and delete block operations in one transaction and returns the affected blocks with the new workspace version. Requires `surfaces:write` on the surface. Batches are capped at 500 operations, and non-UUID block ids, malformed order keys, and conversions into structural column kinds are rejected as validation errors.