Workspace Templates
Duplicating a workspace template creates a ready-to-use design in a target project, inheriting all layers, formats, and settings from the original. Use it to automate workspace provisioning, or to onboard new clients with a standard set of designs.
Categories are optional
A workspace template belongs to the organisation. It may be filed under a category, but most are not — an uncategorised template sits at the root of the workspace, with category_id: null. A design is different: it always lives in a project. The two listings never overlap — see Designs vs Workspace Templates.
List workspace templates
Sample templates request
curl -H "x-api-key: {YOUR-API-KEY}" \
"https://api.abyssale.com/workspace-templates?type=static"Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
category_id | string (uuid) | No | Filter by workspace category. List the ids with GET /workspace-template-categories. Categories are optional, so this returns only categorised templates — omit it to include those at the root. |
type | string | No | Filter by type: "static", "animated", "printer", "printer_multipage". An unknown value is ignored — the full unfiltered list is returned, never a 400. |
There is no project_id filter here — a workspace template has no project until you duplicate it into one.
Templates response
Returns an array of workspace template objects. Same shape as a design, except the grouping fields are named category_id / category_name.
| Field | Type | Description |
|---|---|---|
id | string (uuid) | Unique identifier. Pass this as companyTemplateId when using the template. |
name | string | Name of the workspace template. |
type | string | "static", "animated", "printer", or "printer_multipage". |
created_at | integer | Unix timestamp of creation. |
updated_at | integer | Unix timestamp of last update. |
category_id | string (uuid) | null | Workspace category it belongs to, or null when it sits at the workspace root. |
category_name | string | null | Name of that category, or null. |
preview_url | string (uri) | Template thumbnail: a static PNG rendering of the template's first format (the first one created), at that format's full dimensions — a still frame for animated templates, a rasterized page for print. The URL is always present, but the image behind it may not exist yet for a template whose preview was never generated. |
Templates response example
[
{
"id": "64238d01-d402-474b-8c2d-fbc957e9d290",
"name": "Brand master — social",
"type": "static",
"created_at": 1649942114,
"updated_at": 1649942114,
"category_id": "1c7a9e35-0b62-4d18-8f4a-2e5c7b90d146",
"category_name": "Brand assets",
"preview_url": "https://production-banners.s3-eu-west-1.amazonaws.com/templates/e0d292f2-ec21-11e9-a539-3c408bf94155/a9b3c668-7b84-4924-adf0-815dae727d32.png"
}
]List workspace template categories
The categories that group your workspace templates — the counterpart of GET /projects, which groups designs.
Sample categories request
curl -H "x-api-key: {YOUR-API-KEY}" \
https://api.abyssale.com/workspace-template-categoriesCategories response
| Field | Type | Description |
|---|---|---|
id | string (uuid) | Unique identifier. Use as the category_id filter above. |
name | string | Name of the category. |
color | string | Display colour. |
icon | string | Display icon. |
created_at | integer | Unix timestamp of creation. |
Categories response example
[
{
"id": "1c7a9e35-0b62-4d18-8f4a-2e5c7b90d146",
"name": "Brand assets",
"color": "#4F46E5",
"icon": "star",
"created_at": 1649942114
}
]Use a template — duplicate it into a project
Turning a workspace template into a generatable design is a dedicated, asynchronous flow: POST /workspace-templates/{companyTemplateId}/use starts the duplication into a target project, and you poll the returned request until the new design's UUID is ready. The full workflow — request shapes, statuses, errors — lives on its own page:
Related
- Projects — list and create the projects you duplicate templates into
- Designs — list the designs created from a duplicated template
- Authentication — required for all API requests
- Node.js SDK · Python SDK — every method, config, retries and the polling helpers
