Printify Webhooks API

Lists, creates, modifies, and deletes webhooks that deliver instant POST notifications to a merchant's endpoint when product, order, and shop events occur.

OpenAPI Specification

printify-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Printify API
  description: >-
    The Printify REST API allows your application to manage a Printify shop on
    behalf of a Printify merchant. Browse the catalog of blueprints and print
    providers, create and publish products, submit and track orders, upload
    artwork, and subscribe to webhooks. All requests are authenticated with a
    Bearer token (Personal Access Token or OAuth 2.0) and must include a
    User-Agent header.
  termsOfService: https://printify.com/terms-of-service/
  contact:
    name: Printify Merchant Support
    url: https://developers.printify.com/
  version: '1.0'
servers:
  - url: https://api.printify.com/v1
security:
  - bearerAuth: []
tags:
  - name: Shops
    description: Stores connected to a Printify account.
  - name: Catalog
    description: Blueprints, print providers, variants, and shipping in the Printify catalog.
  - name: Products
    description: Products in a shop and their publishing lifecycle.
  - name: Orders
    description: Order submission, shipping calculation, production, and cancellation.
  - name: Uploads
    description: Artwork uploads to the merchant Media Library.
  - name: Webhooks
    description: Event notifications delivered to merchant endpoints.
paths:
  /shops.json:
    get:
      operationId: listShops
      tags:
        - Shops
      summary: Retrieve the list of shops in a Printify account.
      responses:
        '200':
          description: A list of connected shops.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Shop'
  /shops/{shop_id}/connection.json:
    delete:
      operationId: disconnectShop
      tags:
        - Shops
      summary: Disconnect a shop from the account.
      parameters:
        - $ref: '#/components/parameters/ShopId'
      responses:
        '200':
          description: The shop was disconnected.
  /catalog/blueprints.json:
    get:
      operationId: listBlueprints
      tags:
        - Catalog
      summary: Retrieve a list of available blueprints.
      responses:
        '200':
          description: A list of blueprints.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Blueprint'
  /catalog/blueprints/{blueprint_id}.json:
    get:
      operationId: getBlueprint
      tags:
        - Catalog
      summary: Retrieve a specific blueprint.
      parameters:
        - $ref: '#/components/parameters/BlueprintId'
      responses:
        '200':
          description: A blueprint.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Blueprint'
  /catalog/blueprints/{blueprint_id}/print_providers.json:
    get:
      operationId: listBlueprintPrintProviders
      tags:
        - Catalog
      summary: Retrieve a list of print providers for a specific blueprint.
      parameters:
        - $ref: '#/components/parameters/BlueprintId'
      responses:
        '200':
          description: A list of print providers.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PrintProvider'
  /catalog/blueprints/{blueprint_id}/print_providers/{print_provider_id}/variants.json:
    get:
      operationId: listVariants
      tags:
        - Catalog
      summary: Retrieve a list of variants of a blueprint from a specific print provider.
      parameters:
        - $ref: '#/components/parameters/BlueprintId'
        - $ref: '#/components/parameters/PrintProviderId'
      responses:
        '200':
          description: A list of variants.
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                  title:
                    type: string
                  variants:
                    type: array
                    items:
                      $ref: '#/components/schemas/Variant'
  /catalog/blueprints/{blueprint_id}/print_providers/{print_provider_id}/shipping.json:
    get:
      operationId: getVariantShipping
      tags:
        - Catalog
      summary: Retrieve shipping information for a blueprint from a specific print provider.
      parameters:
        - $ref: '#/components/parameters/BlueprintId'
        - $ref: '#/components/parameters/PrintProviderId'
      responses:
        '200':
          description: Shipping information.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ShippingInfo'
  /catalog/print_providers.json:
    get:
      operationId: listPrintProviders
      tags:
        - Catalog
      summary: Retrieve a list of all available print providers.
      responses:
        '200':
          description: A list of print providers.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PrintProvider'
  /catalog/print_providers/{print_provider_id}.json:
    get:
      operationId: getPrintProvider
      tags:
        - Catalog
      summary: Retrieve a specific print provider and the blueprints it supports.
      parameters:
        - $ref: '#/components/parameters/PrintProviderId'
      responses:
        '200':
          description: A print provider.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PrintProvider'
  /shops/{shop_id}/products.json:
    get:
      operationId: listProducts
      tags:
        - Products
      summary: Retrieve a list of all products in a shop.
      parameters:
        - $ref: '#/components/parameters/ShopId'
        - name: page
          in: query
          schema:
            type: integer
        - name: limit
          in: query
          schema:
            type: integer
      responses:
        '200':
          description: A paginated list of products.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductList'
    post:
      operationId: createProduct
      tags:
        - Products
      summary: Create a new product in a shop.
      parameters:
        - $ref: '#/components/parameters/ShopId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductCreate'
      responses:
        '200':
          description: The created product.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
  /shops/{shop_id}/products/{product_id}.json:
    get:
      operationId: getProduct
      tags:
        - Products
      summary: Retrieve a specific product.
      parameters:
        - $ref: '#/components/parameters/ShopId'
        - $ref: '#/components/parameters/ProductId'
      responses:
        '200':
          description: A product.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
    put:
      operationId: updateProduct
      tags:
        - Products
      summary: Update a product.
      parameters:
        - $ref: '#/components/parameters/ShopId'
        - $ref: '#/components/parameters/ProductId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductCreate'
      responses:
        '200':
          description: The updated product.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
    delete:
      operationId: deleteProduct
      tags:
        - Products
      summary: Delete a product.
      parameters:
        - $ref: '#/components/parameters/ShopId'
        - $ref: '#/components/parameters/ProductId'
      responses:
        '200':
          description: The product was deleted.
  /shops/{shop_id}/products/{product_id}/publish.json:
    post:
      operationId: publishProduct
      tags:
        - Products
      summary: Publish a product to a connected sales channel.
      parameters:
        - $ref: '#/components/parameters/ShopId'
        - $ref: '#/components/parameters/ProductId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublishRequest'
      responses:
        '200':
          description: Publishing was initiated.
  /shops/{shop_id}/products/{product_id}/publishing_succeeded.json:
    post:
      operationId: setPublishSucceeded
      tags:
        - Products
      summary: Mark a product publishing as succeeded.
      parameters:
        - $ref: '#/components/parameters/ShopId'
        - $ref: '#/components/parameters/ProductId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                external:
                  type: object
                  properties:
                    id:
                      type: string
                    handle:
                      type: string
      responses:
        '200':
          description: Publishing status updated.
  /shops/{shop_id}/products/{product_id}/publishing_failed.json:
    post:
      operationId: setPublishFailed
      tags:
        - Products
      summary: Mark a product publishing as failed.
      parameters:
        - $ref: '#/components/parameters/ShopId'
        - $ref: '#/components/parameters/ProductId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                reason:
                  type: string
      responses:
        '200':
          description: Publishing status updated.
  /shops/{shop_id}/products/{product_id}/unpublish.json:
    post:
      operationId: unpublishProduct
      tags:
        - Products
      summary: Notify that a product was unpublished from the sales channel.
      parameters:
        - $ref: '#/components/parameters/ShopId'
        - $ref: '#/components/parameters/ProductId'
      responses:
        '200':
          description: The product was marked as unpublished.
  /shops/{shop_id}/orders.json:
    get:
      operationId: listOrders
      tags:
        - Orders
      summary: Retrieve a list of orders in a shop.
      parameters:
        - $ref: '#/components/parameters/ShopId'
        - name: page
          in: query
          schema:
            type: integer
        - name: limit
          in: query
          schema:
            type: integer
        - name: status
          in: query
          schema:
            type: string
      responses:
        '200':
          description: A paginated list of orders.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderList'
    post:
      operationId: createOrder
      tags:
        - Orders
      summary: Submit a new order.
      parameters:
        - $ref: '#/components/parameters/ShopId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderCreate'
      responses:
        '200':
          description: The created order.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
  /shops/{shop_id}/orders/{order_id}.json:
    get:
      operationId: getOrder
      tags:
        - Orders
      summary: Retrieve a specific order.
      parameters:
        - $ref: '#/components/parameters/ShopId'
        - $ref: '#/components/parameters/OrderId'
      responses:
        '200':
          description: An order.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
  /shops/{shop_id}/express.json:
    post:
      operationId: createExpressOrder
      tags:
        - Orders
      summary: Submit a Printify Express order.
      parameters:
        - $ref: '#/components/parameters/ShopId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderCreate'
      responses:
        '200':
          description: The created express order.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
  /shops/{shop_id}/orders/shipping.json:
    post:
      operationId: calculateShipping
      tags:
        - Orders
      summary: Calculate the shipping cost of an order.
      parameters:
        - $ref: '#/components/parameters/ShopId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderCreate'
      responses:
        '200':
          description: Calculated shipping costs.
          content:
            application/json:
              schema:
                type: object
                properties:
                  standard:
                    type: integer
                  express:
                    type: integer
                  priority:
                    type: integer
                  printify_express:
                    type: integer
                  economy:
                    type: integer
  /shops/{shop_id}/orders/{order_id}/send_to_production.json:
    post:
      operationId: sendOrderToProduction
      tags:
        - Orders
      summary: Send an order to production.
      parameters:
        - $ref: '#/components/parameters/ShopId'
        - $ref: '#/components/parameters/OrderId'
      responses:
        '200':
          description: The order was sent to production.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
  /shops/{shop_id}/orders/{order_id}/cancel.json:
    post:
      operationId: cancelOrder
      tags:
        - Orders
      summary: Cancel an unpaid order (status on-hold or payment-not-received).
      parameters:
        - $ref: '#/components/parameters/ShopId'
        - $ref: '#/components/parameters/OrderId'
      responses:
        '200':
          description: The order was cancelled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
  /uploads.json:
    get:
      operationId: listUploads
      tags:
        - Uploads
      summary: Retrieve a list of images in the Media Library.
      parameters:
        - name: page
          in: query
          schema:
            type: integer
        - name: limit
          in: query
          schema:
            type: integer
      responses:
        '200':
          description: A paginated list of uploaded images.
          content:
            application/json:
              schema:
                type: object
                properties:
                  current_page:
                    type: integer
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Upload'
  /uploads/{image_id}.json:
    get:
      operationId: getUpload
      tags:
        - Uploads
      summary: Retrieve a specific uploaded image.
      parameters:
        - $ref: '#/components/parameters/ImageId'
      responses:
        '200':
          description: An uploaded image.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Upload'
  /uploads/images.json:
    post:
      operationId: uploadImage
      tags:
        - Uploads
      summary: Upload an image via URL or base64-encoded contents.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - file_name
              properties:
                file_name:
                  type: string
                url:
                  type: string
                  description: Public URL of the image to upload.
                contents:
                  type: string
                  description: Base64-encoded contents of the image to upload.
      responses:
        '200':
          description: The uploaded image.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Upload'
  /uploads/{image_id}/archive.json:
    post:
      operationId: archiveUpload
      tags:
        - Uploads
      summary: Archive an uploaded image.
      parameters:
        - $ref: '#/components/parameters/ImageId'
      responses:
        '200':
          description: The image was archived.
  /shops/{shop_id}/webhooks.json:
    get:
      operationId: listWebhooks
      tags:
        - Webhooks
      summary: Retrieve a list of webhooks configured for a shop.
      parameters:
        - $ref: '#/components/parameters/ShopId'
      responses:
        '200':
          description: A list of webhooks.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Webhook'
    post:
      operationId: createWebhook
      tags:
        - Webhooks
      summary: Create a new webhook.
      parameters:
        - $ref: '#/components/parameters/ShopId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - topic
                - url
              properties:
                topic:
                  type: string
                  description: Event topic, e.g. order:created, order:updated, product:publish:started.
                url:
                  type: string
      responses:
        '200':
          description: The created webhook.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
  /shops/{shop_id}/webhooks/{webhook_id}.json:
    put:
      operationId: updateWebhook
      tags:
        - Webhooks
      summary: Modify an existing webhook.
      parameters:
        - $ref: '#/components/parameters/ShopId'
        - $ref: '#/components/parameters/WebhookId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                url:
                  type: string
      responses:
        '200':
          description: The updated webhook.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
    delete:
      operationId: deleteWebhook
      tags:
        - Webhooks
      summary: Delete a webhook.
      parameters:
        - $ref: '#/components/parameters/ShopId'
        - $ref: '#/components/parameters/WebhookId'
      responses:
        '200':
          description: The webhook was deleted.
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Personal Access Token or OAuth 2.0 access token sent as
        Authorization: Bearer {token}. A User-Agent header is also required.
  parameters:
    ShopId:
      name: shop_id
      in: path
      required: true
      schema:
        type: integer
    BlueprintId:
      name: blueprint_id
      in: path
      required: true
      schema:
        type: integer
    PrintProviderId:
      name: print_provider_id
      in: path
      required: true
      schema:
        type: integer
    ProductId:
      name: product_id
      in: path
      required: true
      schema:
        type: string
    OrderId:
      name: order_id
      in: path
      required: true
      schema:
        type: string
    ImageId:
      name: image_id
      in: path
      required: true
      schema:
        type: string
    WebhookId:
      name: webhook_id
      in: path
      required: true
      schema:
        type: string
  schemas:
    Shop:
      type: object
      properties:
        id:
          type: integer
        title:
          type: string
        sales_channel:
          type: string
    Blueprint:
      type: object
      properties:
        id:
          type: integer
        title:
          type: string
        description:
          type: string
        brand:
          type: string
        model:
          type: string
        images:
          type: array
          items:
            type: string
    PrintProvider:
      type: object
      properties:
        id:
          type: integer
        title:
          type: string
        location:
          type: object
          properties:
            address1:
              type: string
            city:
              type: string
            country:
              type: string
            region:
              type: string
            zip:
              type: string
    Variant:
      type: object
      properties:
        id:
          type: integer
        title:
          type: string
        options:
          type: object
          additionalProperties: true
        placeholders:
          type: array
          items:
            type: object
            properties:
              position:
                type: string
              height:
                type: integer
              width:
                type: integer
    ShippingInfo:
      type: object
      properties:
        handling_time:
          type: object
          properties:
            value:
              type: integer
            unit:
              type: string
        profiles:
          type: array
          items:
            type: object
            properties:
              variant_ids:
                type: array
                items:
                  type: integer
              first_item:
                type: object
                properties:
                  cost:
                    type: integer
                  currency:
                    type: string
              additional_items:
                type: object
                properties:
                  cost:
                    type: integer
                  currency:
                    type: string
              countries:
                type: array
                items:
                  type: string
    ProductList:
      type: object
      properties:
        current_page:
          type: integer
        last_page:
          type: integer
        total:
          type: integer
        data:
          type: array
          items:
            $ref: '#/components/schemas/Product'
    Product:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        description:
          type: string
        tags:
          type: array
          items:
            type: string
        blueprint_id:
          type: integer
        print_provider_id:
          type: integer
        variants:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
              price:
                type: integer
              is_enabled:
                type: boolean
        print_areas:
          type: array
          items:
            type: object
        visible:
          type: boolean
        is_locked:
          type: boolean
    ProductCreate:
      type: object
      required:
        - title
        - blueprint_id
        - print_provider_id
        - variants
        - print_areas
      properties:
        title:
          type: string
        description:
          type: string
        blueprint_id:
          type: integer
        print_provider_id:
          type: integer
        variants:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
              price:
                type: integer
              is_enabled:
                type: boolean
        print_areas:
          type: array
          items:
            type: object
            properties:
              variant_ids:
                type: array
                items:
                  type: integer
              placeholders:
                type: array
                items:
                  type: object
    PublishRequest:
      type: object
      properties:
        title:
          type: boolean
        description:
          type: boolean
        images:
          type: boolean
        variants:
          type: boolean
        tags:
          type: boolean
        keyFeatures:
          type: boolean
        shipping_template:
          type: boolean
    OrderList:
      type: object
      properties:
        current_page:
          type: integer
        last_page:
          type: integer
        total:
          type: integer
        data:
          type: array
          items:
            $ref: '#/components/schemas/Order'
    Order:
      type: object
      properties:
        id:
          type: string
        status:
          type: string
        shipping_method:
          type: integer
        line_items:
          type: array
          items:
            type: object
            properties:
              product_id:
                type: string
              quantity:
                type: integer
              variant_id:
                type: integer
        address_to:
          $ref: '#/components/schemas/Address'
        total_price:
          type: integer
        total_shipping:
          type: integer
        created_at:
          type: string
    OrderCreate:
      type: object
      required:
        - line_items
        - address_to
      properties:
        external_id:
          type: string
        label:
          type: string
        line_items:
          type: array
          items:
            type: object
            properties:
              product_id:
                type: string
              variant_id:
                type: integer
              quantity:
                type: integer
        shipping_method:
          type: integer
        send_shipping_notification:
          type: boolean
        address_to:
          $ref: '#/components/schemas/Address'
    Address:
      type: object
      properties:
        first_name:
          type: string
        last_name:
          type: string
        email:
          type: string
        phone:
          type: string
        country:
          type: string
        region:
          type: string
        address1:
          type: string
        address2:
          type: string
        city:
          type: string
        zip:
          type: string
    Upload:
      type: object
      properties:
        id:
          type: string
        file_name:
          type: string
        height:
          type: integer
        width:
          type: integer
        size:
          type: integer
        mime_type:
          type: string
        preview_url:
          type: string
        upload_time:
          type: string
    Webhook:
      type: object
      properties:
        id:
          type: string
        topic:
          type: string
        url:
          type: string
        shop_id:
          type: integer
        secret:
          type: string