> ## 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 a design

> Returns one of your account's designs. Another account's design answers 404, like one that doesn't exist.



## OpenAPI

````yaml openapi.json GET /v2/designs/{id}
openapi: 3.1.0
info:
  title: Print.App API
  version: 2.0.0
  description: >-
    Server-to-server API for Print.App integrations. 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: Projects
    description: Your customers' saved designs.
  - name: Designs
    description: The designs (templates) your customers start from.
paths:
  /v2/designs/{id}:
    get:
      tags:
        - Designs
      summary: Get a design
      description: >-
        Returns one of your account's designs. Another account's design answers
        404, like one that doesn't exist.
      operationId: getDesign
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The `designId`.
      responses:
        '200':
          description: The design.
          headers:
            x-request-id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Design'
              example:
                object: design
                id: design_01J8Z9K2M3N4P5Q6R7S8T9V0W1
                title: Business Card
                unit: mm
                pages:
                  - index: 0
                    title: Front
                    previewUrl: >-
                      https://d1p81tn8mwpox2.cloudfront.net/?k=s3%3A%2F%2Fapp-print-cdn%2Fcontent_f1.png&size=1000
                  - index: 1
                    title: Back
                    previewUrl: >-
                      https://d1p81tn8mwpox2.cloudfront.net/?k=s3%3A%2F%2Fapp-print-cdn%2Fcontent_b1.png&size=1000
                tags:
                  - cards
                created: '2026-09-02T14:05:11Z'
                modified: '2026-10-11T08:40:27Z'
        '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: No such design in your account.
          headers:
            x-request-id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: true
                code: not_found
                message: Design not found.
                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:
    Design:
      title: Design
      description: >-
        A design (template) your customers start from. Open it in the editor
        with `new PrintAppClient({ designId })`.
      type: object
      required:
        - object
        - id
        - title
        - unit
        - pages
        - tags
        - created
        - modified
      additionalProperties: false
      properties:
        object:
          type: string
          const: design
        id:
          type: string
          description: The `designId` to pass to `PrintAppClient`.
        title:
          type:
            - string
            - 'null'
        unit:
          type:
            - string
            - 'null'
          description: >-
            The unit the design is measured in: `mm`, `cm`, `in`, `pt`, `px` or
            `ft`.
        pages:
          type: array
          items:
            type: object
            required:
              - index
              - title
              - previewUrl
            additionalProperties: false
            properties:
              index:
                type: integer
                minimum: 0
              title:
                type:
                  - string
                  - 'null'
                description: The page's name, when it has one (for example *Front*).
              previewUrl:
                type:
                  - string
                  - 'null'
                description: A preview image of the page.
        tags:
          type: array
          items:
            type: string
        created:
          type:
            - string
            - 'null'
          format: date-time
        modified:
          type:
            - string
            - 'null'
          format: date-time
      examples:
        - object: design
          id: design_01J8Z9K2M3N4P5Q6R7S8T9V0W1
          title: Business Card
          unit: mm
          pages:
            - index: 0
              title: Front
              previewUrl: >-
                https://d1p81tn8mwpox2.cloudfront.net/?k=s3%3A%2F%2Fapp-print-cdn%2Fcontent_f1.png&size=1000
            - index: 1
              title: Back
              previewUrl: >-
                https://d1p81tn8mwpox2.cloudfront.net/?k=s3%3A%2F%2Fapp-print-cdn%2Fcontent_b1.png&size=1000
          tags:
            - cards
          created: '2026-09-02T14:05:11Z'
          modified: '2026-10-11T08:40:27Z'
    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
      additionalProperties: false
      properties:
        error:
          type: boolean
          const: true
        code:
          type: string
          enum:
            - unauthorized
            - account_suspended
            - invalid_request
            - not_found
            - route_not_found
            - internal_error
          description: >-
            `unauthorized` (401): missing, unknown, revoked or expired secret
            key. `account_suspended` (403): the account has an unpaid invoice.
            `invalid_request` (400): a parameter is malformed — see `param`.
            `not_found` (404): no such resource in your account.
            `route_not_found` (404): no such endpoint. `internal_error` (500):
            retry; contact support with the `requestId` if it persists.
        message:
          type: string
        param:
          type: string
          description: 'For `invalid_request`: the parameter at fault.'
        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).
  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.