---
title: "PIM products | Customer&#x27;s Canvas Hub"
canonical: "https://customerscanvas.com/docs/hub/dev-center/concepts/pim/"
---

# PIM products

> Customer's Canvas Hub includes a **Product Information Management (PIM)** module. This module manages products and their related entities: options, product variants, asset connections, design variants, and versions. Products created in PIM replace the earlier product specification model. They enable e-commerce systems, apps, and the Hub to work with a single shared product structure.

## Product

A **product** is a description of a customizable item in Customer's Canvas Hub. It defines:

- Available **options**
- Possible **product variants**
- **Asset connections**

A product does not represent a concrete item that a customer can buy. Instead, it describes a **family of items** that share the same structure and personalization rules. For example, the product **"Gildan 5000 T-Shirt"** covers all T-shirts of this model in different colors and sizes.

:::note
Do not confuse a **product** with an [external product](#external-product).
:::

## Option

An **option** is a product characteristic that affects customization or output. Examples include **shape, material, or size**. Some options do not affect customization, such as **paper type** or **order turnaround time**.

An option defines **one or more admissible values (option values)**.

## Option value

An **option value** is **one admissible value** of an option. For example, the **Shape** option can have the **Rectangular** and **Round** values.

An option always implies a finite list of admissible values. For example, the **Size** option offers **5 x 7 in, 8 x 10 in**, and so on. Options with unlimited values (such as Width, which accepts arbitrary numeric input) are not supported.

## Option choice

An **option choice** is a **link** between an option and its selected value. The full set of option choices for all options uniquely identifies a product variant.

## Product variant

A **product variant** is a **specific combination of option values** for a single product. For example, if a product has three options (**Shape / Material / Size**), a variant could be **Round / Copper / Medium**.

A product variant can have its own:

- Stock keeping unit (SKU)
- Price
- Weight
- Other commercial attributes

Each product variant provides one or more design variants.

:::note
When the context is **not limited to PIM**, use the **full term *product variant*** rather than the shortened *variant*.
:::

## SKU

A **stock keeping unit (SKU)** is an identifier assigned to a product variant. Although **expected to be unique**, in PIM, SKUs may repeat within a single product. This typically occurs when a variant includes options that describe not only the physical item but also how a design is applied or other finalization methods. For example, when producing plates, the unique SKU belongs to the combination of Size and Material, while the application method (engraving or printing) does not affect the SKU.

## Asset connection

An **asset connection** defines **rules for selecting assets** based on the selected option. Configure asset connections when editing a product in PIM. When generating product variants, the system uses their option values to resolve matching public designs and mockups through these connections.

Currently, you can connect the following asset types:

- Public designs
- Mockups
- Documents

## Design variant

A **design variant** is the **initial design state** for one customization path of a product variant. The system creates a design variant by combining a public design with the matching editor mockup, resolved through asset connections.

The design variant is the starting point for customization. It has no layout configuration of its own: all graphical elements and their positions are part of the design. The design variant **only stores a reference to the design**.

## Design group

A **design group** combines design variants into a **single layout family**. This family represents different implementations of the same design solution for different product variants.

For example, a product **may come in several sizes**. Each size uses its own design variant, with a layout adapted to that size. Despite technical differences, all these design variants implement the same design solution and therefore belong to one design group.

Product variants and design groups **form two independent dimensions** for organizing design variants:

- A **product variant** determines **which product configuration the design is intended for**.
- A **design group** determines **which design family the variant belongs to**.

Each design variant belongs to exactly one product variant and exactly one design group.

From the **asset-organization perspective**, a design group **forms implicitly**. To create a design family, place the corresponding design files in one folder and connect them to the same product. The system then automatically treats these files as one design group.

## External product

An **external product** is the corresponding item in an external e-commerce system, such as **Shopify, WooCommerce, or Magento**.

## External product ID

An **external product ID** is the identifier of an [external product](#external-product) in its system. Historically, some contexts referred to this identifier as *product reference*. The term **external product ID removes this ambiguity**. In new data models and internal code, the canonical name is `externalProductId`.

## Product reference

A **product reference** is a **link** between an **external product** and a **PIM product**. It stores the external product ID (`externalProductId`) and lets you determine which PIM product corresponds to an item in an external system.

:::important
- One PIM product can correspond to multiple external products, but not vice versa.
- Some existing public APIs use the name `productReferenceId` for the external product ID. When working with such APIs, treat *Product Reference ID* as a deprecated contextual synonym of `externalProductId`.
- The product reference itself has its own internal identifier. This identifier is not exposed through the current API and must not be confused with `productReferenceId`.
:::

## Product version

A **product version** is a **published, unmodifiable revision** of a product in Customer's Canvas BackOffice. Each publish creates a new active version.

- New personalization sessions use the current active version.
- If a user has already started personalization, their session continues using the version it was created with, even after a new version is published.

Customer's Canvas Hub retains up to five published versions for each product.

## Product link

A **product link** is a derived product that **inherits the configuration of another (base) product** and **adapts it for a specific use case**.

A product link **uses the same**:

- Options
- Asset connections
- Design variants
- Design groups

**as the base product**. At the same time, a product link **can**:

- Set different default values for options
- Restrict the set of available values for individual options

For example, you can define the **base product "Business Card"** and then create the **product link "Premium Business Card"**, which retains only premium paper stocks and available embellishments. All design solutions, templates, and assets are then automatically reused from the base product.

Each product link can be published as a separate external product in the e-commerce system. This allows you to offer customers different specialized versions of one product without duplicating its configuration or reconfiguring the assets.

:::note
A product link **is not an independent product**. It is a **specialized representation of an existing product** that inherits its structure and assets.
:::

## Product bundle

A **product bundle** is a composite product that **combines multiple products or individual product variants into a single commercial offer**. A bundle allows you to sell and personalize related items together while keeping their configurations independent.

Depending on the scenario, a bundle can be:

- A **fixed kit**, where all items are required and purchased together.
- A **configurable kit**, which consists of a base product and additional products or accessories that the buyer can include or exclude.

**Examples:**

- A **marketing kit** that includes a **business card, letterhead, and envelope**.
- A **business card with accessories**, such as a **gift box, holder, or lamination**.

Each bundle item retains its own configuration, personalization process, and design variants. The bundle only defines the composition of the offer and the rules for purchasing its items together.

## Product specification

A **product specification** is a **legacy entity** that previous versions of Customer's Canvas used to describe a separate customizable product. A product specification roughly corresponds to what many e-commerce systems call a **simple product**: it represents a single specific product variant with a predefined design template and other settings.

Before PIM, a product specification was the primary entity for setting up customizable products. In the modern model, its role is performed by a combination of the following entities:

- [Product](#product)
- [Product variant](#product-variant)
- [Design variant](#design-variant)
- [Asset connection](#asset-connection)

## Related resources

- [PIM module](https://customerscanvas.com/docs/hub/admin-guide/pim.md) — Configure products and product variants in Customer's Canvas BackOffice.
- [Creating a PIM product](https://customerscanvas.com/docs/hub/dev-center/api/backoffice/creating-pim-products.md) — Create products using the BackOffice API.
- [Connecting a PIM product to assets](https://customerscanvas.com/docs/hub/dev-center/api/backoffice/connecting-assets.md) — Connect designs, mockups, and documents to products.
- [Connecting PIM products to e-commerce products](https://customerscanvas.com/docs/hub/dev-center/api/backoffice/connecting-ecommerce-products.md) — Create product references.
- [Managing PIM product variants](https://customerscanvas.com/docs/hub/dev-center/api/backoffice/managing-product-variants.md) — Set prices, availability, and SKUs programmatically.
- [Storefront API reference](https://customerscanvas.com/docs/hub/dev-center/api/storefront.md) — Retrieve product data using the Storefront API:
  - [`GET /api/storefront/v1/products/{id}/options`](https://customerscanvas.com/docs/hub/dev-center/api/storefront.md#tag/products/GetProductOptions)
  - [`GET /api/storefront/v1/products/{id}/links`](https://customerscanvas.com/docs/hub/dev-center/api/storefront.md#tag/products/GetProductLinks)
  - [`GET /api/storefront/v1/products/{id}/variants`](https://customerscanvas.com/docs/hub/dev-center/api/storefront.md#tag/products/GetProductVariants)
  - [`GET /api/storefront/v1/products/{id}/variant-designs`](https://customerscanvas.com/docs/hub/dev-center/api/storefront.md#tag/products/GetProductVariantDesigns)
  - [`GET /api/storefront/v1/products/{id}/variant-mockups`](https://customerscanvas.com/docs/hub/dev-center/api/storefront.md#tag/products/GetProductVariantMockups)
