Shopify Products API

Manage products in a Shopify store

Documentation

Specifications

Schemas & Data

Other Resources

OpenAPI Specification

shopify-products-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Shopify Admin REST About Products API
  description: The Shopify Admin REST API lets you build apps and integrations that extend and enhance the Shopify admin. Access products, customers, orders, inventory, fulfillment, and more. Endpoints are organized by resource type and versioned by release date.
  version: 2025-01
  contact:
    name: Shopify
    url: https://shopify.dev/docs/api/admin-rest
    email: api@shopify.com
  license:
    name: Shopify API Terms
    url: https://www.shopify.com/legal/api-terms
  x-date: '2026-03-04'
servers:
- url: https://{store}.myshopify.com/admin/api/2025-01
  description: Shopify Admin REST API
  variables:
    store:
      default: my-store
      description: The Shopify store subdomain
security:
- AccessToken: []
tags:
- name: Products
  description: Manage products in a Shopify store
paths:
  /products.json:
    get:
      operationId: listProducts
      summary: Shopify Retrieve a list of products
      description: Retrieves a list of products. Results can be filtered by collection, product type, vendor, creation date, update date, publication status, and other criteria. Returns up to 250 products per page.
      tags:
      - Products
      parameters:
      - name: ids
        in: query
        description: Comma-separated list of product IDs to retrieve
        schema:
          type: string
      - name: limit
        in: query
        description: Maximum number of results to return (max 250, default 50)
        schema:
          type: integer
          default: 50
          maximum: 250
      - name: since_id
        in: query
        description: Return products after the specified ID
        schema:
          type: integer
      - name: title
        in: query
        description: Filter by product title
        schema:
          type: string
      - name: vendor
        in: query
        description: Filter by product vendor
        schema:
          type: string
      - name: product_type
        in: query
        description: Filter by product type
        schema:
          type: string
      - name: collection_id
        in: query
        description: Filter by collection ID
        schema:
          type: integer
      - name: status
        in: query
        description: Filter by product status
        schema:
          type: string
          enum:
          - active
          - archived
          - draft
      - name: fields
        in: query
        description: Comma-separated list of fields to include in the response
        schema:
          type: string
      - name: created_at_min
        in: query
        description: Show products created after this date (ISO 8601)
        schema:
          type: string
          format: date-time
      - name: created_at_max
        in: query
        description: Show products created before this date (ISO 8601)
        schema:
          type: string
          format: date-time
      - name: updated_at_min
        in: query
        description: Show products updated after this date (ISO 8601)
        schema:
          type: string
          format: date-time
      - name: updated_at_max
        in: query
        description: Show products updated before this date (ISO 8601)
        schema:
          type: string
          format: date-time
      responses:
        '200':
          description: A list of products
          content:
            application/json:
              schema:
                type: object
                properties:
                  products:
                    type: array
                    items:
                      $ref: '#/components/schemas/Product'
    post:
      operationId: createProduct
      summary: Shopify Create a new product
      description: Creates a new product. You can include product variants and images in the same request. If no variants are specified a default variant is created automatically.
      tags:
      - Products
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - product
              properties:
                product:
                  $ref: '#/components/schemas/ProductInput'
      responses:
        '201':
          description: The created product
          content:
            application/json:
              schema:
                type: object
                properties:
                  product:
                    $ref: '#/components/schemas/Product'
        '422':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /products/count.json:
    get:
      operationId: getProductCount
      summary: Shopify Retrieve a count of products
      description: Retrieves a count of products matching the specified criteria.
      tags:
      - Products
      parameters:
      - name: vendor
        in: query
        description: Filter by product vendor
        schema:
          type: string
      - name: product_type
        in: query
        description: Filter by product type
        schema:
          type: string
      - name: collection_id
        in: query
        description: Filter by collection ID
        schema:
          type: integer
      - name: created_at_min
        in: query
        description: Count products created after this date
        schema:
          type: string
          format: date-time
      - name: updated_at_min
        in: query
        description: Count products updated after this date
        schema:
          type: string
          format: date-time
      responses:
        '200':
          description: The product count
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
  /products/{product_id}.json:
    get:
      operationId: getProduct
      summary: Shopify Retrieve a single product
      description: Retrieves a single product by its ID, including variants, images, and options.
      tags:
      - Products
      parameters:
      - $ref: '#/components/parameters/ProductId'
      - name: fields
        in: query
        description: Comma-separated list of fields to include
        schema:
          type: string
      responses:
        '200':
          description: The requested product
          content:
            application/json:
              schema:
                type: object
                properties:
                  product:
                    $ref: '#/components/schemas/Product'
        '404':
          description: Product not found
    put:
      operationId: updateProduct
      summary: Shopify Update a product
      description: Updates an existing product and any of its variants and images.
      tags:
      - Products
      parameters:
      - $ref: '#/components/parameters/ProductId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - product
              properties:
                product:
                  $ref: '#/components/schemas/ProductInput'
      responses:
        '200':
          description: The updated product
          content:
            application/json:
              schema:
                type: object
                properties:
                  product:
                    $ref: '#/components/schemas/Product'
        '422':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    delete:
      operationId: deleteProduct
      summary: Shopify Delete a product
      description: Deletes a product and all associated variants and images.
      tags:
      - Products
      parameters:
      - $ref: '#/components/parameters/ProductId'
      responses:
        '200':
          description: Product deleted successfully
        '404':
          description: Product not found
  /products/{handle}.js:
    get:
      operationId: getProductByHandle
      summary: Shopify Retrieve a product by its handle
      description: Retrieves product information in JSON format using the product handle. Returns product metadata, pricing, variants (up to 250), images, options, and availability. Monetary values reflect the customer presentment currency.
      tags:
      - Products
      parameters:
      - name: handle
        in: path
        required: true
        description: The URL-friendly product handle
        schema:
          type: string
      responses:
        '200':
          description: The product data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontProduct'
        '404':
          description: Product not found
  /admin/api/2020-01/collections/{collection_id}/products.json:
    get:
      summary: Shopify Retrieve A List Of Products Belonging To A Collection
      description: https://shopify.dev/docs/admin-api/rest/reference/products/collection#products-2020-01
      parameters:
      - in: path
        name: collection_id
        required: true
        schema:
          type: string
        description: collection_id
      - in: query
        name: limit
        description: "The number of products to retrieve.\n                  (default: 50, maximum: 250)"
        schema: {}
        required: false
      tags:
      - Products
      responses:
        '200':
          description: ''
      operationId: deprecated_202001_get_collections_param_collection_id_products
      x-api-evangelist-processing:
        PascalCaseOperationSummaries: true
        ChooseTags: true
  /admin/api/2020-04/collections/{collection_id}/products.json:
    get:
      summary: Shopify Retrieve A List Of Products Belonging To A Collection
      description: https://shopify.dev/docs/admin-api/rest/reference/products/collection#products-2020-04
      parameters:
      - in: path
        name: collection_id
        required: true
        schema:
          type: string
        description: collection_id
      - in: query
        name: limit
        description: "The number of products to retrieve.\n                  (default: 50, maximum: 250)"
        schema: {}
        required: false
      tags:
      - Products
      responses:
        '200':
          description: ''
      operationId: deprecated_202004_get_collections_param_collection_id_products
      x-api-evangelist-processing:
        PascalCaseOperationSummaries: true
        ChooseTags: true
  /admin/api/2020-07/collections/{collection_id}/products.json:
    get:
      summary: Shopify Retrieve A List Of Products Belonging To A Collection
      description: https://shopify.dev/docs/admin-api/rest/reference/products/collection#products-2020-07
      parameters:
      - in: path
        name: collection_id
        required: true
        schema:
          type: string
        description: collection_id
      - in: query
        name: limit
        description: "The number of products to retrieve.\n                  (default: 50, maximum: 250)"
        schema: {}
        required: false
      tags:
      - Products
      responses:
        '200':
          description: ''
      operationId: deprecated_202007_get_collections_param_collection_id_products
      x-api-evangelist-processing:
        PascalCaseOperationSummaries: true
        ChooseTags: true
  /admin/api/2020-10/collections/{collection_id}/products.json:
    get:
      summary: Shopify Retrieve A List Of Products Belonging To A Collection
      description: https://shopify.dev/docs/admin-api/rest/reference/products/collection#products-2020-10
      parameters:
      - in: path
        name: collection_id
        required: true
        schema:
          type: string
        description: collection_id
      - in: query
        name: limit
        description: "The number of products to retrieve.\n                  (default: 50, maximum: 250)"
        schema: {}
        required: false
      tags:
      - Products
      responses:
        '200':
          description: ''
      operationId: get_collections_param_collection_id_products
      x-api-evangelist-processing:
        PascalCaseOperationSummaries: true
        ChooseTags: true
  /admin/api/2021-01/collections/{collection_id}/products.json:
    get:
      summary: Shopify Retrieve A List Of Products Belonging To A Collection
      description: https://shopify.dev/docs/admin-api/rest/reference/products/collection#products-2021-01
      parameters:
      - in: path
        name: collection_id
        required: true
        schema:
          type: string
        description: collection_id
      - in: query
        name: limit
        description: "The number of products to retrieve.\n                  (default: 50, maximum: 250)"
        schema: {}
        required: false
      tags:
      - Products
      responses:
        '200':
          description: ''
      operationId: deprecated_202101_get_collections_param_collection_id_products
      x-api-evangelist-processing:
        PascalCaseOperationSummaries: true
        ChooseTags: true
  /admin/api/unstable/collections/{collection_id}/products.json:
    get:
      summary: Shopify Retrieve A List Of Products Belonging To A Collection
      description: https://shopify.dev/docs/admin-api/rest/reference/products/collection#products-unstable
      parameters:
      - in: path
        name: collection_id
        required: true
        schema:
          type: string
        description: collection_id
      - in: query
        name: limit
        description: "The number of products to retrieve.\n                  (default: 50, maximum: 250)"
        schema: {}
        required: false
      tags:
      - Products
      responses:
        '200':
          description: ''
      operationId: deprecated_unstable_get_collections_param_collection_id_products
      x-api-evangelist-processing:
        PascalCaseOperationSummaries: true
        ChooseTags: true
  /admin/api/2020-01/products.json:
    get:
      summary: Shopify Retrieves A List Of Products
      description: https://shopify.dev/docs/admin-api/rest/reference/products/product#index-2020-01
      parameters:
      - in: query
        name: ids
        description: Return only products specified by a comma-separated list of product IDs.
        schema: {}
        required: false
      - in: query
        name: limit
        description: "Return up to this many results per page.\n                  (default: 50, maximum: 250)"
        schema: {}
        required: false
      - in: query
        name: since_id
        description: Restrict results to after the specified ID.
        schema: {}
        required: false
      - in: query
        name: title
        description: Filter results by product title.
        schema: {}
        required: false
      - in: query
        name: vendor
        description: Filter results by product vendor.
        schema: {}
        required: false
      - in: query
        name: handle
        description: Filter results by product handle.
        schema: {}
        required: false
      - in: query
        name: product_type
        description: Filter results by product type.
        schema: {}
        required: false
      - in: query
        name: status
        description: "Return products by their status.\n                  (default: active)\n                    \n                        active: Show only active products.\n                        archived: Show only archived products.\n                        draft: Show only draft products."
        schema: {}
        required: false
      - in: query
        name: collection_id
        description: Filter results by product collection ID.
        schema: {}
        required: false
      - in: query
        name: created_at_min
        description: 'Show products created after date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: created_at_max
        description: 'Show products created before date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: updated_at_min
        description: 'Show products last updated after date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: updated_at_max
        description: 'Show products last updated before date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: published_at_min
        description: 'Show products published after date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: published_at_max
        description: 'Show products published before date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: published_status
        description: "Return products by their published status\n                  (default: any)\n                    \n                        published: Show only published products.\n                        unpublished: Show only unpublished products.\n                        any: Show all products."
        schema: {}
        required: false
      - in: query
        name: fields
        description: Show only certain fields, specified by a comma-separated list of field names.
        schema: {}
        required: false
      - in: query
        name: presentment_currencies
        description: Return presentment prices in only certain currencies, specified by a comma-separated list of ISO 4217 currency codes.
        schema: {}
        required: false
      tags:
      - Products
      responses:
        '200':
          description: ''
      operationId: deprecated_202001_get_products
      x-api-evangelist-processing:
        PascalCaseOperationSummaries: true
        ChooseTags: true
  /admin/api/2020-01/products/count.json:
    get:
      summary: Shopify Retrieves A Count Of Products
      description: https://shopify.dev/docs/admin-api/rest/reference/products/product#count-2020-01
      parameters:
      - in: query
        name: vendor
        description: Filter results by product vendor.
        schema: {}
        required: false
      - in: query
        name: product_type
        description: Filter results by product type.
        schema: {}
        required: false
      - in: query
        name: collection_id
        description: Filter results by collection ID.
        schema: {}
        required: false
      - in: query
        name: created_at_min
        description: 'Show products created after date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: created_at_max
        description: 'Show products created before date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: updated_at_min
        description: 'Show products last updated after date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: updated_at_max
        description: 'Show products last updated before date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: published_at_min
        description: 'Show products published after date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: published_at_max
        description: 'Show products published before date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: published_status
        description: "Return products by their published status\n                  (default: any)\n                    \n                        published: Show only published products.\n                        unpublished: Show only unpublished products.\n                        any: Show all products."
        schema: {}
        required: false
      tags:
      - Products
      responses:
        '200':
          description: ''
      operationId: deprecated_202001_get_products_count
      x-api-evangelist-processing:
        PascalCaseOperationSummaries: true
        ChooseTags: true
  /admin/api/2020-04/products.json:
    get:
      summary: Shopify Retrieves A List Of Products
      description: https://shopify.dev/docs/admin-api/rest/reference/products/product#index-2020-04
      parameters:
      - in: query
        name: ids
        description: Return only products specified by a comma-separated list of product IDs.
        schema: {}
        required: false
      - in: query
        name: limit
        description: "Return up to this many results per page.\n                  (default: 50, maximum: 250)"
        schema: {}
        required: false
      - in: query
        name: since_id
        description: Restrict results to after the specified ID.
        schema: {}
        required: false
      - in: query
        name: title
        description: Filter results by product title.
        schema: {}
        required: false
      - in: query
        name: vendor
        description: Filter results by product vendor.
        schema: {}
        required: false
      - in: query
        name: handle
        description: Filter results by product handle.
        schema: {}
        required: false
      - in: query
        name: product_type
        description: Filter results by product type.
        schema: {}
        required: false
      - in: query
        name: status
        description: "Return products by their status.\n                  (default: active)\n                    \n                        active: Show only active products.\n                        archived: Show only archived products.\n                        draft: Show only draft products."
        schema: {}
        required: false
      - in: query
        name: collection_id
        description: Filter results by product collection ID.
        schema: {}
        required: false
      - in: query
        name: created_at_min
        description: 'Show products created after date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: created_at_max
        description: 'Show products created before date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: updated_at_min
        description: 'Show products last updated after date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: updated_at_max
        description: 'Show products last updated before date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: published_at_min
        description: 'Show products published after date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: published_at_max
        description: 'Show products published before date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: published_status
        description: "Return products by their published status\n                  (default: any)\n                    \n                        published: Show only published products.\n                        unpublished: Show only unpublished products.\n                        any: Show all products."
        schema: {}
        required: false
      - in: query
        name: fields
        description: Show only certain fields, specified by a comma-separated list of field names.
        schema: {}
        required: false
      - in: query
        name: presentment_currencies
        description: Return presentment prices in only certain currencies, specified by a comma-separated list of ISO 4217 currency codes.
        schema: {}
        required: false
      tags:
      - Products
      responses:
        '200':
          description: ''
      operationId: deprecated_202004_get_products
      x-api-evangelist-processing:
        PascalCaseOperationSummaries: true
        ChooseTags: true
  /admin/api/2020-04/products/count.json:
    get:
      summary: Shopify Retrieves A Count Of Products
      description: https://shopify.dev/docs/admin-api/rest/reference/products/product#count-2020-04
      parameters:
      - in: query
        name: vendor
        description: Filter results by product vendor.
        schema: {}
        required: false
      - in: query
        name: product_type
        description: Filter results by product type.
        schema: {}
        required: false
      - in: query
        name: collection_id
        description: Filter results by collection ID.
        schema: {}
        required: false
      - in: query
        name: created_at_min
        description: 'Show products created after date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: created_at_max
        description: 'Show products created before date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: updated_at_min
        description: 'Show products last updated after date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: updated_at_max
        description: 'Show products last updated before date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: published_at_min
        description: 'Show products published after date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: published_at_max
        description: 'Show products published before date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: published_status
        description: "Return products by their published status\n                  (default: any)\n                    \n                        published: Show only published products.\n                        unpublished: Show only unpublished products.\n                        any: Show all products."
        schema: {}
        required: false
      tags:
      - Products
      responses:
        '200':
          description: ''
      operationId: deprecated_202004_get_products_count
      x-api-evangelist-processing:
        PascalCaseOperationSummaries: true
        ChooseTags: true
  /admin/api/2020-07/products.json:
    get:
      summary: Shopify Retrieves A List Of Products
      description: https://shopify.dev/docs/admin-api/rest/reference/products/product#index-2020-07
      parameters:
      - in: query
        name: ids
        description: Return only products specified by a comma-separated list of product IDs.
        schema: {}
        required: false
      - in: query
        name: limit
        description: "Return up to this many results per page.\n                  (default: 50, maximum: 250)"
        schema: {}
        required: false
      - in: query
        name: since_id
        description: Restrict results to after the specified ID.
        schema: {}
        required: false
      - in: query
        name: title
        description: Filter results by product title.
        schema: {}
        required: false
      - in: query
        name: vendor
        description: Filter results by product vendor.
        schema: {}
        required: false
      - in: query
        name: handle
        description: Filter results by product handle.
        schema: {}
        required: false
      - in: query
        name: product_type
        description: Filter results by product type.
        schema: {}
        required: false
      - in: query
        name: status
        description: "Return products by their status.\n                  (default: active)\n                    \n                        active: Show only active products.\n                        archived: Show only archived products.\n                        draft: Show only draft products."
        schema: {}
        required: false
      - in: query
        name: collection_id
        description: Filter results by product collection ID.
        schema: {}
        required: false
      - in: query
        name: created_at_min
        description: 'Show products created after date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: created_at_max
        description: 'Show products created before date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: updated_at_min
        description: 'Show products last updated after date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: updated_at_max
        description: 'Show products last updated before date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: published_at_min
        description: 'Show products published after date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: published_at_max
        description: 'Show products published before date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: published_status
        description: "Return products by their published status\n                  (default: any)\n                    \n                        published: Show only published products.\n                        unpublished: Show only unpublished products.\n                        any: Show all products."
        schema: {}
        required: false
      - in: query
        name: fields
        description: Show only certain fields, specified by a comma-separated list of field names.
        schema: {}
        required: false
      - in: query
        name: presentment_currencies
        description: Return presentment prices in only certain currencies, specified by a comma-separated list of ISO 4217 currency codes.
        schema: {}
        required: false
      tags:
      - Products
      responses:
        '200':
          description: ''
      operationId: deprecated_202007_get_products
      x-api-evangelist-processing:
        PascalCaseOperationSummaries: true
        ChooseTags: true
  /admin/api/2020-07/products/count.json:
    get:
      summary: Shopify Retrieves A Count Of Products
      description: https://shopify.dev/docs/admin-api/rest/reference/products/product#count-2020-07
      parameters:
      - in: query
        name: vendor
        description: Filter results by product vendor.
        schema: {}
        required: false
      - in: query
        name: product_type
        description: Filter results by product type.
        schema: {}
        required: false
      - in: query
        name: collection_id
        description: Filter results by collection ID.
        schema: {}
        required: false
      - in: query
        name: created_at_min
        description: 'Show products created after date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: created_at_max
        description: 'Show products created before date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: updated_at_min
        description: 'Show products last updated after date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: updated_at_max
        description: 'Show products last updated before date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: published_at_min
        description: 'Show products published after date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        required: false
      - in: query
        name: published_at_max
        description: 'Show products published before date. (format: 2014-04-25T16:15:47-04:00)'
        schema: {}
        req

# --- truncated at 32 KB (75 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/shopify/refs/heads/main/openapi/shopify-products-api-openapi.yml