Use a Workspace Template
"Using" a workspace template means duplicating it into a project: the copy becomes a regular design — with all the template's formats, layers and settings — that you can generate from like any other. The original template is untouched and can be instantiated any number of times. Typical uses: workspace provisioning, onboarding a client with a standard set of designs, stamping out campaign starting points.
How it works
The flow is asynchronous — the copy is built in the background. Two calls do the work (steps 3 and 4); the others are lookups you may already have done.
GET /workspace-templatesList your workspace templates and keep the id of the one to instantiate. Filter with category_id or type if the workspace is large.
GET /projectsThe copy must land in a project — that is what makes it a design. Keep the project's id.
POST /workspace-templates/{companyTemplateId}/useSend the project_id (and an optional name). The response carries only a duplication_request_id — the design does not exist yet.
GET /design-duplication-requests/{duplicateRequestId}Repeat until status is COMPLETED; each entry of designs then carries the new design's target_design_id. ERROR means the duplication failed.
GET /designs/{designId}The copy is a regular design: fetch its formats and elements, generate from it, or find it in its project's listing.
Duplicate workspace template
This operation is asynchronous — the response contains only a duplication_request_id. Use this ID to track progress with the polling endpoint below.
Where to find companyTemplateId
Get your companyTemplateId from GET /workspace-templates, or from the Workspace Templates section in the Abyssale dashboard.
Sample request
curl -X POST \
-H "x-api-key: {YOUR-API-KEY}" \
-H "Content-Type: application/json" \
-d '{"project_id": "9d1f2b7c-5a44-4c3e-9f21-0b8e6d4a1c73", "name": "Holiday campaign"}' \
https://api.abyssale.com/workspace-templates/{companyTemplateId}/usePath parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
companyTemplateId | string (uuid) | Yes | Unique identifier of the workspace template to duplicate. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
project_id | string (uuid) | Yes | Target project where the template will be duplicated. |
name | string | No | Custom name for the duplicated design. Between 2 and 100 characters. Defaults to the template name if omitted. |
Response
| Field | Type | Description |
|---|---|---|
duplication_request_id | string (uuid) | Unique identifier for tracking the duplication process. Pass this to the polling endpoint. |
Response example
{
"duplication_request_id": "40c32a4e-4869-11f0-96f2-0a00d9eb8f78"
}Get duplication request status
Requests expire after 7 days
Duplication requests are available for 7 days after creation.
Sample request
curl -H "x-api-key: {YOUR-API-KEY}" \
https://api.abyssale.com/design-duplication-requests/{duplicateRequestId}Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
duplicateRequestId | string (uuid) | Yes | Unique identifier of the duplication request returned by the duplicate endpoint. |
Response
| Field | Type | Description |
|---|---|---|
request_id | string (uuid) | Unique identifier of this duplication request. |
status | string | Current status of the duplication. See status values below. |
created_at_ts | integer | Unix timestamp when the request was created. |
completed_at_ts | integer | null | Unix timestamp when duplication completed, or null if still in progress. |
errored_at_ts | integer | null | Unix timestamp when duplication failed, or null if not failed. |
target_project | object | The project the template was duplicated into (id, name, created_at_ts). |
designs | array | List of duplicated designs. Each item contains original_design_id, target_design_id, and target_design_name. Empty until duplication completes. |
Status values:
| Status | Meaning |
|---|---|
INIT | Request received, not yet started. |
IN_PROGRESS | Duplication is running. |
COMPLETED | Duplication finished successfully. designs is populated. |
ERROR | Duplication failed. Check errored_at_ts. |
Response example
{
"request_id": "40c32a4e-4869-11f0-96f2-0a00d9eb8f78",
"status": "COMPLETED",
"created_at_ts": 1749827734,
"completed_at_ts": 1749827736,
"errored_at_ts": null,
"target_project": {
"id": "d59adee9-4867-11f0-96f2-0a00d9eb8f78",
"name": "HTML5 Tests",
"created_at_ts": 1749827125
},
"designs": [
{
"original_design_id": "0c967bd0-4137-4690-ad70-249aa021c68b",
"target_design_id": "afb1a61a-6c50-4bc3-a49b-3381822d4e81",
"target_design_name": "Holiday Campaign Template"
}
]
}Errors
| Status | id | When |
|---|---|---|
404 | workspace_template_not_found | The companyTemplateId doesn't name a workspace template in your workspace. |
404 | project_not_found | The project_id doesn't name one of your projects. |
404 | duplication_request_not_found | Unknown duplicateRequestId (polling endpoint) — also after the 7-day retention. |
Related
- Workspace Templates — list templates and categories
- Designs vs Workspace Templates — the model behind the split
- Projects — list destination projects
- Design Details — read the duplicated design
- Node.js SDK — every method, config, retries and the polling helpers
