Printify Products API

Products in a shop and their publishing lifecycle.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/printify-products-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

printify-products-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Printify Catalog Products 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: Products
  description: Products in a shop and their publishing lifecycle.
paths:
  /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.
components:
  schemas:
    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
    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
    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
  parameters:
    ProductId:
      name: product_id
      in: path
      required: true
      schema:
        type: string
    ShopId:
      name: shop_id
      in: path
      required: true
      schema:
        type: integer
  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.'