Export generated assets as a ZIP archive (asynchronous)
Sample request
curl -X POST "https://api.abyssale.com/async/banners/export" \
-H "x-api-key: $ABYSSALE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"ids": [
"64238d01-d402-474b-8c2d-fbc957e9d290"
],
"callback_url": "https://your-webhook.com/export-abyssale"
}'import abyssale from '@abyssale/sdk';
const { data, error } = await abyssale.exportBanners({
"ids": [
"64238d01-d402-474b-8c2d-fbc957e9d290"
],
"callback_url": "https://your-webhook.com/export-abyssale"
});
if (error) console.error(error.id, error.message);
else console.log(data);from abyssale import Abyssale
with Abyssale() as client:
result = client.export_banners({
"ids": [
"64238d01-d402-474b-8c2d-fbc957e9d290"
],
"callback_url": "https://your-webhook.com/export-abyssale"
})
print(result)Example request body
{
"ids": [
"64238d01-d402-474b-8c2d-fbc957e9d290"
],
"callback_url": "https://your-webhook.com/export-abyssale"
}Example 200 response
{
"export_id": "64238d01-d402-474b-8c2d-fbc957e9d290",
"version": "v2026-08-21"
}Example 400 error response
{
"id": "invalid_payload",
"message": "Invalid JSON"
}Asynchronously package a set of previously generated assets — any output type (JPEG, PNG, WEBP, AVIF, PDF, MP4, GIF, HTML5 bundle) — into a single ZIP archive for download. Provide a callback_url to receive a webhook notification when the export is ready, containing the archive URL.
Request body
ids array of string (uuid) required
An array of string that corresponds to the banners IDs you would like to export. At least 1 item(s).
callback_url string (uri)
The url that will be called once the generation of your export is done.
Response 200
Export queued; keep export_id to match the webhook.
export_id string (uuid) always
Unique identifier (UUID) of the asynchronous export. Keep it to be able to identify the asynchronous response.
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 |
|---|---|
400 | Bad Request — the request body or parameters are invalid. |
401 | Unauthorized — missing or invalid API key. |
404 | None of the ids in ids exist in this workspace (visual_not_found). A request mixing known and unknown ids SUCCEEDS, and the archive contains only the ones that were found. An id that is not a valid UUID answers endpoint_not_found instead. |
429 | Too Many Requests. |
500 | Internal Server Error — an unexpected error occurred on our side. |
