Generate Multi-Page PDF for Printing
Asynchronously generate a single multi-page print-ready PDF from a printer_multipage design. Each set of element values you provide becomes one page in the output document — useful for catalogues, brochures, and personalised booklets where every page shares the same template but has different content.
The result is one PDF file, delivered as a direct link. When generation completes, a NEW_BANNER_BATCH event is sent to your callback_url carrying a banners array with a single entry, whose file.url is the PDF. It is not a ZIP — a ZIP is only ever produced for HTML5 banners.
A printer_multipage design has pages, not formats, so it always produces exactly one document; there is no per-page or per-format variant of this call. Generate Multi-Format PDFs is the equivalent for a printer design, where each of the design's formats produces its own PDF.
Plan requirement
This feature is available from the Suite plan.
Colors accept hex or CMYK
Colors you override at generation time — root.background_color and element *_color fields — accept both hex (#RRGGBB / #RRGGBBAA) and CMYK (cmyk(C,M,Y,K) / cmyka(C,M,Y,K,A)) tokens on print designs. The backend converts them to the design's color profile at render time. (Print imports store CMYK too, converting a solid hex for you — see Print Imports → Colors.)
Endpoint
Generation characteristics

- Supported Design Type:
printer_multipage - Response: Asynchronous
- Output: Multi-page printable PDF
- Retrieval methods: Webhooks, Polling
Request body
There is no top-level elements field on this endpoint — a multi-page design's overrides are per page, inside pages. image_file_type and file_compression_level are not accepted either: the output is always one PDF.
| Field | Type | Required | Description |
|---|---|---|---|
pages | object | Yes | Dictionary of page overrides keyed by page name (e.g. page_1, page_2). Each value is a dictionary of element overrides for that page. |
callback_url | string (uri) | No | URL that will receive a POST request when generation completes. |
original_visual_id | string (uuid) | No | Regenerate an existing multi-page visual in place — see Visual Versioning. |
print | object | No | Print output options. Fields: color_profile (UUID), display_crop_marks (boolean — default: value configured in the builder). |
Output customization
Use the print property to customize the PDF output.
Color profiles
| UUID | Description |
|---|---|
be2ab219-8fe4-4d85-91ba-65bdc9ddaf01 | CMYK — ISO Coated v2 (ECI) |
03738f37-5b6f-4be9-9100-706b1711f9dd | CMYK — ISO Coated v2 (ECI) 300% |
e0c86a8a-050c-41f1-885a-0f74b9baac50 | CMYK — ISO Uncoated |
0e0355e6-2931-4c83-92f2-64db9f5ddffc | CMYK — US Web Coated (SWOP 2006 5v2) |
db3c123e-1127-11ef-b77e-f93002785645 | RGB — No color profile |
fac91df8-1155-11ef-b77e-f93002785645 | CMYK — ISO Newspaper26 v4 |
The color_profile value must be a UUID — the built-ins above, or a custom profile from your workspace.
{
"print": {
"display_crop_marks": true,
"color_profile": "e0c86a8a-050c-41f1-885a-0f74b9baac50"
}
}Sample request
For multi-page designs, provide elements per page using the pages object.
Replace {YOUR-API-KEY} and {designId} before running.
curl -X POST \
-H "x-api-key: {YOUR-API-KEY}" \
-H "Content-Type: application/json" \
-d '{
"pages": {
"page_1": {
"root": { "background_color": "cmyka(0,0,0,0,100)" },
"tb-image_0": { "image_url": "https://mycompany.com/image.jpeg" },
"tb-text_0": { "payload": "Lorem Ipsum" }
},
"page_2": {
"root": { "background_color": "cmyka(0,0,0,0,100)" },
"tb-image_0": { "image_url": "https://mycompany.com/image.jpeg" },
"tb-text_0": { "payload": "Lorem Ipsum" },
"tb-text_1": { "payload": "Lorem Ipsum" }
}
}
}' \
https://api.abyssale.com/async/banner-builder/{designId}/generate-multipage-pdfSample response
{ "generation_request_id": "166e1852-dc97-43e3-a5f2-142076452c74" }Related
- Asynchronous Generation Overview
- Generate Multi-Format PDFs — single-page PDF generation
- Banner Events — webhook payload on completion
- Errors — error codes for failed requests
- Node.js SDK — every method, config, retries and the polling helpers
