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

# Attach a connector

> Makes the design run a connector on the product page, beside any it already has. A design selector connector belongs on every design it can open.



## OpenAPI

````yaml openapi.json POST /v2/designs/{id}/connectors
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.
  - 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: 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: 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/designs/{id}/connectors:
    post:
      tags:
        - Designs
      summary: Attach a connector
      description: >-
        Makes the design run a connector on the product page, beside any it
        already has. A design selector connector belongs on every design it can
        open.
      operationId: attachConnector
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          description: The `designId`.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DesignConnector'
      responses:
        '200':
          description: OK.
          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
                connectorIds: []
                resourceProfileIds: []
                pdfProfileId: null
                settings: {}
                created: '2026-09-02T14:05:11Z'
                modified: '2026-10-11T08:40:27Z'
        '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=
        '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=
        '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:
  schemas:
    DesignConnector:
      title: DesignConnector
      description: A connector to attach.
      type: object
      additionalProperties: false
      required:
        - connectorId
      properties:
        connectorId:
          type: string
          minLength: 1
          maxLength: 200
          description: The connector id.
    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
        - connectorIds
        - resourceProfileIds
        - pdfProfileId
        - settings
        - created
        - modified
      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
            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
        connectorIds:
          type: array
          items:
            type: string
          description: The connectors the design runs on the product page.
        resourceProfileIds:
          type: array
          items:
            type: string
          description: The resource profiles that limit what its editor offers.
        pdfProfileId:
          type:
            - string
            - 'null'
          description: >-
            The PDF profile its print PDF is made with; `null`: its own
            settings.
        settings:
          type: object
          description: >-
            The settings this design sets for itself, over the store's (see `GET
            /v2/settings`). Settings it doesn't set follow the store.
          properties:
            welcomeMsg:
              type: string
              maxLength: 2000
              description: A message shown when the editor opens.
            lockBackground:
              type: boolean
              description: Customers cannot change the background.
            pdfVersion:
              type: string
              enum:
                - '1.4'
                - '1.5'
                - '1.6'
                - '1.7'
                - '2.0'
                - PDF/A-3a
                - PDF/UA-1
                - PDF/X-5n
              description: >-
                The PDF version of the print file, when the design has no PDF
                profile.
            renderCutLines:
              type: boolean
              description: Cut marks in the print PDF, from the bleed.
            displayMode:
              type: string
              enum:
                - ''
                - modal
                - dialog
                - inline
                - mini
              description: How the editor opens for this design (`""` the store's setting).
            enablePageSorting:
              type: boolean
              description: Customers can reorder pages.
            enableSaveLater:
              type: boolean
              description: >-
                Customers can save and finish later. Only adds: the store's
                setting, when on, wins.
            graphicsSearchCustomers:
              type: boolean
              description: >-
                A graphics search box for this design's customers. Only adds to
                the store's setting.
            graphicsSearchScope:
              type: string
              enum:
                - ''
                - store
                - mine
                - both
              description: >-
                What the graphics search covers on this design (`""` the store's
                setting).
            addToCartOnSave:
              type: boolean
              description: Finishing the design adds the product to the cart.
            hideCustomColor:
              type: boolean
              description: Customers cannot add colours of their own.
            hideUploads:
              type: boolean
              description: Hide the Uploads tab.
            hideGraphics:
              type: boolean
              description: Hide the Graphics tab.
            hideBackgrounds:
              type: boolean
              description: Hide the Backgrounds tab.
            hideTypography:
              type: boolean
              description: Hide the Text tab.
            hideColorButton:
              type: boolean
              description: Customers cannot change an item's colour.
            hideMenubar:
              type: boolean
              description: Hide the top menu bar.
            hideContextbar:
              type: boolean
              description: Hide the bar beside a selected item.
            showItemTabInProject:
              type: boolean
              description: Show the selected item's tab to customers.
            disableCanvas:
              type: boolean
              description: Customers cannot select items on the canvas (fields only).
        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
          connectorIds: []
          resourceProfileIds: []
          pdfProfileId: null
          settings: {}
          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
      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
  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.