Describe one template gallery listing
Returns the full detail for a single listing, including its declared inputs and what it will create. `templateId` is provider-qualified, such as `workspace:<uuid>` or `builtin:service-shop`, and travels as a query parameter because it contains a colon. Requires workspace membership; an id that is malformed or claimed by no provider returns not-found.
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/template-gallery/detail?templateId=string"{ "data": { "listing": { "id": "string", "provider": "workspace", "scope": "builtin", "reviewStatus": "draft", "installCount": 0, "author": { "workspaceId": "string", "name": "string", "icon": "string" }, "name": "string", "description": "string", "icon": "string", "cover": "string", "category": "string", "tags": [ "string" ], "kind": "folder", "inputCount": 0, "contents": { "total": 0, "counts": [ { "kind": "database", "count": 0 } ] }, "coverPreview": { "sourceId": "string", "name": "string", "kind": "folder", "icon": "string", "blocks": [ { "id": "string", "parentBlockId": "string", "kind": "paragraph", "orderKey": "string", "manifest": {}, "layout": { "x": 0, "y": 0, "w": 0, "h": 0, "tab": "string" } } ], "fields": [ { "key": "string", "label": "string", "kind": "text", "options": [ { "key": "string", "name": "string", "color": "string" } ] } ], "records": [ { "id": "string", "title": "string", "data": {} } ], "elements": [ { "id": "string", "elementType": "rectangle", "x": 0, "y": 0, "w": 0, "h": 0, "props": {} } ], "truncated": true }, "availability": { "available": true }, "updatedAt": "string" }, "inputs": [ { "id": "string", "kind": "database", "label": "string", "description": "string", "placeholder": "string", "required": true, "dependsOn": "string", "choices": [ { "value": "string", "label": "string" } ], "default": "string" } ], "preview": [ { "kind": "folder", "name": "string", "depth": 0, "icon": "string" } ], "items": [ { "sourceId": "string", "name": "string", "kind": "folder", "icon": "string", "blocks": [ { "id": "string", "parentBlockId": "string", "kind": "paragraph", "orderKey": "string", "manifest": {}, "layout": { "x": 0, "y": 0, "w": 0, "h": 0, "tab": "string" } } ], "fields": [ { "key": "string", "label": "string", "kind": "text", "options": [ { "key": "string", "name": "string", "color": "string" } ] } ], "records": [ { "id": "string", "title": "string", "data": {} } ], "elements": [ { "id": "string", "elementType": "rectangle", "x": 0, "y": 0, "w": 0, "h": 0, "props": {} } ], "truncated": true } ] }}{ "_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}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.
Create workspace items from a gallery listing
Instantiates any gallery listing into the calling workspace by its provider-qualified `templateId`, which the registry routes to the provider that owns it, filling declared inputs from `answers` and placing the new root under `parentItemId`. Requires `resources:write` in the workspace, and listings that create many records are checked against its record allowance; an id that is malformed or claimed by no provider returns not-found. Send an `Idempotency-Key` header to make retries safe; a replay within the window returns the original response.