Skip to content
Docs
Sign in

Booklets API

Impose a book PDF into press forms: jobs, plans, the fold catalog, custom folding templates, recommendations and one-shot imposing.

For integrators

The booklets API does what the Booklets pages do: send a book's PDF, choose how it folds, binds and prints, read the plan and get the press forms back as a PDF with bindery marks. Every endpoint is under your team, starting with /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/, and takes the same authentication as the rest of the API: an API key of a team member, or a signed-in session (see API overview).

All lengths are in millimetres. An object of another team is a 404.

A booklet in one call#

impose/ takes the PDF and the settings and answers with the press forms. Nothing is stored.

curl -s -X POST https://app.example.com/a/acme/imposition-layout/booklets/api/v1/impose/ \
  -H "Authorization: Api-Key $API_KEY" \
  -F file=@menu-11x17.pdf \
  -F 'settings={"binding": "perfect_bound", "scheme": "F16-7", "head": 5, "sheet_w": 1020, "sheet_h": 720}' \
  -o press-forms.pdf
POST /a/{team_slug}/imposition-layout/booklets/api/v1/impose/

Impose a PDF in one call: send the file and settings, get the press forms back. Nothing is stored.

booklets_impose · View in API reference

Jobs#

A job keeps the PDF (in Files, in the Booklets folder) and the settings, so you can plan, change and download it again. Create one with multipart file (or JSON with file_version, a PDF version from the Files API), an optional name, settings (an object, or a JSON string in multipart) and optional press, folder and guillotine ids from Equipment. The answer has the page count and each page's trim size.

JOBS=https://app.example.com/a/acme/imposition-layout/booklets/api/v1/jobs/
AUTH="Authorization: Api-Key $API_KEY"
JOB=00000000-0000-0000-0000-000000000000   # the id the first call returns

# 1. Upload the PDF with a few settings
curl -s -X POST "$JOBS" -H "$AUTH" -F file=@menu-11x17.pdf -F 'settings={"binding": "saddle_stitch"}'

# 2. Try other settings without saving them, then save them
curl -s -X POST "$JOBS$JOB/plan/" -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"settings": {"binding": "saddle_stitch", "lip": 10, "creep_direction": "both"}}'
curl -s -X PATCH "$JOBS$JOB/" -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"settings": {"binding": "saddle_stitch", "lip": 10, "creep_direction": "both"}}'

# 3. Download the press forms (add ?marks=0 to leave the marks out)
curl -s -o press-forms.pdf "$JOBS$JOB/press-forms/" -H "$AUTH"

The PDF can be up to 200 MB, for a job or for impose/; a larger one answers 413. A file that isn't a readable PDF answers 422 and isn't kept in Files. The jobs list is paged.

POST /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/

Create a booklet job from a PDF.

booklets_jobs_create · View in API reference

GET /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/

The team's booklet jobs, newest first (paged).

booklets_jobs_list · View in API reference

GET /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/

A booklet job.

booklets_jobs_retrieve · View in API reference

PATCH /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/

Rename a job or change its settings.

booklets_jobs_update · View in API reference

DELETE /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/

Delete a booklet job.

booklets_jobs_delete · View in API reference

PATCH replaces the whole settings object when you send one; fields you leave out go back to their defaults.

Plans#

GET /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/plan/

The job's plan: signatures, folded sheets, press forms, marks and checks.

booklets_jobs_plan · View in API reference

POST /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/plan/

Plan the job with other settings, without saving them.

booklets_jobs_plan_try · View in API reference

POST /a/{team_slug}/imposition-layout/booklets/api/v1/plan/

Plan a booklet from settings alone (no PDF: give page_count and the trim size).

booklets_plan · View in API reference

A plan is the whole imposition as JSON:

  • signatures: per signature its scheme, pages, section and depth (nesting), the book_pages it carries, its flat sheet as grid.front / grid.back (page, rotation, book page and source PDF page per cell) and creep per leaf (mm toward the spine).
  • forms: per press form its work_style, ups, copies_per_sheet and sides; each side lists its pages (book and source page, trim and clip rectangles in sheet millimetres with y up from the gripper edge, rotation, shift), folds and marks.
  • reading: the book in reading order (added marks blanks the plan added); cover for a separate cover; summary (pages, signatures, forms, plates, blanks, thickness, creep); splits (other splits worth considering: sizes in book order, blanks, signatures; send sizes as signature_sizes to use one); warnings (code, severity, message).

A plan that can't be made (say, signature_sizes that hold fewer pages than the book) answers 422 with detail. POST plan/ on a job lays settings over the saved ones; with "replace": true it uses them instead. POST plan/ without a job plans from settings alone: give page_count, trim_w and trim_h.

PDF and thumbnails#

GET /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/press-forms/

The press forms as a PDF: each form's front then back, then the cover form.

booklets_jobs_press_forms · View in API reference

POST /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/press-forms/

The press forms with other settings, without saving them.

booklets_jobs_press_forms_try · View in API reference

GET /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/pages/{page}/thumbnail/

A PNG of one source page (1-based), for previews.

booklets_jobs_page_thumbnail · View in API reference

Output: PDF, zip or JDF#

The output the job's settings ask for: output_format (pdf or jdf), output_layout (all, form or side) and output_name, the file name template (see Booklet output: PDF and JDF for the values it can use). One PDF comes as application/pdf; a PDF per form or per side, and the JDF package, as a zip. The file name is in Content-Disposition. A JDF package holds one folder with <name>.jdf, <name>_pages.pdf (the book in reading order) and <name>_marks.pdf (one page per form side); see Booklet output: PDF and JDF.

# A JDF package named by the production preset, without saving the settings
curl -s -X POST "$JOBS$JOB/output/" -H "$AUTH" -H "Content-Type: application/json" -o booklet.zip \
  -d '{"settings": {"output_format": "jdf", "output_name": "{{ booklet.trim }}_{{ booklet.pages }}pg"}}'
GET /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/output/

The output the settings ask for: one PDF, a zip of a PDF per form or per side, or a JDF package.

booklets_jobs_output · View in API reference

POST /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/output/

The output with other settings, without saving them.

booklets_jobs_output_try · View in API reference

GET /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/output-preview/

The output's file names and the values they read, without making it.

booklets_jobs_output_preview · View in API reference

POST /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/output-preview/

The output's file names with other settings, without saving them.

booklets_jobs_output_preview_try · View in API reference

Marks#

Besides its bindery marks (the marks settings), a job prints mark sets from the marks library: its press's defaults, sets added on the job, and the job's own sets (its own marks, presets added to it, and customized copies of library sets). See The booklet marks editor.

GET /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/marks/

The job's mark sets: the press's defaults, sets added, and the job's own.

booklets_jobs_marks · View in API reference

PATCH /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/marks/

Add library sets to the job or turn sets off on it.

booklets_jobs_marks_update · View in API reference

sets lists every set on the job with its doc (a mark-set document, lengths in pt from the sheet's bottom-left corner), its sources (press, booklet for a booklet rule, job, local), enabled, local and own (the job's own sets), replaces (the library set a customized copy stands in for) and part (a rule's forms: any, text or cover). Each mark's place.on says where it prints: containers counts the text forms (all, first, last, odd, even, every:N or "1-3,7"), sides is front, back or both, and mirror_on_back mirrors its position left to right on the back. PATCH sets added (library set ids) and disabled (sets left off this job). The answer also gives the press, its press_defaults, the job's binding (key, label), the team's booklet_rules ({set id: {bindings, part}}) and the sets among them for this binding (binding_defaults), the library sets and the presets (booklet: true for the booklet presets).

POST /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/marks/preview/

The job's mark sets resolved on one form side, as preview JSON.

booklets_jobs_marks_preview · View in API reference

Preview JSON of one form side (form: its index, -1 for the cover's form), as the marks designer draws it. Pass settings and docs ({set id: document}) to preview what isn't saved yet.

POST /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/marks/save/

Save changed marks: for this job only, or into the library set.

booklets_jobs_marks_save · View in API reference

Without set, the marks go into the job's own marks (made on first use). With a set of the job's own, they replace its marks. With a library set, scope: "job" keeps them for this job only (a customized copy) and scope: "set" saves them as the set's next version; a customized copy with scope: "set" goes back into its library set.

POST /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/marks/save-set/

Save marks as a new library mark set.

booklets_jobs_marks_save_set · View in API reference

A new library set from doc, used on the job instead of replaces (one of the job's own sets is deleted; a library set comes off the job, or is left off it when it is a press default). press_default applies it on the job's press.

POST /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/marks/reset/

Delete one of the job's own sets (a copy: the library set applies again).

booklets_jobs_marks_reset · View in API reference

POST /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/marks/add-preset/

Add a built-in preset to the job as a set of its own.

booklets_jobs_marks_add_preset · View in API reference

POST /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/marks/press-default/

Apply a library set by default on the job's press (on: false stops).

booklets_jobs_marks_press_default · View in API reference

POST /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/marks/binding-default/

Apply a library set to every booklet with this job's binding (on: false stops).

booklets_jobs_marks_binding_default · View in API reference

binding-default/ adds the job's binding to the set's booklet rule (on: false takes it out; a rule left with no binding is deleted).

Recommendations#

POST /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/recommend/

Ranked ways to print the booklet on the presses given (the wizard's suggestions).

booklets_jobs_recommend · View in API reference

The wizard's suggestions: the booklet planned on each press given (every active press when presses is empty; only the sheet in settings with "custom_sheet": true) with each usual scheme that fits the press and the folder, ranked, at most four. Each option has the settings that make it (apply them with PATCH), a summary, its work_styles, reasons and warnings.

The separate cover#

A separate cover has its own press form in the plan: cover.form, in the same shape as forms (with cover: true, its press and stock), set by the cover_* settings and the job's cover_press. See Press sheets and bindery marks.

POST /a/{team_slug}/imposition-layout/booklets/api/v1/jobs/{id}/cover-to-imposition/

Gang the separate cover in Imposition: its spread as a front-and-back item in an Imposition job.

booklets_jobs_cover_to_imposition · View in API reference

Saves the cover spread to Files and adds it to an Imposition job as a front-and-back item: a new job, or the one in imposition_job, for quantity covers. The response gives the Imposition job, its url, the artwork and the file_version.

Scheme catalog and templates#

GET /a/{team_slug}/imposition-layout/booklets/api/v1/schemes/

The JDF fold catalog and the team's custom templates, with their page layouts.

booklets_schemes_list · View in API reference

GET /a/{team_slug}/imposition-layout/booklets/api/v1/schemes/{id}/

One folding scheme with the packet before every fold (for the fold preview).

booklets_schemes_retrieve · View in API reference

A scheme has its id, pages, grid (cols, rows), folds (edge, travel in cells, to) and page layout (front, back: rows top first of [page, rotation]; the back as seen turned left to right). Retrieving one also gives states, the packet before every fold, which the fold preview draws. ?binding_edge=right or top gives the layout for that binding edge.

POST /a/{team_slug}/imposition-layout/booklets/api/v1/templates/

Save a custom folding template.

booklets_templates_create · View in API reference

GET /a/{team_slug}/imposition-layout/booklets/api/v1/templates/

The team's custom folding templates.

booklets_templates_list · View in API reference

GET /a/{team_slug}/imposition-layout/booklets/api/v1/templates/{id}/

A custom folding template.

booklets_templates_retrieve · View in API reference

PATCH /a/{team_slug}/imposition-layout/booklets/api/v1/templates/{id}/

Change a custom template.

booklets_templates_update · View in API reference

DELETE /a/{team_slug}/imposition-layout/booklets/api/v1/templates/{id}/

Delete a custom template.

booklets_templates_delete · View in API reference

POST /a/{team_slug}/imposition-layout/booklets/api/v1/templates/preview/

Fold (or check) a template without saving it: its page layout and fold steps, or what is wrong.

booklets_templates_preview · View in API reference

A template is folded by its folds, or numbered by hand with mode: "pages" and cells ({"front": [[{"page": 4, "rotation": 0}, …]], "back": …}). Use it with "scheme": "custom:<id>".

POST /a/{team_slug}/imposition-layout/booklets/api/v1/templates/import-jdf/

Import folding templates from a JDF or XJDF imposition template (Preps, Signa and others).

booklets_templates_import_jdf · View in API reference

POST /a/{team_slug}/imposition-layout/booklets/api/v1/templates/{id}/marks/

Give an imported template the marks PDF its JDF refers to.

booklets_templates_marks_upload · View in API reference

PATCH /a/{team_slug}/imposition-layout/booklets/api/v1/templates/{id}/marks/

Map the marks' placeholder separations to output colourants.

booklets_templates_marks_colors · View in API reference

Upload a JDF, XJDF or JDF MIME package as file (multipart). Each signature in it becomes a template with source: "jdf", its source_name, the catalog schemes it matches and the settings the file states (sheet, trim size, trims, lip, work style, binding, signature split). Send the marks PDF the JDF refers to as marks, or upload it to the template later (below); until then the response's marks_needed names it. A template's marks lists the sheet sides, the placeholder separations and their colors, which the marks PATCH maps to inks. The response lists the templates, the settings and notes on anything skipped. A file with nothing usable, or with values that can't be read (such as a page count or fold travel that isn't a number), answers 422. See Signature schemes and pagination.

Settings#

Every field is optional. A field you leave out takes its default; spine, lip, assembly, blank_policy, small_signature and creep_mode follow the binding (see Bindings, trims and creep).

FieldValuesMeaning
`page_count`1 – 4000Pages in the document (stateless plans only).
`trim_w`10 – 5000Finished page width (mm). Default: the PDF's first trim box.
`trim_h`10 – 5000Finished page height (mm).
`page_order`listCustom pagination: source page numbers in reading order, 0 for a blank. Null: 1 to N.
`fit``center`, `scale`How a page that isn't the trim size is placed.
`binding``saddle_stitch`, `perfect_bound`, `pur`, `section_sewn`, `case_bound`, `side_stitch`, `wire_o`The binding style. It sets the assembly, spine and lip defaults.
`binding_edge``left`, `right`, `top`Where the spine is, as the reader holds the book.
`cover``self`, `separate`A separate cover takes the first two and last two pages.
`assembly``""`, `gather`, `nest`, `nest_gather`How signatures go together: stacked, inset, or inset then stacked.
`nest_size`1 – 40Signatures per nested section (nest, then gather).
`blank_policy``""`, `before_last`, `end`, `start`, `after_first`Where blank pages go when the page count needs them.
`max_blanks`0 – 64The most blank pages to add.
`scheme`textThe folding scheme: a JDF catalog id such as F16-7, or custom:<id>. Empty: automatic.
`signature_sizes`listAn explicit split, in book order, such as [16, 8, 16]. Empty: automatic.
`allowed_sizes`listSmaller signature sizes allowed for the remainder. Empty: 8 and 4.
`split``fewest_blanks`, `fewest_signatures`, `equal`How the page count is split into signatures.
`small_signature``""`, `last`, `first`, `middle`Where a smaller signature goes.
`max_signature_pages`0 – 128The largest signature to choose. 0: by paper weight.
`caliper`0.01 – 2Paper thickness (mm), for creep and spine width.
`cover_caliper`0.01 – 5Cover thickness (mm).
`head`0 – 100Head trim (mm).
`foot`0 – 100Foot trim (mm).
`face`0 – 100Face (fore-edge) trim (mm).
`spine`0 – 100Grind-off per page at the spine (mm). Null: the binding's default.
`bleed`0 – 100How far artwork may run past the trim (mm).
`lip`0 – 100Lip (overfold) for the stitcher or folder (mm). Null: the binding's default.
`lip_side``low_folio`, `high_folio`Which half of the signature carries the lip.
`lip_edge``face`, `foot`Which edge carries the lip.
`creep_mode``""`, `off`, `auto`, `manual`How creep (shingling) is worked out.
`creep_per_sheet`0 – 5Manual creep per nested sheet (mm).
`creep_factor`0 – 5Creep per sheet as a multiple of the paper thickness.
`creep_direction``in`, `out`, `both`Which sheet stays put while the others move.
`creep_method``shift`, `scale`Move the artwork, or scale it about the spine.
`sheet_w`50 – 5000Press sheet width, along the gripper edge (mm). Web presses: the roll width.
`sheet_h`50 – 5000Press sheet height, in the feed direction (mm). Web presses: the cut-off.
`lead`0 – 200Gripper (lead) margin (mm).
`trail`0 – 200Tail margin (mm).
`side_margin`0 – 200Side margins (mm). Web presses: the non-printing band at each edge of the web.
`technology``offset`, `digital`, `web`Sheetfed offset (plates), digital, or web offset (a roll).
`perfecting`true / falseThe press can print both sides in one pass.
`grain``""`, `x`, `y`Grain direction of the press sheet.
`duplex_flip``long`, `short`How a digital press turns the sheet for its back.
`work_style``auto`, `sheetwise`, `perfecting`, `work_and_turn`, `work_and_tumble`How forms print on both sides.
`ups`0 – 64Blocks per press sheet. 0: as many as fit.
`up_fill``auto`, `repeat`, `cut_stack`, `sequential`What fills the ups: copies, or different signatures.
`block_rotation``auto`, `0`, `90`Turn the folded sheets 90° on the press sheet.
`block_gap`0 – 100Extra gap between blocks (mm).
`align``center`, `gripper`Centre the blocks, or set them against the gripper margin.
`cutter_width`0 – 5000Guillotine cut width (mm), for checks. 0: none.
`web_folder``chopper`, `jaw`, `double_parallel`, `combination`, `former`Web presses: the folder, which decides the signatures it delivers.
`web_heads``foot_to_foot`, `head_to_head`Web presses: how rows of pages meet round the cylinder.
`cut_band`0 – 50Web presses: the non-printing band at each cut (the plate gap) (mm). 0: gapless.
`ribbon_gap`0 – 50Web presses: trim between ribbons where the web is slit (mm).
`ribbons`1 – 8Web presses: ribbons stacked over the former into one product, their parts nested. 1: each ribbon its own signature.
`webs`1 – 4Web presses: webs printed at once and combined before the former (2: a double web).
`pin_trim`0 – 50Web presses: paper the folder's pins take at each cut (mm). 0: pinless.
`roll_min`0 – 5000Web presses: the narrowest roll the press takes (mm), for checks. 0: unknown.
`roll_max`0 – 5000Web presses: the widest roll the press takes (mm), for checks. 0: unknown.
`web_print``offset`, `digital`Web presses: offset (plates) or digital (inkjet or toner, no plates).
`web_repeat``fixed`, `variable`Digital web presses: a fixed cut-off, or variable: the cut-off is what one copy of the signatures needs.
`web_passes``one`, `two`Web presses: both sides in one pass (perfecting, two engines), or the roll runs twice.
`cover_stock`textThe cover's stock, for the slug (separate cover).
`cover_sheet_w`0 – 5000Cover press sheet width (mm). 0: the text's sheet, or the cover press's.
`cover_sheet_h`0 – 5000Cover press sheet height (mm). 0: the text's sheet, or the cover press's.
`cover_lead`0 – 200Cover gripper margin (mm). Null: the text's.
`cover_trail`0 – 200Cover tail margin (mm). Null: the text's.
`cover_side_margin`0 – 200Cover side margins (mm). Null: the text's.
`cover_technology``offset`, `digital`, `web`Cover press: offset or digital. Blank: the text's.
`cover_sides``both`, `outside`Print the cover inside too, or the outside only.
`cover_work_style``auto`, `sheetwise`, `work_and_turn`How the cover form prints both sides.
`cover_ups`0 – 64Covers per sheet. 0: as many as fit.
`cover_gap`0 – 100Gap between cover trims (mm). Null: twice the bleed.
`cover_rotation``auto`, `0`, `90`Turn the cover spreads 90° on the sheet.
`job_name`textSlug text.
`template_marks``replace`, `add`, `off`When the folding template was imported from a JDF with a marks PDF: print its marks instead of these, on top of them, or not at all.
`output_layout``all`, `form`, `side`PDF output: every form in one PDF, a PDF per form (front then back) or a PDF per side, zipped.
`output_format``pdf`, `jdf`Flattened press-form PDFs, or a JDF package: the pages, the marks and a JDF that places them, for your RIP.
`output_name`textThe output file name, a template with booklet values such as {{ booklet.trim }}. Empty: the booklet's name.
`binding_code`–The binding code in output names (booklet.binding_code). Empty: from the binding, such as SS.
`press_code`–The press code in output names (booklet.press_code). Empty: the press's short code.
`marks.crop`true / falseCrop marks on every trim line, outside the forms.
`marks.fold`true / falseDashed fold marks on every fold line.
`marks.collation`true / falseCollating (back-step) marks on the spine of each gathered signature.
`marks.registration`true / falseRegistration targets around the sheet.
`marks.colour_bar`true / falseA CMYK colour bar in a free margin.
`marks.slug`true / falseA slug line: job, signatures, form and side.
`marks.cut`true / falseCut marks between blocks.
`marks.length`0.5 – 50Tick length of crop and fold marks (mm).
`marks.offset`0 – 50Gap between the trim and crop marks (mm).
`marks.collation_w`0.5 – 30Collating mark width, across the spine (mm).
`marks.collation_h`1 – 50Collating mark height and step, along the spine (mm).

Last updated Oct. 17, 2026