> ## 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.

# Get page content

> Describes what is on each page: every item's id, type, box, text, font and colour, measured in the design's unit from the top-left of the trim. Use the item ids as `target` in `POST /v2/designs/{id}/ops`.



## OpenAPI

````yaml openapi.json GET /v2/designs/{id}/content
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: Shareable editor links that open a design or project at create.print.app.
paths:
  /v2/designs/{id}/content:
    get:
      tags:
        - Designs
      summary: Get page content
      description: >-
        Describes what is on each page: every item's id, type, box, text, font
        and colour, measured in the design's unit from the top-left of the trim.
        Use the item ids as `target` in `POST /v2/designs/{id}/ops`.
      operationId: getDesignContent
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The `designId`.
      responses:
        '200':
          description: OK.
          headers:
            x-request-id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DesignContent'
              example:
                object: design_content
                designId: design_01J8Z9K2M3N4P5Q6R7S8T9V0W1
                unit: mm
                pages:
                  - index: 0
                    id: page_5b1e
                    title: Front
                    width: 85
                    height: 55
                    bleed: 3
                    safeMargin: 3
                    items:
                      - id: itm_7f3a
                        ref: band
                        type: rect
                        box:
                          - 0
                          - 0
                          - 85
                          - 14
                        fill: '#1f2a44'
                        lock: decor
                      - id: itm_7f3b
                        ref: name
                        type: text
                        box:
                          - 6
                          - 22
                          - 73
                          - 10
                        text: Ada Lovelace
                        font: open sans
                        weight: 700
                        size: 14
                        align: left
                        color: '#1f2a44'
                        field:
                          title: Name
                        lock: field
        '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=
        '404':
          description: >-
            Not found in your account. Another account's resources answer 404
            too.
          headers:
            x-request-id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: true
                code: not_found
                message: Not found.
                requestId: FZn-uhymjoEEJow=
        '409':
          description: >-
            The request conflicts with the current state; `code` says how
            (`folder_not_empty`, `builtin_folder`, `builtin_palette`,
            `editor_not_supported`, `design_changed`, `idempotency_key_reused`,
            `idempotency_in_progress`).
          headers:
            x-request-id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: true
                code: folder_not_empty
                message: >-
                  The folder still holds designs. Remove them from it (or delete
                  them) first.
                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:
  headers:
    RequestId:
      description: Identifies the request. Quote it when contacting support.
      schema:
        type: string
  schemas:
    DesignContent:
      title: DesignContent
      description: >-
        What is on each page of a design. Boxes are `[x, y, width, height]` in
        `unit`, measured from the top-left of the trim (of the print area, on
        garment pages); text sizes are in points.
      type: object
      required:
        - object
        - designId
        - unit
        - pages
      properties:
        object:
          type: string
          const: design_content
        designId:
          type: string
        unit:
          type:
            - string
            - 'null'
        pages:
          type: array
          items:
            type: object
            required:
              - index
              - id
              - title
              - width
              - height
              - bleed
              - safeMargin
              - items
            properties:
              index:
                type: integer
                minimum: 0
              id:
                type:
                  - string
                  - 'null'
              title:
                type:
                  - string
                  - 'null'
              width:
                type:
                  - number
                  - 'null'
                description: Trim width.
              height:
                type:
                  - number
                  - 'null'
                description: Trim height.
              bleed:
                type:
                  - number
                  - 'null'
              safeMargin:
                type:
                  - number
                  - 'null'
                description: >-
                  How far inside the trim the safe zone starts; null without
                  one.
              safeArea:
                type: array
                items:
                  type:
                    - number
                    - 'null'
                minItems: 4
                maxItems: 4
                description: >-
                  The safe zone as [x, y, width, height] from the top-left of
                  the trim: keep text and key artwork inside it.
              printArea:
                type: boolean
                description: >-
                  The page is a garment mockup: boxes are measured from its
                  print area.
              panels:
                type: array
                items:
                  type: object
                  required:
                    - 'n'
                    - box
                  properties:
                    'n':
                      type: integer
                    box:
                      type:
                        - array
                        - 'null'
                      items:
                        type:
                          - number
                          - 'null'
                description: The panels of a folded page.
              items:
                type: array
                items:
                  $ref: '#/components/schemas/ContentItem'
      examples:
        - object: design_content
          designId: design_01J8Z9K2M3N4P5Q6R7S8T9V0W1
          unit: mm
          pages:
            - index: 0
              id: page_5b1e
              title: Front
              width: 85
              height: 55
              bleed: 3
              safeMargin: 3
              items:
                - id: itm_7f3a
                  ref: band
                  type: rect
                  box:
                    - 0
                    - 0
                    - 85
                    - 14
                  fill: '#1f2a44'
                  lock: decor
                - id: itm_7f3b
                  ref: name
                  type: text
                  box:
                    - 6
                    - 22
                    - 73
                    - 10
                  text: Ada Lovelace
                  font: open sans
                  weight: 700
                  size: 14
                  align: left
                  color: '#1f2a44'
                  field:
                    title: Name
                  lock: field
    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).
    ContentItem:
      title: ContentItem
      description: >-
        One item on a page. Target it in `POST /v2/designs/{id}/ops` by `id`, or
        by `ref` when it has one.
      type: object
      required:
        - id
        - type
        - box
        - lock
      properties:
        id:
          type: string
        ref:
          type:
            - string
            - 'null'
          description: The name it was added with.
        type:
          type: string
          description: >-
            `text`, `image`, `rect`, `ellipse`, `path`, `group`, `tiles`, or the
            module type (`qrcode`, `calendar`, …).
        box:
          type:
            - array
            - 'null'
          items:
            type:
              - number
              - 'null'
          minItems: 4
          maxItems: 4
        text:
          type:
            - string
            - 'null'
        font:
          type:
            - string
            - 'null'
        weight:
          type:
            - number
            - 'null'
        size:
          type:
            - number
            - 'null'
          description: Font size in points.
        drawnSize:
          type:
            - number
            - 'null'
          description: The size the text is drawn at, when a fitting frame shrank it.
        align:
          type:
            - string
            - 'null'
        color:
          type:
            - string
            - 'null'
          description: Text colour.
        fill:
          type:
            - string
            - 'null'
          description: Shape fill.
        asset:
          type:
            - string
            - 'null'
          description: The file or library graphic it shows.
        module:
          type:
            - string
            - 'null'
        tiles:
          type:
            - number
            - 'null'
          description: How many tiles a pattern has.
        field:
          type: object
          required:
            - title
          properties:
            title:
              type:
                - string
                - 'null'
          description: Customers edit it in the form.
        photoFrame:
          type: boolean
        background:
          type: boolean
        overflow:
          type: boolean
          description: Its text does not fit its box.
        lock:
          type:
            - string
            - 'null'
          description: '`none`, `field`, `decor` or `hard`.'
  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.