Printify Catalog API
Browses the Printify catalog of blueprints (base products), their print providers, product variants and variant options, and shipping information available for fulfillment.
Browses the Printify catalog of blueprints (base products), their print providers, product variants and variant options, and shipping information available for fulfillment.
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