Shopify · Schema

Shopify Product

A product in a Shopify store. Products are the goods and services that merchants sell. They include information such as title, description, price, images, and variants.

CommerceEcommercePaymentsRetailShopping CartT1

Properties

Name Type Description
id integer Unique numeric identifier for the product
title string The name of the product
body_html stringnull The description of the product in HTML format
vendor string The name of the product vendor
product_type string A categorization for the product used for filtering and searching
handle string A URL-friendly unique string for the product automatically generated from the title
created_at string The date and time when the product was created in ISO 8601 format
updated_at string The date and time when the product was last modified in ISO 8601 format
published_at stringnull The date and time when the product was published. Null if the product is not published.
template_suffix stringnull The suffix of the Liquid template used for the product page
published_scope string Whether the product is published to the Point of Sale channel
tags string A comma-separated list of searchable keywords associated with the product
status string The status of the product
admin_graphql_api_id string The GraphQL Admin API identifier in the format gid://shopify/Product/{id}
variants array The product variants. Each product can have up to 100 variants.
options array The custom product options. A product can have up to 3 options.
images array The product images. A product can have up to 250 images.
image object The primary product image
View JSON Schema on GitHub

JSON Schema

shopify-product-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://shopify.dev/schemas/product.json",
  "title": "Shopify Product",
  "description": "A product in a Shopify store. Products are the goods and services that merchants sell. They include information such as title, description, price, images, and variants.",
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "description": "Unique numeric identifier for the product"
    },
    "title": {
      "type": "string",
      "description": "The name of the product"
    },
    "body_html": {
      "type": ["string", "null"],
      "description": "The description of the product in HTML format"
    },
    "vendor": {
      "type": "string",
      "description": "The name of the product vendor"
    },
    "product_type": {
      "type": "string",
      "description": "A categorization for the product used for filtering and searching"
    },
    "handle": {
      "type": "string",
      "description": "A URL-friendly unique string for the product automatically generated from the title"
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "description": "The date and time when the product was created in ISO 8601 format"
    },
    "updated_at": {
      "type": "string",
      "format": "date-time",
      "description": "The date and time when the product was last modified in ISO 8601 format"
    },
    "published_at": {
      "type": ["string", "null"],
      "format": "date-time",
      "description": "The date and time when the product was published. Null if the product is not published."
    },
    "template_suffix": {
      "type": ["string", "null"],
      "description": "The suffix of the Liquid template used for the product page"
    },
    "published_scope": {
      "type": "string",
      "description": "Whether the product is published to the Point of Sale channel",
      "enum": ["web", "global"]
    },
    "tags": {
      "type": "string",
      "description": "A comma-separated list of searchable keywords associated with the product"
    },
    "status": {
      "type": "string",
      "description": "The status of the product",
      "enum": ["active", "archived", "draft"]
    },
    "admin_graphql_api_id": {
      "type": "string",
      "description": "The GraphQL Admin API identifier in the format gid://shopify/Product/{id}"
    },
    "variants": {
      "type": "array",
      "description": "The product variants. Each product can have up to 100 variants.",
      "items": {
        "$ref": "#/$defs/Variant"
      }
    },
    "options": {
      "type": "array",
      "description": "The custom product options. A product can have up to 3 options.",
      "items": {
        "$ref": "#/$defs/ProductOption"
      }
    },
    "images": {
      "type": "array",
      "description": "The product images. A product can have up to 250 images.",
      "items": {
        "$ref": "#/$defs/Image"
      }
    },
    "image": {
      "description": "The primary product image",
      "$ref": "#/$defs/Image"
    }
  },
  "required": ["id", "title"],
  "$defs": {
    "Variant": {
      "type": "object",
      "description": "A product variant representing a specific version of a product defined by its option values",
      "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 composed of option values"
        },
        "price": {
          "type": "string",
          "description": "The price of the variant as a decimal string"
        },
        "sku": {
          "type": ["string", "null"],
          "description": "Stock keeping unit for tracking inventory"
        },
        "position": {
          "type": "integer",
          "description": "The position of the variant in the product variant list"
        },
        "inventory_policy": {
          "type": "string",
          "description": "Whether to continue selling when out of stock",
          "enum": ["deny", "continue"]
        },
        "compare_at_price": {
          "type": ["string", "null"],
          "description": "The original price for comparison or sale display"
        },
        "fulfillment_service": {
          "type": "string",
          "description": "The fulfillment service associated with the variant"
        },
        "inventory_management": {
          "type": ["string", "null"],
          "description": "The fulfillment service that tracks inventory for the variant"
        },
        "option1": {
          "type": ["string", "null"],
          "description": "The value of the first product option"
        },
        "option2": {
          "type": ["string", "null"],
          "description": "The value of the second product option"
        },
        "option3": {
          "type": ["string", "null"],
          "description": "The value of the third product option"
        },
        "taxable": {
          "type": "boolean",
          "description": "Whether tax is charged on the variant"
        },
        "barcode": {
          "type": ["string", "null"],
          "description": "The barcode, UPC, or ISBN for the variant"
        },
        "grams": {
          "type": "integer",
          "description": "The weight of the variant in grams"
        },
        "weight": {
          "type": "number",
          "description": "The weight of the variant in the unit specified by weight_unit"
        },
        "weight_unit": {
          "type": "string",
          "description": "The unit of weight measurement",
          "enum": ["g", "kg", "oz", "lb"]
        },
        "inventory_item_id": {
          "type": "integer",
          "description": "The ID of the corresponding inventory item"
        },
        "inventory_quantity": {
          "type": "integer",
          "description": "The total tracked inventory quantity"
        },
        "requires_shipping": {
          "type": "boolean",
          "description": "Whether the variant requires shipping"
        },
        "image_id": {
          "type": ["integer", "null"],
          "description": "The ID of the image associated with the variant"
        },
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "updated_at": {
          "type": "string",
          "format": "date-time"
        },
        "admin_graphql_api_id": {
          "type": "string"
        }
      },
      "required": ["id", "product_id", "title", "price"]
    },
    "ProductOption": {
      "type": "object",
      "description": "A product option such as Size or Color",
      "properties": {
        "id": {
          "type": "integer"
        },
        "product_id": {
          "type": "integer"
        },
        "name": {
          "type": "string",
          "description": "The option name"
        },
        "position": {
          "type": "integer",
          "description": "The position of the option in the list"
        },
        "values": {
          "type": "array",
          "description": "The available values for this option",
          "items": {
            "type": "string"
          }
        }
      },
      "required": ["id", "name"]
    },
    "Image": {
      "type": "object",
      "description": "A product image",
      "properties": {
        "id": {
          "type": "integer"
        },
        "product_id": {
          "type": "integer"
        },
        "position": {
          "type": "integer",
          "description": "The position of the image in the list"
        },
        "alt": {
          "type": ["string", "null"],
          "description": "Alternative text for accessibility"
        },
        "width": {
          "type": "integer"
        },
        "height": {
          "type": "integer"
        },
        "src": {
          "type": "string",
          "format": "uri",
          "description": "The URL of the image"
        },
        "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"
        }
      },
      "required": ["id", "src"]
    }
  }
}