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.
Lists, creates, modifies, and deletes webhooks that deliver instant POST notifications to a merchant's endpoint when product, order, and shop events occur.
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