Download OpenAPI specification:
Abyssale is a programmatic creative asset generation API for creating marketing visuals, ad creatives, videos, and print-ready PDFs at scale. Design once in Abyssale, then generate thousands of personalized variations — across every format, channel, and language — via a single REST API call.
This documentation is about the Abyssale Rest API. If you would like to discover other Abyssale features or to have a comprehensive understanding on how everything works, go to the Abyssale developers hub.
Base URL: https://api.abyssale.com
Content-Type: application/json header.| Use case | Recommended approach |
|---|---|
| Personalized images in emails (rendered on open) | Static design → Dynamic image URL |
| Embed a live, customizable image on a website | Static design → Dynamic image URL |
| Single image on demand (synchronous response) | Synchronous generation |
| Bulk campaign creatives across multiple formats | Async generation |
| Animated GIF or video for social/ads | Animated design → Async generation with gif or video options |
| HTML5 banner ads for ad networks | Animated design → Async generation with html5 options |
| Print-ready PDF (single page) | Printer design → Async generation with print options |
| Multi-page print document (brochure, catalog) | Printer multipage design → Multi-page PDF |
Abyssale uses API Key Authentication. Your API key is passed along with every API call, allowing Abyssale to identify your company account and access your data.
401 Unauthorized — missing or invalid API key429 Too Many Requests — rate limit exceeded (10 req/s) or insufficient credits500 Internal Server Error — unexpected server-side failureA design is a layout including at least:
All elements have their own properties that can be customized (color, text payload, image...).
Once designed, all properties of the design will act as a reference for subsequent image generation. Obviously, those properties can be overridden by sending new parameters in the generation API call.
Abyssale provides a list of free template designs in the Template Library page. Feel free to use one to start designing your design instead of doing it from scratch.
All of your designs are listed in the different project pages, only those are accessible via API.
Retrieve all designs available in your Abyssale workspace. Each design defines the visual layout, available formats (dimensions), and configurable elements (text, images, shapes, etc.) that can be overridden during image generation. Filter by design type or project category using query parameters.
| project_id | string <uuid> Unique identifier (UUID) of a project. Filter designs by project. |
| type | string Enum: "static" "animated" "printer" "printer_multipage" Filter designs by one of these types static, animated, printer, printer_multipage |
[- {
- "id": "64238d01-d402-474b-8c2d-fbc957e9d290",
- "name": "Ad campaign fall 2025",
- "type": "static",
- "created_at": 1649942114,
- "updated_at": 1649942114,
- "category_name": "Fall campaigns",
}
]Retrieve the full specification of a design: its formats (dimensions and preview URLs), all configurable elements with their properties, and any template variables defined in text layers. Use this endpoint to discover what data to send in a generation request.
| designId required | string <uuid> Unique identifier (UUID) of the design |
{- "id": "64238d01-d402-474b-8c2d-fbc957e9d290",
- "name": "Ad campaign fall 2025",
- "type": "static",
- "created_at": 1649942114,
- "updated_at": 1649942114,
- "category_name": "Fall campaigns",
- "formats": [
- {
- "id": "facebook-post",
- "uid": "9b57d65e-eb2c-4a74-a51e-4482917c248a",
- "width": 1200,
- "height": 1200,
- "unit": "px",
}
], - "elements": [
- {
- "name": "element-name",
- "type": "text",
- "attributes": [
- {
- "id": "payload",
- "help": "Text content (i.e. Lorem ipsum)",
- "values": {
- "facebook-post": "My image title"
}
}
]
}
], - "variables": {
- "name": "{name}",
- "title": "{title}"
}
}Retrieve detailed information for a specific format within a design, including dimensions, unit, preview URL, dynamic image URL, element layout, and variables. Useful for inspecting a single format before generating or building dynamic image URLs.
| designId required | string Unique identifier of the design |
| formatSpecifier required | string Format name or UID |
{- "id": "new-format",
- "uid": "6248b96f-581a-43f0-9863-85e1b7d0ec05",
- "width": 3333,
- "height": 666,
- "unit": "px",
- "design": {
- "id": "64238d01-d402-474b-8c2d-fbc957e9d290",
- "name": "Ad campaign fall 2025",
- "type": "static",
- "created_at": 1649942114,
- "updated_at": 1649942114,
- "category_name": "Fall campaigns"
}, - "elements": [
- {
- "name": "root",
- "type": "container",
- "settings": {
- "is_mandatory": false
}, - "attributes": [
- {
- "id": "background_color",
- "help": "6 or 8 digits hexadecimal background color (i.e. #F3F3F3) of the banner",
- "value": "#FFFFFF"
}
], - "layout": {
- "x": 0,
- "y": 0,
- "width": 3333,
- "height": 666
}
}
], - "variables": {
- "name": "{name}",
- "title": "{title}"
}
}Generate images, animated videos, GIFs, HTML5 banners, and print-ready PDFs programmatically from your Abyssale designs.
The generation workflow is simple:
Use the synchronous endpoint for single-image generation with an immediate response. Use the asynchronous endpoint for bulk banner creation across multiple formats at once — ideal for marketing automation, personalized ad campaigns, and batch asset production at scale.
Synchronously generate a single image from a design. Send your dynamic data (text, images, colors) as element overrides in the request body and receive the generated file URL immediately in the response.
Best for: real-time image generation, single-asset workflows, or when you need the result inline without polling.
For bulk generation across multiple formats, use the asynchronous endpoint instead.
| designId required | string <uuid> Unique identifier (UUID) of the design |
required | object (Elements) A |
| template_format_name | string Corresponds to the format ID you would like to generate (only mandatory when your design contains several formats). |
| image_file_type | string Enum: "png" "jpeg" "webp" "avif" "pdf" "auto" Output file type. Defaults to the design's configured type when omitted. |
| file_compression_level | integer [ 1 .. 100 ] Percentage of compression applied. |
{- "elements": {
- "element-name1": {
- "background_color": "#FF0000"
}, - "element-name2": {
- "background_color": "#FF0000"
}
}, - "template_format_name": "facebook-post",
- "image_file_type": "png",
- "file_compression_level": 80
}{- "id": "64238d01-d402-474b-8c2d-fbc957e9d290",
- "version": 1,
- "sharing_id": "5fcec999-2bfb-4dd7-ba38-2d9e16c49149",
- "file": {
- "type": "jpeg",
- "filename": "996739f4-b563-428a-a6e8-ec3cb8bd03d4.jpeg"
}, - "format": {
- "id": "facebook-post",
- "width": 1200,
- "height": 1200
}, - "template": {
- "id": "64238d01-d402-474b-8c2d-fbc957e9d290",
- "name": "Ad campaign fall 2025",
- "type": "static",
- "created_at": 1649942114,
- "updated_at": 1649942114,
- "category_name": "Fall campaigns"
}
}Asynchronously generate multiple formats of an image, video, GIF, HTML5 banner, or PDF in a single API call. Ideal for bulk banner production, multi-channel marketing campaigns, and programmatic ad creative generation at scale.
Specify one or more format IDs to generate, or omit the list to generate all
formats defined in the design. Provide a callback_url to receive a webhook
notification when generation is complete, or poll
GET /generation-request/{generationRequestId} for status.
You can find available formats and elements by calling GET /designs/{designId}.
| designId required | string <uuid> Unique identifier (UUID) of the design |
required | object (Elements) A |
| template_format_names | Array of strings Format IDs you would like to generate. The array can be empty or not provided if you want to generate all formats of this design. |
| callback_url | string <uri> The url that will be called once generation of your images is done. We will do a |
| image_file_type | string Enum: "png" "jpeg" "webp" "avif" "gif" "pdf" "html5" "mp4" "webm" "auto" Output file type. Depends on the design type (static/animated/printer). Defaults to the design's configured type when omitted. |
| file_compression_level | integer [ 1 .. 100 ] Percentage of compression applied. |
object HTML5 output options (animated designs only) | |
object GIF output options (animated designs only) | |
object Video output options (animated designs only) | |
object Print output options (printer/printer_multipage designs only) | |
| original_visual_id | string <uuid> UUID of the original visual this generation is based on. |
{- "elements": {
- "element-name1": {
- "background_color": "#FF0000"
}, - "element-name2": {
- "background_color": "#FF0000"
}
}, - "template_format_names": [
- "facebook-feed",
- "instagram-post",
- "iab-medium"
], - "image_file_type": "png",
- "file_compression_level": 1,
- "html5": {
- "page_title": "Abyssale page title example",
- "ad_network": "default",
- "include_backup_image": true,
- "repeat": -1
}, - "gif": {
- "max_fps": 2,
- "repeat": -1
}, - "video": {
- "fps": 2
}, - "print": {
- "color_profile": "b4bc069b-fba6-4b13-aec1-3db2eeb7dbd7",
- "display_crop_marks": true
}, - "original_visual_id": "efce0750-ba21-49c4-be6f-4e6125cdc6bb"
}{- "generation_request_id": "06399fcd-0c21-47da-bd9b-1e653e0453e8"
}Asynchronously generate a multi-page print-ready PDF from a printer_multipage design.
Each page is defined by a pages dictionary entry, allowing different element
overrides per page — ideal for brochures, catalogs, and variable data printing.
Provide a callback_url to receive a webhook when the PDF is ready,
or poll GET /generation-request/{generationRequestId} for status.
You can find available formats and elements by calling GET /designs/{designId}.
| designId required | string <uuid> Unique identifier (UUID) of the design |
required | object (Pages) A |
| callback_url | string <uri> The url that will be called once generation of your images is done. We will do a |
{- "pages": {
- "page_1": {
- "root": {
- "background_color": "#FF0000"
}
}, - "page_2": {
- "root": {
- "background_color": "#FF0000"
}
}
},
}{- "generation_request_id": "06399fcd-0c21-47da-bd9b-1e653e0453e8"
}Poll the status of an asynchronous generation request. Use this endpoint to track the progress of a batch generation operation started with the async generate endpoint. The result is available for 7 days after generation.
| generationRequestId required | string <uuid> Unique identifier (UUID) of the generation request |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "is_finalized": true,
- "banners": [
- {
- "id": "64238d01-d402-474b-8c2d-fbc957e9d290",
- "version": 1,
- "sharing_id": "5fcec999-2bfb-4dd7-ba38-2d9e16c49149",
- "file": {
- "type": "jpeg",
- "filename": "996739f4-b563-428a-a6e8-ec3cb8bd03d4.jpeg"
}, - "format": {
- "id": "facebook-post",
- "width": 1200,
- "height": 1200
}, - "template": {
- "id": "64238d01-d402-474b-8c2d-fbc957e9d290",
- "name": "Ad campaign fall 2025",
- "type": "static",
- "created_at": 1649942114,
- "updated_at": 1649942114,
- "category_name": "Fall campaigns"
}
}
], - "errors": [
- {
- "template_format_name": "string",
- "reason": "string"
}
]
}Retrieve the fonts available in your Abyssale workspace. Fonts can be applied to text and button elements during image generation. Two types are supported: Google Fonts (free, always available) and custom fonts uploaded to your workspace.
Reference a font by its ID when overriding the font property in a generation request.
Retrieve all fonts available in your Abyssale workspace, including Google Fonts
and any custom fonts you have uploaded. Use a font's id to override the font
on text or button elements in a generation request.
[- {
- "id": "61568e7c-33c5-11ea-9877-92672c1b8195",
- "name": "Ubuntu Mono",
- "available_weights": [
- 100
], - "type": "google"
}
]Export a collection of previously generated banners as a single ZIP archive. Useful for downloading bulk assets for offline use, sharing with creative teams, or archiving a campaign's outputs. The export is processed asynchronously — provide a callback URL to receive a webhook notification when the archive is ready.
An asynchronous banner export has completed. The ZIP archive containing all
requested banners is available at the provided archive_url.
| export_id | string <uuid> ID of the export |
| archive_url | string <uri> The zip public URL |
| requested_at | number Timestamp at which the export has been requested |
| generated_at | number Timestamp at which the export has been done |
{- "export_id": "38cb7df3-1160-4824-8531-2bacde2b6517",
- "requested_at": 1642150000,
- "generated_at": 1642150002
}Asynchronously package a set of previously generated banners 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.
| ids required | Array of strings <uuid> [ items <uuid > ] An array of string that corresponds to the banners IDs you would like to export. |
| callback_url | string <uri> The url that will be called once the generation of your export is done. |
{- "ids": [
- "64238d01-d402-474b-8c2d-fbc957e9d290"
],
}{- "export_id": "64238d01-d402-474b-8c2d-fbc957e9d290"
}Retrieve metadata and download URLs for generated files (images, videos, GIFs, HTML5 banners, and PDFs). Listen to webhook events to be notified in real time when a file or batch generation completes.
A new file (image, video, GIF, HTML5 banner, or PDF) has been generated and is ready to download.
| id required | string <uuid> |
| version | integer Version number of the generated file. |
| sharing_id | string <uuid> Identifier used for sharing this generated file. |
required | object (File) |
object (Format) | |
object (Design) |
{- "id": "64238d01-d402-474b-8c2d-fbc957e9d290",
- "version": 1,
- "sharing_id": "5fcec999-2bfb-4dd7-ba38-2d9e16c49149",
- "file": {
- "type": "jpeg",
- "filename": "996739f4-b563-428a-a6e8-ec3cb8bd03d4.jpeg"
}, - "format": {
- "id": "facebook-post",
- "width": 1200,
- "height": 1200
}, - "template": {
- "id": "64238d01-d402-474b-8c2d-fbc957e9d290",
- "name": "Ad campaign fall 2025",
- "type": "static",
- "created_at": 1649942114,
- "updated_at": 1649942114,
- "category_name": "Fall campaigns"
}
}An asynchronous batch generation request has completed. Contains the full list
of generated files and any per-format errors. Triggered by
POST /async/banner-builder/{designId}/generate.
| id required | string <uuid> Unique identifier (UUID) of the batch generation |
required | Array of objects (Banner) List of generated images |
Array of objects If any errors occur, they will be listed under that property |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "banners": [
- {
- "id": "64238d01-d402-474b-8c2d-fbc957e9d290",
- "version": 1,
- "sharing_id": "5fcec999-2bfb-4dd7-ba38-2d9e16c49149",
- "file": {
- "type": "jpeg",
- "filename": "996739f4-b563-428a-a6e8-ec3cb8bd03d4.jpeg"
}, - "format": {
- "id": "facebook-post",
- "width": 1200,
- "height": 1200
}, - "template": {
- "id": "64238d01-d402-474b-8c2d-fbc957e9d290",
- "name": "Ad campaign fall 2025",
- "type": "static",
- "created_at": 1649942114,
- "updated_at": 1649942114,
- "category_name": "Fall campaigns"
}
}
], - "errors": [
- {
- "template_format_name": "string",
- "reason": "string"
}
]
}Retrieve the metadata and download URLs for a previously generated file (image, video, GIF, HTML5 banner, or PDF). Returns both the S3 storage URL and a CDN-hosted URL suitable for embedding directly in websites or emails.
| bannerId required | string <uuid> Unique identifier (UUID) of the file |
{- "id": "64238d01-d402-474b-8c2d-fbc957e9d290",
- "version": 1,
- "sharing_id": "5fcec999-2bfb-4dd7-ba38-2d9e16c49149",
- "file": {
- "type": "jpeg",
- "filename": "996739f4-b563-428a-a6e8-ec3cb8bd03d4.jpeg"
}, - "format": {
- "id": "facebook-post",
- "width": 1200,
- "height": 1200
}, - "template": {
- "id": "64238d01-d402-474b-8c2d-fbc957e9d290",
- "name": "Ad campaign fall 2025",
- "type": "static",
- "created_at": 1649942114,
- "updated_at": 1649942114,
- "category_name": "Fall campaigns"
}
}Projects let you organize your designs into logical groups — for example by campaign, client, or content type. All designs must belong to a project to be accessible via the API. Use projects to scope design retrieval and keep large design libraries manageable.
Retrieve all projects in your workspace. Projects group designs into logical collections. Only designs that belong to a project are accessible via the API.
[- {
- "id": "9d00e9fe-9bd5-4471-acad-baa702a867e9",
- "name": "Animation Tests",
- "created_at_ts": 1654763057
}, - {
- "id": "bdf9ab44-f5fd-47ad-881d-a45906901233",
- "name": "HTML5 Tests",
- "created_at_ts": 1663767647
}
]Create a new project to organize your designs. Assign designs to this project in the Abyssale editor to make them accessible via the API.
| name required | string [ 2 .. 100 ] characters Name of the project |
{- "name": "Summer Campaign 2024"
}{- "id": "cb2c4add-4867-11f0-96f2-0a00d9eb8f78",
- "name": "Summer Campaign 2024",
- "created_at_ts": 1749827107
}Workspace templates are master designs shared across your organization. Duplicate them into any project to create editable copies — useful for spinning up campaign variants, onboarding new clients, or maintaining brand-consistent starting points. The duplication is processed asynchronously; poll the status endpoint to track progress.
Copy a shared workspace template into one of your projects, creating an editable
design instance. The duplication is asynchronous — use the returned
duplication_request_id to poll for completion via
GET /design-duplication-requests/{duplicateRequestId}.
| companyTemplateId required | string <uuid> Example: 0c967bd0-4137-4690-ad70-249aa021c68b Unique identifier (UUID) of the workspace template to duplicate |
| project_id required | string <uuid> Target project ID where the template will be duplicated |
| name | string [ 2 .. 100 ] characters Optional custom name for the duplicated template |
{- "project_id": "d59adee9-4867-11f0-96f2-0a00d9eb8f78"
}{- "duplication_request_id": "40c32a4e-4869-11f0-96f2-0a00d9eb8f78"
}Poll the status of a template duplication request. Use this endpoint to track the progress of an asynchronous duplication operation.
| duplicateRequestId required | string <uuid> Example: 40c32a4e-4869-11f0-96f2-0a00d9eb8f78 Unique identifier (UUID) of the duplication request |
{- "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": "New Design name"
}
]
}Dynamic images are live image URLs that render on-the-fly based on query parameters. Once created for a design, the URL can be embedded anywhere — emails, websites, social posts — and customized with different text, colors, or images per use case, without additional API calls. Ideal for personalization at scale.
Creates a dynamic image URL for a given design. Only one dynamic image is allowed per design. Subsequent calls return the existing dynamic image. Use enable_rate_limit in the request body to enable API rate limiting for this image & enable_production_mode to enable production mode (default is test mode).
| designId required | string Unique identifier of the design |
| enable_rate_limit | boolean Default: false Enable API rate limiting for this dynamic image |
| enable_production_mode | boolean Default: false Enable Production mode for this dynamic image |
{- "enable_rate_limit": true,
- "enable_production_mode": true
}{- "id": "a12b3c4d-5e6f-7890-abcd-ef1234567890",
- "design_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
- "formats": [
- {
- "id": "one-format",
- "uid": "11111111-2222-3333-4444-555555555555",
- "width": 3333,
- "unit": "px",
- "height": 666,
}, - {
- "id": "another-format",
- "uid": "66666666-7777-8888-9999-000000000000",
- "width": 1920,
- "unit": "px",
- "height": 1080,
}
]
}