Poll template duplication request status
Sample request
curl -X GET "https://api.abyssale.com/design-duplication-requests/$DUPLICATE_REQUEST_ID" \
-H "x-api-key: $ABYSSALE_API_KEY"import abyssale from '@abyssale/sdk';
const duplicateRequestId = 'YOUR_DUPLICATE_REQUEST_ID';
const { data, error } = await abyssale.getDuplicationRequest(duplicateRequestId);
if (error) console.error(error.id, error.message);
else console.log(data);from abyssale import Abyssale
duplicate_request_id = "YOUR_DUPLICATE_REQUEST_ID"
with Abyssale() as client:
result = client.get_duplication_request(duplicate_request_id)
print(result)Example 200 response
{
"request_id": "40c32a4e-4869-11f0-96f2-0a00d9eb8f78",
"status": "COMPLETED",
"created_at_ts": 1749827734,
"completed_at_ts": 1749827736,
"target_project": {
"id": "d59adee9-4867-11f0-96f2-0a00d9eb8f78",
"name": "HTML5 Tests",
"created_at_ts": 1749827125,
"category_name": "HTML5 Tests"
},
"designs": [
{
"original_design_id": "0c967bd0-4137-4690-ad70-249aa021c68b",
"target_design_id": "afb1a61a-6c50-4bc3-a49b-3381822d4e81",
"target_design_name": "Design Name"
}
],
"version": "v2026-08-21"
}Example 401 error response
{
"message": "Unauthorized: missing or invalid API key.",
"id": "unauthorized"
}Poll the status of a template duplication request. Use this endpoint to track the progress of an asynchronous duplication operation.
Path parameters
duplicateRequestId string (uuid) required
Unique identifier (UUID) of the duplication request
Response 200
Duplication request status
request_id string (uuid) always
Unique identifier of the duplication request
status string always
Current status of the duplication request One of "INIT", "IN_PROGRESS", "ERROR", "COMPLETED".
created_at_ts integer always
Unix timestamp when the duplication request was created
completed_at_ts integer | null
Unix timestamp when the duplication was completed (null if not completed)
errored_at_ts integer | null
Unix timestamp when the duplication failed (null if not failed)
target_project ProjectSummary always
Show child attributes
id string (uuid) always
Unique identifier of the project
name string always
Name of the project
created_at_ts integer always
Unix timestamp when the project was created
category_name string | null
Deprecated. Deprecated alias of name — the same string, under the old noun. It does not describe a category the project belongs to: a project has no parent category. Returned by the GET /projects listing only; the POST /projects read-back omits it. Read name.
designs array of DuplicatedDesign always
List of duplicated designs (empty if not completed)
Show child attributes
original_design_id string (uuid) always
ID of the original workspace template
target_design_id string (uuid) always
ID of the newly created template in your project
target_design_name string always
Name of the duplicated template
version string
The API version that produced this response, named by release date (vYYYY-MM-DD). Pattern ^v\d{4}-\d{2}-\d{2}$.
More about version
The API version that produced this response, named by release date (vYYYY-MM-DD). Stamped as a top-level field on JSON object bodies, success and error alike, so a client can always tell which contract answered. There is no version-selection parameter — a single version is maintained at a time.
Two kinds of body are not stamped. Array bodies (the listings) carry no envelope. And a body that already has a version key of its own is left alone — which in practice means Banner, whose version is the generated file's integer counter. So GET /banners/{bannerId} and the synchronous generate are the two responses that do not tell you which contract answered.
The value changes when a new version is released. Match the vYYYY-MM-DD shape rather than pinning today's literal, or your client breaks on the next release.
Errors
Every failure uses the shared error envelope — {id, message, errors?}. Branch on id, never on message. See Errors.
| Status | When |
|---|---|
401 | Unauthorized — missing or invalid API key. |
404 | Duplication request not found (duplication_request_not_found). |
410 | The duplication request has expired (duplication_request_gone). Statuses are kept for 7 days. |
429 | Too Many Requests. |
500 | Internal Server Error — an unexpected error occurred on our side. |
