Product options and variants allow merchants to offer product variations to their customers. Options define the ways a product can vary, such as size or color, while variants represent each specific purchasable combination of those options. Understanding how these concepts work together is essential for building e-commerce apps that manage product catalogs effectively.
The Catalog V3 API uses several related terms when working with product variations. Here's how they fit together:
When you add options to a product, you must also provide the corresponding variants. Variants aren't automatically generated. You must explicitly define each option-choice combination. Each variant must reference exactly 1 choice from each option defined on the product.
While the API technically allows creating fewer variants than the total possible combinations, we recommend that you create a variant for every combination to ensure customers can purchase any selection they make. For example, for a product with 2 options, such as Color with 2 choices and Size with 3 choices, we recommend that you create all 6 variants to cover every combination.
| Options | Combinations and Variants Needed |
|---|---|
| Color: Red, Blue + Size: S, M, L | 6 |
| Color: Red, Blue + Size: S, L | 4 |
Products can have up to 6 options and up to 1,000 variants.
Every product has at least 1 variant. Products without options have a single "default variant" with an empty choices array. This default variant holds the product's price, SKU, and other variant-level data.
Options and modifiers both allow customers to make selections, but they serve different purposes:
| Feature | Options | Modifiers |
|---|---|---|
| Creates variants | Yes | No |
| Affects inventory | Yes | No |
| Has its own SKU | Yes, per variant | No |
| Has its own price | Yes, per variant | Optional price add-on |
| Example use cases | Size, Color, Material | Gift message, Engraving, "Remove price tag" |
Use options when:
Use modifiers when:
Both options and modifiers can be displayed to customers in different ways, called render types:
Displays choices as text labels. Best for selections like sizes such as S, M, and L, or materials such as Cotton and Silk.
Display choices as color swatches. Use for color selections where visual representation is important.
Allow customers to enter custom text. Use for personalization like gift messages or engraving.
Options and modifiers are stored as customization entities that you can create and manage using the Customizations API. Customizations can be created independently and reused across multiple products. When you create a product with inline options or modifiers without referencing existing customization IDs, the system automatically creates standalone customization entities.
You can create customizations before assigning them to products:
Existing customizations can be assigned to a product by referencing their id in the product's options or modifiers array:
Customizations have 1 of 2 types:
PRODUCT_OPTION: Creates variants and affects inventory.MODIFIER: Collects information without creating variants.You can't change the customization type after you create it.
When creating a product with options, you must explicitly provide every variant you want to sell. The API doesn't auto-generate variants from option choices. Each variant references its option choices using optionChoiceNames in the request, and the API returns the corresponding optionChoiceIds in the response:
Each variant can have its own:
actualPrice, and original price, stored in compareAtPrice.The following example shows a yoga mat product with a Color swatch option and a Thickness text option, plus a free-text modifier for personalization. Since the product has 2 colors × 2 thicknesses, it includes all 4 variants:
In this example:
SWATCH_CHOICES with hex color codes for visual selection.TEXT_CHOICES for text-based selection.FREE_TEXT to collect custom text with a $5 upcharge.physicalProperties: {} object at the product level, with optional properties like weight at the variant level.You can associate specific product images with option choices using linkedMedia. When a customer selects a choice, only the linked media is shown:
When multiple choices are selected, for example "Color: Red" and "Material: Silk", only media that appears in the linkedMedia of all selected choices is displayed.
Inventory is managed separately from products through the Inventory Items API. Each inventory item is linked to a specific variant and location, meaning the same variant can have different stock levels at different warehouse or store locations.
When you create variants, the system doesn't automatically create inventory items. You must create inventory items separately for each variant-location combination you want to track. Without inventory items, a variant has no stock information.
The Products API includes some read-only inventory fields that reflect the aggregated inventory status across all locations, but to manage stock levels, use the Inventory Items API.
The Read-Only Variants API provides direct access to variants, rather than as nested objects in products. This is useful for:
Note: The Read-Only Variants API operates on an eventually consistent model. Changes made through the Products API sync to this service over time.
Options and modifiers have different deletion behaviors: