Shopify Products API

Manage products in a Shopify store

Business capability
Item Master Data Management BC-2370.10

Operations 7

Each operation below carries the questions people ask an LLM about it and the instructions they give an agent to run it. Generated by API Evangelist overlay

GET /products.json List products in the store · Shopify Retrieve a list of products #
Ask an LLM
“How do I list all the products from a particular vendor in my Shopify store?”
“Can I pull only draft or archived products, filtered by status?”
Tell an agent
List products from vendor {vendor}.
Show up to {limit} products in collection {collection_id} with status {status}.
POST /products.json Create a new product · Shopify Create a new product #
Ask an LLM
“How do I add a new product to my catalog through the Admin API?”
“Can I include variants and images in the same request when creating a product?”
Tell an agent
Create a new product from {product}.
Add product {product} with its variants and images in one go.
GET /products/count.json Count products matching filters · Shopify Retrieve a count of products #
Ask an LLM
“How many products do I have in the store in total?”
“Can I count just the products in one collection or from one vendor?”
Tell an agent
Count the products from vendor {vendor}.
Tell me how many products are in collection {collection_id}.
GET /products/{product_id}.json Get a product by ID · Shopify Retrieve a single product #
Ask an LLM
“How do I look up one product by its ID, with its variants, images and options?”
“Can I ask for only a few fields of a single product instead of the whole record?”
Tell an agent
Get product {product_id}.
Show only {fields} for product {product_id}.
PUT /products/{product_id}.json Update an existing product · Shopify Update a product #
Ask an LLM
“How do I change the details of a product that's already in my store?”
“Can I update a product's variants and images in the same call as the product itself?”
Tell an agent
Update product {product_id} with {product}.
Apply changes {product} to the existing product {product_id}, including its variants.
DELETE /products/{product_id}.json Delete a product · Shopify Delete a product #
Ask an LLM
“How do I permanently delete a product from my store?”
“Does deleting a product also remove its variants and images?”
Tell an agent destructive · confirm first
Delete product {product_id}.
Remove product {product_id} along with all its variants and images.
GET /products/{handle}.js Look up a storefront product by its handle · Shopify Retrieve a product by its handle #
Ask an LLM
“Can I get a product's details from the storefront using just its URL handle?”
“What price and availability does a shopper see for a product, in their own currency?”
Tell an agent
Get the storefront product with handle {handle}.
Check pricing and availability for the product at handle {handle}.

Documentation

Specifications

Schemas & Data

Other Resources

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/shopify-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 form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

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

OpenAPI Specification

shopify-products-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Shopify Products API
  version: 2025-01
  license:
    name: Shopify API Terms
    url: https://www.shopify.com/legal/api-terms
  x-date: '2026-03-04'
  description: 'Operations tagged Products across 2 of this provider''s published API definitions: shopify-admin-rest-api-openapi.yml, shopify-ajax-api-openapi.yml. Each path carries the servers of the definition it was published in.'
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
- url: https://{store}.myshopify.com
  description: Shopify storefront
  variables:
    store:
      default: my-store
      description: The Shopify store subdomain
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'
      security:
      - AccessToken: []
    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'
      security:
      - AccessToken: []
    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
  /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
      security:
      - AccessToken: []
    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
  /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
      security:
      - AccessToken: []
    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'
      security:
      - AccessToken: []
    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
      security:
      - AccessToken: []
    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
  /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
    servers:
    - url: https://{store}.myshopify.com
      description: Shopify storefront
      variables:
        store:
          default: my-store
          description: The Shopify store subdomain
components:
  schemas:
    Product:
      type: object
      description: A Shopify product
      properties:
        id:
          type: integer
          description: Unique numeric identifier for the product
        title:
          type: string
          description: The name of the product
        body_html:
          type: string
          description: Product description in HTML
        vendor:
          type: string
          description: The name of the product vendor
        product_type:
          type: string
          description: A categorization for the product
        handle:
          type: string
          description: URL-friendly version of the product title
        created_at:
          type: string
          format: date-time
          description: When the product was created
        updated_at:
          type: string
          format: date-time
          description: When the product was last updated
        published_at:
          type:
          - string
          - 'null'
          format: date-time
          description: When the product was published (null if unpublished)
        template_suffix:
          type:
          - string
          - 'null'
          description: Liquid template suffix for the product page
        published_scope:
          type: string
          description: Whether the product is published to the POS channel and online store
        tags:
          type: string
          description: Comma-separated list of tags
        status:
          type: string
          description: Product status
          enum:
          - active
          - archived
          - draft
        admin_graphql_api_id:
          type: string
          description: The GraphQL Admin API ID
        variants:
          type: array
          description: Product variants
          items:
            $ref: '#/components/schemas/Variant'
        options:
          type: array
          description: Product options (e.g. Size, Color)
          items:
            $ref: '#/components/schemas/ProductOption'
        images:
          type: array
          description: Product images
          items:
            $ref: '#/components/schemas/Image'
        image:
          description: The primary product image
          $ref: '#/components/schemas/Image'
    Variant:
      type: object
      description: A product variant
      properties:
        id:
          type: integer
          description: Unique numeric identifier
        product_id:
          type: integer
          description: The ID of the parent product
        title:
          type: string
          description: The variant title
        price:
          type: string
          description: The price of the variant
        sku:
          type:
          - string
          - 'null'
          description: Stock keeping unit
        position:
          type: integer
          description: Position of the variant in the list
        inventory_policy:
          type: string
          description: Whether to allow selling when out of stock
          enum:
          - deny
          - continue
        compare_at_price:
          type:
          - string
          - 'null'
          description: Original price for comparison
        fulfillment_service:
          type: string
          description: The fulfillment service for the variant
        inventory_management:
          type:
          - string
          - 'null'
          description: The inventory tracking service
        option1:
          type:
          - string
          - 'null'
          description: Option 1 value
        option2:
          type:
          - string
          - 'null'
          description: Option 2 value
        option3:
          type:
          - string
          - 'null'
          description: Option 3 value
        taxable:
          type: boolean
          description: Whether the variant is taxable
        barcode:
          type:
          - string
          - 'null'
          description: Barcode, UPC, or ISBN
        grams:
          type: integer
          description: Weight in grams
        weight:
          type: number
          description: Weight in the specified unit
        weight_unit:
          type: string
          description: Weight unit
          enum:
          - g
          - kg
          - oz
          - lb
        inventory_item_id:
          type: integer
          description: The inventory item ID
        inventory_quantity:
          type: integer
          description: Tracked inventory quantity
        requires_shipping:
          type: boolean
          description: Whether the variant requires shipping
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        image_id:
          type:
          - integer
          - 'null'
          description: The ID of the associated image
        admin_graphql_api_id:
          type: string
    Image:
      type: object
      description: A product image
      properties:
        id:
          type: integer
        product_id:
          type: integer
        position:
          type: integer
          description: Position in the image list
        alt:
          type:
          - string
          - 'null'
          description: Alt text for the image
        width:
          type: integer
        height:
          type: integer
        src:
          type: string
          format: uri
          description: The image URL
        variant_ids:
          type: array
          description: Variant IDs associated with this image
          items:
            type: integer
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        admin_graphql_api_id:
          type: string
    ProductOption:
      type: object
      description: A product option (e.g. Size, Color)
      properties:
        id:
          type: integer
        product_id:
          type: integer
        name:
          type: string
          description: The option name
        position:
          type: integer
          description: Position in the options list
        values:
          type: array
          description: Available values for this option
          items:
            type: string
    VariantInput:
      type: object
      description: Input for creating or updating a variant
      properties:
        title:
          type: string
        price:
          type: string
        sku:
          type: string
        position:
          type: integer
        inventory_policy:
          type: string
          enum:
          - deny
          - continue
        compare_at_price:
          type: string
        option1:
          type: string
        option2:
          type: string
        option3:
          type: string
        taxable:
          type: boolean
        barcode:
          type: string
        grams:
          type: integer
        weight:
          type: number
        weight_unit:
          type: string
          enum:
          - g
          - kg
          - oz
          - lb
        inventory_quantity:
          type: integer
        requires_shipping:
          type: boolean
    ProductInput:
      type: object
      description: Input for creating or updating a product
      properties:
        title:
          type: string
          description: The name of the product
        body_html:
          type: string
          description: Product description in HTML
        vendor:
          type: string
          description: The product vendor
        product_type:
          type: string
          description: A categorization for the product
        tags:
          type: string
          description: Comma-separated list of tags
        status:
          type: string
          enum:
          - active
          - archived
          - draft
        variants:
          type: array
          items:
            $ref: '#/components/schemas/VariantInput'
        images:
          type: array
          items:
            $ref: '#/components/schemas/ImageInput'
    Error:
      type: object
      description: Error response
      properties:
        errors:
          description: Error details
          oneOf:
          - type: string
          - type: object
            additionalProperties:
              type: array
              items:
                type: string
    ImageInput:
      type: object
      description: Input for creating or updating a product image
      properties:
        src:
          type: string
          format: uri
          description: URL of the image
        attachment:
          type: string
          description: Base64-encoded image data
        alt:
          type: string
          description: Alt text
        position:
          type: integer
        variant_ids:
          type: array
          items:
            type: integer
    StorefrontProduct:
      type: object
      description: A product as returned by the storefront Ajax API
      properties:
        id:
          type: integer
        title:
          type: string
        handle:
          type: string
        description:
          type: string
        published_at:
          type: string
          format: date-time
        created_at:
          type: string
          format: date-time
        vendor:
          type: string
        type:
          type: string
        tags:
          type: array
          items:
            type: string
        price:
          type: integer
          description: Price in cents
        price_min:
          type: integer
        price_max:
          type: integer
        available:
          type: boolean
        price_varies:
          type: boolean
        compare_at_price:
          type:
          - integer
          - 'null'
        compare_at_price_min:
          type: integer
        compare_at_price_max:
          type: integer
        compare_at_price_varies:
          type: boolean
        variants:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
              title:
                type: string
              option1:
                type:
                - string
                - 'null'
              option2:
                type:
                - string
                - 'null'
              option3:
                type:
                - string
                - 'null'
              sku:
                type:
                - string
                - 'null'
              requires_shipping:
                type: boolean
              taxable:
                type: boolean
              featured_image:
                type:
                - object
                - 'null'
              available:
                type: boolean
              name:
                type: string
              public_title:
                type:
                - string
                - 'null'
              price:
                type: integer
              weight:
                type: integer
              compare_at_price:
                type:
                - integer
                - 'null'
              barcode:
                type:
                - string
                - 'null'
        images:
          type: array
          items:
            type: string
            format: uri
        featured_image:
          type: string
          format: uri
        options:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
              position:
                type: integer
              values:
                type: array
                items:
                  type: string
        url:
          type: string
        media:
          type: array
          items:
            type: object
            properties:
              alt:
                type:
                - string
                - 'null'
              id:
                type: integer
              position:
                type: integer
              media_type:
                type: string
              src:
                type: string
                format: uri
              width:
                type: integer
              height:
                type: integer
  parameters:
    ProductId:
      name: product_id
      in: path
      required: true
      description: The ID of the product
      schema:
        type: integer
  securitySchemes:
    AccessToken:
      type: apiKey
      name: X-Shopify-Access-Token
      in: header
      description: Access token obtained via OAuth
x-refined-from:
- shopify-admin-rest-api-openapi.yml
- shopify-ajax-api-openapi.yml