Products
Products are the items or services that you might want to sell in your store. In Product Experience Manager, a product has a name, description, ID, and SKU. Products can also have additional attributes and associated rich media assets, such as product images or a file containing additional product details. If your store supports multiple languages, you can localize product names and descriptions.
Product data is stored in a database. After you add products, you can update product information, add images and other assets, and associate products with one or more hierarchy nodes. You can export the updated product information back to other business systems so that your organization sees a consistent view of products.
While defining products, the products are in a draft state. Your organization can develop the criteria and business processes to help determine when a product is ready to go live and appear in a catalog.
To appear in a catalog, a product must meet the following criteria:
- The product is live.
- The product is associated with at least one hierarchy.
- The catalog references a hierarchy that includes the product.
Product Types
Commerce automatically assigns types to the products you create. In Commerce Manager, you can see at a glance the product types in a list of a products. In addition, you can filter on product types in both the API and Commerce Manager.
Product types can also be used in catalogs. For example, in your catalog, you can filter on parent
so that only your parent products are displayed in your storefront.
Products have one of the following types:
standard
- Standard products are a standalone products.parent
- A parent product is a product that has child products that have been built in Commerce Manager or using the Build Child Products endpoint.child
- When you configure product variations and variation options for parent products, the child products derived from the parent products are automatically created in Commerce.bundle
- A bundle is a purchasable product, comprising one or more standalone products (in other words,components
) to be sold together.
In Commerce Manager, standard
products are called Product.
Personalizing Products
You can allow your shoppers to add custom text to a product when adding product items to their carts. This is useful, for example, if you have a product like a T-shirt that can be personalized or you sell greetings cards that can be printed with your shoppers personalized messages. You can do this by configuring the the custom_inputs
attribute.
Products and Catalog Releases
For a product to appear in the store, the product must be in a live
state. By default, a product is created in the draft
state. This is to ensure that the product details are reviewed and approved before publishing it. When you publish a catalog, only the live products appear in the catalog release. If you change a product's state to live, you must republish the catalog for the product to be displayed in the catalog.
In addition, a product must belong to at least one hierarchy. When you publish a catalog, the live products in the hierarchies appear in a catalog release. A catalog can have one or more hierarchies of products. The hierarchies contain all the products that you want to display in your store. Only the products that are associated with nodes in the selected hierarchies are included in the catalog. You can create your hierarchies and nodes when configuring your products.
Bundles
What are Bundles?
A bundle is a distinct, purchasable product formed by grouping one or more other products that you intend to sell together as a single offering. Bundles make it easier for shoppers to discover and purchase multiple related items together, while also helping merchants increase average order value and streamline merchandising.
Bundles are built using components. Components are logical groupings that define how shoppers can select from a set of product options, which are products or sub-bundles available within each group. This structure allows merchants to create everything from simple, fixed sets of products to highly flexible and customizable configurations.
You can have:
- Fixed Bundles: These bundles contain a specific, pre-determined set of products with fixed quantities.
- Dynamic Bundles: These bundles offer flexibility, allowing shoppers to select their own options or variations from a defined set of choices within the bundle.
- Bundles of Bundles: These advanced bundles are composed of other pre-existing bundles. The parent bundle serves only as a logical container (cannot be added to cart directly) and should be used only for complex scenarios where simpler bundle options don't meet your requirements.
There are two different pricing options available:
- Fixed Pricing: Assign a specific price to the entire bundle.
- Cumulative Pricing: The bundle's price is the sum of the prices of the options selected by the shopper (in a dynamic bundle) or the products defined by the merchant (in a fixed bundle).
Use Cases
- Fixed Bundles: The "Home Office Essentials" Bundle: An office supply retailer offers a convenient, pre-determined package (desk lamp, mouse, notebook, pens) as a fixed product bundle for easy home office setup, simplifying purchase and potentially increasing order value.
- Dynamic Bundles: The "Build Your Own Latte" Bundle: A coffee shop lets customers create their ideal latte through a dynamic bundle. They select their preferred size, milk, blend, shots, syrups, and extras from a set of options. The price adjusts based on these choices, offering a flexible and tailored drink.
- Bundles of Bundles: The "Couch Configuration" Bundle: A furniture retailer offers couches in different sizes (2-Seater, 3-Seater, etc.), where each size has its own base price and the same customization options (fabric, color, leg style) but with different pricing based on size. The parent bundle lets shoppers first select a couch size, then configure the specific options for that size. Each size-specific bundle must be added to cart individually.
Terminology
- Component: A Component is a distinct group of one or more product options within a bundle. A bundle consists of one or more components.
- Component Min/Max: The number of products within a Component that can be selected by the shopper, defined through the min and max configuration.
- Option: A Component consists of one or more Options which are distinct products that are added to a component. These products could be a single product, another bundle (in the case of bundles of bundles), a parent product, or a child product. When adding a parent product to a component, all its child products (variations) automatically become available for selection, though you can configure specific child products to be excluded if needed.
- Option Default: A product can be set as default, allowing the merchant to define a pre-selected product for the shopper within a component.
- Option Quantity: Each product in a Component has a specific quantity that the shopper must purchase.
- Option Min/Max: Allows Shoppers to purchase their desired quantity of a product, by configuring the the min and max bounds within an option.
Bundle Components and Options
The following table describes some examples of bundles which are possible in PXM. This is followed by real-life examples of complex bundles.
Bundle Type | Pricing | Description |
---|---|---|
Pure bundles | Fixed | Products are available only as a bundle. |
Joint bundles | Fixed, Automatic/cumulative | A bundled price offered for two or more products. |
Gift sets | Fixed, Automatic/cumulative | A bundle created from a set of predefined items. |
Leader bundle | Automatic/cumulative | A popular product is offered for a discount if you buy it with another less popular product. |
Mix and Match bundles | Automatic/cumulative | Bundle products are selected from a predetermined list of items that you can bundle together. |
Upsell bundles | Automatic/cumulative | Discounted price for the current product when bought together with an accessory as a related item. |
Dynamic Bundle: Customize Your Latte
This example models a customizable latte where the Size component uses variations of a base "Latte" product (Small, Medium, Large) to determine the initial price. Subsequently, the shopper can personalize their latte through optional components (Milk, Blend, Extra Shots, Syrups, Extras). These components consist of individual products that act as upsells or modifications, potentially increasing the final price of the latte.
Component | Options | Default Option | Component Min/Max | Option Quantity | Option Quantity Min/Max |
---|---|---|---|---|---|
Size | Small ($5.00) Medium ($6.00) Large ($7.00) | Medium | 1 / 1 | 1 | N/A |
Milk | Whole ($0.00) Skim ($0.00) Soy (+$0.20) Oat (+$0.20) Coconut (+$0.20) | Whole | 1 / 1 | 1 | N/A |
Blend | Signature ($0.00) Decaf ($0.00) | Signature | 1 / 1 | 1 | N/A |
Extra Shots | None ($0.00) One (+$1.00) Two (+$1.50) | None | 0 / 1 | 1 | 1 / 2 |
Syrups | None ($0.00) Caramel (+$0.20) Vanilla (+$0.20) Hazelnut (+$0.20) Sugar Free Caramel (+$0.20) Sugar Free Vanilla (+$0.20) Sugar Free Gingerbread (+$0.20) Cinnamon Bun (+$0.20) | None | 0 / 1 | 1 | 1 / 2 |
Extras | None ($0.00) Marshmallow (+$0.50) | None | 0 / 1 | 1 | 1 / 2 |
Dynamic Bundle: Build a Couch
This example demonstrates a "Build a Couch" configuration where the shopper must choose exactly one option from each of the following components: Color, Fabric and Leg Style. The final price of the Couch will be the sum of the prices associated with the selected option in each of the components.
Component | Options | Default Option | Component Min/Max | Option Quantity | Option Quantity Min/Max |
---|---|---|---|---|---|
Colour | Beige (50.00) Grey ($50.00) Navy Blue ($100.00) Charcoal ($50.00) | Grey | 1 / 1 | 1 | N/A |
Fabric | Linen ($50.00) Velvet ($50.00) Leather ($150.00) | Linen | 1 / 1 | 1 | N/A |
Leg Style | Straight ($75.00) Tapered ($75.00) | Straight | 1 / 1 | 1 | N/A |
Cumulative Pricing Example
The final price is the sum of each selected options price from each mandatory component (Color, Size, Fabric).
Component | Selected Option | Price ($) |
---|---|---|
Colour | Navy Blue | 100.00 |
Fabric | Leather | 150.00 |
Leg Style | Straight | 75.00 |
Total Price | 275.00 |
Dynamic Bundles: Outfit Builder
This example demonstrates how a clothing company can implement an Outfit Builder that allows shoppers to configure a complete outfit from a selection of related products within the same collection.
Clothing products are typically modeled as "Parent Products" with Variations that represent all possible combinations (sizes, colors, etc.). These parent products can be added to a Bundle Component, which automatically allows shoppers to select any of the parent's child products (variations).
Additionally, you can configure specific child products to be excluded from the bundle when the parent is added. This gives you fine-grained control over which variations are available for selection within the bundle, while still benefiting from the convenience of adding the parent product.
For example, if you add a "T-Shirt" parent product to a bundle component, all its variations (Small/Red, Medium/Blue, Large/Black, etc.) become available for selection. However, you might want to exclude certain variations (e.g., Small/Green and Medium/Yellow) from this particular bundle. You can configure these specific child products as exclusions, ensuring they won't appear as options even though the parent product is included.
The following table illustrates a Wedding Outfit Builder where each component represents a category of clothing, and each option represents a style variant within that category:
Component | Options | Default Option | Component Min/Max | Option Quantity | Option Quantity Min/Max |
---|---|---|---|---|---|
Jacket & Trousers | Single Breasted Double Breasted | Double Breasted | 1 / 1 | 1 | N/A |
Shirt | Single Cuff Double Cuff | Double Cuff | 1 / 1 | 1 | N/A |
Shoes | Oxford Derby Loafer | Oxford | 1 / 1 | 1 | N/A |
Tie | Tie | Tie | 1 / 1 | 1 | N/A |
Bundle of Bundles: Couch Collection
This example demonstrates how a furniture retailer can implement a "Couch Collection" as a bundle of bundles, where a single component contains multiple couch bundle options. This approach helps to group related couch bundles together for better display on the storefront.
Component | Options | Default Option | Component Min/Max | Option Quantity | Option Quantity Min/Max |
---|---|---|---|---|---|
Couch Type | 2-Seater Sofa Bundle 3-Seater Sofa Bundle 4-Seater Sofa Bundle | 2-Seater Sofa Bundle | n/a | n/a | n/a |
Important: Bundles of bundles cannot be added to cart directly and cannot be configured at the parent level. Each bundle option (like the 2-Seater Sofa Bundle) needs to be configured separately and added to cart individually.
For implementation details on child bundles such as the individual sofa bundles, refer to the Build a Couch example above. This example demonstrates how to create a configurable bundle with components for fabric, color, and leg style.
Bundle Pricing
The following table describes the capabilities and pricing that bundles can have.
Pricing | Description | Requires SKU? | Price Book Entry | Capabilities |
---|---|---|---|---|
Fixed | Enables you to assign a fixed price for all the products in a bundle. The bundle can contain items that are available for individual purchase, however, when purchased in a fixed-price bundle, are offered at a discounted price. | Yes | Mandatory | Sale Pricing - defines reduced pricing for the total price of the bundle. Volume Pricing - offers promotional prices for products bought in bulk. Bundle Inventory Management - bundle inventory can be tracked based on the availability of individual items in the bundle. In this case, the maximum number of bundles you can sell is equal to the number of the option that is least available. |
Cumulative | The price of a bundle can be generated automatically based on the sum of the component products. Each individual product can use its underlying volume, sale, and normal price. Ensure that you set a price for each product within the bundle. If a component product does not have a price, the bundle price cannot be set and customers cannot purchase the bundle. | Optional | Not available when SKU is present | Sale Pricing - define reduced pricing for individual products when purchased as part of the bundle. Each product can have a special sale price that will only be used when the product is brought as part of the bundle. |
Sale Pricing
Fixed Price Bundles
For fixed price bundles, you can set a sale price for the entire bundle. This allows you to offer the bundle at a discounted price compared to the regular bundle price.
Cumulative Price Bundles
For cumulative price bundles, you can set a sale price for an item within a bundle so that the product is sold at the sale price when sold as a part of the bundle. Each individual product can use its underlying volume, sale, and normal price, but you can also set a special sale price that will only be used when the product is brought as part of the bundle.
For example, if you have a bundle consisting of four items, you can apply a discounted price to an item within the bundle to get a bundle sales price. Both list and sale price (or was/is prices) are available in the catalog response, enabling you to display slash pricing on your storefront, depending on your requirements.
Product | Regular product price | Bundle sales price |
---|---|---|
Product A | $100 | $80 |
Product B | $50 | $50 |
Product C | $30 | $30 |
Product D | $130 | $130 |
Total | $310 | $290 |
Volume Pricing
Fixed Price Bundles
For fixed price bundles, you can configure volume pricing for the entire bundle. You can define the price range for different quantities of the bundle, as explained in the following example.
Bundle Quantity | Price/Each |
---|---|
1-5 | $10.50 |
6-10 | $10.00 |
11+ | $9.50 |
Cumulative Price Bundles
For cumulative price bundles, each individual product uses its underlying volume pricing. When a customer adds sufficient quantity of an item and meets the minimum required quantity for different pricing, all products with that item SKU are discounted in the cart. The volume pricing of the individual products is applied when calculating the total price of the bundle.
Dynamic Bundles
Dynamic bundles allow merchandisers to create configurable product groupings where shoppers can personalize selections within defined rules. These bundles are composed of components—logical groupings of related product options—each with customizable constraints and behaviors. This flexible structure enables tailored experiences, driving higher engagement and average order value.
Core Concepts
Component Level Rules
Rules can be defined for each component to control shopper selections:
- Minimum Selections: Require at least a certain number of products that can be chosen within a component.
- Maximum Selections: Limit the number of products a shopper can pick from a component.
- Optional Components: Components can also be optional by setting the minimum selection to zero.
Product Option Quantity Rules
Merchants can define rules for each product within a component to control shopper purchase quantity:
- Default Quantity: If you do not set a minimum or maximum quantity for a component option, the shopper will be limited to the default quantity that you have set for that specific option within the bundle configuration. This is useful when you want to ensure a specific number of a particular item is included if the shopper selects it.
- Minimum Quantity: This sets the lowest number of units a shopper must select for a product option.
- Maximum Quantity: This defines the highest number of units a shopper can select for a product option.
Product Option Defaults
Specific product options can be designated as default within each component. This is particularly useful when the bundle is initially displayed in the cart or when a shopper hasn't yet customized their choices.
Parent Products as Options
When working with products that have variations (such as clothing items with different sizes and colors), you can add the parent product to a bundle component. This automatically makes all child products (variations) available for selection within that component.
Additionally, you can configure specific child products to be excluded from the bundle when the parent is added. This gives you fine-grained control over which variations are available for selection within the bundle, while still benefiting from the convenience of adding the parent product.
For example, if you add a "T-Shirt" parent product to a bundle component, all its variations (Small/Red, Medium/Blue, Large/Black, etc.) become available for selection. However, you might want to exclude certain variations (e.g., Small/Green and Medium/Yellow) from this particular bundle. You can configure these specific child products as exclusions, ensuring they won't appear as options even though the parent product is included.
Bundle Configuration in Catalog and Cart
Dynamic bundles have a bundle_configuration
which describes the options selected by a shopper. This configuration is crucial for both displaying bundle options in your catalog and processing bundle purchases in your cart.
Bundle Configuration Structure
The bundle_configuration
is a JSON object that contains:
selected_options
: An object where each key is a component ID (e.g., "size", "color", "extras")- Each component contains key-value pairs where:
- The key is the product ID of the selected option
- The value is the quantity of that option
- Each component contains key-value pairs where:
Working with Bundle Configurations in Catalogs
- Once your bundles are published in a catalog, a shopper can select the products they want.
- Use Get a product in a catalog release to check a bundle's default configuration. The default
bundle_configuration
is returned in themeta
section of the response. - Use the configure a shopper bundle endpoint to store a shopper's selections.
When adding a dynamic bundle to a cart, you need to include the bundle_configuration
in the cart item. This ensures that the correct products and quantities are added to the cart.
Creating Dynamic Bundles: An Overview
The following steps are an overview of how to use dynamic bundles.
- Create your products using create a product.
- Create a bundle using create a bundle.
- Specify minimum and/or maximum values for the number of product options that can be selected within the bundle. For example, if you want the shopper to select exactly 4 out of 10 options, set both the minimum and maximum values to 4 for each of the 10 product options.
- For each product option in the bundle, specify if it is a default option by adding
"default": true
to the product options that you want to be pre-selected for the shopper. - Publish the bundle to your catalog using the Publish a catalog endpoint so you can display the products to your shoppers in your storefront.
- When a shopper interacts with the bundle on your storefront, they can select the products they want from the list of options. Use the configure a shopper bundle endpoint to capture the shoppers selections. This updates the
bundle_configuration
with the product options chosen by a shopper. - Once a shopper has configured their bundle, use the add a product to a cart endpoint to add the selected bundle to the shopper’s cart.
- When the shopper proceeds to checkout, the selected product options from the bundle are included in the order.
Bundles of Bundles
A Bundle of Bundles is a specialized grouping mechanism that allows merchandisers to organize multiple, related product bundles under a single parent container. The parent bundle serves only as a logical container and cannot be added to cart directly - it exists solely to help shoppers navigate to the appropriate child bundle.
Important: Bundles of bundles should be used as a last resort for complex scenarios when simpler bundle options don't meet your requirements. This is the most complex bundle use case and should only be implemented when other bundle types cannot address your specific merchandising needs.
Structure
In a Bundle of Bundles, you typically have:
- A parent bundle with a single component (e.g. "Couch Type")
- Multiple bundle options within that component (e.g., "2-Seater Sofa Bundle", "3-Seater Sofa Bundle")
- Each bundle option is itself a complete bundle with its own components and configuration options
When implementing a Bundle of Bundles in your storefront, the parent bundle serves primarily as a navigation aid. Shoppers browse the parent bundle to discover the available bundle options, then select and configure the specific child bundle they're interested in.
For a detailed implementation example, see the Couch Collection example.
Requirements
- You cannot have more than one level of child bundles. In other words, a child bundle cannot have a child bundle as a component.
- A parent bundle can contain both bundle and product components.
- Each bundle of bundle option needs to be configured and added to the cart individually.
Creating Bundles of Bundles: An Overview
To create a bundle of bundles, simply add a bundle as a component to another bundle.
- Create your products using create a product.
- Create all your child bundles using create a bundle.
- Create a parent bundle and specify the product ID of your child bundle as an option of a component in your bundle. You cannot have more than 1500 options in a bundle.
📄️ Create a product or bundle
Creates a product or bundle with the attributes that are defined in the body.
📄️ Get all products
Retrieves a list of all your products in the Product Experience Manager system.
📄️ Get a product
Returns a product by its identifier.
📄️ Update a product or bundle
Specify whichever attributes you want to change. The values of the other attributes remain the same. If the attributes section is empty, the product or bundle is not updated.
📄️ Delete a product
Deletes the specified product.
📄️ Attach multiple nodes
Assigns products to multiple hierarchies and their children nodes. You can apply a filter to search for the appropriate products to attach to a node. For general filtering syntax, see [**Filtering**](/guides/Getting-Started/filtering).
📄️ Detach multiple nodes
Dissociates products from multiple hierarchies and their children nodes. You can apply filters to search for the appropriate products to detach. For general filtering syntax, see [**Filtering**](/guides/Getting-Started/filtering).
📄️ Get a product's nodes
Returns the nodes associated with the product. Products must be in a `live` status.