> ## Documentation Index
> Fetch the complete documentation index at: https://print.app/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Create an imposition rule

> Creates a rule from its `sections`, or from `basedOn` (a built-in rule or one of yours). Each section takes design pages, cuts them into groups of `group` and puts each group on one sheet: joined at the trim along `direction` in `order`, on a sheet that fits them or on a fixed `sheet`. Sections the PDF would ignore are refused. Give it to designs with `impositionRuleId` on `PATCH /v2/designs/{id}`.



## OpenAPI

````yaml openapi.json POST /v2/imposition-rules
openapi: 3.1.0
info:
  title: Print.App API
  version: 2.1.0
  description: >-
    Server-to-server API for Print.App integrations: designs and their page
    content, folders, files, fonts, palettes, product assignments, projects and
    editor links. Authenticate every request with a secret key: `Authorization:
    Bearer sk_…`. Never call it from a browser.
servers:
  - url: https://api.print.app
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Account
    description: The account a secret key belongs to.
  - name: Designs
    description: >-
      The designs (templates) your customers start from: create them at a size,
      manage their pages, and place text, images and shapes on them.
  - name: Design folders
    description: >-
      Folders that organise your designs. A design can sit in more than one
      folder.
  - name: Files
    description: >-
      Your own images and graphics, used in designs and offered to customers in
      the editor.
  - name: Graphic folders
    description: >-
      Folders of files, shown in the editor under Pictures, Backgrounds,
      Textures or Frames.
  - name: Fonts
    description: >-
      The fonts your designs and customers can use: the built-in set, imported
      Google fonts and fonts you upload.
  - name: Palettes
    description: Colour palettes offered in the editor.
  - name: Products
    description: Which designs open for each product (and variant) in your store.
  - name: Projects
    description: Your customers' saved designs.
  - name: Links
    description: >-
      Project URLs (the dashboard's Create new Project URL): shareable links
      that open a design or project in the editor at create.print.app, to share
      with customers or to test a design.
  - name: Connectors
    description: >-
      Links between the options on a store's product page and the editor: the
      choice a customer makes shows the right pages, opens the right design, or
      sets the size, orientation or colour. Read a product page for what a
      connector can point at, and test one against a design before customers
      meet it.
  - name: Print Options
    description: >-
      Print Options is Print.App's free product options app (options.print.app):
      the sizes, papers, quantities and prices customers choose on a product
      page, priced on our servers when they add to cart. An option set is those
      questions and their prices; Print.App designs fill its artwork step, and
      connectors read its answers. Option sets are managed here for Shopify
      stores with both apps installed; templates and quotes work for any
      account.
  - name: Resource profiles
    description: >-
      Limits on the fonts, colour palettes and graphic folders the editor
      offers, for the designs that use them.
  - name: PDF profiles
    description: >-
      The settings print PDFs are made with: colour conversion, PDF standard,
      cut lines, image resolution, fonts.
  - name: Imposition rules
    description: >-
      How print PDFs put a design's pages on sheets: joined into spreads, such
      as a book cover's back, spine and front or a calendar's pairs, or placed
      on a fixed sheet. Customers still edit the pages one by one.
  - name: 3D scenes
    description: >-
      The 3D scenes the editor previews designs on: models with print areas,
      folds, flipbooks and sheets, yours and the Print.App library's. A design
      picks one with `sceneId`.
  - name: Library
    description: >-
      The Print.App library, the store catalogue the dashboard's Import Designs
      and Import from Library open: ready-made designs, and themed kits of
      graphics. Find what suits a product, then bring it into your account: a
      design as your own copy, a kit as a folder that follows it, single
      graphics into a folder.
  - name: Settings
    description: >-
      The account's editor and product page settings: how the editor opens and
      behaves, and the selectors Print.App uses on your product pages. Settings
      that run code in your store, send data elsewhere or delete projects are
      kept to the dashboard.
paths:
  /v2/imposition-rules:
    post:
      tags:
        - Imposition rules
      summary: Create an imposition rule
      description: >-
        Creates a rule from its `sections`, or from `basedOn` (a built-in rule
        or one of yours). Each section takes design pages, cuts them into groups
        of `group` and puts each group on one sheet: joined at the trim along
        `direction` in `order`, on a sheet that fits them or on a fixed `sheet`.
        Sections the PDF would ignore are refused. Give it to designs with
        `impositionRuleId` on `PATCH /v2/designs/{id}`.
      operationId: createImpositionRule
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ImpositionRuleCreate'
            example:
              title: 'Calendar: month pairs on A3'
              unit: mm
              sections:
                - pages: ''
                  group: 2
                  direction: vertical
                  sheet:
                    width: 297
                    height: 420
      responses:
        '201':
          description: Created.
          headers:
            x-request-id:
              $ref: '#/components/headers/RequestId'
            idempotent-replayed:
              $ref: '#/components/headers/IdempotentReplayed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImpositionRule'
              example:
                object: imposition_rule
                id: _imposition_1
                title: 'Book cover: back, spine and front as one spread'
                description: >-
                  Pages 1, 2 and 3 are the front cover, the spine and the back
                  cover. The PDF joins them into one spread with the back cover
                  on the left. Later pages print as they are.
                builtIn: true
                unit: mm
                sections:
                  - pages: 1-3
                    group: 3
                    order:
                      - 3
                      - 2
                      - 1
                    direction: horizontal
                    sheet: null
                    anchor: center
                    offset:
                      x: 0
                      'y': 0
                    marks:
                      crop: null
                      fold: null
                created: null
                modified: null
        '400':
          description: >-
            A parameter or body field is malformed: `param` names it and
            `details` lists every problem found.
          headers:
            x-request-id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: true
                code: invalid_request
                message: width is required.
                param: width
                requestId: FZn-uhymjoEEJow=
        '401':
          description: Missing, unknown, revoked or expired secret key.
          headers:
            x-request-id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: true
                code: unauthorized
                message: >-
                  Missing or invalid secret key. Send it as "Authorization:
                  Bearer sk_…".
                requestId: FZn-uhymjoEEJow=
        '403':
          description: The account is suspended for an unpaid invoice.
          headers:
            x-request-id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: true
                code: account_suspended
                message: >-
                  This account is suspended. Settle the outstanding invoice in
                  the Print.App dashboard.
                requestId: FZn-uhymjoEEJow=
        '415':
          description: The body is not JSON.
          headers:
            x-request-id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: true
                code: unsupported_media_type
                message: >-
                  Send the request body as JSON, with "Content-Type:
                  application/json".
                requestId: FZn-uhymjoEEJow=
        '429':
          description: >-
            Rate limited by the API gateway. Back off and retry. This response
            comes from the gateway, so its body is `{ "message": "Too Many
            Requests" }`, not the standard error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayError'
              example:
                message: Too Many Requests
        '500':
          description: >-
            Something failed on our side. Retry; quote the requestId to support
            if it persists.
          headers:
            x-request-id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: true
                code: internal_error
                message: >-
                  Something went wrong on our side. Retry the request; if it
                  keeps failing, contact support with the requestId.
                requestId: FZn-uhymjoEEJow=
components:
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      schema:
        type: string
        minLength: 1
        maxLength: 255
      description: >-
        Makes a retry safe: a second request with the same key and the same body
        gets the first response back (for 24 hours) instead of creating the
        resource again. Use a new key, such as a UUID, for every new request.
  schemas:
    ImpositionRuleCreate:
      title: ImpositionRuleCreate
      description: >-
        A new imposition rule: its `sections`, or `basedOn` to copy another
        rule's unit and sections (what you send replaces what is copied). Give
        it to designs with `impositionRuleId` on `PATCH /v2/designs/{id}`.
      type: object
      additionalProperties: false
      required:
        - title
      properties:
        title:
          type: string
          minLength: 1
          maxLength: 200
          description: The rule's name.
        description:
          type: string
          maxLength: 500
          description: What it is for.
        basedOn:
          type: string
          minLength: 1
          maxLength: 120
          description: A rule to start from, such as a built-in one.
        unit:
          type: string
          enum:
            - mm
            - cm
            - in
            - pt
          description: The unit of every sheet size and offset. Default mm.
        sections:
          type: array
          minItems: 1
          maxItems: 20
          items:
            type: object
            additionalProperties: false
            required:
              - group
            description: >-
              Takes design pages, cuts them into groups of `group`, and puts
              each group on one sheet.
            properties:
              pages:
                type: string
                maxLength: 200
                description: >-
                  The design pages it takes: `"1-3"`, `"4-"`, `"1,3,5"`, or `""`
                  for every page. Pages an earlier section took are skipped, and
                  so are pages the PDF does not print. Default `""`.
              group:
                type: integer
                minimum: 1
                maximum: 100
                description: >-
                  Pages per sheet. A group missing a page prints as it is. `1`
                  needs a `sheet`: one page alone on a sheet that fits it
                  changes nothing.
              order:
                type: array
                maxItems: 100
                items:
                  type: integer
                  minimum: 1
                  maximum: 100
                description: >-
                  Where each page of a group goes, from the left (from the top
                  when vertical): `[3, 2, 1]` puts the third page first, as a
                  book cover's back, spine and front. `1` to `group`, each once;
                  empty for the order they come in. Default empty.
              direction:
                type: string
                enum:
                  - horizontal
                  - vertical
                description: >-
                  How a group's pages join, edge to edge at the trim: side by
                  side (`horizontal`: the pages need one height) or stacked
                  (`vertical`: one width). Default `horizontal`.
              sheet:
                type:
                  - object
                  - 'null'
                additionalProperties: false
                required:
                  - width
                  - height
                properties:
                  width:
                    type: number
                    exclusiveMinimum: 0
                    maximum: 10000
                  height:
                    type: number
                    exclusiveMinimum: 0
                    maximum: 10000
                description: >-
                  A fixed sheet the group is placed on, in `unit`. `null`: a
                  sheet that fits the group and its bleed. Default `null`.
              anchor:
                type: string
                enum:
                  - top-left
                  - top
                  - top-right
                  - left
                  - center
                  - right
                  - bottom-left
                  - bottom
                  - bottom-right
                description: >-
                  Where the group sits on a fixed `sheet`. Default `center`.
                  Only with a `sheet`.
              offset:
                type: object
                additionalProperties: false
                properties:
                  x:
                    type: number
                    minimum: -10000
                    maximum: 10000
                  'y':
                    type: number
                    minimum: -10000
                    maximum: 10000
                description: >-
                  On a fixed `sheet`, how far the group moves from the anchored
                  edges, inward, in `unit` (on a centred axis: right and down).
                  Default 0, 0.
              marks:
                type: object
                additionalProperties: false
                properties:
                  crop:
                    type:
                      - boolean
                      - 'null'
                    description: >-
                      Crop marks around the group. `null`: the PDF profile's
                      Render Marks.
                  fold:
                    type:
                      - boolean
                      - 'null'
                    description: 'Fold marks where its pages join. `null`: as crop marks.'
                description: >-
                  The marks the sheet draws. The pages on it lose their own crop
                  marks. Default both `null`.
          description: Applied in order. Pages no section takes print as they are.
      examples:
        - title: 'Calendar: month pairs on A3'
          unit: mm
          sections:
            - pages: ''
              group: 2
              direction: vertical
              sheet:
                width: 297
                height: 420
        - title: Thesis cover
          basedOn: _imposition_1
    ImpositionRule:
      title: ImpositionRule
      description: >-
        How the print PDF of a design puts its pages on sheets: joined into
        spreads (a book cover, calendar pairs) or placed on a fixed sheet.
        Designs use one with `impositionRuleId`; a customer's project follows
        its design's.
      type: object
      required:
        - object
        - id
        - title
        - description
        - builtIn
        - unit
        - sections
        - created
        - modified
      properties:
        object:
          type: string
          const: imposition_rule
        id:
          type: string
          description: 'The rule id: `imposition_…`, or a built-in `_imposition_…`.'
        title:
          type:
            - string
            - 'null'
        description:
          type:
            - string
            - 'null'
          description: What it is for.
        builtIn:
          type: boolean
          description: >-
            One of Print.App's rules: it can be used and copied (`basedOn`), not
            changed.
        unit:
          type: string
          enum:
            - mm
            - cm
            - in
            - pt
          description: The unit of every sheet size and offset.
        sections:
          type: array
          items:
            type: object
            required:
              - pages
              - group
              - order
              - direction
              - sheet
              - anchor
              - offset
              - marks
            description: >-
              Takes design pages, cuts them into groups of `group`, and puts
              each group on one sheet. Every field is shown as the PDF reads it.
            properties:
              pages:
                type: string
                maxLength: 200
                description: >-
                  The design pages it takes: `"1-3"`, `"4-"`, `"1,3,5"`, or `""`
                  for every page. Pages an earlier section took are skipped, and
                  so are pages the PDF does not print.
              group:
                type: integer
                minimum: 1
                maximum: 100
                description: >-
                  Pages per sheet. A group missing a page prints as it is. `1`
                  needs a `sheet`: one page alone on a sheet that fits it
                  changes nothing.
              order:
                type: array
                maxItems: 100
                items:
                  type: integer
                  minimum: 1
                  maximum: 100
                description: >-
                  Where each page of a group goes, from the left (from the top
                  when vertical): `[3, 2, 1]` puts the third page first, as a
                  book cover's back, spine and front. `1` to `group`, each once;
                  empty for the order they come in.
              direction:
                type: string
                enum:
                  - horizontal
                  - vertical
                description: >-
                  How a group's pages join, edge to edge at the trim: side by
                  side (`horizontal`: the pages need one height) or stacked
                  (`vertical`: one width).
              sheet:
                type:
                  - object
                  - 'null'
                required:
                  - width
                  - height
                properties:
                  width:
                    type: number
                    exclusiveMinimum: 0
                    maximum: 10000
                  height:
                    type: number
                    exclusiveMinimum: 0
                    maximum: 10000
                description: >-
                  A fixed sheet the group is placed on, in `unit`. `null`: a
                  sheet that fits the group and its bleed.
              anchor:
                type: string
                enum:
                  - top-left
                  - top
                  - top-right
                  - left
                  - center
                  - right
                  - bottom-left
                  - bottom
                  - bottom-right
                description: Where the group sits on a fixed `sheet`.
              offset:
                type: object
                properties:
                  x:
                    type: number
                    minimum: -10000
                    maximum: 10000
                  'y':
                    type: number
                    minimum: -10000
                    maximum: 10000
                description: >-
                  On a fixed `sheet`, how far the group moves from the anchored
                  edges, inward, in `unit` (on a centred axis: right and down).
                required:
                  - x
                  - 'y'
              marks:
                type: object
                properties:
                  crop:
                    type:
                      - boolean
                      - 'null'
                    description: >-
                      Crop marks around the group. `null`: the PDF profile's
                      Render Marks.
                  fold:
                    type:
                      - boolean
                      - 'null'
                    description: 'Fold marks where its pages join. `null`: as crop marks.'
                description: >-
                  The marks the sheet draws. The pages on it lose their own crop
                  marks.
                required:
                  - crop
                  - fold
          description: Applied in order. Pages no section takes print as they are.
        created:
          type:
            - string
            - 'null'
          format: date-time
        modified:
          type:
            - string
            - 'null'
          format: date-time
      examples:
        - object: imposition_rule
          id: _imposition_1
          title: 'Book cover: back, spine and front as one spread'
          description: >-
            Pages 1, 2 and 3 are the front cover, the spine and the back cover.
            The PDF joins them into one spread with the back cover on the left.
            Later pages print as they are.
          builtIn: true
          unit: mm
          sections:
            - pages: 1-3
              group: 3
              order:
                - 3
                - 2
                - 1
              direction: horizontal
              sheet: null
              anchor: center
              offset:
                x: 0
                'y': 0
              marks:
                crop: null
                fold: null
          created: null
          modified: null
    Error:
      title: Error
      description: >-
        Every error the API itself returns. Match on `code`; `message` is for
        people and may be reworded.
      type: object
      required:
        - error
        - code
        - message
        - requestId
      properties:
        error:
          type: boolean
          const: true
        code:
          type: string
          enum:
            - unauthorized
            - account_suspended
            - invalid_request
            - not_found
            - route_not_found
            - idempotency_key_reused
            - idempotency_in_progress
            - folder_not_empty
            - builtin_folder
            - builtin_palette
            - editor_not_supported
            - design_changed
            - payload_too_large
            - unsupported_media_type
            - ops_failed
            - internal_error
            - service_unavailable
          description: >-
            `unauthorized` (401): missing, unknown, revoked or expired secret
            key. `account_suspended` (403): the account has an unpaid invoice.
            `invalid_request` (400): a parameter or body field is malformed —
            see `param` and `details`. `not_found` (404): no such resource in
            your account. `route_not_found` (404): no such endpoint.
            `idempotency_key_reused` (409): the Idempotency-Key was used for a
            different request. `idempotency_in_progress` (409): the first
            request with that key is still running. `folder_not_empty` (409):
            the folder still holds designs or folders. `builtin_folder`,
            `builtin_palette` (409): Print.App's own folders and palettes cannot
            be changed. `editor_not_supported` (409): page content can only be
            edited on accounts that use the new editor. `design_changed` (409):
            the design was saved elsewhere while the batch ran; read it again
            and retry. `payload_too_large` (413): a body or file over the limit.
            `unsupported_media_type` (415): send JSON. `ops_failed` (422): an
            operation in the batch failed, nothing was saved — see `details`.
            `internal_error` (500): retry; contact support with the `requestId`
            if it persists. `service_unavailable` (503): retry in a few seconds.
        message:
          type: string
        param:
          type: string
          description: The parameter or body field at fault, as a path (`pages[0].title`).
        details:
          type: array
          description: >-
            Every problem found, when there was more than one
            (`invalid_request`), or each operation's result (`ops_failed`).
          items:
            type: object
        requestId:
          type: string
          description: >-
            Also sent as the `x-request-id` header. Quote it when contacting
            support.
      examples:
        - error: true
          code: invalid_request
          message: limit must be an integer from 1 to 100.
          param: limit
          requestId: FZn-uhymjoEEJow=
    GatewayError:
      type: object
      properties:
        message:
          type: string
      description: Returned by the API gateway itself (429).
  headers:
    RequestId:
      description: Identifies the request. Quote it when contacting support.
      schema:
        type: string
    IdempotentReplayed:
      description: >-
        `true` when the response is the stored answer to an earlier request with
        the same Idempotency-Key.
      schema:
        type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        A secret key from Print.App admin → Domains → Secret keys, sent as
        `Authorization: Bearer sk_…`. Server-side only.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.