Create workspace items from a template
Builds the template's manifest into the calling workspace, filling declared inputs from `answers` and placing the new root under `parentItemId`, then records the instantiation and increments the template's install count. Requires `resources:write` in the target workspace; a public template can be instantiated from any workspace, while a private one additionally requires `resources:read` on the workspace that owns it. Templates that create many records are also checked against the workspace's record allowance. Send an `Idempotency-Key` header to make retries safe; a replay within the window returns the original response.
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
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
curl -X POST "https://example.com/v1/workspaces/string/templates/string/instantiate" \ -H "Content-Type: application/json" \ -d '{}'{ "data": { "rootItem": { "id": "0b6f2e6a-9f2c-4e7a-8d31-2c1e7a9f2c4e", "workspaceId": "4b81aa0c-6d2f-4b19-9f0e-1a7c3d5e8b02", "parentItemId": "d3a7f1b8-5c04-4e62-9a11-7b2e6c0d4f39", "kind": "database", "targetId": "9f2c1e7a-3b58-4d0c-8e27-6a1f9d4b3c85", "title": "Launch tasks", "icon": "rocket", "color": "#2f6f4f", "order": 0, "archived": false, "accessMode": "open", "metadata": {}, "createdAt": "2026-07-01T09:12:44.000Z", "updatedAt": "2026-07-14T16:03:10.000Z" }, "idMap": { "property1": "string", "property2": "string" }, "report": { "remappedReferenceCount": 0, "references": [ { "outcome": "remapped", "class": "item", "opType": "item.create", "sourceId": "string", "path": "string", "value": "string", "reason": "string" } ], "degradedPermissions": [ { "opType": "item.create", "sourceId": "string", "setting": "accessMode", "requested": "string", "applied": "string", "reason": "string" } ], "skippedOps": [ { "opType": "item.create", "sourceId": "string", "reason": "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}Remove a template from the curated gallery
Returns a curated template to workspace scope and clears its curation timestamp while leaving it published. Requires `templates:curate` in the owning workspace. Send an `Idempotency-Key` header to make retries safe; a replay within the window returns the original response.
Browse the template gallery
Lists template listings from every registered provider for this workspace, ranked for the gallery and returned with category facets counted before the category filter is applied. The gallery deliberately shows only this workspace's own templates plus the ones Snoze curates, not every template any workspace made public. `search` and `category` narrow the results, and `source` selects `snoze` (Snoze's builtin starters plus curated listings) or `yours` (this workspace's own); reading the workspace's own rows requires `resources:read`. Paginated: pass `limit` and the `cursor` from the previous response, which continues only the workspace provider so builtin rows are never repeated.