# GENERATED FILE - DO NOT EDIT 
openapi: 3.0.3
info:
  title: Product Experience Manager Introduction
  description: |

    Product Experience Manager uses the PIM service to manage product information, hierarchies, and price books. Ideally, Product Experience Manager becomes the single source of truth for product data across your organization.

    In Commerce, the product data is stored separately from pricing, catalogs, and inventory. This separation means that you retrieve all product data only when you are managing product data and assets. Otherwise, when setting prices or managing inventory, you retrieve a reference to the product rather than the entire product, which makes the response times very fast.

    You also have the flexibility to create catalogs for different scenarios by combining hierarchies of products with a price book. Scenarios might include:

    - **Multiple geographical regions**. Display different catalogs in different regions with suitable pricing or combine product hierarchies from two different regions to display in a third region.
    - **Multiple channels**. Display different catalogs based on how a shopper accesses your store, such as through a mobile app or a web storefront.
    - **Direct to business versus direct to customers**. Offer different products and prices for business customers versus retail customers.
    - **Preferred customers**. Offer special pricing to preferred customers while displaying a standard price catalog to all other shoppers.
    - **Reward programs**. Enable reward programs where catalog prices drop after a certain spending level is reached.
    - **Product sales**. Offer sale items for a limited time.

    Scenarios are created by defining the context within which a catalog is displays. Contexts can be a customer ID, a channel, or any other user-defined tag that can be passed to the APIs from the front-end shopper experiences.
  version: 26.0427.7514672
  x-version-timestamp: 2026-04-27T14:43:38Z
servers:
  - url: https://euwest.api.elasticpath.com
    description: EU West Production Server
  - url: https://useast.api.elasticpath.com
    description: US East Production Server
security:
  - bearerAuth: []
tags:
  - name: Products
    description: |
      ```mdx-code-block
      import ProductsOverview from '/docs/partials/pxm/products/productsoverview.mdx';
      import ProductTypes from '/docs/partials/pxm/products/types.mdx';
      import ProductTags from '/docs/partials/pxm/products/tags.mdx';
      import PersonalProducts from '/docs/partials/pxm/products/personalizing.mdx';
      import ProductCatalogs from '/docs/partials/pxm/products/catalogs.mdx';
      import Overview from "/docs/partials/pxm/bundles/bundles.mdx";
      import ComponentOptions from "/docs/partials/pxm/bundles/components.mdx";
      import BundlePricing from "/docs/partials/pxm/bundles/bundlepricing.mdx";
      import DynamicBundles from "/docs/partials/pxm/bundles/dynamic.mdx";
      import BundlesBundles from "/docs/partials/pxm/bundles/bundlesof.mdx";

      <ProductsOverview />

      ### Product Types

      <ProductTypes />

      ### Personalizing Products

      <PersonalProducts />

      ### Products and Catalog Releases

      <ProductCatalogs />

      ### Bundles

      <Overview></Overview>

      ### Bundle Components and Options

      <ComponentOptions></ComponentOptions>

      ### Bundle Pricing

      <BundlePricing></BundlePricing>

      ### Dynamic Bundles

      <DynamicBundles></DynamicBundles>

      #### Creating Dynamic Bundles: An Overview

      The following steps are an overview of how to use dynamic bundles.

      1. Create your products using [**create a product**](/docs/api/pxm/products/create-product).
      1. Create a bundle using [**create a bundle**](/docs/api/pxm/products/create-product).
      1. 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.
      1. 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.
      1. Publish the bundle to your catalog using the [Publish a catalog](/docs/api/pxm/catalog/publish-release) endpoint so you can display the products to your shoppers in your storefront.
      1. 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](/docs/api/pxm/catalog/configure-by-context-product) endpoint to capture the shoppers selections. This updates the `bundle_configuration` with the product options chosen by a shopper.
      1. 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.
      1. When the shopper proceeds to checkout, the selected product options from the bundle are included in the order.

      ### Bundles of Bundles

      <BundlesBundles></BundlesBundles>

      #### Creating Bundles of Bundles: An Overview

      To create a bundle of bundles, simply add a bundle as a component to another bundle.

      1. Create your products using [**create a product**](/docs/api/pxm/products/create-product).
      1. Create all your child bundles using [**create a bundle**](/docs/api/pxm/products/create-product).
      1. [**Create a parent bundle**](/docs/api/pxm/products/create-product) 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.
      ```
  - name: Product Tags
    description: |
      ```mdx-code-block
      import ProductTags from '/docs/partials/pxm/products/tags.mdx';

      <ProductTags />
      ```
  - name: Extending Products with Templates
    description: |
      ```mdx-code-block
      import TemplatesOverview from '/docs/partials/pxm/templates/extendingproducts.mdx';

      <TemplatesOverview />
      ```
  - name: Bundle Component Products Relationships
    description: |
      With Product Experience Manager, you can create and manage bundles. A bundle is a purchasable product, consisting of one or more products that you want to sell together.

      You can create multiple components within a bundle. Each component must have at least one or more options. Each option is a product and a quantity.
  - name: Variations
    description: |
      ```mdx-code-block
      import VariationsOverview from '/docs/partials/pxm/variations/variationsoverview.mdx';
      import VariationsReusability from '/docs/partials/pxm/variations/variationsreusability.mdx';
      import ChildProducts from '/docs/partials/pxm/variations/childproducts.mdx';
      import BuildChildren from '/docs/partials/pxm/variations/buildchildproducts.mdx';
      import ProductModifiers from '/docs/partials/pxm/variations/productmodifiers.mdx';
      import PriceModifiers from "/docs/partials/pxm/variations/pricemodifiers.mdx";

      <VariationsOverview />

      ### Reusability

      <VariationsReusability />

      ### Child Products

      <ChildProducts />

      ### Building Child Products

      <BuildChildren />

      ### Sorting the Order of Variations and Options

      The `variation_matrix` object lists the variation IDs and variation option IDs and their corresponding product IDs that are generated when the variation and variation options are built with a product. The `variation_matrix` can then be added to your catalogs.

      The order of the variations in the `variation_matrix` is the order of the variations in the array when the variations were linked to the product. For example, the first variation in the `variation_matrix` corresponds to the first variation in the array, and so on. You can use the `sort_order`attribute to sort the order of your variation and variation options in the `variation_matrix` object. The sort order value is visible when you add the variations and variation options to your catalogs. You can then use the `sort_order` value to program your storefront to display the variations and variation options in the order that you want.

      Add the `sort_order` attribute to the body of your request and specify a `sort_order` value. A `sort_order` value must be a number. You can specify any numbers that you want.

      - 1, 2, 3, or 100, 90, 80, and so on.
      - Zero or negative numbers.

      You can set `sort_order` to either `null` or omit it entirely from the request if you wish to remove an existing `sort_order` attribute.

      :::caution

      - Commerce does not sort variations and variation options. You must program your storefront to sort the variations and variation options in the order that you want.
      - You must rebuild your products for the sort order changes to take effect. See [**Build Child Products**](#build-child-products).

      :::

      ### Product Modifiers

      <ProductModifiers />

      ### Price Modifiers

      <PriceModifiers />
      ```
  - name: Product File Relationships
    description: |
      Products are the items or services that you might want to sell in your store. In Product Experience Manager, products can also have associated rich media assets, such as product images or a file containing additional product details.

      You can do this using [Files API](/docs/api/pxm/files).

      Once you have created your files, you associate files with your products using the [Create Product-File Relationships API](/docs/api/pxm/products/create-product-file-relationships).
  - name: Product Image Relationships
    description: |
      Products are the items or services that you might want to sell in your store. In Product Experience Manager, products can also have associated rich media assets, such as product images or a file containing additional product details.

      You can do this using [Files API](/docs/api/pxm/files).

      Once you have created your files, you associate files with your products using the [Create Product Main Image Relationships API](/docs/api/pxm/products/create-product-main-image-relationships).
  - name: Product Import/Bulk Update
    description: |
      ```mdx-code-block
      import ProductImport from '/docs/partials/pxm/import/import.mdx';

      <ProductImport />
      ```

      #### Using Imported Main Image Files

      You can use the main images that you have previously uploaded to Commerce and assign them to your products when importing products to Commerce. You can do this by adding a `main_image_id` header to your `.csv` file. The ID you provide in `main_image_id` is the ID of a file that has already been uploaded to Commerce using create a file.

      #### Importing Custom Data (Flows)

      You can also create/update custom extension data in a `.csv` file by creating a header that includes the flow `ID` and the field `slug` in the following format: 

      template:*flowID*:*fieldSlug*.

      where:

      - `template` must be `template`.
      - `flowID` is the ID of the flow that contains the field whose data you want to create/update.
      - `fieldSlug` is the slug of the field whose data you want to create/update.

      In the following example, for a flow with ID `82c10a02-1851-4992-8ecb-d44f2782d09b` and a field with the slug `condition`:

      - the header is `template:82c10a02-1851-4992-8ecb-d44f2782d09b:condition`.
      - the updated custom data is `as-new`.

          | name | slug | sku | status | template:82c10a02-1851-4992-8ecb-d44f2782d09b:condition |
          | :--- | :--- | :--- | :--- | :--- |
          | BestEver Range | bestever-range-1a1a-30 | BE-Range-1a1a-30 | draft | as-new |

      #### Characteristics of CSV Import Files

      Product Import uses a [**Comma Separated Values (CSV)**](#characteristics-of-csv-import-files) file to import/update products, main image files, and custom extension data. 

      - Each row in a `.csv` file represents a product you want to create/update. 
      - Each file:
          - must not be larger than 50 megabytes. If a `.csv` file is larger than 50 megabytes, a `503 client read error` is displayed.
          - must not have more than 50,000 rows, including the header. If a CSV file exceeds 50,000 rows, an error is displayed, and the products are not imported.
          In other words, if you have a file with 50,000 rows that is larger than 50 megabytes, an error is displayed, and the products are not imported.
      - If you want to create/update more than 50,000 products or your `.csv` file is larger than 50 megabytes, you must have a separate `.csv` file and import each `.csv` file one at a time.
      - You can update existing products, including images, templates/flow fields, and entries. The entry in the `.csv` file must have a unique `id` and/or `external_ref` that matches the `id` and `external_ref` of the existing product you want to update. You may have both a unique `id` and `external_ref`, but you must have at least one.
      - You can add new products. For new products that you want to add, the entry in the `.csv` file must have an `external_ref` that does not match any existing products.

      The following table describes the headers that are supported.

      | Header | Required | Description  |
      |:---- |:---------|:--|
      | id                              | Optional | A unique product ID that is generated when you create the product. The `id` is used to look up products in the `.csv` file and matches them to the products in your storefront that you want to update.                                                                                                                                                                                                       |
      | external_ref                    | Optional | A unique attribute associated with a product. This could be an external reference from a separate company system, for example. The maximum length is 2048 characters.                                                                                                                                                                                                                                         |
      | name                            | Required | The name of a product.                                                                                                                                                                                                                                                                                                                                                                                        |
      | description                     | Required | A description for a product. You can include quotes in your product description, if you want to emphasize a word, for example. To do this, put quotes around the product description. For example, "This product description describes my "product" and the product "version"."                                                                                                                               |
      | slug                            | Required | A label for the product that is used in the URL paths. A slug can contain any combination of letters, numbers, periods, hyphens, and underscores. NO spaces or other characters are allowed. By default, the product name is used as the slug.                                                                                                                                                                |
      | status                          | Required | The status of a product, either `Draft` or `Live`.                                                                                                                                                                                                                                                                                                                                                            |
      | commodity_type                  | Required | The commodity type, either `physical` or `digital`.                                                                                                                                                                                                                                                                                                                                                           |
      | upc_ean                         | Optional | The universal product code or european article number of the product.                                                                                                                                                                                                                                                                                                                                         |
      | mpn                             | Optional | The manufacturer part number of a product.                                                                                                                                                                                                                                                                                                                                                                    |
      | sku                             | Optional | The unique stock keeping unit of the product.                                                                                                                                                                                                                                                                                                                                                                 |
      | tags                             | Optional | The product tags used to store or assign a key word against a product. A product can have up to 20 product tags. A product tag can be up to 255 characters. See [**Product Tags**](/docs/api/pxm/products/product-tags).
      | main_image_id                   | Optional | Specifies a unique ID of a main image file for a product. You can include a `main_image_id` for your products for images that are already uploaded to Commerce. See [**Using Main Image Files**](#importing-custom-data-flows).                                                                                                                                                                                        |
      | `template:<flowID>:<fieldSlug>` | Optional | You can also specify custom extension data in the CSV by specifying the flow `ID` or `slug` and the field `name`. For example, `template:<flowSlug>:<fieldName>` format. See [**Importing Custom Data (Flows)**](#importing-custom-data-flows). |
  - name: Product Export
    description: |
      ```mdx-code-block
      import ProductExport from '/docs/partials/pxm/import/export.mdx';

      <ProductExport />
      ```

      ### Characteristics of Exporting Products

      - Product exports are an asynchronous operation. When you send a request to the Export API, it triggers an asynchronous job to build the `.csv` file containing the product entries.
      - Jobs are processed one at a time. You can continue to send product export requests, but those jobs are queued. In other words, Commerce looks for any jobs that have a status of PENDING and starts the job with the earliest created date. This process is repeated until all jobs are processed. See [**Jobs**](/docs/api/pxm/products/jobs).
      - The Export API response includes a job resource. In the response, you can verify the job status; if the status is successful, the response includes a link to the location where the `.csv` file is stored. See [**Product Export CSV File**](#product-export-csv-file). A single CSV file contains 10,000 rows, excluding the header. If you are exporting 50,000 products, the job endpoint response contains links to five `.csv` files; each `.csv` file including 10,000 products.
      - You might have specified custom extension data in a `.csv` file when you imported the products. These modifications are all exported. So, when you send a request to the Export API, the `.csv` file, included in the Job endpoint response, reflects any changes that you have made.
      - You cannot export product bundles.

      ### Product Export CSV File

      The Product Export API generates a Comma Separated Values (CSV) file that you can use to import/update products, main image files, and custom extension data. 

      The `.csv` file is:

       - Comma-separated.
       - Header-based.
         - Header attributes must be the same as the product attributes.
         - Header names can be in any order.
       - Each row after the first line represents a single product.

      The following table describes the headers that are supported.

      | Header                           | Required | Description |                                                             
      |:---------------------------------|:---------|:-----------------------------------------------------|
      | id                               | Optional | A unique product ID that is generated when you create the product. The `id` is used to look up products in the `.csv` file and matches them to the products in your storefront that you want to update.                                                    |
      | external_ref                     | Optional | A unique attribute associated with a product. This could be an external reference from a separate company system, for example. The maximum length is 2048 characters.  |                                                                                          
      | name                             | Required | The name of a product.     |                                                                              
      | description                      | Required | A description for a product. You can include quotes in your product description, if you want to emphasize a word, for example. To do this, put quotes around the product description. For example, "This product description describes my "product" and the product "version"." |
      | slug                             | Required | A label for the product that is used in the URL paths. A slug can contain any combination of letters, numbers, periods, hyphens, and underscores. NO spaces or other characters are allowed. By default, the product name is used as the slug.                |
      | status                           | Required | The status of a product, either `Draft` or `Live`.    |                                                  
      | commodity_type                   | Required | The commodity type, either `physical` or `digital`.    |                                                 
      | upc_ean                          | Optional | The universal product code or european article number of the product.     |                               
      | mpn                              | Optional | The manufacturer part number of a product.       |                                                        
      | sku                              | Optional | The unique stock keeping unit of the product.   |   
      | tags                             | Optional | The product tags used to store or assign a key word against a product. A product can have up to 20 product tags. A product tag can be up to 255 characters. See [**Product Tags**](/docs/api/pxm/products/product-tags
      ).                                                   |
      | main_image_id                    | Optional | Specifies a unique ID of a main image file for a product. See [Exporting Main Image Files](#exporting-main-image-files).  |                                                                                                                       
      | `_created_at`                      | Optional| The date and time a product was created. **Note**: This field does not populate any data; it is provided solely for informational purposes.      |                                                                                                               
      | `_updated_at`                      | Optional | The date and time a product was updated. **Note**: This field does not populate any data; it is provided solely for informational purposes.        |                                                                                                             
      | `template:<templateID>:created_at` | Optional | The date and time a template was created. **Note**: This field does not populate any data; it is provided solely for informational purposes.         |                                                                                                           
      | `template:<templateID>:updated_at` | Optional | The date and time a template was updated. **Note**: This field does not populate any data; it is provided solely for informational purposes.      |                                                                                                              
      | `template:<flowID>:<fieldName>`  | Optional | Custom extension data includes the flow `ID` or `slug` and the field `name`. See [Exporting Custom Data (Flows)](#exporting-custom-data-flows).   |                                                                                                              

      ### Exporting Main Image Files

      The main images that you have previously uploaded Commerce are exported. A `main_image_id` header is added to your `.csv` file. The ID in `main_image_id` is the ID of a file that has already been uploaded to Commerce using [create a file](/docs/api/pxm/files/create-a-file).

      ### Exporting Custom Data (Flows)

      Custom extension data is exported in a `.csv` file by creating a header that includes the flow `ID` or `slug` and the field `name` as shown below:

      - `template:<flowSlug>:<fieldName>`
      - `template:<flowID>:<fieldName>`

      where:

      - `template` must be `template`.
      - one of the following for the template that contains the field whose data you want to export:
        - `flowID` is the ID of the flow.
        - `flowSlug` is the flow slug.
      - `fieldName` is the name of the field whose data you want to export.

      In the following example, for a flow with ID `82c10a02-1851-4992-8ecb-d44f2782d09b` and a field with the name `condition`:

      - the header is `template:82c10a02-1851-4992-8ecb-d44f2782d09b:condition`.
      - the updated custom data is `as-new`.

      | name | slug | sku | status | template:82c10a02-1851-4992-8ecb-d44f2782d09b:condition |
      | :--- | :--- | :--- | :--- | :--- |
      | BestEver Range | bestever-range-1a1a-30 | BE-Range-1a1a-30 | draft | as-new |
  - name: Hierarchies
    description: |
      ```mdx-code-block
      import HierarchyOverview from '/docs/partials/pxm/hierarchies/hierarchies.mdx';
      import HierarchyCatalog from '/docs/partials/pxm/hierarchies/hierarchycatalogs.mdx';

      <HierarchyOverview />

      ## Creating Hierarchies and Nodes

      You can create the **Major Appliances** hierarchy by performing the following steps.

      1. Using [**Create a Hierarchy**](/docs/api/pxm/products/create-hierarchy), create a hierarchy whose name is **Major Appliances**. Each hierarchy has a hierarchy ID. In other words, the hierarchy ID is the ID of the root node.
      1. Using [**Create a Node in a hierarchy**](/docs/api/pxm/products/create-node), create the following child nodes. When you create a node in a hierarchy, by default, the node is a child of the root node. Specify `sort_order` to configure the order of the nodes.
         - **Ranges**
         - **Refrigerators**
         - **Dishwashers**
      1. Using [**Create a Node in a hierarchy**](/docs/api/pxm/products/create-node), create the **Electric Ranges** node, specifying **Ranges** as the parent node.
      1. Using [**Create a Node in a hierarchy**](/docs/api/pxm/products/create-node), create the following nodes, specifying **Electric Ranges** as the parent node.
         - **Electric Ranges 24ˮ**
         - **Electric Ranges 30ˮ**
         - **Double Oven**
      1. Using [**Create a Node in a hierarchy**](/docs/api/pxm/products/create-node), create the **Gas Ranges** node, specifying **Ranges** as the parent node.
      1. Using [**Create a Node in a hierarchy**](/docs/api/pxm/products/create-node), create the following nodes, specifying **Gas Ranges** as the parent node.
         - **Gas Ranges 24ˮ**
         - **Gas Ranges 30ˮ**
         - **Gas Ranges 32"**
         - **Double Oven**
      1. Using [**Create a Node in a hierarchy**](/docs/api/pxm/products/create-node), create the following nodes, specifying **Dishwashers** as the parent node.
          - **Built-in**
          - **Standalone**

      ## Hierarchies and Catalogs

      <HierarchyCatalog />

      ```
  - name: Jobs
    description: |
      ```mdx-code-block
      import ProductJobs from '/docs/partials/pxm/jobs/jobs.mdx';

      <ProductJobs />
      ```
paths:
  /pcm/jobs:
    get:
      summary: Get All Jobs
      description: The jobs endpoints displays the status of a number of endpoints that function as jobs, for example, product import and export, price book import, building child products, and duplicating hierarchies.
      operationId: getAllJobs
      tags:
        - Jobs
      responses:
        '200':
          description: Returns all the jobs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/multi'
              examples:
                completed:
                  summary: Get all jobs
                  $ref: '#/components/examples/multi'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/jobs/{jobID}:
    get:
      summary: Get a Job
      operationId: getJob
      tags:
        - Jobs
      parameters:
        - $ref: '#/components/parameters/job_id'
      responses:
        '200':
          description: Returns a job with the following attributes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single'
              examples:
                started:
                  summary: Started Job
                  $ref: '#/components/examples/started'
                successful:
                  summary: Product Import Job
                  $ref: '#/components/examples/successful'
                product-export:
                  summary: Product Export Job
                  $ref: '#/components/examples/product-export'
                hierarchy-duplicate:
                  summary: Hierarchy Duplicate Job
                  $ref: '#/components/examples/hierarchy-duplicate'
                build-child-products:
                  summary: Build Child Products Job
                  $ref: '#/components/examples/build-child-products'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/jobs/{jobID}/cancel:
    post:
      summary: Cancel a Job
      description: |
        The jobs endpoints display the status of a number of endpoints that function as jobs, for example, product import and export, and duplicating hierarchies.

        Jobs are processed one at a time. You can continue to send job requests, but those jobs are queued. In other words, Commerce looks for any jobs that have a status of PENDING and starts the job with the earliest created date. If you decide that a specific job needs to be prioritized over another, you can cancel the less critical job using the `Cancel a job` endpoint. You can only cancel jobs whose status is PENDING.
      operationId: cancelJob
      tags:
        - Jobs
      requestBody:
        content:
          application/json:
            schema:
              type: object
      parameters:
        - $ref: '#/components/parameters/job_id'
      responses:
        '200':
          description: Successfully cancelled job
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single'
              examples:
                cancelled:
                  summary: Cancelled Job
                  $ref: '#/components/examples/cancelled'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/jobs/{jobID}/errors:
    get:
      summary: Get Job Errors
      operationId: getJobErrors
      tags:
        - Jobs
      parameters:
        - $ref: '#/components/parameters/job_id'
      responses:
        '200':
          description: Successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errors'
              examples:
                errors:
                  summary: Errors Returned
                  $ref: '#/components/examples/errors'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/products:
    post:
      summary: Create a product or bundle
      description: |
        Creates a product or bundle with the attributes that are defined in the body.

        #### Product Types

        Product Experience Manager automatically assigns types to the products you create. You can filter on product types. 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. 

        See [**Product Types**](/docs/api/pxm/products/products#product-types).

        #### Product Tags

        You can use product tags to store or assign a key word against a product or service that you sell in your store. The product tag can then be used to describe or label that product. Product tags represent similarities between products who do not share the same attributes. Using product tags means that you can group your products together, for example, by brand, category, subcategory, colors, types, industries, and so on. 

        See [**Product Tags**](/docs/api/pxm/products/product-tags).

        #### 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 `custom_inputs` attribute.

        When configuring the `custom_inputs` attribute:

        - You can rename `input` to something more representative of the input that shoppers are adding, for example, `message` or `front`.
        - `name` is the name that is displayed in your storefront.
        - You can add validation rules. For example, the input field must be a `string` and/or up to 255 characters in length. The limit is 255 characters.
        - You can specify if the input field is required.

        #### Curating Products

        You can curate the products in a node. Product curation allows you to promote specific products within each node of your hierarchies, enabling you to create unique product collections in your storefront. For example, you may find you have an abundance of cotton T-Shirts and you want to promote these products to the top of the product list. When a shopper navigates to T-shirts, the cotton T-Shirts are displayed first. See [**Update a node**](/docs/api/pxm/products/update-node).

        #### Bundles

        With Product Experience Manager, you can use the products API to create and manage bundles. A bundle is a purchasable product, consisting of one or more products that you want to sell together. 

        See [**Bundles**](/docs/api/pxm/products/products#bundles).
      operationId: createProduct
      tags:
        - Products
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/create_product_request'
            examples:
              create-product:
                summary: Create a base product
                $ref: '#/components/examples/product_request'
              build-rules:
                summary: Create a base product, associate variations, configure build rules
                $ref: '#/components/examples/build_rules_request'
              sku-bundles:
                summary: SKU-based bundles
                $ref: '#/components/examples/bundle_sku_based_request'
              sku-less-bundles:
                summary: SKU-less bundles
                $ref: '#/components/examples/bundle_sku_less_request'
              bundle-quantity-config:
                summary: Create Bundle with Quantity Configuration
                description: Create a bundle where each selected option can have a configurable quantity. In this example, syrup is optional (0-2 types) with up to 3 pumps per syrup, and exactly one coffee type must be selected.
                $ref: '#/components/examples/create_bundle_with_quantity_config'
      responses:
        '201':
          description: Creates a product with the following attributes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_product_response'
              examples:
                created-product:
                  summary: Create a base product
                  $ref: '#/components/examples/create_single_product_response'
                build-rules:
                  summary: Create a base product, associate variations, configure build rules
                  $ref: '#/components/examples/create_build_rules_response'
                bundle-quantity-config:
                  summary: Create Bundle with Quantity Configuration
                  description: A bundle where each selected option can have a configurable quantity. In this example, syrup is optional (0-2 types) with up to 3 pumps per syrup, and exactly one coffee type must be selected.
                  $ref: '#/components/examples/bundle_with_quantity_config_response'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    get:
      summary: Get all products
      description: |
        Retrieves a list of all your products in the Product Experience Manager system.

        You can also use `include` to retrieve top-level resources, such as files or images, and key attribute data, such as SKU or slug for component products in a product bundle. With this option, you can get more information about the products in a product bundle in your store front, improving the buying experience for your shoppers.

        #### Pagination

        This endpoint supports offset-based pagination using `page[offset]` and `page[limit]` query parameters.

        :::caution Planned pagination changes — on or after 1 June 2026

        The pagination links returned by this endpoint currently differ from the Elastic Path Commerce Cloud platform standard. Specifically, the `current` link is not returned, `first`/`last` are not always present, `prev` is incorrectly omitted on the second page, and `next` is incorrectly omitted on the second-to-last page.

        On or after **1 June 2026**, this endpoint will be updated so that `current` and `first` are always present, `last` is present on every page except the final page, `next` is present on every page except the last, and `prev` is present on every page except the first. See the [links](/docs/api/pxm/products/get-all-products#links) schema for full details.

        If your integration iterates through pages using these links, please verify that it will handle the updated behaviour correctly before this date.

        :::

        #### Filtering

         Many Commerce API endpoints support filtering. The general syntax is described in [**Filtering**](/guides/Getting-Started/filtering).

         The following attributes and operators are supported.

        | Operator                  | Attribute                                                                                                                                               | Description                                                                                                                                                                                                                                             | Example                                          |
        | :------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :----------------------------------------------- |
        | `eq`                      | `id`, `sku`, `slug`, `upc_ean`, `manufacturer_part_num`, `name`, `templates`, `commodity_type`, `owner`, `product_types`, `parent_id`, `tags`, `status`, `has_nodes (false only)`, `created_at`, `updated_at`, `external_ref`, `description` | Equals. Checks if the values of two operands are equal. If they are, the condition is true. For `product_types`, you can only specify one product type. **Note:** `has_nodes` can only be filtered as `false`. | `?filter=eq(name,some-name)` |
        | `like`                    | `sku`, `slug`, `upc_ean`, `manufacturer_part_num`, `name`, `tags`, `description`, `external_ref`                                                        | Like. Checks if the operand contains the specified string. Wildcards are supported.                                                                                                                                                                     | `?filter=like(name,*some-name*)`                 |
        | `in`                      | `id`, `name`, `sku`, `slug`, `upc_ean`, `manufacturer_part_num`, `product_types`, `parent_id`, `tags`, `external_ref`                                   | Checks if the values are included in the specified list. If they are, the condition is true. For `product_types`, you can specify more than one product type.                                                                                           | `?filter=in(id,some-id)`                         |
        | `gt`                      | `id`, `created_at`, `updated_at`, `external_ref`                                                                                                        | Greater than. Checks if the value of the field is greater than the given value.                                                                                                                                                                         | `?filter=gt(updated_at,2024-01-01T00:00:00Z)`    |
        | `ge`                      | `id`, `created_at`, `updated_at`, `external_ref`                                                                                                        | Greater than or equal to. Checks if the value of the field is greater than or equal to the given value.                                                                                                                                                 | `?filter=ge(created_at,2023-01-01T00:00:00Z)`    |
        | `lt`                      | `id`, `created_at`, `updated_at`, `external_ref`                                                                                                        | Less than. Checks if the value of the field is less than the given value.                                                                                                                                                                               | `?filter=lt(updated_at,2025-01-01T00:00:00Z)`    |
        | `le`                      | `id`, `created_at`, `updated_at`, `external_ref`                                                                                                        | Less than or equal to. Checks if the value of the field is less than or equal to the given value.                                                                                                                                                       | `?filter=le(created_at,2022-01-01T00:00:00Z)`    |
        | `eq` (extensions)         | `extensions.book.isbn`                                                                                                                                  | Filters using a nested extension field.                                                                                                                                                                                                                 | `?filter=eq(extensions.book.isbn,1765426)`       |
        | `eq` (shopper_attributes) | `shopper_attributes.color`                                                                                                                              | Filters using a shopper custom attribute field.                                                                                                                                                                                                         | `?filter=eq(shopper_attributes.color,red)`       |
        | `eq` (admin_attributes)   | `admin_attributes.warehouse`                                                                                                                            | Filters using an admin custom attribute field.                                                                                                                                                                                                          | `?filter=eq(admin_attributes.warehouse,US-EAST)` |
      operationId: getAllProducts
      tags:
        - Products
      parameters:
        - $ref: '#/components/parameters/page_offset'
        - $ref: '#/components/parameters/page_limit'
        - $ref: '#/components/parameters/filterproduct'
        - $ref: '#/components/parameters/include'
      responses:
        '200':
          description: Returns a list of all products.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/multi_product_response'
              examples:
                list-products:
                  $ref: '#/components/examples/multi_product_response'
        '400':
          $ref: '#/components/responses/bad_request'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/products/import:
    post:
      summary: Import Products
      description: |

        You can use the Product Import API to:

        - Add new products, including:

            - main image files. See [Importing Main Image Files](/docs/api/pxm/products/product-import-bulk-update#using-imported-main-image-files).
            - custom data. See [Importing custom data](/docs/api/pxm/products/product-import-bulk-update#importing-custom-data-flows).
            - Make bulk updates to existing products.

        You cannot use product import to:

        - Delete existing products.
        - Import product bundles.

        The Product Import API uses a Comma Separated Values (CSV) file to import products, main image files, custom extension data, and admin and shopper attributes. Each row in a .csv file represents a product you want to create/update. See an [example file](/assets/pim_product_import_example.csv).

        Each file can have 50,000 rows, including the header. If a CSV file exceeds 50,000 rows, an error is displayed, and the products are not imported. A CSV file must not be larger than 50 megabytes. If a CSV file is larger than 50 megabytes, a `503 client read` error is displayed.

        If you want to create/update more than 50,000 products or your CSV file is larger than 50 megabytes, you must have a separate CSV file and import each CSV file one at a time.

        See [**Characteristics of CSV Files**](/docs/api/pxm/products/product-import-bulk-update#characteristics-of-csv-import-files).

        ## Custom Attributes in CSV

        You can set custom attributes on products using CSV columns with the prefixes `shopper_attributes.` or `admin_attributes.` followed by the attribute key name. For example:

        - `shopper_attributes.color` sets the `color` key on `shopper_attributes`.
        - `admin_attributes.cost_of_goods` sets the `cost_of_goods` key on `admin_attributes`.

        **Partial updates:** When updating an existing product, only the attribute keys present as columns in the CSV are affected. Attribute keys not included as columns are left unchanged.

        **Removing an attribute key:** To explicitly delete an attribute key from an existing product, set the cell value to `__REMOVE_ATTRIBUTE__`. This special sentinel value instructs the importer to remove that key from the product's custom attributes. An empty cell value is treated as a literal empty string, not a deletion.

        **New products:** For new products being created via import, any column whose value is `__REMOVE_ATTRIBUTE__` is ignored (the key is not created).
      operationId: importProducts
      tags:
        - Product Import/Bulk Update
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  description: The file you want to upload. Ensure that the file format is Comma Separated Values (CSV).
                  type: string
                  format: binary
                  example: UploadFile
            examples:
              upload_image:
                summary: Upload Image
                value:
                  file: '@path/to/file'
      responses:
        '201':
          description: Import started
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single'
              examples:
                pending:
                  summary: Successful Job
                  $ref: '#/components/examples/import'
        '400':
          $ref: '#/components/responses/bad_request'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
      parameters:
        - name: locale
          in: query
          description: |
            Specifies the locale to assist in parsing flow entry date values.

            - If a supported locale is provided, the system attempts to interpret dates using that locale's conventions. The import job fails if a date does not match one of the supported locale's formats.
            - If this parameter is omitted, or if the value provided is not on the supported list, the system proceeds using its default parsing logic. An unsupported locale is ignored and does not cause a failure.

            **Supported Locales and Date Formats:**

            **`en-US`**
            - `1/2/2006 15:04:05`
            - `01/02/2006 15:04:05`
            - `1/2/06 15:04`

            **`en-GB`**
            - `2/1/2006 15:04:05`
            - `02/01/2006 15:04:05`
            - `2/1/06 15:04`

            **`en-CA`**
            - `2/1/2006 15:04:05`
            - `02/01/2006 15:04:05`
            - `2/1/06 15:04`     

            Additional locales and date formats can be added upon request.
          required: false
          schema:
            type: string
            enum:
              - en-US
              - en-GB
              - en-CA
          example: en-US
  /pcm/products/export:
    post:
      summary: Export Products
      description: |

        The Export API is available to make bulk updates to products in Product Experience Manager. You might also export products for your personal requirements. 
         
        The Export API builds a CSV file containing the product entries. A CSV file can contain up to 50,000 product entries. If you have more than 50,000 product entries, then another CSV file is created and so on, until all your products are exported.

        The Job endpoint response specifies the location where the CSV file is stored. See [Characteristics of CSV Files](/docs/api/pxm/products/product-export#characteristics-of-exporting-products).

        ### Custom Attributes in Exported CSV

        Exported CSV files include custom attribute columns using the prefixes `shopper_attributes.` and `admin_attributes.` followed by the attribute key name. For example, a product with `admin_attributes: {cost_of_goods: "42.0"}` produces a column `admin_attributes.cost_of_goods` in the exported file.

        You can select specific attribute columns to include in the export using the `columns.include` parameter. You may specify individual keys (for example, `admin_attributes.cost_of_goods`) or use a wildcard to include all keys of a given type (for example, `admin_attributes.*`). You cannot combine a wildcard and individual keys for the same attribute type in a single export request.

        ### Exporting Selected Columns
        Product exports support the ability to select a subset of columns to be included in the generated .csv file. This allows you to export only the data you need, making it easier to work with smaller, more focused datasets.

         To specify the columns you want to include in the export, use the columns.include parameter in the request body of this endpoint. This parameter accepts an array of strings, where each string represents the name of a product attribute or a flow field.

         #### Specifying Flow Field Columns:
         
         The format for specifying flow field columns depends on the useTemplateSlugs setting:
         
         * useTemplateSlugs: `true`: Specify flow field columns using the format: `products(<flow_slug>):<field_name>`. For example: `products(my_flow):my_field`.
         * useTemplateSlugs: `false` (default): Specify flow field columns using the format: `template:<flow_id>:<field_name>`. For example: `template:82c10a02-1851-4992-8ecb-d44f2782d09b:my_field`.
         
         #### Mandatory Fields:

         To ensure successful re-importing of product data, the following fields are always included in the export, regardless of the columns.include parameter:
           
           * id
           * name
           * sku
           * external_ref
           * commodity_type
         
         If the `columns.include` parameter is not provided in the request, the system will export all available product fields.
         
         ### Filtering
         
        The following attributes and operators are supported.

        | Operator                  | Attribute                                                                                                                                               | Description                                                                                                                                                                                                                                             | Example                                          |
         | :------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :----------------------------------------------- |
         | `eq`                      | `id`, `sku`, `slug`, `upc_ean`, `manufacturer_part_num`, `name`, `templates`, `commodity_type`, `owner`, `product_types`, `parent_id`, `tags`, `status`, `has_nodes (false only)`, `created_at`, `updated_at`, `external_ref`, `description` | Equals. Checks if the values of two operands are equal. If they are, the condition is true. For `product_types`, you can only specify one product type. **Note:** `has_nodes` can only be filtered as `false`. | `?filter=eq(name,some-name)` |
         | `like`                    | `sku`, `slug`, `upc_ean`, `manufacturer_part_num`, `name`, `tags`, `description`, `external_ref`                                                        | Like. Checks if the operand contains the specified string. Wildcards are supported.                                                                                                                                                                     | `?filter=like(name,*some-name*)`                 |
         | `in`                      | `id`, `name`, `sku`, `slug`, `upc_ean`, `manufacturer_part_num`, `product_types`, `parent_id`, `tags`, `external_ref`                                   | Checks if the values are included in the specified list. If they are, the condition is true. For `product_types`, you can specify more than one product type.                                                                                           | `?filter=in(id,some-id)`                         |
         | `gt`                      | `id`, `created_at`, `updated_at`, `external_ref`                                                                                                        | Greater than. Checks if the value of the field is greater than the given value.                                                                                                                                                                         | `?filter=gt(updated_at,2024-01-01T00:00:00Z)`    |
         | `ge`                      | `id`, `created_at`, `updated_at`, `external_ref`                                                                                                        | Greater than or equal to. Checks if the value of the field is greater than or equal to the given value.                                                                                                                                                 | `?filter=ge(created_at,2023-01-01T00:00:00Z)`    |
         | `lt`                      | `id`, `created_at`, `updated_at`, `external_ref`                                                                                                        | Less than. Checks if the value of the field is less than the given value.                                                                                                                                                                               | `?filter=lt(updated_at,2025-01-01T00:00:00Z)`    |
         | `le`                      | `id`, `created_at`, `updated_at`, `external_ref`                                                                                                        | Less than or equal to. Checks if the value of the field is less than or equal to the given value.                                                                                                                                                       | `?filter=le(created_at,2022-01-01T00:00:00Z)`    |
         | `eq` (extensions)         | `extensions.book.isbn`                                                                                                                                  | Filters using a nested extension field.                                                                                                                                                                                                                 | `?filter=eq(extensions.book.isbn,1765426)`       |
         | `eq` (shopper_attributes) | `shopper_attributes.color`                                                                                                                              | Filters using a shopper custom attribute field.                                                                                                                                                                                                         | `?filter=eq(shopper_attributes.color,red)`       |
         | `eq` (admin_attributes)   | `admin_attributes.warehouse`                                                                                                                            | Filters using an admin custom attribute field.                                                                                                                                                                                                          | `?filter=eq(admin_attributes.warehouse,US-EAST)` |
      operationId: exportProducts
      tags:
        - Product Export
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                data:
                  type: object
                  required:
                    - type
                  properties:
                    attributes:
                      type: object
                      properties:
                        columns:
                          type: object
                          properties:
                            include:
                              type: array
                              items:
                                type: string
                    type:
                      type: string
                      example: product-export
            examples:
              product-export-columns:
                summary: Export only a subset of columns when useTemplateSlugs is `false`
                value:
                  data:
                    type: product-export
                    attributes:
                      columns:
                        include:
                          - description
                          - template:a1b2c3d4-e5f6-7890-1234-567890abcdef:isbn
              product-export-columns-template-slugs:
                summary: Export only a subset of columns when useTemplateSlugs is `true`
                value:
                  data:
                    type: product-export
                    attributes:
                      columns:
                        include:
                          - description
                          - products(book):isbn
      responses:
        '201':
          description: Export started
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single'
              examples:
                pending:
                  summary: Successful Job
                  $ref: '#/components/examples/export'
        '400':
          $ref: '#/components/responses/bad_request'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
      parameters:
        - $ref: '#/components/parameters/useTemplateSlugs'
        - $ref: '#/components/parameters/filterexport'
  /pcm/products/{productID}:
    get:
      summary: Get a product
      description: |
        Returns a product by its identifier. 

        You can also use `include=component_products` to retrieve top-level resources, such as files or images, and key attribute data, such as SKU or slug for component products in a product bundle. With this option, you can get more information about the products in a product bundle in your store front, improving the buying experience for your shoppers.
      operationId: getProduct
      parameters:
        - $ref: '#/components/parameters/product_id'
        - $ref: '#/components/parameters/include'
      tags:
        - Products
      responses:
        '200':
          description: Returns a product by its identifier.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_product_response'
              examples:
                get-product:
                  summary: Product
                  $ref: '#/components/examples/get_single_product_response'
                get-product-bundle:
                  summary: Bundle
                  $ref: '#/components/examples/get_bundle_response'
                get-product-bundle-quantity-config:
                  summary: Bundle with Quantity Configuration
                  description: Retrieve a bundle where each selected option can have a configurable quantity. In this example, syrup is optional (0-2 types) with up to 3 pumps per syrup, and exactly one coffee type must be selected.
                  $ref: '#/components/examples/bundle_with_quantity_config_response'
                get-product-component-parent:
                  summary: Parent Product
                  $ref: '#/components/examples/get_parent_product_response'
                get-product-component-child:
                  summary: Child Product
                  $ref: '#/components/examples/get_child_product_response'
                get-product-component-products:
                  summary: Component Product
                  $ref: '#/components/examples/get_component_product_response'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '500':
          $ref: '#/components/responses/internal'
    put:
      summary: Update a product or bundle
      description: 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.
      operationId: updateProduct
      parameters:
        - $ref: '#/components/parameters/product_id'
      tags:
        - Products
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/update_product_request'
            examples:
              update-product:
                summary: Update a base product
                $ref: '#/components/examples/update_product_request'
              update-product-build-rules:
                summary: Update a base product and build rules
                $ref: '#/components/examples/update_build_rules_request'
              update-product-custom-inputs:
                summary: Update using custom_inputs
                description: You can allow your shoppers to add custom text to a product when checking out their carts. This is useful, for example, if you have a product like a T-shirt that can be personalized. You can do this using the custom_inputs attribute when creating your products.
                $ref: '#/components/examples/update_custom_inputs_request'
              update-product-bundle:
                summary: Update a bundle
                $ref: '#/components/examples/update_bundle_request'
              update-product-bundle-quantity-config:
                summary: Update Bundle with Quantity Configuration
                description: Update a bundle where each selected option can have a configurable quantity. In this example, syrup is optional (0-2 types) with up to 3 pumps per syrup, and exactly one coffee type must be selected.
                $ref: '#/components/examples/update_bundle_with_quantity_config'
      responses:
        '200':
          description: Updates a product with the following attributes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_product_response'
              examples:
                updated-product:
                  summary: Update a base product
                  $ref: '#/components/examples/update_single_product_response'
                build-rules:
                  summary: Update a base product, configure build rules
                  $ref: '#/components/examples/update_build_rules_response'
                update-product-custom-inputs:
                  summary: Update using custom_inputs
                  $ref: '#/components/examples/update_custom_inputs_response'
                update-product-bundle:
                  summary: Update a bundle
                  $ref: '#/components/examples/update_bundle_response'
                update-product-bundle-quantity-config:
                  summary: Update Bundle with Quantity Configuration
                  description: A bundle where each selected option can have a configurable quantity. In this example, syrup is optional (0-2 types) with up to 3 pumps per syrup, and exactly one coffee type must be selected.
                  $ref: '#/components/examples/bundle_with_quantity_config_response'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    delete:
      summary: Delete a product
      description: |
        Deletes the specified product.

        You cannot delete a product if it is part of a bundle. You must first delete the bundle before you delete the product.
      operationId: deleteProduct
      parameters:
        - $ref: '#/components/parameters/product_id'
      tags:
        - Products
      responses:
        '204':
          description: Deletes the specified product.
        '403':
          $ref: '#/components/responses/forbidden'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/products/attach_nodes:
    post:
      summary: Attach multiple nodes
      description: |
        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).
         
         The following attributes and operators are supported.
         
         | Operator                  | Attribute                                                                                                                                               | Description                                                                                                                                                                                                                                             | Example                                          |
         | :------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :----------------------------------------------- |
         | `eq`                      | `id`, `sku`, `slug`, `upc_ean`, `manufacturer_part_num`, `name`, `templates`, `commodity_type`, `owner`, `product_types`, `parent_id`, `tags`, `status`, `has_nodes (false only)`, `created_at`, `updated_at`, `external_ref`, `description` | Equals. Checks if the values of two operands are equal. If they are, the condition is true. For `product_types`, you can only specify one product type. **Note:** `has_nodes` can only be filtered as `false`. | `?filter=eq(name,some-name)` |
         | `like`                    | `sku`, `slug`, `upc_ean`, `manufacturer_part_num`, `name`, `tags`, `description`, `external_ref`                                                        | Like. Checks if the operand contains the specified string. Wildcards are supported.                                                                                                                                                                     | `?filter=like(name,*some-name*)`                 |
         | `in`                      | `id`, `name`, `sku`, `slug`, `upc_ean`, `manufacturer_part_num`, `product_types`, `parent_id`, `tags`, `external_ref`                                   | Checks if the values are included in the specified list. If they are, the condition is true. For `product_types`, you can specify more than one product type.                                                                                           | `?filter=in(id,some-id)`                         |
         | `gt`                      | `id`, `created_at`, `updated_at`, `external_ref`                                                                                                        | Greater than. Checks if the value of the field is greater than the given value.                                                                                                                                                                         | `?filter=gt(updated_at,2024-01-01T00:00:00Z)`    |
         | `ge`                      | `id`, `created_at`, `updated_at`, `external_ref`                                                                                                        | Greater than or equal to. Checks if the value of the field is greater than or equal to the given value.                                                                                                                                                 | `?filter=ge(created_at,2023-01-01T00:00:00Z)`    |
         | `lt`                      | `id`, `created_at`, `updated_at`, `external_ref`                                                                                                        | Less than. Checks if the value of the field is less than the given value.                                                                                                                                                                               | `?filter=lt(updated_at,2025-01-01T00:00:00Z)`    |
         | `le`                      | `id`, `created_at`, `updated_at`, `external_ref`                                                                                                        | Less than or equal to. Checks if the value of the field is less than or equal to the given value.                                                                                                                                                       | `?filter=le(created_at,2022-01-01T00:00:00Z)`    |
         | `eq` (extensions)         | `extensions.book.isbn`                                                                                                                                  | Filters using a nested extension field.                                                                                                                                                                                                                 | `?filter=eq(extensions.book.isbn,1765426)`       |
         | `eq` (shopper_attributes) | `shopper_attributes.color`                                                                                                                              | Filters using a shopper custom attribute field.                                                                                                                                                                                                         | `?filter=eq(shopper_attributes.color,red)`       |
         | `eq` (admin_attributes)   | `admin_attributes.warehouse`                                                                                                                            | Filters using an admin custom attribute field.                                                                                                                                                                                                          | `?filter=eq(admin_attributes.warehouse,US-EAST)` |
      operationId: attachNodes
      tags:
        - Products
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - data
              properties:
                data:
                  type: object
                  required:
                    - filter
                    - node_ids
                  properties:
                    filter:
                      type: string
                      description: |
                        Filters applied to search for appropriate products to attach to a node. See [Attach multiple nodes](/docs/api/pxm/products/attach-nodes).
                      example: eq(sku,book)
                    node_ids:
                      type: array
                      description: A list of node unique identifiers that you want to assign to the products.
                      example:
                        - '123'
                      items:
                        type: string
            examples:
              product-attach-nodes:
                summary: Attach multiple nodes
                value:
                  data:
                    filter: eq(sku,book)
                    node_ids:
                      - '123'
      responses:
        '200':
          description: This request assigns the products that you have selected to multiple hierarchies and their children nodes and returns the following.
          content:
            application/json:
              schema:
                type: object
                properties:
                  meta:
                    type: object
                    properties:
                      nodes_attached:
                        description: Number of nodes assigned to the products.
                        type: integer
                      nodes_not_found:
                        type: array
                        description: A list of node unique identifiers that could not be identified.
                        example:
                          - '123'
                        items:
                          type: string
              examples:
                created-product:
                  summary: Attach multiple nodes
                  value:
                    meta:
                      nodes_attached: 3
                      nodes_not_found: []
        '400':
          $ref: '#/components/responses/bad_request'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/products/detach_nodes:
    post:
      summary: Detach multiple nodes
      description: |
        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).
         
        The following attributes and operators are supported.
         
         | Operator                  | Attribute                                                                                                                                               | Description                                                                                                                                                                                                                                             | Example                                          |
         | :------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :----------------------------------------------- |
         | `eq`                      | `id`, `sku`, `slug`, `upc_ean`, `manufacturer_part_num`, `name`, `templates`, `commodity_type`, `owner`, `product_types`, `parent_id`, `tags`, `status`, `has_nodes (false only)`, `created_at`, `updated_at`, `external_ref`, `description` | Equals. Checks if the values of two operands are equal. If they are, the condition is true. For `product_types`, you can only specify one product type. **Note:** `has_nodes` can only be filtered as `false`. | `?filter=eq(name,some-name)` |
         | `like`                    | `sku`, `slug`, `upc_ean`, `manufacturer_part_num`, `name`, `tags`, `description`, `external_ref`                                                        | Like. Checks if the operand contains the specified string. Wildcards are supported.                                                                                                                                                                     | `?filter=like(name,*some-name*)`                 |
         | `in`                      | `id`, `name`, `sku`, `slug`, `upc_ean`, `manufacturer_part_num`, `product_types`, `parent_id`, `tags`, `external_ref`                                   | Checks if the values are included in the specified list. If they are, the condition is true. For `product_types`, you can specify more than one product type.                                                                                           | `?filter=in(id,some-id)`                         |
         | `gt`                      | `id`, `created_at`, `updated_at`, `external_ref`                                                                                                        | Greater than. Checks if the value of the field is greater than the given value.                                                                                                                                                                         | `?filter=gt(updated_at,2024-01-01T00:00:00Z)`    |
         | `ge`                      | `id`, `created_at`, `updated_at`, `external_ref`                                                                                                        | Greater than or equal to. Checks if the value of the field is greater than or equal to the given value.                                                                                                                                                 | `?filter=ge(created_at,2023-01-01T00:00:00Z)`    |
         | `lt`                      | `id`, `created_at`, `updated_at`, `external_ref`                                                                                                        | Less than. Checks if the value of the field is less than the given value.                                                                                                                                                                               | `?filter=lt(updated_at,2025-01-01T00:00:00Z)`    |
         | `le`                      | `id`, `created_at`, `updated_at`, `external_ref`                                                                                                        | Less than or equal to. Checks if the value of the field is less than or equal to the given value.                                                                                                                                                       | `?filter=le(created_at,2022-01-01T00:00:00Z)`    |
         | `eq` (extensions)         | `extensions.book.isbn`                                                                                                                                  | Filters using a nested extension field.                                                                                                                                                                                                                 | `?filter=eq(extensions.book.isbn,1765426)`       |
         | `eq` (shopper_attributes) | `shopper_attributes.color`                                                                                                                              | Filters using a shopper custom attribute field.                                                                                                                                                                                                         | `?filter=eq(shopper_attributes.color,red)`       |
         | `eq` (admin_attributes)   | `admin_attributes.warehouse`                                                                                                                            | Filters using an admin custom attribute field.                                                                                                                                                                                                          | `?filter=eq(admin_attributes.warehouse,US-EAST)` |
      operationId: detachNodes
      tags:
        - Products
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - data
              properties:
                data:
                  type: object
                  required:
                    - filter
                    - node_ids
                  properties:
                    filter:
                      type: string
                      description: |
                        You can apply filters to search for the appropriate products to detach. See [Detach multiple nodes](/docs/api/pxm/products/detach-nodes).
                      example: eq(sku,book)
                    node_ids:
                      type: array
                      description: A list of node unique identifiers that you want to assign to the products.
                      example:
                        - '123'
                      items:
                        type: string
            examples:
              product-attach-nodes:
                summary: Attach multiple nodes
                value:
                  data:
                    filter: eq(sku,book)
                    node_ids:
                      - '123'
      responses:
        '200':
          description: The request dissociates the products that you have selected from multiple hierarchies and their children and returns the following.
          content:
            application/json:
              schema:
                type: object
                properties:
                  meta:
                    type: object
                    properties:
                      nodes_detached:
                        description: Number of nodes dissociated from the products.
                        type: integer
                      nodes_not_found:
                        type: array
                        description: A list of node unique identifiers that could not be identified.
                        example:
                          - '123'
                        items:
                          type: string
              examples:
                created-product:
                  summary: Detach multiple nodes
                  value:
                    meta:
                      nodes_detached: 1
                      nodes_not_found: []
        '400':
          $ref: '#/components/responses/bad_request'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/products/{productID}/nodes:
    get:
      summary: Get a product's nodes
      description: Returns the nodes associated with the product. Products must be in a `live` status.
      operationId: getProductsNodes
      tags:
        - Products
      responses:
        '200':
          description: Successfully returns the product's nodes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/multi_nodes'
              examples:
                get-product-nodes:
                  $ref: '#/components/examples/resp_multi_nodes'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '500':
          $ref: '#/components/responses/internal'
      parameters:
        - $ref: '#/components/parameters/page_offset'
        - $ref: '#/components/parameters/page_limit'
        - $ref: '#/components/parameters/product_id'
  /pcm/products/{productID}/build:
    post:
      summary: Build child products
      description: |
        With product variations in Product Experience Manager, you can create product variations and different options for each variation and use both to create child products for a product. Each child product is a unique combination of options associated with the product.  

        Child products inherit attributes from their parent products. When you make changes to the attributes of the parent products, you can rebuild your child products, ensuring that changes to the parent products are propagated to the child products.

        Alternatively, you can modify a child product independently, without impacting its parent product. For example, you may prefer the status of your child product to be `live`, while keeping the parent product's status as `draft`. When you directly update a child product, it becomes independent of its parent product. In other words, any subsequent changes made to the parent product are not automatically reflected in the child product when you rebuild the parent product and its child products. Once a child product is independent of its parent, you cannot recreate the association between the child product and its parent. You must delete the child product and rebuild the parent to recreate the child product.

        Following on from that, if you add the same flow to both a parent and child product, the child flow values are not affected by changes to the parent flow values in a rebuild.

        ### Using Build Rules

        When building your child products, you can build all products related to a product. 

        Alternatively, you can build a combination of child products associated with a product, based on build rules that you specify. This is useful, for example, if you have a variation option that you do not sell. This makes managing and building your child products quick and easy. You can do this using `build_rules`. `build_rules` are combinations of variation option IDs that you wish to include or exclude when building your child products.

        :::note

        You do not need to configure any `build_rules` in the following scenarios:

        - Child products must be built with all variation options. Simply, use the `Create a product` or `Update a product` endpoints with no `build_rules` specified.
        - Child products must be built apart from all options for a specific variation. In this case, you must remove the variation and use the `Create a product` or `Update a product` endpoints with no `build_rules` specified. In other words, using our example, if none of the `size` options should be included, then remove the `size` variation.

        :::

        The `build_rules` contain:

        - (Required) `default`: specifies the default behavior.
        - (Optional) `include`: specifies the option IDs to include when the child products are built. Each combination consists of a nested array of option IDs from one or more variations. Combinations of option IDs in the nested arrays must come from different variations. See [**Invalid Build Rules**](#invalid-build-rules).
        - (Optional) `exclude`: specifies the option IDs to exclude when the child products are built. Each combination consists of a nested array of option IDs from one or more variations. Combinations of option IDs in the nested arrays must come from different variations. See [**Invalid build rules**](#invalid-build-rules).

        When building child products, Commerce compares each combination of option IDs to these rules to determine how your child products should be built, depending on how you have configured the `build_rules`. It depends on your requirements how you configure your `build_rules`.

        #### Invalid Build Rules

        The `build_rules` are invalid if both the option IDs come from the same variation. Combinations of option IDs in the nested arrays must come from different variations.

        If Commerce cannot resolve the `build_rules` a `could not determine whether to include or exclude a child product due to ambiguous rules` error is returned. This error can occur, for example, if you have the same number of variation option IDs in both the `include` and `exclude` arrays and the variation option IDs match.

        ### Building Child Products

        Building child products is an asynchronous operation. When you build child products, a job is created. The jobId of the job is displayed in the response. When the job is complete, the build child products operation is also complete. You can use the jobId to see the status of your job using the `Get a Job` endpoint.

        Jobs are processed one at a time. You can continue to send build child product requests, but those jobs are queued. In other words, Commerce looks for any jobs that have a status of PENDING and starts the job with the earliest created date. This process is repeated until all jobs are processed. See Jobs.

        Re-building child products after adding or removing a new variation changes the total number of child products that you can generate from a parent product. When you rebuild the child products after updating variations associated with the parent product, all existing child products that belong to a parent product are deleted. New child products are created with new product IDs.

        If you have any bundles that reference child products directly, then you must update the bundles with the new child product IDs.

        However, re-building child products after adding or removing an option does not change the existing product IDs.
      operationId: buildChildProducts
      tags:
        - Variations
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '201':
          description: Successfully started building child products
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single'
              examples:
                build-child-products:
                  $ref: '#/components/examples/build-child-products_created'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
      parameters:
        - $ref: '#/components/parameters/product_id'
  /pcm/products/{productID}/children:
    get:
      summary: Get child products
      operationId: getChildProducts
      tags:
        - Variations
      responses:
        '200':
          description: Returns a list of child products for the specified parent product ID.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/multi_product_response'
              examples:
                list-products:
                  $ref: '#/components/examples/multi_get_child_response'
        '400':
          $ref: '#/components/responses/bad_request'
        '500':
          $ref: '#/components/responses/internal'
      parameters:
        - $ref: '#/components/parameters/product_id'
  /pcm/products/{productID}/relationships/templates:
    post:
      summary: Create a product template relationship
      description: Retrieves all the templates that are associated with the specified product.
      operationId: createProductTemplateRelationship
      parameters:
        - $ref: '#/components/parameters/product_id'
      tags:
        - Extending Products with Templates
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/product_templates_request'
            examples:
              create-product-template-relationship:
                $ref: '#/components/examples/templates_relationship_request'
      responses:
        '201':
          description: Returns a created product template relationship.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/template_response'
              examples:
                product-templates:
                  $ref: '#/components/examples/template_response'
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    get:
      summary: Get all product template relationships
      operationId: getProductTemplateRelationships
      parameters:
        - $ref: '#/components/parameters/product_id'
      tags:
        - Extending Products with Templates
      responses:
        '200':
          description: Returns all product template relationships.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/template_response'
              examples:
                product-template-relationships:
                  $ref: '#/components/examples/template_response'
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    delete:
      summary: Delete a product template relationship
      operationId: deleteProductTemplateRelationship
      parameters:
        - $ref: '#/components/parameters/product_id'
      tags:
        - Extending Products with Templates
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/product_templates_request'
            examples:
              delete-product-template-relationship:
                $ref: '#/components/examples/templates_relationship_request'
      responses:
        '204':
          description: No Content
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/products/{productID}/relationships/component_products:
    get:
      summary: Get Bundle Component Product Relationships
      description: Retrieves all the products included in the specified bundle product.
      operationId: getProductComponentProductsRelationships
      tags:
        - Bundle Component Products Relationships
      responses:
        '200':
          description: Returns all Component Products relationships.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/component_products_response'
              examples:
                product-template-relationships:
                  $ref: '#/components/examples/component_products_relationship_response'
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
      parameters:
        - $ref: '#/components/parameters/product_id'
  /pcm/products/{productID}/relationships/files:
    get:
      summary: Get all product file relationships
      description: Retrieves all files that are associated with the specified product.
      operationId: getProductFileRelationships
      tags:
        - Product File Relationships
      parameters:
        - $ref: '#/components/parameters/product_id'
      responses:
        '200':
          description: Returns all product file relationships.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/file_response'
              examples:
                product-file-relationships:
                  $ref: '#/components/examples/file_relationship_response'
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    post:
      summary: Create a product file relationship
      operationId: createProductFileRelationships
      tags:
        - Product File Relationships
      parameters:
        - $ref: '#/components/parameters/product_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/product_files_request'
            examples:
              create-product-file-relationship:
                $ref: '#/components/examples/file_relationship_request'
      responses:
        '204':
          description: No Content
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    put:
      summary: Replace a product file relationship
      operationId: updateProductFileRelationships
      tags:
        - Product File Relationships
      parameters:
        - $ref: '#/components/parameters/product_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/product_files_request'
            examples:
              replace-product-file-relationship:
                $ref: '#/components/examples/file_relationship_request'
      responses:
        '204':
          description: No Content
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    delete:
      summary: Delete a product file relationships
      operationId: deleteProductFileRelationships
      tags:
        - Product File Relationships
      parameters:
        - $ref: '#/components/parameters/product_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/product_files_request'
            examples:
              delete-product-file-relationships:
                $ref: '#/components/examples/file_relationship_request'
      responses:
        '204':
          description: No Content
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/products/{productID}/relationships/variations:
    post:
      summary: Create a product variation relationship
      operationId: createProductVariationRelationships
      tags:
        - Variations
      parameters:
        - $ref: '#/components/parameters/product_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/product_variations_request'
            examples:
              create-product-variation-relationship:
                $ref: '#/components/examples/product_variations_relationship_request'
      responses:
        '204':
          description: No Content
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    get:
      summary: Get all product variation relationships
      operationId: getProductVariationRelationships
      tags:
        - Variations
      parameters:
        - $ref: '#/components/parameters/product_id'
      responses:
        '200':
          description: Returns all product variation relationships.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/variations_response'
              examples:
                product-variation-relationships:
                  $ref: '#/components/examples/variations_response'
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    put:
      summary: Replace a product variation relationship
      operationId: updateProductVariationRelationships
      tags:
        - Variations
      parameters:
        - $ref: '#/components/parameters/product_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/product_variations_request'
            examples:
              replace-product-variation-relationship:
                $ref: '#/components/examples/product_variations_relationship_request'
      responses:
        '204':
          description: No Content
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    delete:
      summary: Delete a product variation relationships
      operationId: deleteProductVariationRelationships
      tags:
        - Variations
      parameters:
        - $ref: '#/components/parameters/product_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/product_variations_request'
            examples:
              delete-product-variation-relationships:
                $ref: '#/components/examples/product_variations_relationship_request'
      responses:
        '204':
          description: No Content
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/products/{productID}/relationships/main_image:
    post:
      summary: Create main image relationships
      description: Associates a main image with the specified product.
      operationId: createProductMainImageRelationships
      tags:
        - Product Image Relationships
      parameters:
        - $ref: '#/components/parameters/product_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/main_image_request'
            examples:
              create-product-main-image-relationship:
                value:
                  data:
                    type: file
                    id: 3ab3deca-1f11-47b7-a409-24ea3234d72c
      responses:
        '204':
          description: No Content
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    get:
      summary: Get Main Image Relationships
      operationId: getProductMainImageRelationships
      tags:
        - Product Image Relationships
      parameters:
        - $ref: '#/components/parameters/product_id'
      responses:
        '200':
          description: Returns all product variation relationships
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/main_image_response'
              examples:
                product-main-image-relationships:
                  value:
                    data:
                      - type: file
                        id: file-1
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    put:
      summary: Replace Main Image Relationships
      operationId: updateProductMainImageRelationships
      tags:
        - Product Image Relationships
      parameters:
        - $ref: '#/components/parameters/product_id'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/replace_main_image_request'
            examples:
              replace-main-image-relationship:
                value:
                  data:
                    type: file
                    id: 3ab3deca-1f11-47b7-a409-24ea3234d72c
      responses:
        '204':
          description: No Content
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    delete:
      summary: Delete Main Image Relationships
      operationId: deleteProductMainImageRelationships
      tags:
        - Product Image Relationships
      parameters:
        - $ref: '#/components/parameters/product_id'
      responses:
        '204':
          description: No Content
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/products/{productID}/custom-relationships:
    post:
      parameters:
        - $ref: '#/components/parameters/product_id'
      summary: Attach Custom Relationships to a Product
      description: |
        You can attach up to 5 custom relationships to a product.  

        Once you have attached a custom relationship to a product, you can then create relationships from a product to one or many other products. See [Associate a product to one or more products using a custom relationship](/docs/api/pxm/products/product-association-id). 

        See [Custom Relationships](/guides/key-concepts/product-experience-manager/custom-relationships/).

        ### Prerequisites
          - A Custom Relationship has been created, see [create a Custom Relationship](/docs/api/pxm/products/create-custom-relationship),
          - A Product has been created.
      operationId: attachCustomRelationships
      tags:
        - Product Relationships
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/attach_custom_relationship_request'
            examples:
              assign-custom-relationships-to-product:
                summary: attach custom relationships to product
                $ref: '#/components/examples/attach_custom_relationship_request'
      responses:
        '201':
          description: Returns the attached custom relationships
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/multi_custom_relationships'
              examples:
                custom-relationship:
                  summary: Attached custom relationships
                  $ref: '#/components/examples/resp_multi_custom_relationships'
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    delete:
      parameters:
        - $ref: '#/components/parameters/product_id'
      summary: Delete Custom Relationships from a Product
      description: |
        Delete Custom Relationships from a Product. Multiple Custom Relationships can be deleted from a product in one request.
      operationId: detachCustomRelationships
      tags:
        - Product Relationships
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/attach_custom_relationship_request'
            examples:
              assign-custom-relationship-to-product:
                $ref: '#/components/examples/attach_custom_relationship_request'
      responses:
        '204':
          description: Successfully deleted custom relationships.
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    get:
      parameters:
        - $ref: '#/components/parameters/product_id'
        - $ref: '#/components/parameters/page_offset'
        - $ref: '#/components/parameters/page_limit'
      summary: Get all Custom Relationships attached to a Product
      description: |
        ### Prerequisites
          - Custom Relationships have been attached to a product, see [Attach Custom Relationships to a Product](/docs/api/pxm/products/attach-custom-relationships)
          - **OR** Products have been related to one another, see [Create a Relationship between a product with one or more products](/docs/api/pxm/products/product-association-id)
      operationId: listAttachedCustomRelationship
      tags:
        - Product Relationships
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/attach_custom_relationship_request'
            examples:
              assign-custom-relationship-to-product:
                $ref: '#/components/examples/attach_custom_relationship_request'
      responses:
        '200':
          description: Returns the attached custom relationship.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/multi_custom_relationships'
              examples:
                custom-relationship:
                  $ref: '#/components/examples/resp_multi_custom_relationships'
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/products/{productID}/custom-relationships/{customRelationshipSlug}:
    post:
      parameters:
        - $ref: '#/components/parameters/product_id'
        - $ref: '#/components/parameters/custom_relationship_slug'
      summary: Create a Relationship between a Product with one or more Products
      description: |
        - You can associate a product with up to 2000 other products. 
        - You do not need to attach a custom relationship to products beforehand, this will be done automatically by this endpoint. 
        - This is a partial update, so if you make a request to this endpoint multiple times with different products in each request, they will not be overwritten but will be appended to the related products list. 

        If you want to remove a relationship between products, see [Delete a Relationship between a product with one or more products](/docs/api/pxm/products/dissociate-products).  

         ### Prerequisites
           - A Custom Relationship has been created, see [create a Custom Relationship](/docs/api/pxm/products/create-custom-relationship).
           - A Product has been created for the relationship to be based from.
           - One or many Product have been created for the product to relate to.
      operationId: productAssociationId
      tags:
        - Product Relationships
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/product_association_request'
            examples:
              create-product-association:
                $ref: '#/components/examples/create_product_association_request'
      responses:
        '201':
          description: Returns information related to associated products.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/product_association_response'
              examples:
                create-product-association:
                  $ref: '#/components/examples/create_product_association_created_response'
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    delete:
      parameters:
        - $ref: '#/components/parameters/product_id'
        - $ref: '#/components/parameters/custom_relationship_slug'
      summary: Delete a Relationship between a product with one or more products
      operationId: dissociateProducts
      tags:
        - Product Relationships
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/product_association_delete_request'
            examples:
              delete-product-association:
                $ref: '#/components/examples/delete_product_association_request'
      responses:
        '204':
          description: Products are dissociated.
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    get:
      summary: Get all Related Product IDs of a Products' attached Custom Relationship
      description: |
        ### Prerequisites
          - Relationships have been created between Products, see [Create a Relationship between a product with one or more products](/docs/api/pxm/products/product-association-id).
      operationId: getRelatedProductIDsOfAProductId
      tags:
        - Product Relationships
      parameters:
        - $ref: '#/components/parameters/page_offset'
        - $ref: '#/components/parameters/page_limit'
        - $ref: '#/components/parameters/product_id'
        - $ref: '#/components/parameters/custom_relationship_slug'
      responses:
        '200':
          description: Returns all related product ids.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/product_association_list_product_ids_response'
              examples:
                list-product-association-product-ids:
                  $ref: '#/components/examples/list_product_association_product_ids_response'
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/products/{productID}/custom-relationships/{customRelationshipSlug}/products:
    get:
      summary: Get all Related Products of a Products' attached Custom Relationship
      operationId: getRelatedProductsOfAProductId
      description: |
        ### Prerequisites
          - Relationships have been created between Products, see [Create a Relationship between a product with one or more products](/docs/api/pxm/products/product-association-id).
      tags:
        - Product Relationships
      parameters:
        - $ref: '#/components/parameters/page_offset'
        - $ref: '#/components/parameters/page_limit'
        - $ref: '#/components/parameters/product_id'
        - $ref: '#/components/parameters/custom_relationship_slug'
      responses:
        '200':
          description: Returns all related products.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/multi_product_response'
              examples:
                list-products:
                  $ref: '#/components/examples/multi_product_response'
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/variations:
    post:
      summary: Create a variation
      operationId: createVariation
      tags:
        - Variations
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/create_variation'
            examples:
              create-variation:
                summary: Create a variation
                $ref: '#/components/examples/create_variation'
      responses:
        '201':
          description: Returns a created variation with the following attributes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/created_variation'
              examples:
                created-variation:
                  $ref: '#/components/examples/created_variation'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    get:
      summary: Get all variations
      operationId: getAllVariations
      parameters:
        - $ref: '#/components/parameters/page_offset'
        - $ref: '#/components/parameters/page_limit'
      tags:
        - Variations
      responses:
        '200':
          description: Returns all variations.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/multi_variations'
              examples:
                list-variations:
                  $ref: '#/components/examples/multi_variations'
        '400':
          $ref: '#/components/responses/bad_request'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/variations/{variationID}:
    get:
      summary: Get a variation
      operationId: getVariation
      parameters:
        - $ref: '#/components/parameters/variation_id'
      tags:
        - Variations
      responses:
        '200':
          description: Returns the specified variation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_variation'
              examples:
                get-variation:
                  $ref: '#/components/examples/single_variation'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '500':
          $ref: '#/components/responses/internal'
    put:
      summary: Update a variation
      description: Specify whichever attributes you want to change. The values of the other attributes remain the same. If the attributes section is empty, the variation is not updated.
      operationId: updateVariation
      parameters:
        - $ref: '#/components/parameters/variation_id'
      tags:
        - Variations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/update_variation'
            examples:
              update-variation:
                $ref: '#/components/examples/update_variation'
      responses:
        '200':
          description: Returns an updated variation with the following attributes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_variation'
              examples:
                update-variation:
                  $ref: '#/components/examples/single_variation'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    delete:
      summary: Delete a variation and all it's associated options.
      operationId: deleteVariation
      parameters:
        - $ref: '#/components/parameters/variation_id'
      tags:
        - Variations
      responses:
        '204':
          description: No Content
        '403':
          $ref: '#/components/responses/forbidden'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/variations/{variationID}/options:
    post:
      summary: Create a variation option
      operationId: createVariationOption
      parameters:
        - $ref: '#/components/parameters/variation_id'
      tags:
        - Variations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/create_option'
            examples:
              create-variation-option:
                $ref: '#/components/examples/create_option'
      responses:
        '201':
          description: Successfully returns the created variation option.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/created_option'
              examples:
                created-variation-option:
                  $ref: '#/components/examples/created_option'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    get:
      summary: Get all variation options
      operationId: getAllVariationOptions
      parameters:
        - $ref: '#/components/parameters/variation_id'
        - $ref: '#/components/parameters/page_offset'
        - $ref: '#/components/parameters/page_limit'
      tags:
        - Variations
      responses:
        '200':
          description: Successfully returns all variation options.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/multi_options'
              examples:
                list-variations:
                  $ref: '#/components/examples/multi_options'
        '400':
          $ref: '#/components/responses/bad_request'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/variations/{variationID}/options/{optionID}:
    get:
      summary: Get a variation option
      operationId: getVariationOption
      parameters:
        - $ref: '#/components/parameters/variation_id'
        - $ref: '#/components/parameters/option_id'
      tags:
        - Variations
      responses:
        '200':
          description: Successfully returns the variation option.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_option'
              examples:
                get-variation-option:
                  $ref: '#/components/examples/single_option'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '500':
          $ref: '#/components/responses/internal'
    put:
      summary: Update a variation option
      operationId: updateVariationOption
      parameters:
        - $ref: '#/components/parameters/variation_id'
        - $ref: '#/components/parameters/option_id'
      tags:
        - Variations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/update_option'
            examples:
              update-variation-option:
                $ref: '#/components/examples/update_option'
      responses:
        '200':
          description: Successfully returns the updated variation option
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_option'
              examples:
                updated-variation-option:
                  $ref: '#/components/examples/single_option'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    delete:
      summary: Delete a variation option
      operationId: deleteVariationOption
      parameters:
        - $ref: '#/components/parameters/variation_id'
        - $ref: '#/components/parameters/option_id'
      tags:
        - Variations
      responses:
        '204':
          description: No Content
        '403':
          $ref: '#/components/responses/forbidden'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/variations/{variationID}/options/{optionID}/modifiers:
    post:
      summary: Create a modifier
      description: |
        You can specify different modifiers for different options in a variation. When you build child products using options in variations, the properties of a child products depends on the modifier set for the options that are applied to the child product.
         
        The table below describes the different types of modifiers.

        | Modifier | Data Type | Effect |
        | :--- | :--- | :--- |
        | `name_equals` | `string` | Overrides the name of the child product with the name specified by the modifier. |
        | `name_append` | `string` | Appends the string specified in the modifier to the name of the child product. |
        | `name_prepend` | `string` | Prepends the string specified in the modifier to the name of the child product. |
        | `description_equals` | `string` | Overrides the description of the child product. |
        | `description_append` | `string` | Appends the string specified in the modifier to the description of the child product. |
        | `description_prepend` | `string` | Prepends the string specified in the modifier to the product description of the child product. |
        | `commodity_type` | `string` | Sets the commodity type of the child product, such as `physical` or `digital`. |
        | `price` | `string` | Allows application of price modifiers (`price_increment`, `price_decrement`, and `price_equals`) to the child products. |
        | `price_increment` | `string` | Increases the price of the child product. |
        | `price_decrement` | `string` | Decreases the price of the child product. |
        | `price_equals` | `string` | Sets the price of a child product to the amount you specify. |
        | `slug_append` | `string` | Appends the string specified in the modifier to the slug of the child product. Can only contain A-Z, a-z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed. However, for the `slug-builder` modifier, you can use `{}` in the `seek` field, for example, `"seek": :{COLOR}"`. |
        | `slug_prepend` | `string` | Prepends the string specified in the modifier to the slug of the child product. Can only contain A-Z, a-z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed. However, for the `slug-builder` modifier, you can use `{}` in the `seek` field, for example, `"seek": :{COLOR}"`. |
        | `slug_builder` | `string`| Sets a part of the slug of the child product. Can only contain A-Z, a-z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed. However, for the `slug-builder` modifier, you can use `{}` in the `seek` field, for example, `"seek": :{COLOR}"`. |
        | `sku_equals` | `string` | Sets the SKU of the child product. |
        | `sku_append` | `string` | Appends the string specified in the modifier to the SKU of the child product. |
        | `sku_prepend` | `string` | Prepends the string specified in the modifier to the SKU of the child product. |
        | `sku_builder` | `string` | Sets a part of the SKU of the child product. |
        | `status` | `string` | Sets the status of the child product, such as `draft` or `live`. |
      operationId: createModifier
      parameters:
        - $ref: '#/components/parameters/variation_id'
        - $ref: '#/components/parameters/option_id'
      tags:
        - Variations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/create_modifier'
            examples:
              create-variation-modifier:
                $ref: '#/components/examples/create_modifier'
      responses:
        '201':
          description: Successfully returns the created modifier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/created_modifier'
              examples:
                created-variation-modifier:
                  $ref: '#/components/examples/created_modifier'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    get:
      summary: Get all modifiers
      operationId: getAllModifiers
      tags:
        - Variations
      parameters:
        - $ref: '#/components/parameters/variation_id'
        - $ref: '#/components/parameters/option_id'
        - $ref: '#/components/parameters/page_offset'
        - $ref: '#/components/parameters/page_limit'
      responses:
        '200':
          description: Successfully returns all variation modifiers.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/multi_modifiers'
              examples:
                list-variations:
                  $ref: '#/components/examples/multi_modifiers'
        '400':
          $ref: '#/components/responses/bad_request'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/variations/{variationID}/options/{optionID}/modifiers/{modifierID}:
    get:
      summary: Get a modifier
      operationId: getModifier
      parameters:
        - $ref: '#/components/parameters/variation_id'
        - $ref: '#/components/parameters/option_id'
        - $ref: '#/components/parameters/modifier_id'
      tags:
        - Variations
      responses:
        '200':
          description: Returns the specified modifier.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_modifier'
              examples:
                get-variation-modifier:
                  $ref: '#/components/examples/single_modifier'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '500':
          $ref: '#/components/responses/internal'
    put:
      summary: Update a modifier
      description: Specify whichever attributes you want to change. The values of the other attributes remain the same. If the attributes section is empty, the modifier is not updated.
      operationId: updateModifier
      parameters:
        - $ref: '#/components/parameters/variation_id'
        - $ref: '#/components/parameters/option_id'
        - $ref: '#/components/parameters/modifier_id'
      tags:
        - Variations
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/update_modifier'
            examples:
              update-variation-modifier:
                $ref: '#/components/examples/update_modifier'
      responses:
        '200':
          description: Successfully returns the updated modifier.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_modifier'
              examples:
                updated-variation-modifier:
                  $ref: '#/components/examples/single_modifier'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '409':
          $ref: '#/components/responses/write_conflict'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    delete:
      summary: Delete a modifier
      description: You cannot delete a modifier if it is in use. Deleting a modifier in us returns a `422 Failed Validation` error.
      operationId: deleteModifier
      parameters:
        - $ref: '#/components/parameters/variation_id'
        - $ref: '#/components/parameters/option_id'
        - $ref: '#/components/parameters/modifier_id'
      tags:
        - Variations
      responses:
        '204':
          description: No Content
        '403':
          $ref: '#/components/responses/forbidden'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/hierarchies:
    post:
      summary: Create a hierarchy
      description: |
        ```mdx-code-block
        import CASummary from '/docs/partials/pxm/custom-attributes/custom-attribute-spec-summary.mdx';

        Creates a hierarchy with a name, description, and slug to organize products in your catalog.

        <CASummary />
        ```
      operationId: createHierarchy
      tags:
        - Hierarchies
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/create_hierarchy'
            examples:
              create-hierarchy:
                $ref: '#/components/examples/create_hierarchy'
        required: true
      responses:
        '201':
          description: Returns a created hierarchy with the following attributes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_hierarchy'
              examples:
                created-hierarchy:
                  $ref: '#/components/examples/hierarchy_created'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    get:
      operationId: getHierarchy
      parameters:
        - $ref: '#/components/parameters/page_offset'
        - $ref: '#/components/parameters/page_limit'
        - $ref: '#/components/parameters/filter_nodes'
      summary: Get all hierarchies
      description: |
        Get all hierarchies

        #### Pagination

        This endpoint supports offset-based pagination using `page[offset]` and `page[limit]` query parameters.

        :::caution Planned pagination changes — on or after 1 June 2026

        The pagination links returned by this endpoint currently differ from the Elastic Path Commerce Cloud platform standard. Specifically, the `current` link is not returned, `first`/`last` are not always present, `prev` is incorrectly omitted on the second page, and `next` is incorrectly omitted on the second-to-last page.

        On or after **1 June 2026**, this endpoint will be updated so that `current` and `first` are always present, `last` is present on every page except the final page, `next` is present on every page except the last, and `prev` is present on every page except the first. See the [links](#links) schema for full details.

        If your integration iterates through pages using these links, please verify that it will handle the updated behaviour correctly before this date.

        :::

        #### Filtering
                     
        Many Commerce API endpoints support filtering. The general syntax is described in [**Filtering**](/guides/Getting-Started/filtering).

        The following attributes and operators are supported.

        | Operator        | Attribute                                                                                 | Description                                                                                      | Example                                  |
        |----------------|------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|------------------------------------------|
        | `eq`           | `id`, `hierarchy_id`, `owner`, `parent_id`, `name`, `slug`, `description`, `has_children`, `created_at`, `updated_at`, `locales.[locale].name`, `locales.[locale].description`, `breadcrumbs.id`, `breadcrumbs.name`, `breadcrumbs.slug`, `breadcrumbs.locales.[locale].name` | Equals. Checks if the value of the attribute matches the specified value. | `filter=eq(name,some-name)`, `filter=eq(locales.fr-FR.name,Nom-du-produit)` |
        | `in`           | `id`, `hierarchy_id`,  `parent_id`, `breadcrumbs.id`                                              | Checks if the value of the attribute is included in the specified list.                        | `filter=in(id,1,2,3,4)`                 |
        | `lt`, `le`, `gt`, `ge` | `id`, `hierarchy_id`,  `parent_id`, `created_at`, `updated_at`         | Comparison operators. `lt`: Less than, `le`: Less than or equal to, `gt`: Greater than, `ge`: Greater than or equal to. | `filter=lt(id,100)`, `filter=ge(created_at,2022-01-01)` |
        | `like`         | `name`, `slug`, `description`, `locales.[locale].name`, `locales.[locale].description`, `breadcrumbs.name`, `breadcrumbs.slug`, `breadcrumbs.locales.[locale].name` | Like. Checks if the attribute contains the specified string (wildcards supported).            | `filter=like(name,*some-name*)`, `filter=like(locales.es-ES.description,*descripción*)` |
      tags:
        - Hierarchies
      responses:
        '200':
          description: Returns a list of all hierarchies.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/multi_hierarchy'
              examples:
                list-hierarchies:
                  $ref: '#/components/examples/resp_multi_hierarchy'
        '400':
          $ref: '#/components/responses/bad_request'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/hierarchies/nodes:
    get:
      parameters:
        - $ref: '#/components/parameters/page_offset'
        - $ref: '#/components/parameters/filter_nodes'
        - $ref: '#/components/parameters/page_limit'
        - $ref: '#/components/parameters/include_hierarchies'
      summary: List all nodes
      operationId: getAllNodes
      description: |
        A fully paginated view of all nodes in all hierarchies regardless of depth.

        #### Filtering

        Many Commerce API endpoints support filtering. The general syntax is described in [**Filtering**](/guides/Getting-Started/filtering).

        The following attributes and operators are supported.

        | Operator        | Attribute                                                                                 | Description                                                                                      | Example                                  |
        |----------------|------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|------------------------------------------|
        | `eq`           | `id`, `hierarchy_id`, `owner`, `parent_id`, `name`, `slug`, `description`, `has_children`, `created_at`, `updated_at`, `locales.[locale].name`, `locales.[locale].description`, `breadcrumbs.id`, `breadcrumbs.name`, `breadcrumbs.slug`, `breadcrumbs.locales.[locale].name` | Equals. Checks if the value of the attribute matches the specified value. | `filter=eq(name,some-name)`, `filter=eq(locales.fr-FR.name,Nom-du-produit)` |
        | `in`           | `id`, `hierarchy_id`,  `parent_id`, `breadcrumbs.id`                                              | Checks if the value of the attribute is included in the specified list.                        | `filter=in(id,1,2,3,4)`                 |
        | `lt`, `le`, `gt`, `ge` | `id`, `hierarchy_id`,  `parent_id`, `created_at`, `updated_at`         | Comparison operators. `lt`: Less than, `le`: Less than or equal to, `gt`: Greater than, `ge`: Greater than or equal to. | `filter=lt(id,100)`, `filter=ge(created_at,2022-01-01)` |
        | `like`         | `name`, `slug`, `description`, `locales.[locale].name`, `locales.[locale].description`, `breadcrumbs.name`, `breadcrumbs.slug`, `breadcrumbs.locales.[locale].name` | Like. Checks if the attribute contains the specified string (wildcards supported).            | `filter=like(name,*some-name*)`, `filter=like(locales.es-ES.description,*descripción*)` |
        | `ilike`        | `name`, `slug`, `description`, `locales.[locale].name`, `locales.[locale].description`, `breadcrumbs.name`, `breadcrumbs.slug`, `breadcrumbs.locales.[locale].name` | Case-insensitive like. Same as `like` but ignores case when matching. | `filter=ilike(name,*some-name*)` |
      tags:
        - Hierarchies
      responses:
        '200':
          description: Returns a list of nodes
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/nodes_or_hierarchies'
              examples:
                get-all-nodes:
                  $ref: '#/components/examples/resp_multi_nodes_or_hierarchies'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/hierarchies/{hierarchyID}:
    get:
      parameters:
        - $ref: '#/components/parameters/hierarchy_id'
      summary: Get a hierarchy
      description: Retrieves the specified hierarchy.
      operationId: getHierarchyChild
      tags:
        - Hierarchies
      responses:
        '200':
          description: Returns a hierarchy with the following attributes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_hierarchy'
              examples:
                get-hierarchy:
                  $ref: '#/components/examples/hierarchy_created'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '500':
          $ref: '#/components/responses/internal'
    put:
      operationId: updateHierarchy
      parameters:
        - $ref: '#/components/parameters/hierarchy_id'
      summary: Update a hierarchy
      description: |
        ```mdx-code-block
        import CASummary from '/docs/partials/pxm/custom-attributes/custom-attribute-spec-summary.mdx';

        Updates a hierarchy. You can do a partial update, where you specify only the field value to change.

        <CASummary />
        ```
      tags:
        - Hierarchies
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/update_hierarchy'
            examples:
              update-hierarchy:
                $ref: '#/components/examples/update_hierarchy'
        required: true
      responses:
        '200':
          description: Successfully returns the updated hierarchy
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_hierarchy'
              examples:
                updated-hierarchy:
                  $ref: '#/components/examples/hierarchy_updated'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    delete:
      operationId: deleteHierarchy
      parameters:
        - $ref: '#/components/parameters/hierarchy_id'
      summary: Delete a hierarchy
      description: Deletes the specified hierarchy and all its children.
      tags:
        - Hierarchies
      responses:
        '204':
          description: No Content
        '403':
          $ref: '#/components/responses/forbidden'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/hierarchies/{hierarchyID}/nodes:
    post:
      parameters:
        - $ref: '#/components/parameters/hierarchy_id'
      summary: Create a node
      description: |
        ```mdx-code-block
        import CASummary from '/docs/partials/pxm/custom-attributes/custom-attribute-spec-summary.mdx';

        Creates a node in the specified hierarchy.

        <CASummary />         
        ```

         ### Sorting Nodes in a Hierarchy
          
         You can sort the order of your nodes, regardless of where the nodes are in the hierarchy.

         You can do this by adding a `meta` object to the body of your request and specifying a `sort_order` value.
          
         The node with the highest value of `sort_order` is displayed first. For example, a node with a `sort_order` value of `3` appears before a node with a `sort_order` value of `2`.

         - If you don’t provide `sort_order` when creating nodes, all child nodes in the response for Get a Node’s Children request are ordered by the `updated_at` time in descending order, with the most recently updated child node first.
         - If you set `sort_order` for only a few child nodes, the child nodes with a `sort_order` value appear first and then other child nodes appear in the order of `updated_at` time.

         You can also specify a `sort_order` when creating a node relationship.

         - If you create a node (**Node A**) with a `sort_order` and then you create a relationship for **Node A** with another node (**Node B**), the `sort_order` you specified when creating **Node A** is overwritten.
         - If you create **Node A** and then you create a relationship with **Node B** but do not configure a `sort_order`, the `sort_order` you specified when you created **Node A** is not overwritten.
          
         ### Curating Products in a Node
          
          You can curate the products in a node. Product curation allows you to promote specific products within each node of your hierarchies, enabling you to create unique product collections in your storefront. For example, you may find you have an abundance of cotton T-Shirts and you want to promote these products to the top of the product list. When a shopper navigates to T-shirts, the cotton T-Shirts are displayed first.
          
          You can do this by adding a `curated_products` attribute to the body of your request and adding an array of product IDs to the attribute. You should add the products IDs in the order you want them to be displayed in your node. The first product ID is displayed first in the product list.
          
          You can only curate 20 products or less. You cannot have more than 20 curated products.
          
          - The product IDs you provide must exist in the specified node.
          - If a curated product is removed from a node, the product is also removed from the curated_products list.
          - Once you have curated the products in a node, you can use the get node products endpoint to retrieve a list of curated products.
          
          You can then display your curated products in your catalogs using the following catalog endpoints.
          
          - Get a node in your latest catalog release.
          - Get a node in a catalog.
          - Get all nodes in your latest catalog release.
          - Get all nodes in a catalog.
          - Get node children in your latest catalog release.
          - Get node children in a catalog.
      operationId: createNode
      tags:
        - Hierarchies
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/create_node'
            examples:
              create-node:
                $ref: '#/components/examples/create_node'
      responses:
        '201':
          description: Successfully returns the created node
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_node'
              examples:
                created-node:
                  $ref: '#/components/examples/node_created'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    get:
      parameters:
        - $ref: '#/components/parameters/hierarchy_id'
        - $ref: '#/components/parameters/filter_nodes'
        - $ref: '#/components/parameters/page_offset'
        - $ref: '#/components/parameters/page_limit'
      summary: Get all nodes in a hierarchy
      description: |
        A fully paginated view of all nodes in a hierarchy regardless of depth.

        #### Filtering

        Many Commerce API endpoints support filtering. The general syntax is described in [**Filtering**](/guides/Getting-Started/filtering).

        The following attributes and operators are supported.

        | Operator        | Attribute                                                                                 | Description                                                                                      | Example                                  |
        |----------------|------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|------------------------------------------|
        | `eq`           | `id`, `hierarchy_id`, `owner`, `parent_id`, `name`, `slug`, `description`, `has_children`, `created_at`, `updated_at`, `locales.[locale].name`, `locales.[locale].description`, `breadcrumbs.id`, `breadcrumbs.name`, `breadcrumbs.slug`, `breadcrumbs.locales.[locale].name` | Equals. Checks if the value of the attribute matches the specified value. | `filter=eq(name,some-name)`, `filter=eq(locales.fr-FR.name,Nom-du-produit)` |
        | `in`           | `id`, `hierarchy_id`,  `parent_id`, `breadcrumbs.id`                                              | Checks if the value of the attribute is included in the specified list.                        | `filter=in(id,1,2,3,4)`                 |
        | `lt`, `le`, `gt`, `ge` | `id`, `hierarchy_id`,  `parent_id`, `created_at`, `updated_at`         | Comparison operators. `lt`: Less than, `le`: Less than or equal to, `gt`: Greater than, `ge`: Greater than or equal to. | `filter=lt(id,100)`, `filter=ge(created_at,2022-01-01)` |
        | `like`         | `name`, `slug`, `description`, `locales.[locale].name`, `locales.[locale].description`, `breadcrumbs.name`, `breadcrumbs.slug`, `breadcrumbs.locales.[locale].name` | Like. Checks if the attribute contains the specified string (wildcards supported).            | `filter=like(name,*some-name*)`, `filter=like(locales.es-ES.description,*descripción*)` |
        | `ilike`        | `name`, `slug`, `description`, `locales.[locale].name`, `locales.[locale].description`, `breadcrumbs.name`, `breadcrumbs.slug`, `breadcrumbs.locales.[locale].name` | Case-insensitive like. Same as `like` but ignores case when matching. | `filter=ilike(name,*some-name*)` |
      operationId: getAllNodesInHierarchy
      tags:
        - Hierarchies
      responses:
        '200':
          description: Successfully returns the node's children
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/multi_nodes'
              examples:
                get-all-nodes:
                  $ref: '#/components/examples/resp_multi_nodes'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/hierarchies/{hierarchyID}/nodes/{nodeID}:
    get:
      parameters:
        - $ref: '#/components/parameters/hierarchy_id'
        - $ref: '#/components/parameters/node_id'
      summary: Get a node
      description: Retrieves a node from a hierarchy.
      operationId: getHierarchyNode
      tags:
        - Hierarchies
      responses:
        '200':
          description: Returns a node with the following attributes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_node'
              examples:
                get-node:
                  $ref: '#/components/examples/node_created'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '500':
          $ref: '#/components/responses/internal'
    put:
      parameters:
        - $ref: '#/components/parameters/hierarchy_id'
        - $ref: '#/components/parameters/node_id'
      summary: Update a node
      description: |
        ```mdx-code-block
        import CASummary from '/docs/partials/pxm/custom-attributes/custom-attribute-spec-summary.mdx';

        Updates the specified node in a hierarchy. You can do a partial update, where you specify only the field value to change.

        <CASummary />  
        ```

        ### Sorting Nodes in a Hierarchy

        You can sort the order of your nodes, regardless of where the nodes are in the hierarchy.
          
         The node with the highest value of sort_order is displayed first. For example, a node with a `sort_order` value of `3` appears before a node with a `sort_order` value of `2`.
          
         - If you don’t provide `sort_order` when creating nodes, all child nodes in the response for Get a Node’s Children request are ordered by the `updated_at` time in descending order, with the most recently updated child node first.
         - If you set `sort_order` for only a few child nodes or not all, the child nodes with a `sort_order` value appear first and then other child nodes appear in the order of `updated_at` time.
          
         You can also specify a sort_order when creating a node relationship.

         - If you update a node (**Node A**) with a `sort_order` and then you create a relationship for **Node A** with another node (**Node B**), the `sort_order` you specified when updating **Node A** is overwritten.
         - If you have updated **Node A** and then you create a relationship with **Node B** but do not configure a `sort_order`, the `sort_order` you specified when you updated **Node A** is not overwritten.
          
         ### Curating Products in a Node

         You can curate the products in a node. Product curation allows you to promote specific products within each node of your hierarchies, enabling you to create unique product collections in your storefront. For example, you may find you have an abundance of cotton T-Shirts and you want to promote these products to the top of the product list. When a shopper navigates to T-shirts, the cotton T-Shirts are displayed first.

         You can do this by adding a `curated_products` attribute to the body of your request and adding an array of product IDs to the attribute. You should add the products IDs in the order you want them to be displayed in your node. The first product ID is displayed first in the product list.

         You can only curate 20 products or less. You cannot have more than 20 curated products.
          
         - The product IDs you provide must exist in the specified node.
         - If a curated product is removed from a node, the product is also removed from the curated_products list.
         - Once you have curated the products in a node, you can use the get node products endpoint to retrieve a list of curated products.
          
         You can then display your curated products in your catalogs using the following catalog endpoints.
          
         - [Get a node in your latest catalog release](/docs/api/pxm/catalog/get-node)
         - [Get a node in a catalog](/docs/api/pxm/catalog/get-by-context-node)
         - [Get all nodes in your latest catalog release](/docs/api/pxm/catalog/get-all-nodes)
         - [Get all nodes in a catalog](/docs/api/pxm/catalog/get-by-context-all-nodes)
         - [Get node children in your latest catalog release](/docs/api/pxm/catalog/get-child-nodes)
         - [Get node children in a catalog](/docs/api/pxm/catalog/get-by-context-child-nodes)
      operationId: updateNode
      tags:
        - Hierarchies
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/update_node'
            examples:
              update-node:
                $ref: '#/components/examples/update_node'
      responses:
        '200':
          description: Successfully returns the updated node
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_node'
              examples:
                updated-node:
                  $ref: '#/components/examples/node_updated'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    delete:
      parameters:
        - $ref: '#/components/parameters/hierarchy_id'
        - $ref: '#/components/parameters/node_id'
      summary: Deletes a node
      description: Deletes a node by the node ID
      operationId: deleteNode
      tags:
        - Hierarchies
      responses:
        '204':
          description: No Content
        '403':
          $ref: '#/components/responses/forbidden'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/hierarchies/{hierarchyID}/children:
    get:
      parameters:
        - $ref: '#/components/parameters/hierarchy_id'
        - $ref: '#/components/parameters/filter_nodes'
        - $ref: '#/components/parameters/page_offset'
        - $ref: '#/components/parameters/page_limit'
      summary: Get a hierarchy's children
      description: |
        Get a hierarchy's children

        #### Filtering

        Many Commerce API endpoints support filtering. The general syntax is described in [**Filtering**](/guides/Getting-Started/filtering).

        The following attributes and operators are supported.

        | Operator        | Attribute                                                                                 | Description                                                                                      | Example                                  |
        |----------------|------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|------------------------------------------|
        | `eq`           | `id`, `hierarchy_id`, `owner`, `parent_id`, `name`, `slug`, `description`, `has_children`, `created_at`, `updated_at`, `locales.[locale].name`, `locales.[locale].description`, `breadcrumbs.id`, `breadcrumbs.name`, `breadcrumbs.slug`, `breadcrumbs.locales.[locale].name` | Equals. Checks if the value of the attribute matches the specified value. | `filter=eq(name,some-name)`, `filter=eq(locales.fr-FR.name,Nom-du-produit)` |
        | `in`           | `id`, `hierarchy_id`,  `parent_id`, `breadcrumbs.id`                                              | Checks if the value of the attribute is included in the specified list.                        | `filter=in(id,1,2,3,4)`                 |
        | `lt`, `le`, `gt`, `ge` | `id`, `hierarchy_id`,  `parent_id`, `created_at`, `updated_at`         | Comparison operators. `lt`: Less than, `le`: Less than or equal to, `gt`: Greater than, `ge`: Greater than or equal to. | `filter=lt(id,100)`, `filter=ge(created_at,2022-01-01)` |
        | `like`         | `name`, `slug`, `description`, `locales.[locale].name`, `locales.[locale].description`, `breadcrumbs.name`, `breadcrumbs.slug`, `breadcrumbs.locales.[locale].name` | Like. Checks if the attribute contains the specified string (wildcards supported).            | `filter=like(name,*some-name*)`, `filter=like(locales.es-ES.description,*descripción*)` |
        | `ilike`        | `name`, `slug`, `description`, `locales.[locale].name`, `locales.[locale].description`, `breadcrumbs.name`, `breadcrumbs.slug`, `breadcrumbs.locales.[locale].name` | Case-insensitive like. Same as `like` but ignores case when matching. | `filter=ilike(name,*some-name*)` |
      operationId: getAllChildren
      tags:
        - Hierarchies
      responses:
        '200':
          description: Returns the hierarchy's children.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/multi_nodes'
              examples:
                get-hierarchy-children:
                  $ref: '#/components/examples/resp_multi_nodes'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/hierarchies/{hierarchyID}/relationships/children:
    post:
      parameters:
        - $ref: '#/components/parameters/hierarchy_id'
      summary: Create relationships between a hierarchy and child nodes
      description: |
        Use this endpoint to create relationships between a hierarchy and one or more child nodes. You can create a relationship only if:

        - All child nodes already exist.
        - Every child node in the request body must belong to this hierarchy.
        - All siblings in a hierarchy must have a unique `name` and `slug`. Siblings are the child nodes that are related to the same parent.

        ### Sort Order

        You can also provide `sort_order` information when you create a relationship by adding a `meta` object to the array of node reference objects for each child node that requires sorting.

        The node with the highest value of `sort_order` appears at the top of the response. For example, a node with a `sort_order` value of `3` appears before a node with a `sort_order` value of `2`.

        - If you don’t provide `sort_order` when creating relationships, all child nodes in the response for Get a Hierarchy’s Children request are ordered by the `updated_at` time in descending order. The most recently updated child node appears at the top of the response.
        - If you set `sort_order` for only a few child nodes or not all, the child nodes with `sort_order` value appear first in the response and then other child nodes appear in the order of `updated_at` time.

        You can also specify a `sort_order` when creating and updating a node.

        - If you create or update a node (**Node A**) with a `sort_order` and then you create a relationship for **Node A** with hierarchy (**Hierarchy A**) with a new `sort_order`, the `sort_order` you specified when creating\updating **Node A** is overwritten.
        - If you create\update **Node A** and then you create a relationship with **Hierarchy A** but do not configure a `sort_order`, the `sort_order` you specified when you created\updated **Node A** is not overwritten.
      operationId: createHierarchyChildRelationships
      tags:
        - Hierarchies
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/node_children'
            examples:
              set-node-children:
                $ref: '#/components/examples/node_children'
      responses:
        '200':
          description: Successfully returns the hierarchy
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_hierarchy'
              examples:
                set-node-children:
                  $ref: '#/components/examples/hierarchy_updated'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/hierarchies/{hierarchyID}/nodes/{nodeID}/relationships/children:
    post:
      parameters:
        - $ref: '#/components/parameters/hierarchy_id'
        - $ref: '#/components/parameters/node_id'
      summary: Create relationships between a node and child nodes
      description: |
        Use this endpoint to create relationships between a single parent node and one or more child nodes. You can create a relationship only if:

        - The parent node already exists.
        - All child nodes already exist.
        - Every child node in the body of the request exists in the same hierarchy as the parent node.
        - A node is not a parent of itself. An array of child nodes request body must not contain the ID of the parent node in the path.
        - All siblings in a hierarchy must have a unique `slug`. Siblings are the child nodes that are related to the same parent.

        ### Sort Order

        You can also provide `sort_order` information when you create a relationship by adding a `meta` object to the array of node reference objects for each child node that requires sorting.

        The node with the highest value of `sort_order` appears at the top of the response. For example, a node with a `sort_order` value of `3` appears before a node with a `sort_order` value of `2`.

        - If you don’t provide `sort_order` when creating relationships, all child nodes in the response for Get a Node’s Children request are ordered by the `updated_at` time in descending order. The most recently updated child node appears at the top of the response.
        - If you set `sort_order` for only a few child nodes or not all, the child nodes with `sort_order` value appear first in the response and then other child nodes appear in the order of `updated_at` time.

        You can also specify a `sort_order` when creating and updating a node.

        - If you create or update a node (**Node A**) with a `sort_order` and then you create a relationship for **Node A** with another node (**Node B**) with a new `sort_order`, the `sort_order` you specified when creating\updating **Node A** is overwritten.
        - If you create\update **Node A** and then you create a relationship with **Node B** but do not configure a `sort_order`, the `sort_order` you specified when you created\updated **Node A** is not overwritten.
      operationId: createNodeChildRelationships
      tags:
        - Hierarchies
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/node_children'
            examples:
              set-node-children:
                $ref: '#/components/examples/node_children'
      responses:
        '200':
          description: Successfully returns the parent node
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_node'
              examples:
                set-node-children:
                  $ref: '#/components/examples/node_updated'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/hierarchies/{hierarchyID}/nodes/{nodeID}/children:
    get:
      parameters:
        - $ref: '#/components/parameters/hierarchy_id'
        - $ref: '#/components/parameters/filter_nodes'
        - $ref: '#/components/parameters/node_id'
        - $ref: '#/components/parameters/page_offset'
        - $ref: '#/components/parameters/page_limit'
      summary: Get a node's children
      description: |
        Retrieves the child nodes for a specified node.

        #### Filtering

        Many Commerce API endpoints support filtering. The general syntax is described in [**Filtering**](/guides/Getting-Started/filtering).

        The following attributes and operators are supported.

        | Operator        | Attribute                                                                                 | Description                                                                                      | Example                                  |
        |----------------|------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|------------------------------------------|
        | `eq`           | `id`, `hierarchy_id`, `owner`, `parent_id`, `name`, `slug`, `description`, `has_children`, `created_at`, `updated_at`, `locales.[locale].name`, `locales.[locale].description`, `breadcrumbs.id`, `breadcrumbs.name`, `breadcrumbs.slug`, `breadcrumbs.locales.[locale].name` | Equals. Checks if the value of the attribute matches the specified value. | `filter=eq(name,some-name)`, `filter=eq(locales.fr-FR.name,Nom-du-produit)` |
        | `in`           | `id`, `hierarchy_id`,  `parent_id`, `breadcrumbs.id`                                              | Checks if the value of the attribute is included in the specified list.                        | `filter=in(id,1,2,3,4)`                 |
        | `lt`, `le`, `gt`, `ge` | `id`, `hierarchy_id`,  `parent_id`, `created_at`, `updated_at`         | Comparison operators. `lt`: Less than, `le`: Less than or equal to, `gt`: Greater than, `ge`: Greater than or equal to. | `filter=lt(id,100)`, `filter=ge(created_at,2022-01-01)` |
        | `like`         | `name`, `slug`, `description`, `locales.[locale].name`, `locales.[locale].description`, `breadcrumbs.name`, `breadcrumbs.slug`, `breadcrumbs.locales.[locale].name` | Like. Checks if the attribute contains the specified string (wildcards supported).            | `filter=like(name,*some-name*)`, `filter=like(locales.es-ES.description,*descripción*)` |
        | `ilike`        | `name`, `slug`, `description`, `locales.[locale].name`, `locales.[locale].description`, `breadcrumbs.name`, `breadcrumbs.slug`, `breadcrumbs.locales.[locale].name` | Case-insensitive like. Same as `like` but ignores case when matching. | `filter=ilike(name,*some-name*)` |
      operationId: getAllNodeChildren
      tags:
        - Hierarchies
      responses:
        '200':
          description: Successfully returns the node's children
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/multi_nodes'
              examples:
                get-node-children:
                  $ref: '#/components/examples/resp_multi_nodes'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/hierarchies/{hierarchyID}/nodes/{nodeID}/relationships/parent:
    put:
      parameters:
        - $ref: '#/components/parameters/hierarchy_id'
        - $ref: '#/components/parameters/node_id'
      summary: Update a node's parent
      description: |
        Changes the parent of the specified node. The new parent node must be located within the same hierarchy as the specified node.

        You cannot move a node to another hierarchy. If you want to put the specified node into another hierarchy, create the node in the target hierarchy and delete it from the current hierarchy.
      operationId: updateNodeParent
      tags:
        - Hierarchies
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/node_parent'
            examples:
              update-node-parent:
                $ref: '#/components/examples/node_parent'
      responses:
        '204':
          description: No Content
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    delete:
      parameters:
        - $ref: '#/components/parameters/hierarchy_id'
        - $ref: '#/components/parameters/node_id'
      summary: Delete a node's parent
      operationId: deleteNodeParent
      tags:
        - Hierarchies
      responses:
        '204':
          description: No Content
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/hierarchies/{hierarchyID}/nodes/{nodeID}/relationships/products:
    post:
      parameters:
        - $ref: '#/components/parameters/hierarchy_id'
        - $ref: '#/components/parameters/node_id'
      summary: Create a node's product relationships
      description: Creates relationships between the specified node and one or more products in a specified hierarchy.
      operationId: createNodeProductRelationship
      tags:
        - Hierarchies
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/node_products'
            examples:
              create-node-product-relationships:
                $ref: '#/components/examples/node_products'
      responses:
        '201':
          description: Successfully returns the updated node
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_node'
              examples:
                created-node-product-relationships:
                  $ref: '#/components/examples/node_updated'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    delete:
      parameters:
        - $ref: '#/components/parameters/hierarchy_id'
        - $ref: '#/components/parameters/node_id'
      summary: Deletes a node's product relationships
      operationId: deleteNodeProductRelationships
      tags:
        - Hierarchies
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/node_products'
            examples:
              delete-node-product-relationships:
                $ref: '#/components/examples/node_products'
      responses:
        '200':
          description: Successfully returns the updated node
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_node'
              examples:
                created-node-product-relationships:
                  $ref: '#/components/examples/node_updated'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/hierarchies/{hierarchyID}/nodes/{nodeID}/products:
    get:
      parameters:
        - $ref: '#/components/parameters/hierarchy_id'
        - $ref: '#/components/parameters/node_id'
        - $ref: '#/components/parameters/page_offset'
        - $ref: '#/components/parameters/page_limit'
      summary: Get a node's products
      description: |
        Returns the products associated with the specified hierarchy node from a published catalog. Products must be in a live status. If the products have been curated using the update a hierarchy node endpoint, then the products are returned in the order specified in the `curated_products` attribute in the body of the update a hierarchy node request. A product that is curated has the "curated_product": true attribute displayed.
      operationId: getNodeProducts
      tags:
        - Hierarchies
      responses:
        '200':
          description: Successfully returns the node's products
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/multi_product_response'
              examples:
                get-node-products:
                  $ref: '#/components/examples/multi_product_response'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/hierarchies/{hierarchyID}/duplicate_job:
    post:
      parameters:
        - $ref: '#/components/parameters/hierarchy_id'
      summary: Duplicate a hierarchy
      description: |
        Using this option, you can duplicate an existing hierarchy. This is useful because it enables you to quickly and easily create multiple hierarchies with the same node structure.

        When you duplicate a hierarchy, you can specify a new name and/or a new description and/or a new slug for the duplicated hierarchy. All other attributes will stay the same.

        Any nodes in the existing hierarchy are also replicated in the duplicated hierarchy. In addition, you can optionally use the `include_products` attribute to specify whether you want products associated with the nodes in an existing hierarchy to be associated with the nodes in the duplicated hierarchy. By default, product relationships in an existing hierarchy are not duplicated in a duplicate hierarchy.

        Duplicating a hierarchy is an asynchronous operation. When you duplicate a hierarchy, a job is created. The jobId of the job is displayed in the response. When the job is complete, the duplicate hierarchy operation is also complete. You can use the jobId to see the status of your job using Get a Job.

        Jobs are processed one at a time. You can continue to send duplicate hierarchy requests, but those jobs are queued. In other words, Commerce looks for any jobs that have a status of PENDING and starts the job with the earliest created date. This process is repeated until all jobs are processed. 

        Once the job is complete, run:

        - Get all hierarchies to retrieve the HierarchyId of your duplicated hierarchy.
        - Get a hierarchy to retrieve the nodes and (if applicable) products associated with the duplicated hierarchy.
      operationId: duplicateHierarchy
      tags:
        - Hierarchies
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/duplicate_job'
            examples:
              duplicate-hierarchy:
                $ref: '#/components/examples/duplicate_job'
        required: true
      responses:
        '201':
          description: Successfully returns the duplicate hierarchy job ID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single'
              examples:
                duplicated-hierarchy:
                  $ref: '#/components/examples/duplicate_hierarchy_job_created'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/tags:
    get:
      summary: Get All Product Tags
      description: |
        Retrieves all product tags for a store. A store can view the tags associated with the organization to which the store belongs. However, an organization can only view the tags associated with the organization.
         
      operationId: getAllProductTags
      tags:
        - Product Tags
      responses:
        '200':
          description: Returns all the product tags.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/multi_tag'
              examples:
                list-tags:
                  summary: Get all tags
                  $ref: '#/components/examples/resp_multi_tags'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/tags/{tagID}:
    get:
      summary: Get a Product Tag
      description: Retrieves a product tag for a store. A store can view the tags associated with the organization to which the store belongs. However, an organization can only view the tags associated with the organization.
      operationId: getProductTag
      tags:
        - Product Tags
      parameters:
        - $ref: '#/components/parameters/tag_id'
      responses:
        '200':
          description: Returns a product tag with the following attributes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_tag'
              examples:
                get-tag:
                  summary: Get a tag
                  $ref: '#/components/examples/resp_single_tag'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/custom-relationships:
    post:
      summary: Create a custom relationship
      description: |
        Custom relationships can either be bi-directional or uni-directional.
          - **Uni-Directional**: By setting `bi_directional` to `false` (or omitted from request) a uni-directional custom relationship will be created. 
          Within a uni-directional relationship, if Product A links to Product B, Product B will not link back to Product A. 
          This is ideal when one product (e.g., a base product) recommends another (e.g., an upsell), but the reverse 
          recommendation is unnecessary.
         
         - **Bi-Directional**: By setting `bi_directional` to `true` a bi-directional custom relationship will be created. Within a bi-directional 
         relationship, if Product A is linked to Product B, Product B will automatically link back to Product A. 
         This bi-directionality ensures a consistent experience, where products always suggest each other as related items.
         
          For more information on use cases, see [Custom Relationships](/guides/key-concepts/product-experience-manager/custom-relationships/).

        Custom Relationship slugs must meet the following criteria:
          - be unique 
          - be prefixed with `CRP_`. Product Experience Manager automatically adds the `CRP_` prefix if you do not include it.
          - contain A to Z, a to z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed.
         
        Once a custom relationship has been created, you can then create Product Relationships:
           1. Add the custom relationship to a product. See [Attach a custom relationship to a product](/docs/api/pxm/products/attach-custom-relationships).
           2. Associate a product to multiple products. See [Associate a product with other products under a custom relationship](/docs/api/pxm/products/product-association-id).
      operationId: createCustomRelationship
      tags:
        - Custom Relationships
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/create_custom_relationship'
            examples:
              create-basic-custom-relationship:
                $ref: '#/components/examples/create_basic_custom_relationship'
              create-custom-relationship-external-sort-order:
                $ref: '#/components/examples/create_custom_relationship_with_external_sort_order'
              create-custom-relationship-bi-directional:
                $ref: '#/components/examples/create_custom_relationship_bi_directional'
        required: true
      responses:
        '201':
          description: Returns a created custom relationship with the following attributes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_custom_relationship'
              examples:
                created-basic-custom-relationship:
                  $ref: '#/components/examples/custom_relationship_created'
                created-custom-relationship-external-sort-order:
                  $ref: '#/components/examples/custom_relationship_with_external_sort_order_created'
                created-custom-relationship-bi-directional:
                  $ref: '#/components/examples/custom_relationship_bi_directional_created'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    get:
      operationId: getCustomRelationships
      parameters:
        - $ref: '#/components/parameters/page_offset'
        - $ref: '#/components/parameters/page_limit'
        - $ref: '#/components/parameters/filtercr'
      summary: Get all custom relationships
      description: |
        Gets all Custom Relationships. 

        To see a list of custom relationships a product is attached to, see [Get all Custom Relationships attached to a Product](/docs/api/pxm/products/list-attached-custom-relationship).

        To see a list of products that a product is related to, see [Get all Related Products of a Products' attached Custom Relationship](/docs/api/pxm/products/get-related-products-of-a-product-id).

        ### Filtering

         Many Commerce API endpoints support filtering. The general syntax is described in [**Filtering**](/guides/Getting-Started/filtering).

         The following attributes and operators are supported.

         | Operator | Attribute | Description | Example |
         | :--- |:---|:---|:---|
         | `eq` | `owner`, `slug` | Equals. Checks if the values of two operands are equal. If they are, the condition is true. | `filter=eq(owner,store)` |
         | `in` | `slug`          | In. Checks if a value exists in a given list of values. If the value matches any item in the list, the condition is true. | `filter=in(slug,slug-1,slug-2,slug-3)` |
      tags:
        - Custom Relationships
      responses:
        '200':
          description: Returns a list of all custom relationships.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/multi_custom_relationships'
              examples:
                list-custom-relationships:
                  $ref: '#/components/examples/resp_multi_custom_relationships'
        '400':
          $ref: '#/components/responses/bad_request'
        '500':
          $ref: '#/components/responses/internal'
  /pcm/custom-relationships/{customRelationshipSlug}:
    put:
      operationId: updateCustomRelationship
      parameters:
        - $ref: '#/components/parameters/custom_relationship_slug'
      summary: Update a custom relationship
      description: |
        Updates a custom relationship. 

        A partial update can be performed, where you specify only the fields that need to be changed.

        The custom relationship slug cannot be updated.
      tags:
        - Custom Relationships
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/update_custom_relationship'
            examples:
              update-custom-relationship:
                $ref: '#/components/examples/update_custom_relationship'
        required: true
      responses:
        '200':
          description: Successfully returns the updated custom relationship
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_custom_relationship'
              examples:
                updated-custom-relationship:
                  summary: Updated
                  $ref: '#/components/examples/custom_relationship_updated'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '422':
          $ref: '#/components/responses/unprocessable_entity'
        '500':
          $ref: '#/components/responses/internal'
    get:
      parameters:
        - $ref: '#/components/parameters/custom_relationship_slug'
      summary: Get a custom relationship
      description: |
        Gets a Custom Relationship.

        To see a list of custom relationships a product is attached to, see [Get all Custom Relationships attached to a Product](/docs/api/pxm/products/list-attached-custom-relationship).

        To see a list of products that a product is related to, see [Get all Related Products of a Products' attached Custom Relationship](/docs/api/pxm/products/get-related-products-of-a-product-id).
      operationId: getCustomRelationship
      tags:
        - Custom Relationships
      responses:
        '200':
          description: Returns a custom relationship with the following attributes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/single_custom_relationship'
              examples:
                get-custom-relationship:
                  summary: Get
                  $ref: '#/components/examples/custom_relationship_updated'
        '400':
          $ref: '#/components/responses/bad_request'
        '404':
          $ref: '#/components/responses/not_found'
        '500':
          $ref: '#/components/responses/internal'
    delete:
      operationId: deleteCustomRelationship
      parameters:
        - $ref: '#/components/parameters/custom_relationship_slug'
      summary: Delete a custom relationship
      description: |
        Deletes the specified custom relationship.

        Custom Relationships cannot be deleted if they are in use.
      tags:
        - Custom Relationships
      responses:
        '204':
          description: No Content
        '400':
          $ref: '#/components/responses/bad_request'
        '403':
          $ref: '#/components/responses/forbidden'
        '404':
          $ref: '#/components/responses/not_found'
        '500':
          $ref: '#/components/responses/internal'
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
  schemas:
    job:
      type: object
      required:
        - id
        - type
        - attributes
        - meta
      properties:
        id:
          description: A unique identifier generated when a job is created.
          type: string
        type:
          description: This represents the type of resource object being returned. Always `pim-job`.
          type: string
          enum:
            - pim-job
        attributes:
          type: object
          required:
            - started_at
            - completed_at
            - created_at
            - updated_at
            - type
            - status
          properties:
            started_at:
              description: The date and time a job is started.
              type: string
              example: '2020-09-22T09:00:00'
              format: date-time
              nullable: true
            completed_at:
              type: string
              example: '2020-09-22T09:00:00'
              format: date-time
              nullable: true
              description: The date and time a job is completed.
            created_at:
              type: string
              description: The date and time a job is created.
              example: '2020-09-22T09:00:00'
              format: date-time
            updated_at:
              type: string
              description: The date and time a job is updated.
              example: '2020-09-22T09:00:00'
              format: date-time
            type:
              type: string
              description: |
                The status of a job.

                * `pending` - Commerce has received the request but is currently busy processing other requests.
                * `started` - Commerce has started processing the job.
                * `success` - The job has successfully completed.
                * `failed` - The job has failed.
              enum:
                - child-products
                - product-import
                - product-export
                - hierarchy-duplicate
                - price-import
            status:
              type: string
              enum:
                - pending
                - cancelled
                - started
                - success
                - failed
        meta:
          type: object
          required:
            - x_request_id
          properties:
            x_request_id:
              type: string
              description: Applies to all job types. A unique request ID is generated when a job is created.
            copied_from:
              type: string
              description: Applies to `hierarchy-duplicate` job types. The ID of the original hierarchy that you duplicated.
            hierarchy_id:
              type: string
              description: Applies to `hierarchy-duplicate` job types. The duplicated hierarchy ID.
            file_locations:
              type: array
              nullable: true
              description: If the job type is `product_export`, a link to the file is created when running a job.
              items:
                type: string
            filter:
              type: string
              description: The entities included in the job. For example, if the job type is `product-export`, the PXM products included in the export.
    multi:
      type: object
      required:
        - data
        - meta
      properties:
        data:
          description: An array of jobs.
          type: array
          items:
            $ref: '#/components/schemas/job'
        meta:
          type: object
          required:
            - results
          properties:
            results:
              description: Contains the results for the entire collection.
              type: object
              required:
                - total
              properties:
                total:
                  description: Total number of results for the entire collection.
                  type: integer
                  example: 2
    error:
      required:
        - errors
      properties:
        errors:
          type: array
          items:
            required:
              - status
              - title
            properties:
              status:
                type: string
                description: The HTTP response code of the error.
                example: '500'
              title:
                type: string
                description: A brief summary of the error.
                example: Internal server error
              detail:
                type: string
                description: Optional additional detail about the error.
                example: An internal error has occurred.
              request_id:
                type: string
                description: Internal request ID.
                example: 00000000-0000-0000-0000-000000000000
              meta:
                type: object
                description: Additional supporting meta data for the error.
                example:
                  missing_ids:
                    - e7d50bd5-1833-43c0-9848-f9d325b08be8
    single:
      type: object
      required:
        - data
      properties:
        data:
          $ref: '#/components/schemas/job'
    errors:
      type: object
      properties:
        data:
          type: array
          description: An array of job errors.
          items:
            type: object
            properties:
              type:
                description: This represents the type of resource object being returned. Always `pim-job-error`.
                type: string
                example: pim-job-error
                enum:
                  - pim-job-error
              id:
                description: A unique identifier for a job error generated when a job error is created.
                type: string
              attributes:
                type: object
                properties:
                  message:
                    description: A description of an error message.
                    type: string
                    example: 'data.attributes.sku: Must be unique amongst products.'
    product_locales:
      type: object
      description: Product Experience Manager supports localization of products and hierarchies. If your store supports multiple languages, you can localize product names and descriptions. You can have as many locales as you want.
      additionalProperties:
        description: A [three-letter language code](https://www.iso.org/iso-639-language-code) that represents the name of language you have used.
        type: object
        required:
          - name
        properties:
          name:
            type: string
            description: A localized name for the product.
          description:
            type: string
            description: A localized description for the product.
    product_custom_inputs:
      type: object
      description: You use the `custom_inputs` attribute to 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. See [Personalizing Products](/docs/api/pxm/products/create-product#personalizing-products).
      additionalProperties:
        description: A name for the custom text field. You can rename this to something more representative of the input that shoppers are adding, for example, `message` or `front`.
        type: object
        properties:
          name:
            type: string
            description: A name for the custom text field.
          validation_rules:
            type: array
            description: The validation rules for the custom text.
          type:
            description: This represents the type of the resource being returned.
            type: string
          options:
            type: object
            description: The length of the custom input text field.
          max_length:
            type: integer
            description: The number of characters the custom text field can be. You can specify a maximum length up to 255 characters, as the limit is 255 characters.
          required:
            type: boolean
            description: '`true` or `false` depending on whether the custom text is required.'
    product_build_rules:
      type: object
      description: You can build a combination of child products associated with a product, based on build rules that you specify. This is useful, for example, if you have a variation option that you do not sell. This makes managing and building your child products quick and easy. See [Using Build Rules](/docs/api/pxm/products/build-child-products#using-build-rules).
      properties:
        default:
          description: Specifies the default behaviour, either `include` or `exclude`.
          type: string
          enum:
            - include
            - exclude
        include:
          description: An array of option IDs to include when child products are built. Each combination consists of a nested array of option IDs from one or more variations. Combinations of option IDs in the nested arrays must come from different variations.
          type: array
          items:
            type: array
            items:
              type: string
        exclude:
          description: An array of option IDs to exclude when child products are built. Each combination consists of a nested array of option IDs from one or more variations. Combinations of option IDs in the nested arrays must come from different variations.
          type: array
          items:
            type: array
            items:
              type: string
    product_bundle_components:
      type: object
      description: With Product Experience Manager, you can create and manage bundles. A bundle is a purchasable product, consisting of one or more products that you want to sell together. You can create multiple components within a bundle. Each component must have at least one or more options. Each option is a product and a quantity. See [Bundles](/docs/api/pxm/products/products#bundles).
      additionalProperties:
        description: The name of the component, such as `games`. The `bundle_configuration` uses the component name to reference a component. A component name should be relatively short and must not contain any special characters.
        type: object
        properties:
          name:
            type: string
            description: The component name. The component name is the name that is displayed in your storefront.
          options:
            type: array
            description: The product options included in a component. This can be the ID of another bundle.
            items:
              type: object
              properties:
                id:
                  type: string
                  description: The unique ID of the product you want to add to a component.
                type:
                  type: string
                  description: This represents the type of object being returned. Always `product`.
                quantity:
                  type: integer
                  minimum: 1
                  description: The number of this product option that a shopper must purchase.
                min:
                  type: integer
                  minimum: 1
                  description: The minimum quantity of this product option that a shopper can select. Must be 1 or greater. If specified, max must also be specified.
                max:
                  type: integer
                  minimum: 1
                  description: The maximum quantity of this product option that a shopper can select. Must be 1 or greater and greater than or equal to min. If specified, min must also be specified.
                sort_order:
                  type: integer
                  description: The sort order of the options. The `create a bundle` and `update a bundle` endpoints do not sort the options. You can use the `sort_order` attribute when programming your storefront to display the options in the order that you want.
                default:
                  description: Whether the product option is a default option in a bundle. Shoppers can select a bundle that specifies a default list of product options. See [Dynamic Bundles](/docs/api/pxm/products/products#dynamic-bundles).
                  type: boolean
          min:
            type: integer
            description: The minimum number of product options a shopper can select from this component.
          max:
            type: integer
            description: The maximum number of product options a shopper can select from this component.
          sort_order:
            type: integer
            description: The sort order of the components. The `create a bundle` and `update a bundle` endpoints do not sort the components. You can use the `sort_order` attribute when programming your storefront to display the components in the order that you want.
    product_response:
      type: object
      properties:
        id:
          description: A unique product ID that is generated when you create the product.
          type: string
        type:
          description: This represents the type of resource object being returned. Always `product`.
          type: string
          enum:
            - product
        attributes:
          type: object
          additionalProperties: false
          properties:
            name:
              description: A name for the product.
              type: string
            description:
              description: A description for the product.
              type: string
            slug:
              description: A label for the product that is used in the URL paths. A slug can contain A to Z, a to z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed. By default, the product name is used as the slug.
              type: string
            sku:
              description: The unique stock keeping unit of the product.
              type: string
            status:
              description: The status for the product, either `draft` or `live`.
              type: string
              enum:
                - live
                - draft
            commodity_type:
              description: The commodity type, either `physical` or `digital`.
              type: string
              enum:
                - physical
                - digital
            upc_ean:
              description: The universal product code or european article number of the product.
              type: string
            mpn:
              description: The manufacturer part number of the product.
              type: string
            external_ref:
              description: The unique attribute associated with the product. This could be an external reference from a separate company system, for example. The maximum length is 2048 characters.
              type: string
            locales:
              $ref: '#/components/schemas/product_locales'
            tags:
              description: You can use product tags to store or assign a key word against a product. The product tag can then be used to describe or label that product. Using product tags means that you can group your products together, for example, by brand, category, subcategory, colors, types, industries, and so on. A product can have up to 20 tags. A product tag can be up to 255 characters. Product tags must not contain any spaces or commas.
              type: array
              items:
                type: string
            extensions:
              type: object
              additionalProperties:
                type: object
                additionalProperties:
                  oneOf:
                    - type: string
                      nullable: true
                    - type: integer
                    - type: boolean
            custom_inputs:
              $ref: '#/components/schemas/product_custom_inputs'
            build_rules:
              $ref: '#/components/schemas/product_build_rules'
            components:
              $ref: '#/components/schemas/product_bundle_components'
        meta:
          type: object
          properties:
            created_at:
              description: The date and time a product is created.
              type: string
              example: '2020-09-22T09:00:00'
              format: date-time
            updated_at:
              description: The date and time a product is updated.
              type: string
              example: '2020-09-22T09:00:00'
              format: date-time
            owner:
              description: The resource owner, either `organization` or `store`.
              type: string
              enum:
                - organization
                - store
            variations:
              description: A product's variations and the options defined for each variation. If you have specified `build_rules`, only the child products included in the `build_rules` are specified.
              type: array
              items:
                type: object
                properties:
                  id:
                    type: string
                    description: A unique ID generated when a variation is created.
                  name:
                    type: string
                    description: The name of a variation.
                  options:
                    type: array
                    items:
                      type: object
                      description: The options available for this variation.
                      properties:
                        id:
                          type: string
                          description: A unique ID that is generated an option is created.
                        name:
                          type: string
                          description: The name of an option.
                        description:
                          type: string
                          description: A description of an option.
            custom_relationships:
              description: Custom relationship slugs that are attached to the product.
              type: array
            child_variations:
              description: A child product's variations and the option defined for each variation. This details the variation and options specific to a child product.
              type: array
              nullable: true
              items:
                type: object
                properties:
                  id:
                    type: string
                    description: A unique ID generated when a variation is created.
                  name:
                    type: string
                    description: The name of a variation.
                  sort_order:
                    description: The sort order value is visible when you add the variations and variation options to your catalogs. You can then use the `sort_order` value to program your storefront to display the variation options in the order that you want. The variation with the highest value of `sort_order` is displayed first. For example, a variation with a `sort_order` value of 3 appears before a variation with a `sort_order` value of 2. You can specify any numbers that you want. You can use 1, 2, 3, or 100, 90, 80, including, zero or negative numbers. You can set `sort_order` to either `null` or omit it entirely from the request if you wish to remove an existing `sort_order` attribute.
                    type: integer
                  options:
                    type: array
                    nullable: true
                    description: This will be unset for child product variations.
                    items:
                      type: object
                      description: The options available for this variation.
                      properties:
                        id:
                          type: string
                          description: A unique ID that is generated an option is created.
                        name:
                          type: string
                          description: The name of an option.
                        description:
                          type: string
                          description: A description of an option.
                  option:
                    type: object
                    description: The options available for this variation.
                    properties:
                      id:
                        type: string
                        description: A unique ID that is generated an option is created.
                      name:
                        type: string
                        description: The name of an option.
                      description:
                        type: string
                        description: A description of an option.
            product_types:
              description: |
                One of the following product types: 

                - `standard` - A `standard` product is a standalone product.
                - `parent` - A `parent` product is a product that has child products that have been built 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.
              type: array
              items:
                type: string
                enum:
                  - parent
                  - child
                  - bundle
                  - standard
            variation_matrix:
              description: The child products defined for a product. The order of the variations in the `variation_matrix` is the order of the variations in the array when the variations were linked to the product. For example, the first variation in the `variation_matrix` corresponds to the first variation in the array, and so on. You can use the `sort_order`attribute to sort the order of your variation and variation options in the `variation_matrix` object. See [Sorting the Order of Variations and Options](/docs/api/pxm/products/variations#sorting-the-order-of-variations-and-options) If no variations are defined for a product, the `variation_matrix` is empty.
              type: object
        relationships:
          description: Relationships are established between different product entities. For example, a `bundle` product and a `child` product are related to a `parent` product, as both are associated with it.
          type: object
          additionalProperties:
            type: object
            properties:
              data:
                oneOf:
                  - type: array
                    items:
                      type: object
                      properties:
                        id:
                          description: A unique identifier for a resource.
                          type: string
                        type:
                          description: This represents the type of resource object being returned.
                          type: string
                  - type: object
                    nullable: true
                    properties:
                      id:
                        description: A unique identifier for a resource.
                        type: string
                      type:
                        description: This represents the type of resource object being returned.
                        type: string
              links:
                description: |
                  Links are used to allow you to move between requests. Single entities use a `self` parameter with a link to that specific resource. Sometimes, there are not enough entities for a project to fill multiple pages. In this situation, we return some defaults.

                   | Property | Description |
                   | :--- | :--- |
                   | `current` | Always the current page. |
                   | `first` | Always the first page. |
                   | `last` | `null` if there is only one page. |
                   | `prev` | `null` if the user is on the first page. |
                   | `next` | `null` if there is only one page. |
                type: object
                additionalProperties:
                  type: string
    elastic_path_file:
      type: object
      title: ElasticPathFile
      properties:
        id:
          type: string
          description: The unique identifier for this file.
          format: uuid
        type:
          description: The type represents the object being returned.
          type: string
          example: file
        file_name:
          description: The name of the file.
          type: string
          example: file_name.jpg
        mime_type:
          description: The mime type of the file.
          type: string
          example: image/jpeg
        file_size:
          description: The size of the file. Required when uploading files.
          type: integer
          example: 36000
        public:
          description: DEPRECATED Whether the file public or not. Required when uploading files.
          type: boolean
          example: true
        meta:
          properties:
            timestamps:
              type: object
              description: The date and time the file was created.
              properties:
                created_at:
                  description: The date and time the file was created.
                  type: string
                  example: '2023-10-11T13:02:25.293Z'
            dimensions:
              description: The file dimensions.
              type: object
              properties:
                width:
                  description: The width of the file.
                  type: integer
                  example: 1800
                height:
                  description: The height of the file.
                  type: integer
                  example: 1000
        links:
          description: Links are used to allow you to move between requests.
          type: object
          properties:
            self:
              description: Single entities use a self parameter with a link to that specific resource.
              type: string
              example: https://useast.api.elasticpath.com/v2/files/ddc28c74-a7df-46be-b262-8fa69a6e7d52
        link:
          type: object
          description: The publicly available URL for this file.
          properties:
            href:
              description: The publicly available URL for this file.
              type: string
              example: https://files-eu.epusercontent.com/e8c53cb0-120d-4ea5-8941-ce74dec06038/f8cf26b3-6d38-4275-937a-624a83994702.png
            meta:
              type: object
              properties:
                results:
                  description: Contains the results for the entire collection.
                  type: object
                  properties:
                    total:
                      description: Total number of results for the entire collection.
                      type: integer
                      example: 2
    included_response:
      type: object
      description: Included is an array of resources that are included in the response.
      properties:
        main_images:
          description: The main images associated with a product.
          type: array
          items:
            $ref: '#/components/schemas/elastic_path_file'
        component_products:
          description: Returns a list of component products in a product bundle. If a bundle has no component products (in other words, is not a product bundle), an empty array is returned.
          type: array
          items:
            $ref: '#/components/schemas/product_response'
        files:
          description: The files associated with a product.
          type: array
          items:
            $ref: '#/components/schemas/elastic_path_file'
    multi_links:
      type: object
      description: |
        Links allow you to navigate between pages of results.

        :::caution Planned pagination changes — on or after 1 June 2026

        The pagination behaviour of PIM list endpoints (for example, `GET /pcm/products` and `GET /pcm/hierarchies`) currently differs from the rest of the Elastic Path Commerce Cloud platform. We plan to align PIM pagination with the platform standard on or after **1 June 2026**. Please review the details below and check that your integration code will handle the new behaviour correctly.

        :::

        #### Current behaviour

        The current pagination link behaviour in PIM has the following known issues:

        - The `current` link is **not returned**.
        - The `first` and `last` links are **not always returned**.
        - The `prev` link is omitted on both the first **and** second pages. It should only be omitted on the first page.
        - The `next` link is omitted on both the last **and** second-to-last pages. It should only be omitted on the last page.

        #### Planned behaviour (on or after 1 June 2026)

        On or after 1 June 2026, PIM list endpoints will adopt the following pagination link behaviour, aligning with the rest of the platform:

        - `current` — always present, pointing to the current page.
        - `first` — always present.
        - `last` — present on all pages **except the final page**. Omitting `last` on the final page is intentional, to avoid triggering infinite‑loop bugs in integration code that uses the presence of `last` to detect whether more pages remain.
        - `next` — present on all pages except the last page.
        - `prev` — present on all pages except the first page.
      properties:
        current:
          description: |
            A link to the current page of results. **Note:** this link is not currently returned by PIM endpoints. It will be introduced on or after 1 June 2026.
          type: string
          example: /pcm/hierarchies?page[offset]=10&page[limit]=10
        first:
          description: |
            A link to the first page of results. Currently this may not always be present. After the planned changes it will always be present.
          type: string
          example: /pcm/hierarchies?page[offset]=0&page[limit]=10
        last:
          description: |
            A link to the last page of results. Currently this may not always be present. After the planned changes it will be present on all pages except the final page (where it is intentionally omitted).
          type: string
          example: /pcm/hierarchies?page[offset]=20&page[limit]=10
        next:
          description: |
            A link to the next page of results. Should be absent on the last page. Currently this is incorrectly absent on the second-to-last page as well; this will be fixed on or after 1 June 2026.
          type: string
          example: /pcm/hierarchies?page[offset]=10&page[limit]=10
        prev:
          description: |
            A link to the previous page of results. Should be absent on the first page. Currently this is incorrectly absent on the second page as well; this will be fixed on or after 1 June 2026.
          type: string
          example: /pcm/hierarchies?page[offset]=8&page[limit]=10
    multi_product_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/product_response'
        included:
          $ref: '#/components/schemas/included_response'
        links:
          $ref: '#/components/schemas/multi_links'
        meta:
          type: object
          properties:
            results:
              description: Contains the results for the entire collection.
              type: object
              properties:
                total:
                  description: Total number of results for the entire collection.
                  type: integer
                  example: 2
    product_attributes:
      type: object
      additionalProperties: false
      properties:
        external_ref:
          type: string
          description: The unique attribute associated with the product. This could be an external reference from a separate company system, for example. The maximum length is 2048 characters.
        name:
          type: string
          description: The product name to display to customers.
        description:
          description: A description for the product.
          type: string
        slug:
          type: string
          description: The unique slug of the product. A slug can contain A to Z, a to z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed.
        sku:
          type: string
          description: The unique stock keeping unit of the product.
        status:
          type: string
          enum:
            - live
            - draft
          description: The status for the product, either `draft` or `live`. Default is `draft`.  For a product to appear in a catalog it must be in a `live` status.
        commodity_type:
          description: The commodity type, either `physical` or `digital`.
          type: string
          enum:
            - physical
            - digital
        upc_ean:
          type: string
          description: The universal product code or european article number of the product.
        mpn:
          type: string
          description: The manufacturer part number of the product.
        tags:
          type: array
          description: You can use product tags to store or assign a key word against a product. The product tag can then be used to describe or label that product. Using product tags means that you can group your products together, for example, by brand, category, subcategory, colors, types, industries, and so on. A product can have up to 20 tags. A product tag can be up to 255 characters. Product tags must not contain any spaces or commas. See [Product Tags](/docs/api/pxm/products/product-tags).
          items:
            type: string
        build_rules:
          $ref: '#/components/schemas/product_build_rules'
        locales:
          $ref: '#/components/schemas/product_locales'
        custom_inputs:
          $ref: '#/components/schemas/product_custom_inputs'
        components:
          $ref: '#/components/schemas/product_bundle_components'
    create_product_request:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - type
            - attributes
          properties:
            type:
              description: This represents the type of resource being returned. Always `product`.
              type: string
              enum:
                - product
              example: product
            attributes:
              $ref: '#/components/schemas/product_attributes'
            relationships:
              description: Relationships are established between different product entities.
              type: object
              properties:
                variations:
                  type: object
                  properties:
                    data:
                      type: array
                      items:
                        type: object
                        properties:
                          id:
                            description: A unique identifier for a resource.
                            type: string
                          type:
                            description: This represents the type of resource object being returned.
                            type: string
    single_product_response:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/product_response'
        included:
          $ref: '#/components/schemas/included_response'
    update_product_request:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - type
            - attributes
            - id
          properties:
            type:
              description: This represents the type of resource object being returned. Always `product`.
              type: string
              enum:
                - product
              example: product
            id:
              type: string
              description: The unique identifier of the product. Must match the product ID specified in the request path.
              example: 00000000-0000-0000-0000-000000000000
            attributes:
              $ref: '#/components/schemas/product_attributes'
    admin_attributes:
      type: object
      description: |
        `admin_attributes` are not displayed in catalogs. This means `admin_attributes` can only be viewed by administrators. If you want a custom attribute to be displayed in a catalog, you must add it to `shopper_attributes`. 

        `admin_attributes` are structured as key-value pairs. Both the keys and values are `strings`. You can have up to 100 keys.
      example:
        cost_of_goods: '42.0'
        charge_type: credit card
      additionalProperties:
        nullable: true
        type: string
    shopper_attributes:
      type: object
      description: |
        `shopper_attributes` are displayed in catalogs. This means `shopper_attributes` can be viewed by both shoppers and administrators. If you do not want a custom attribute to be displayed in a catalog, you must add it to `admin_attributes`. 

        `shopper_attributes` are structured as key-value pairs. Both the keys and values are `strings`. You can have up to 100 keys.
      example:
        cost_of_goods: '42.0'
        charge_type: credit card
      additionalProperties:
        nullable: true
        type: string
    attributes:
      type: object
      properties:
        name:
          description: The name of the node, such as `Ranges` or `Refrigerators`. Names must be unique among sibling nodes in the hierarchy. Otherwise, a name can be non-unique within the hierarchy and across multiple hierarchies.
          type: string
        description:
          description: A description for a node.
          type: string
        slug:
          description: A slug for the node. Slugs must be unique among sibling nodes in the hierarchy. Otherwise, a slug can be non-unique within the hierarchy and across multiple hierarchies.
          type: string
        curated_products:
          description: You can curate your products in your nodes product lists. Product curation allows you to promote specific products within each node in a hierarchy, enabling you to create unique product collections in your storefront.
          type: array
          items:
            description: A list of product IDs whose products you want to curate.
            type: string
        admin_attributes:
          $ref: '#/components/schemas/admin_attributes'
        shopper_attributes:
          $ref: '#/components/schemas/shopper_attributes'
        locales:
          description: Product Experience Manager supports localization of hierarchies and nodes. If you store supports multiple languages, you can localize hierarchy and node names and descriptions.
          type: object
          additionalProperties:
            description: A [three-letter language code](https://www.iso.org/iso-639-language-code) that represents the name of language you have used.
            type: object
            additionalProperties: false
            properties:
              name:
                description: A localized hierarchy or node name.
                type: string
              description:
                description: A localized hierarchy or node description.
                type: string
    relationships:
      type: object
      description: Relationships allow you to move between requests. Includes links to the child nodes and products associated with a hierarchy or node.
      properties:
        children:
          description: The child nodes related to the resource.
          type: object
          properties:
            data:
              description: An array of child nodes.
              type: array
              items: {}
            links:
              description: Links allow you to move between requests.
              type: object
              properties:
                related:
                  description: A link to a related resource.
                  type: string
        parent:
          description: The parent node related to the resource
          type: object
          properties:
            data:
              description: The parent node
              type: object
              required:
                - id
                - type
              properties:
                type:
                  description: This represents the type of resource object being returned. Always `node`.
                  type: string
                  enum:
                    - node
                id:
                  description: The unique identifier of a node.
                  type: string
        products:
          type: object
          description: The products related to the resource.
          properties:
            data:
              description: An array of products.
              type: array
              items: {}
            links:
              type: object
              description: Links allow you to move between requests.
              properties:
                related:
                  description: A link to a related resource.
                  type: string
    node:
      type: object
      required:
        - id
        - type
        - attributes
        - relationships
        - meta
      properties:
        id:
          description: The unique identifier of a node.
          type: string
        type:
          description: This represents the type of resource object being returned. Always `node`.
          type: string
          enum:
            - node
        attributes:
          $ref: '#/components/schemas/attributes'
        relationships:
          $ref: '#/components/schemas/relationships'
        meta:
          type: object
          properties:
            sort_order:
              description: The sort order value. The node with the highest value of `sort_order` is displayed first. For example, a node with a `sort_order` value of `3` appears before a node with a `sort_order` value of `2`. See [Sorting Nodes in a hierarchy](/docs/api/pxm/products/create-node#sorting-nodes-in-a-hierarchy).
              type: integer
            created_at:
              description: The date and time a node is created.
              type: string
              example: '2020-09-22T09:00:00'
              format: date-time
            updated_at:
              description: The date and time a node was updated.
              type: string
              example: '2020-09-22T09:00:00'
              format: date-time
            parent_name:
              description: The name of the parent of the node if one exists.
              type: string
            owner:
              description: The node owner, either `organization` or `store`.
              type: string
              enum:
                - store
                - organization
            hierarchy_id:
              description: The unique identifier of hierarchy
              type: string
            breadcrumbs:
              type: array
              description: Breadcrumbs
              items:
                type: object
                properties:
                  id:
                    description: The unique identifier of a hierarchy/node.
                    type: string
                  name:
                    description: The name of the hierarchy/node.
                    type: string
                  slug:
                    description: A slug for the hierarchy/node.
                    type: string
                  locales:
                    description: Product Experience Manager supports localization of hierarchies and nodes. If you store supports multiple languages, you can localize hierarchy and node names and descriptions.
                    type: object
                    additionalProperties:
                      description: A [three-letter language code](https://www.iso.org/iso-639-language-code) that represents the name of language you have used.
                      type: object
                      additionalProperties: false
                      properties:
                        name:
                          description: A localized hierarchy or node name.
                          type: string
    multi_meta:
      type: object
      properties:
        results:
          description: Contains the results for the entire collection.
          type: object
          properties:
            total:
              description: Total number of results for the entire collection.
              type: integer
              example: 30
              minimum: 0
    multi_nodes:
      type: object
      required:
        - data
      properties:
        data:
          description: An array of nodes.
          type: array
          items:
            $ref: '#/components/schemas/node'
        meta:
          $ref: '#/components/schemas/multi_meta'
        links:
          $ref: '#/components/schemas/multi_links'
    template_response:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              id:
                description: A unique identifier for a template generated when a template is created.
                type: string
              type:
                description: This represents the type of resource object being returned. Always `template`.
                type: string
                enum:
                  - template
    product_templates_request:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                description: The unique identifier of a template.
              type:
                type: string
                enum:
                  - template
                description: This represents the type of resource object being returned. Always `template`.
    component_products_response:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                description: The unique identifier of a product component generated when a product is created.
              type:
                type: string
                enum:
                  - product
                description: This represents the type of resource object being returned. Always `product`.
    file_response:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                description: The unique identifier of the new file.
              type:
                type: string
                description: This represents the type of resource object being returned. Always `file`.
                enum:
                  - file
    product_files_request:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              id:
                description: A unique identifier for a file generated when a file is created.
                type: string
              type:
                description: This represents the type of resource being returned. Always `file`.
                type: string
                enum:
                  - file
              meta:
                type: object
                properties:
                  tags:
                    description: The files associated with a product.
                    type: array
                    items:
                      type: string
                additionalProperties: false
    variations_response:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              id:
                description: A unique identifier generated when a variation is created.
                type: string
              type:
                description: This represents the type of resource object being returned. Always `product-variation`.
                type: string
                enum:
                  - product-variation
              meta:
                type: object
                properties:
                  created_at:
                    description: The date and time a resource is created.
                    type: string
                    example: '2020-09-22T09:00:00'
                    format: date-time
    product_variations_request:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                description: The ID of the product variation.
              type:
                type: string
                enum:
                  - product-variation
                description: This represents the type of resource being returned. Always `product-variation`.
    main_image_response:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              id:
                description: A unique identifier for the image file generated automatically when a file is created.
                type: string
              type:
                description: This represents the type of resource object being returned. Always `file`.
                type: string
    replace_main_image_request:
      type: object
      properties:
        data:
          type: object
          properties:
            id:
              type: string
              description: The ID of the new image file.
              example: 00000000-0000-0000-0000-000000000000
            type:
              type: string
              enum:
                - file
    main_image_request:
      type: object
      properties:
        data:
          type: object
          properties:
            id:
              type: string
              description: The ID of the image file.
              example: 00000000-0000-0000-0000-000000000000
            type:
              description: This represents the type of resource being returned. Always `file`.
              type: string
              enum:
                - file
    attach_custom_relationship_request:
      type: object
      required:
        - data
      properties:
        data:
          type: array
          items:
            type: object
            required:
              - slug
              - type
            properties:
              slug:
                type: string
                description: The slug of the custom relationship.
              type:
                type: string
                enum:
                  - custom-relationship
                description: This represents the type of resource. Always `custom-relationship`.
    req_attributes_custom_relationship:
      type: object
      additionalProperties: false
      required:
        - name
        - slug
      properties:
        name:
          description: The name of the custom relationship to display to shoppers, such as `Kitchen electrics`.
          type: string
          example: Related Products
        description:
          description: A description of the custom relationship.
          type: string
          example: A list of related products shown on the PDP.
        slug:
          description: A unique slug for the custom relationship. Must match the slug specified in the request path. A slug can contain A to Z, a to z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed.
          type: string
          example: CRP_related_products
          pattern: ^[A-Za-z0-9._-]+$
        sort_order:
          description: The order in which the custom relationship should be displayed in relation to others. A lower value represents a higher priority in the display order. If set to NULL, the sort order will be removed.
          nullable: true
          type: integer
          example: 5
        external_name:
          description: The shopper-facing name for the custom relationship. This value will be displayed to shoppers in the store-front, replacing the internal name if present. If set to NULL, the external name will be removed.
          nullable: true
          type: string
          example: Similar items to consider
        external_description:
          description: The shopper-facing description for the custom relationship. This value will be shown to shoppers in the store-front, replacing the internal description if present. If set to NULL, the external description will be removed.
          nullable: true
          type: string
          example: Check out these similar products that may also meet your needs or match your preferences.
        bi_directional:
          type: boolean
          description: Is this relationship one way or bi-directional `true` or `false`. Default is false
          default: false
    custom_relationship:
      type: object
      required:
        - id
        - type
        - attributes
        - meta
      properties:
        id:
          description: A unique identifier generated when a custom relationship is created.
          type: string
        type:
          description: This represents the type of resource object being returned. Always `custom-relationship`.
          type: string
          enum:
            - custom-relationship
        attributes:
          $ref: '#/components/schemas/req_attributes_custom_relationship'
        meta:
          type: object
          required:
            - owner
            - timestamps
          properties:
            owner:
              description: The owner of the resource.
              type: string
              example: store
            timestamps:
              type: object
              required:
                - created_at
                - updated_at
              properties:
                created_at:
                  description: The date and time the resource is created.
                  type: string
                  example: '2024-01-10T20:16:35.343Z'
                  format: date-time
                updated_at:
                  description: The date and time the resource is updated.
                  type: string
                  example: '2024-01-10T20:16:35.343Z'
                  format: date-time
    multi_links_cr:
      type: object
      description: Links are used to allow you to move between requests.
      properties:
        first:
          description: Always the first page.
          type: string
          example: /pcm/custom_relationships?page[offset]=0&page[limit]=10
        last:
          description: This is `null` if there is only one page.
          type: string
          example: /pcm/custom_relationships?page[offset]=20&page[limit]=10
        next:
          description: This is `null` if there is only one page.
          type: string
          example: /pcm/custom_relationships?page[offset]=10&page[limit]=10
        prev:
          description: This is `null` if you on the first page.
          type: string
          example: /pcm/custom_relationships?page[offset]=8&page[limit]=10
    multi_custom_relationships:
      type: object
      required:
        - data
        - meta
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/custom_relationship'
        links:
          $ref: '#/components/schemas/multi_links_cr'
        meta:
          $ref: '#/components/schemas/multi_meta'
    product_association_list_product_ids_response:
      type: object
      required:
        - data
      properties:
        data:
          type: array
          items:
            type: object
            required:
              - id
              - type
            properties:
              id:
                description: A unique identifier generated when a product relationship is created.
                type: string
              type:
                description: This represents the type of resource object being returned. Always `product`.
                type: string
                enum:
                  - product
              attributes:
                type: object
                properties:
                  sort_order:
                    description: The order in which the product to product should be displayed in relation to others. A lower value represents a higher priority in the display order. If set to NULL, the sort order will be removed.
                    nullable: true
                    type: integer
                    example: 5
    product_association_request:
      type: object
      required:
        - data
      properties:
        data:
          type: array
          items:
            type: object
            required:
              - id
              - type
            properties:
              id:
                type: string
                description: The ID of the product you want to relate.
              type:
                type: string
                enum:
                  - product
                description: This represents the type of resource being returned. Always `product`.
              attributes:
                type: object
                properties:
                  sort_order:
                    description: The order in which the product to product should be displayed in relation to others. A lower value represents a higher priority in the display order. If set to NULL, the sort order will be removed.
                    nullable: true
                    type: integer
                    example: 5
    product_association_response:
      type: object
      properties:
        meta:
          type: object
          properties:
            associated_products:
              description: A list of product IDs that have been successfully associated with this custom relationship.
              type: array
              items:
                type: string
              example:
                - 68c48149-0e94-4ef2-93d5-8d5f3774980a
                - ab4826d1-4a5a-4951-a2a5-98058899f891
            products_not_associated:
              description: A list of products that could not be associated, including the reasons why.
              type: array
              items:
                type: object
                properties:
                  ID:
                    description: The ID of the product that could not be associated.
                    type: string
                    example: 97b7fac2-91dd-4755-81b0-bdffe8e7eabd
                  Details:
                    description: Details about why the product could not be associated.
                    type: string
                    example: could not find product
              example:
                - ID: 97b7fac2-91dd-4755-81b0-bdffe8e7eabd
                  Details: could not find product
                - ID: a0ef3291-2ec1-4d7d-9d6d-1705ae01bb99
                  Details: product already has 5 custom relationships, cannot associate more as it has reached the limit of 5 custom relationships
                - ID: bde79675-4783-40b7-8a7e-ac6df41459c6
                  Details: product already has 5 custom relationships, cannot associate more as it has reached the limit of 5 custom relationships
                - ID: aaddd5f4-a5f8-42e8-be9a-097986f22e58
                  Details: exceeded maximum allowed associations (2000). Please review and try again
            owner:
              description: The owner of the resource.
              type: string
              example: store
            timestamps:
              type: object
              properties:
                created_at:
                  description: The date and time the resource was created.
                  type: string
                  example: '2024-08-08T09:29:08.295Z'
                  format: date-time
                updated_at:
                  description: The date and time the resource was last updated.
                  type: string
                  example: '2024-08-08T09:29:08.295Z'
                  format: date-time
    product_association_delete_request:
      type: object
      required:
        - data
      properties:
        data:
          type: array
          items:
            type: object
            required:
              - id
              - type
            properties:
              id:
                type: string
                description: The ID of the product you want to relate.
              type:
                type: string
                enum:
                  - product
                description: This represents the type of resource being returned. Always `product`.
    multi_variations:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              id:
                description: A unique identifier for a variation.
                type: string
              type:
                description: This represents the type of resource object being returned. Always `product-variation`.
                type: string
                enum:
                  - product-variation
              attributes:
                type: object
                additionalProperties: false
                properties:
                  name:
                    description: The name of a variation.
                    type: string
                  sort_order:
                    description: The sort order value is visible when you add the variations and variation options to your catalogs. You can then use the `sort_order` value to program your storefront to display the variation options in the order that you want. The variation with the highest value of `sort_order` is displayed first. For example, a variation with a `sort_order` value of 3 appears before a variation with a `sort_order` value of 2. You can specify any numbers that you want. You can use 1, 2, 3, or 100, 90, 80, including, zero or negative numbers. You can set `sort_order` to either `null` or omit it entirely from the request if you wish to remove an existing `sort_order` attribute.
                    type: integer
              meta:
                type: object
                properties:
                  options:
                    type: array
                    items:
                      type: object
                      description: The options available for this variation.
                      properties:
                        id:
                          type: string
                          description: A unique ID that is generated when an option is created.
                        name:
                          type: string
                          description: A human recognizable identifier for the option, also used in the SLUG for child products. Option names can only contain A to Z, a to z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed.
                        description:
                          type: string
                          description: A human recognizable description of the option.
                        created_at:
                          type: string
                          description: The date and time an option is created.
                          example: '2020-09-22T09:00:00'
                          format: date-time
                        updated_at:
                          type: string
                          description: The date and time an option is updated.
                          example: '2020-09-22T09:00:00'
                          format: date-time
                        sort_order:
                          description: The sort order value is visible when you add the variations and variation options to your catalogs. You can then use the `sort_order` value to program your storefront to display the variation options in the order that you want. The variation with the highest value of `sort_order` is displayed first. For example, a variation with a `sort_order` value of 3 appears before a variation with a `sort_order` value of 2. You can specify any numbers that you want. You can use 1, 2, 3, or 100, 90, 80, including, zero or negative numbers. You can set `sort_order` to either `null` or omit it entirely from the request if you wish to remove an existing `sort_order` attribute.
                          type: integer
                  owner:
                    type: string
                    description: The owner of the resource, either `organization` or `store`.
                    enum:
                      - organization
                      - store
                  created_at:
                    type: string
                    description: The date and time a variation is created.
                    example: '2020-09-22T09:00:00'
                    format: date-time
                  updated_at:
                    type: string
                    description: The date and time a variation is updated.
                    example: '2020-09-22T09:00:00'
                    format: date-time
        meta:
          type: object
          properties:
            results:
              description: Contains the results for the entire collection.
              type: object
              properties:
                total:
                  description: Total number of results for the entire collection.
                  type: integer
                  example: 3
    create_variation:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - type
            - attributes
          properties:
            type:
              description: This represents the type of resource object being returned. Always `product-variation`.
              type: string
              enum:
                - product-variation
            attributes:
              type: object
              additionalProperties: false
              properties:
                name:
                  description: The variation name.
                  type: string
                sort_order:
                  description: |
                    The sort order value is visible when you add the variations and variation options to your catalogs. You can then use the `sort_order` value to program your storefront to display the variation options in the order that you want. 
                     
                     The variation with the highest value of `sort_order` is displayed first. For example, a variation with a `sort_order` value of 3 appears before a variation with a `sort_order` value of 2. 
                     
                     You can specify any numbers that you want. You can use 1, 2, 3, or 100, 90, 80, including, zero or negative numbers. You can set `sort_order` to either `null` or omit it entirely from the request if you wish to remove an existing `sort_order` attribute.
                     
                     You must rebuild your products for the sort order changes to take effect.
                  type: integer
    created_variation:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - id
            - type
            - attributes
            - meta
          properties:
            id:
              description: A unique identifier generated when a variation is created.
              type: string
            type:
              description: This represents the type of resource object being returned. Always `product-variation`.
              type: string
              enum:
                - product-variation
            attributes:
              type: object
              additionalProperties: false
              properties:
                name:
                  description: A human-recognizable identifier for a variation.
                  type: string
                sort_order:
                  description: The sort order value is visible when you add the variations and variation options to your catalogs. You can then use the `sort_order` value to program your storefront to display the variation options in the order that you want. The variation with the highest value of `sort_order` is displayed first. For example, a variation with a `sort_order` value of 3 appears before a variation with a `sort_order` value of 2. You can specify any numbers that you want. You can use 1, 2, 3, or 100, 90, 80, including, zero or negative numbers. You can set `sort_order` to either `null` or omit it entirely from the request if you wish to remove an existing `sort_order` attribute.
                  type: integer
            meta:
              type: object
              properties:
                owner:
                  description: The owner of the resource, either `organization` or `store`.
                  type: string
                  enum:
                    - organization
                    - store
                created_at:
                  type: string
                  description: The date and time a variation is created.
                  example: '2020-09-22T09:00:00'
                  format: date-time
                updated_at:
                  type: string
                  description: The date and time a variation is updated.
                  example: '2020-09-22T09:00:00'
                  format: date-time
    single_variation:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - id
            - type
            - attributes
            - meta
          properties:
            id:
              description: A unique identifier for a variation.
              type: string
            type:
              description: This represents the type of resource object being returned. Always `product-variation`.
              type: string
              enum:
                - product-variation
            attributes:
              type: object
              additionalProperties: false
              properties:
                name:
                  description: The name for a variation.
                  type: string
                sort_order:
                  description: The sort order value is visible when you add the variations and variation options to your catalogs. You can then use the `sort_order` value to program your storefront to display the variation options in the order that you want. The variation with the highest value of `sort_order` is displayed first. For example, a variation with a `sort_order` value of 3 appears before a variation with a `sort_order` value of 2. You can specify any numbers that you want. You can use 1, 2, 3, or 100, 90, 80, including, zero or negative numbers. You can set `sort_order` to either `null` or omit it entirely from the request if you wish to remove an existing `sort_order` attribute.
                  type: integer
            meta:
              type: object
              properties:
                options:
                  description: A variation option represents an option for selection for a single product-variation. For example, if your variation is `color`, you might have three possible options; red, green, and blue.
                  type: array
                  items:
                    type: object
                    description: The options available for this variation
                    properties:
                      id:
                        type: string
                        description: A unique ID that is generated an option is created.
                      name:
                        type: string
                        description: A human-recognizable identifier for the option, also used in the SLUG for child products. Option names can only contain A to Z, a to z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed.
                      description:
                        type: string
                        description: A description for an option.
                      created_at:
                        type: string
                        description: The date and time an option is created.
                        example: '2020-09-22T09:00:00'
                        format: date-time
                      updated_at:
                        type: string
                        description: The date and time an option is updated.
                        example: '2020-09-22T09:00:00'
                        format: date-time
                      sort_order:
                        description: The sort order value is visible when you add the variations and variation options to your catalogs. You can then use the `sort_order` value to program your storefront to display the variation options in the order that you want. The variation with the highest value of `sort_order` is displayed first. For example, a variation with a `sort_order` value of 3 appears before a variation with a `sort_order` value of 2. You can specify any numbers that you want. You can use 1, 2, 3, or 100, 90, 80, including, zero or negative numbers. You can set `sort_order` to either `null` or omit it entirely from the request if you wish to remove an existing `sort_order` attribute.
                        type: integer
                owner:
                  description: The owner of the resource, either `organization` or `store`.
                  type: string
                  enum:
                    - organization
                    - store
                created_at:
                  type: string
                  description: The date and time a variation is created.
                updated_at:
                  type: string
                  description: The date and time a variation is updated.
    update_variation:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - type
            - attributes
            - id
          properties:
            type:
              description: This represents the type of resource object being returned. Always `product-variation`.
              type: string
              enum:
                - product-variation
            attributes:
              type: object
              additionalProperties: false
              properties:
                name:
                  description: The variation name.
                  type: string
                sort_order:
                  description: |
                    The sort order value is visible when you add the variations and variation options to your catalogs. You can then use the `sort_order` value to program your storefront to display the variation options in the order that you want. 
                     
                     The variation with the highest value of `sort_order` is displayed first. For example, a variation with a `sort_order` value of 3 appears before a variation with a `sort_order` value of 2. 
                     
                     You can specify any numbers that you want. You can use 1, 2, 3, or 100, 90, 80, including, zero or negative numbers. You can set `sort_order` to either `null` or omit it entirely from the request if you wish to remove an existing `sort_order` attribute.
                     
                     You must rebuild your products for the sort order changes to take effect.
                  type: integer
            id:
              type: string
              description: The unique identifier of the variation. Must match the variation ID specified in the request path.
              example: 00000000-0000-0000-0000-000000000000
    multi_options:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              id:
                description: A unique identifier generated when an option is created.
                type: string
              type:
                description: This represents the type of resource object being returned. Always `product-variation-option`.
                type: string
                enum:
                  - product-variation-option
              attributes:
                type: object
                additionalProperties: false
                properties:
                  name:
                    description: A human-recognizable identifier for the option, also used in the SLUG for child products. Option names can only contain A to Z, a to z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed.
                    type: string
                  description:
                    description: A human-recognizable description for the option.
                    type: string
                  sort_order:
                    description: The sort order value is visible when you add the variations and variation options to your catalogs. You can then use the `sort_order` value to program your storefront to display the variation options in the order that you want. The variation with the highest value of `sort_order` is displayed first. For example, a variation with a `sort_order` value of 3 appears before a variation with a `sort_order` value of 2. You can specify any numbers that you want. You can use 1, 2, 3, or 100, 90, 80, including, zero or negative numbers. You can set `sort_order` to either `null` or omit it entirely from the request if you wish to remove an existing `sort_order` attribute.
                    type: integer
              meta:
                type: object
                properties:
                  owner:
                    description: The owner of a resource, either `organization` or `store`.
                    type: string
                    enum:
                      - organization
                      - store
                  created_at:
                    type: string
                    description: The date and time an option is created.
                    example: '2020-09-22T09:00:00'
                    format: date-time
                  updated_at:
                    type: string
                    description: The date and time an option is updated.
                    example: '2020-09-22T09:00:00'
                    format: date-time
        meta:
          type: object
          properties:
            results:
              description: Contains the results for the entire collection.
              type: object
              properties:
                total:
                  description: Total number of results for the entire collection.
                  type: integer
                  example: 3
    create_option:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - type
            - attributes
          properties:
            type:
              description: This represents the type of resource object being returned. Always `product-variation-option`.
              type: string
              enum:
                - product-variation-option
            attributes:
              type: object
              additionalProperties: false
              required:
                - name
                - description
              properties:
                name:
                  description: A human recognizable identifier for the option, also used in the SLUG for child products. Option names can only contain A to Z, a to z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed.
                  type: string
                sort_order:
                  description: |
                    By default, variations and variation options are sorted alphabetically. You can use the `sort_order` attribute to sort the order of your variation and variation options in the `variation_matrix`. 
                     
                     The sort order value is visible when you add the variations and variation options to your catalogs. You can then use the `sort_order` value to program your storefront to display the variation options in the order that you want.  
                     
                     The variation option with the highest value of `sort_order` is displayed first. For example, a variation option with a `sort_order` value of `3` appears before a variation option with a `sort_order` value of `2`. You can specify any numbers that you want. You can use 1, 2, 3, or 100, 90, 80, and so on, zero or negative numbers. 
                     
                     You can set `sort_order` to either `null` or omit it entirely from the request if you wish to remove an existing `sort_order` attribute.
                     
                     You must rebuild your products for the sort order changes to take effect.
                  type: integer
                description:
                  description: A description of a product variation option.
                  type: string
    created_option:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - type
            - attributes
          properties:
            id:
              description: A unique identifier that is generated when an option is created.
              type: string
            type:
              description: This represents the type of resource object being returned. Always `product-variation-option`.
              type: string
              enum:
                - product-variation-option
            attributes:
              type: object
              additionalProperties: false
              properties:
                name:
                  description: A human-recognizable identifier for the option, also used in the SLUG for child products. Option names can only contain A to Z, a to z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed.
                  type: string
                description:
                  description: A human-recognizable description for the option.
                  type: string
                sort_order:
                  description: The sort order value is visible when you add the variations and variation options to your catalogs. You can then use the `sort_order` value to program your storefront to display the variation options in the order that you want. The variation with the highest value of `sort_order` is displayed first. For example, a variation with a `sort_order` value of 3 appears before a variation with a `sort_order` value of 2. You can specify any numbers that you want. You can use 1, 2, 3, or 100, 90, 80, including, zero or negative numbers. You can set `sort_order` to either `null` or omit it entirely from the request if you wish to remove an existing `sort_order` attribute.
                  type: integer
            meta:
              type: object
              properties:
                owner:
                  description: The owner of a resource, either `organization` or `store`.
                  type: string
                  enum:
                    - organization
                    - store
                created_at:
                  type: string
                  description: The date and time an option is created.
                  example: '2020-09-22T09:00:00'
                  format: date-time
                updated_at:
                  type: string
                  description: The date and time an option is updated.
                  example: '2020-09-22T09:00:00'
                  format: date-time
    single_option:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - id
            - type
            - attributes
            - meta
          properties:
            id:
              description: The unique identifier generated when an option is created.
              type: string
            type:
              description: This represents the type of resource object being returned. Always `product-variation-option`.
              type: string
              enum:
                - product-variation-option
            attributes:
              type: object
              description: A variation option represents an option for selection for a single product-variation. For example, if your variation is `color`, you might have three possible options; red, green, and blue.
              additionalProperties: false
              properties:
                name:
                  description: A human-recognizable identifier for the option, also used in the SLUG for child products. Option names can only contain A to Z, a to z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed.
                  type: string
                description:
                  description: A human-recognizable description for the option.
                  type: string
                sort_order:
                  description: The sort order value is visible when you add the variations and variation options to your catalogs. You can then use the `sort_order` value to program your storefront to display the variation options in the order that you want. The variation with the highest value of `sort_order` is displayed first. For example, a variation with a `sort_order` value of 3 appears before a variation with a `sort_order` value of 2. You can specify any numbers that you want. You can use 1, 2, 3, or 100, 90, 80, including, zero or negative numbers. You can set `sort_order` to either `null` or omit it entirely from the request if you wish to remove an existing `sort_order` attribute.
                  type: integer
            meta:
              type: object
              properties:
                owner:
                  description: The owner of a resource, either `organization` or `store`.
                  type: string
                  enum:
                    - organization
                    - store
                created_at:
                  type: string
                  description: The date and time an option is created.
                  example: '2020-09-22T09:00:00'
                  format: date-time
                updated_at:
                  type: string
                  description: The date and time an option is updated.
                  example: '2020-09-22T09:00:00'
                  format: date-time
    update_option:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - type
            - attributes
            - id
          properties:
            type:
              description: This represents the type of resource object being returned. Always `product-variation-option`.
              type: string
              enum:
                - product-variation-option
            attributes:
              type: object
              additionalProperties: false
              required:
                - name
                - description
              properties:
                name:
                  description: A human recognizable identifier for the option, also used in the SLUG for child products. Option names can only contain A to Z, a to z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed.
                  type: string
                description:
                  description: The description of the option.
                  type: string
                sort_order:
                  description: |
                    By default, variations and variation options are sorted alphabetically. You can use the `sort_order` attribute to sort the order of your variation and variation options in the `variation_matrix`. The sort order value is visible when you add the variations and variation options to your catalogs. You can then use the `sort_order` value to program your storefront to display the variation options in the order that you want.  

                    The variation option with the highest value of `sort_order` is displayed first. For example, a variation option with a `sort_order` value of `3` appears before a variation option with a `sort_order` value of `2`. 

                    You can specify any numbers that you want. You can use 1, 2, 3, or 100, 90, 80, and so on, zero or negative numbers. 

                    You can set `sort_order` to either `null` or omit it entirely from the request if you wish to remove an existing `sort_order` attribute.

                    You must rebuild your products for the sort order changes to take effect.
                  type: integer
            id:
              type: string
              description: The unique identifier of the option. Must match the option ID specified in the request path.
              example: 00000000-0000-0000-0000-000000000000
    multi_modifiers:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              id:
                description: A unique identifier for a modifier that is generated automatically when a modifier is created.
                type: string
              type:
                description: This represents the type of resource object being returned. Always `product-variation-modifier`.
                type: string
                enum:
                  - product-variation-modifier
              attributes:
                type: object
                additionalProperties: false
                properties:
                  type:
                    description: |
                      You can specify different modifiers for different options in a variation. When you build child products using options in variations, the properties of a child products depends on the modifier set for the options that are applied to the child product. The table below describes the different types of modifiers.

                      | Modifier | Data Type | Effect |
                      | :--- | :--- | :--- |
                      | `name_equals` | `string` | Overrides the name of the child product with the name specified by the modifier. |
                      | `name_append` | `string` | Appends the string specified in the modifier to the name of the child product. |
                      | `name_prepend` | `string` | Prepends the string specified in the modifier to the name of the child product. |
                      | `description_equals` | `string` | Overrides the description of the child product. |
                      | `description_append` | `string` | Appends the string specified in the modifier to the description of the child product. |
                      | `description_prepend` | `string` | Prepends the string specified in the modifier to the product description of the child product. |
                      | `commodity_type` | `string` | Sets the commodity type of the child product, such as `physical` or `digital`. |
                      | `price` | `string` | Allows application of price modifiers (`price_increment`, `price_decrement`, and `price_equals`) to the child products. |
                      | `price_increment` | `string` | Increases the price of the child product. |
                      | `price_decrement` | `string` | Decreases the price of the child product. |
                      | `price_equals` | `string` | Sets the price of a child product to the amount you specify. |
                      | `slug_append` | `string` | Appends the string specified in the modifier to the slug of the child product. Can only contain A-Z, a-z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed. However, for the `slug-builder` modifier, you can use `{}` in the `seek` field, for example, `"seek": :{COLOR}"`. |
                      | `slug_prepend` | `string` | Prepends the string specified in the modifier to the slug of the child product. Can only contain A-Z, a-z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed. However, for the `slug-builder` modifier, you can use `{}` in the `seek` field, for example, `"seek": :{COLOR}"`. |
                      | `slug_builder` | `string`| Sets a part of the slug of the child product. Can only contain A-Z, a-z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed. However, for the `slug-builder` modifier, you can use `{}` in the `seek` field, for example, `"seek": :{COLOR}"`. |
                      | `sku_equals` | `string` | Sets the SKU of the child product. |
                      | `sku_append` | `string` | Appends the string specified in the modifier to the SKU of the child product. |
                      | `sku_prepend` | `string` | Prepends the string specified in the modifier to the SKU of the child product. |
                      | `sku_builder` | `string` | Sets a part of the SKU of the child product. |
                      | `status` | `string` | Sets the status of the child product, such as `draft` or `live`. |
                    type: string
                    enum:
                      - commodity_type
                      - status
                      - price
                      - name_append
                      - name_prepend
                      - name_equals
                      - sku_append
                      - sku_prepend
                      - sku_equals
                      - sku_builder
                      - slug_append
                      - slug_prepend
                      - slug_equals
                      - slug_builder
                      - description_append
                      - description_prepend
                      - description_equals
                      - custom_inputs_equals
                      - build_rules_equals
                      - locales_equals
                      - upc_ean_equals
                      - mpn_equals
                      - external_ref_equals
                  value:
                    description: Required for non-builder modifiers. The value of the modifier type.
                    type: string
                  seek:
                    description: Required for builder modifiers. The sub-string to find and replace enclosed in curly brackets for `slug_builder` and `sku_builder`.
                    type: string
                  set:
                    description: Required for builder modifiers. The value to replace matches the `seek` string for `slug_builder` and `sku_builder`.
                    type: string
                  reference_name:
                    description: The name of the modifier.
                    type: string
              meta:
                type: object
                properties:
                  owner:
                    description: The owner of a resource, either `organization` or `store`.
                    type: string
                    enum:
                      - store
                      - organization
        meta:
          type: object
          properties:
            results:
              type: object
              description: Contains the results for the entire collection.
              properties:
                total:
                  description: Total number of results for the entire collection.
                  type: integer
                  example: 3
    create_modifier:
      type: object
      description: Use modifiers to change the properties of child products that are inherited from a parent product. With modifiers, you only need to have one parent product with a variation attached to the product.
      required:
        - data
      properties:
        data:
          type: object
          required:
            - type
            - attributes
          properties:
            type:
              description: This represents the type of resource object being returned. Always `product-variation-modifier`.
              type: string
              enum:
                - product-variation-modifier
            attributes:
              type: object
              required:
                - type
              additionalProperties: false
              properties:
                type:
                  type: string
                  description: |
                    You can specify different modifiers for different options in a variation. When you build child products using options in variations, the properties of a child products depends on the modifier set for the options that are applied to the child product. See [Create a Modifier](/docs/api/pxm/products/create-modifier).
                  enum:
                    - commodity_type
                    - status
                    - price
                    - name_append
                    - name_prepend
                    - name_equals
                    - sku_append
                    - sku_prepend
                    - sku_equals
                    - sku_builder
                    - slug_append
                    - slug_prepend
                    - slug_equals
                    - slug_builder
                    - description_append
                    - description_prepend
                    - description_equals
                    - custom_inputs_equals
                    - build_rules_equals
                    - locales_equals
                    - upc_ean_equals
                    - mpn_equals
                    - external_ref_equals
                value:
                  description: Required for non-builder modifiers. The value of the modifier type.
                  type: string
                seek:
                  description: Required for builder modifiers. The sub-string to find and replace enclosed in curly brackets for `slug_builder` and `sku_builder`.
                  type: string
                set:
                  description: Required for builder modifiers. The value to replace matches the `seek` string for `slug_builder` and `sku_builder`.
                  type: string
                reference_name:
                  description: A name for the modifier.
                  type: string
    created_modifier:
      type: object
      properties:
        data:
          type: object
          properties:
            id:
              description: A unique identifier for a modifier that is generated automatically when a modifier is created.
              type: string
            type:
              description: This represents the type of resource object being returned. Always `product-variation-modifier`.
              type: string
              enum:
                - product-variation-modifier
            attributes:
              type: object
              additionalProperties: false
              properties:
                type:
                  description: |
                    You can specify different modifiers for different options in a variation. When you build child products using options in variations, the properties of a child products depends on the modifier set for the options that are applied to the child product. The table below describes the different types of modifiers.

                    | Modifier | Data Type | Effect |
                    | :--- | :--- | :--- |
                    | `name_equals` | `string` | Overrides the name of the child product with the name specified by the modifier. |
                    | `name_append` | `string` | Appends the string specified in the modifier to the name of the child product. |
                    | `name_prepend` | `string` | Prepends the string specified in the modifier to the name of the child product. |
                    | `description_equals` | `string` | Overrides the description of the child product. |
                    | `description_append` | `string` | Appends the string specified in the modifier to the description of the child product. |
                    | `description_prepend` | `string` | Prepends the string specified in the modifier to the product description of the child product. |
                    | `commodity_type` | `string` | Sets the commodity type of the child product, such as `physical` or `digital`. |
                    | `price` | `string` | Allows application of price modifiers (`price_increment`, `price_decrement`, and `price_equals`) to the child products. |
                    | `price_increment` | `string` | Increases the price of the child product. |
                    | `price_decrement` | `string` | Decreases the price of the child product. |
                    | `price_equals` | `string` | Sets the price of a child product to the amount you specify. |
                    | `slug_append` | `string` | Appends the string specified in the modifier to the slug of the child product. Can only contain A-Z, a-z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed. However, for the `slug-builder` modifier, you can use `{}` in the `seek` field, for example, `"seek": :{COLOR}"`. |
                    | `slug_prepend` | `string` | Prepends the string specified in the modifier to the slug of the child product. Can only contain A-Z, a-z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed. However, for the `slug-builder` modifier, you can use `{}` in the `seek` field, for example, `"seek": :{COLOR}"`. |
                    | `slug_builder` | `string`| Sets a part of the slug of the child product. Can only contain A-Z, a-z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed. However, for the `slug-builder` modifier, you can use `{}` in the `seek` field, for example, `"seek": :{COLOR}"`. |
                    | `sku_equals` | `string` | Sets the SKU of the child product. |
                    | `sku_append` | `string` | Appends the string specified in the modifier to the SKU of the child product. |
                    | `sku_prepend` | `string` | Prepends the string specified in the modifier to the SKU of the child product. |
                    | `sku_builder` | `string` | Sets a part of the SKU of the child product. |
                    | `status` | `string` | Sets the status of the child product, such as `draft` or `live`. |
                  type: string
                  enum:
                    - commodity_type
                    - status
                    - price
                    - name_append
                    - name_prepend
                    - name_equals
                    - sku_append
                    - sku_prepend
                    - sku_equals
                    - sku_builder
                    - slug_append
                    - slug_prepend
                    - slug_equals
                    - slug_builder
                    - description_append
                    - description_prepend
                    - description_equals
                    - custom_inputs_equals
                    - build_rules_equals
                    - locales_equals
                    - upc_ean_equals
                    - mpn_equals
                    - external_ref_equals
                value:
                  description: Required for non-builder modifiers. The value of the modifier type.
                  type: string
                seek:
                  description: Required for builder modifiers. The sub-string to find and replace enclosed in curly brackets for `slug_builder` and `sku_builder`.
                  type: string
                set:
                  description: Required for builder modifiers. The value to replace matches the `seek` string for `slug_builder` and `sku_builder`.
                  type: string
                reference_name:
                  description: The name of the modifier.
                  type: string
            meta:
              type: object
              properties:
                owner:
                  description: The owner of the resource, either `organization` or `store`.
                  type: string
                  enum:
                    - organization
                    - store
    single_modifier:
      type: object
      properties:
        data:
          type: object
          properties:
            id:
              description: A unique identifier for a modifier that is generated automatically when a modifier is created.
              type: string
            type:
              description: This represents the type of resource object being returned. Always `product-variation-modifier`.
              type: string
              enum:
                - product-variation-modifier
            attributes:
              type: object
              additionalProperties: false
              properties:
                type:
                  description: |
                    You can specify different modifiers for different options in a variation. When you build child products using options in variations, the properties of a child products depends on the modifier set for the options that are applied to the child product. The table below describes the different types of modifiers.

                    | Modifier | Data Type | Effect |
                    | :--- | :--- | :--- |
                    | `name_equals` | `string` | Overrides the name of the child product with the name specified by the modifier. |
                    | `name_append` | `string` | Appends the string specified in the modifier to the name of the child product. |
                    | `name_prepend` | `string` | Prepends the string specified in the modifier to the name of the child product. |
                    | `description_equals` | `string` | Overrides the description of the child product. |
                    | `description_append` | `string` | Appends the string specified in the modifier to the description of the child product. |
                    | `description_prepend` | `string` | Prepends the string specified in the modifier to the product description of the child product. |
                    | `commodity_type` | `string` | Sets the commodity type of the child product, such as `physical` or `digital`. |
                    | `price` | `string` | Allows application of price modifiers (`price_increment`, `price_decrement`, and `price_equals`) to the child products. |
                    | `price_increment` | `string` | Increases the price of the child product. |
                    | `price_decrement` | `string` | Decreases the price of the child product. |
                    | `price_equals` | `string` | Sets the price of a child product to the amount you specify. |
                    | `slug_append` | `string` | Appends the string specified in the modifier to the slug of the child product. Can only contain A-Z, a-z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed. However, for the `slug-builder` modifier, you can use `{}` in the `seek` field, for example, `"seek": :{COLOR}"`. |
                    | `slug_prepend` | `string` | Prepends the string specified in the modifier to the slug of the child product. Can only contain A-Z, a-z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed. However, for the `slug-builder` modifier, you can use `{}` in the `seek` field, for example, `"seek": :{COLOR}"`. |
                    | `slug_builder` | `string`| Sets a part of the slug of the child product. Can only contain A-Z, a-z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed. However, for the `slug-builder` modifier, you can use `{}` in the `seek` field, for example, `"seek": :{COLOR}"`. |
                    | `sku_equals` | `string` | Sets the SKU of the child product. |
                    | `sku_append` | `string` | Appends the string specified in the modifier to the SKU of the child product. |
                    | `sku_prepend` | `string` | Prepends the string specified in the modifier to the SKU of the child product. |
                    | `sku_builder` | `string` | Sets a part of the SKU of the child product. |
                    | `status` | `string` | Sets the status of the child product, such as `draft` or `live`. |
                  type: string
                  enum:
                    - commodity_type
                    - status
                    - price
                    - name_append
                    - name_prepend
                    - name_equals
                    - sku_append
                    - sku_prepend
                    - sku_equals
                    - sku_builder
                    - slug_append
                    - slug_prepend
                    - slug_equals
                    - slug_builder
                    - description_append
                    - description_prepend
                    - description_equals
                    - custom_inputs_equals
                    - build_rules_equals
                    - locales_equals
                    - upc_ean_equals
                    - mpn_equals
                    - external_ref_equals
                value:
                  description: Required for non-builder modifiers. The value of the modifier type.
                  type: string
                seek:
                  description: Required for builder modifiers. The sub-string to find and replace enclosed in curly brackets for `slug_builder` and `sku_builder`.
                  type: string
                set:
                  description: Required for builder modifiers. The value to replace matches the `seek` string for `slug_builder` and `sku_builder`.
                  type: string
                reference_name:
                  description: The name of the modifier.
                  type: string
            meta:
              type: object
              description: The owner of the resource, either `organization` or `store`.
              properties:
                owner:
                  type: string
                  enum:
                    - organization
                    - store
    update_modifier:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - type
            - attributes
            - id
          properties:
            type:
              description: This represents the type of resource object being returned. Always `product-variation-modifier`.
              type: string
              enum:
                - product-variation-modifier
            attributes:
              type: object
              required:
                - type
              additionalProperties: false
              properties:
                type:
                  description: |
                    You can specify different modifiers for different options in a variation. When you build child products using options in variations, the properties of a child products depends on the modifier set for the options that are applied to the child product. The table below describes the different types of modifiers.

                    | Modifier | Data Type | Effect |
                    | :--- | :--- | :--- |
                    | `name_equals` | `string` | Overrides the name of the child product with the name specified by the modifier. |
                    | `name_append` | `string` | Appends the string specified in the modifier to the name of the child product. |
                    | `name_prepend` | `string` | Prepends the string specified in the modifier to the name of the child product. |
                    | `description_equals` | `string` | Overrides the description of the child product. |
                    | `description_append` | `string` | Appends the string specified in the modifier to the description of the child product. |
                    | `description_prepend` | `string` | Prepends the string specified in the modifier to the product description of the child product. |
                    | `commodity_type` | `string` | Sets the commodity type of the child product, such as `physical` or `digital`. |
                    | `price` | `string` | Allows application of price modifiers (`price_increment`, `price_decrement`, and `price_equals`) to the child products. |
                    | `price_increment` | `string` | Increases the price of the child product. |
                    | `price_decrement` | `string` | Decreases the price of the child product. |
                    | `price_equals` | `string` | Sets the price of a child product to the amount you specify. |
                    | `slug_append` | `string` | Appends the string specified in the modifier to the slug of the child product. Can only contain A-Z, a-z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed. However, for the `slug-builder` modifier, you can use `{}` in the `seek` field, for example, `"seek": :{COLOR}"`. |
                    | `slug_prepend` | `string` | Prepends the string specified in the modifier to the slug of the child product. Can only contain A-Z, a-z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed. However, for the `slug-builder` modifier, you can use `{}` in the `seek` field, for example, `"seek": :{COLOR}"`. |
                    | `slug_builder` | `string`| Sets a part of the slug of the child product. Can only contain A-Z, a-z, 0 to 9, hyphen, underscore, and period. Spaces or other special characters like ^, [], *, and $ are not allowed. However, for the `slug-builder` modifier, you can use `{}` in the `seek` field, for example, `"seek": :{COLOR}"`. |
                    | `sku_equals` | `string` | Sets the SKU of the child product. |
                    | `sku_append` | `string` | Appends the string specified in the modifier to the SKU of the child product. |
                    | `sku_prepend` | `string` | Prepends the string specified in the modifier to the SKU of the child product. |
                    | `sku_builder` | `string` | Sets a part of the SKU of the child product. |
                    | `status` | `string` | Sets the status of the child product, such as `draft` or `live`. |
                  type: string
                  enum:
                    - commodity_type
                    - status
                    - price
                    - name_append
                    - name_prepend
                    - name_equals
                    - sku_append
                    - sku_prepend
                    - sku_equals
                    - sku_builder
                    - slug_append
                    - slug_prepend
                    - slug_equals
                    - slug_builder
                    - description_append
                    - description_prepend
                    - description_equals
                    - custom_inputs_equals
                    - build_rules_equals
                    - locales_equals
                    - upc_ean_equals
                    - mpn_equals
                    - external_ref_equals
                value:
                  description: Required for non-builder modifiers. The value of the modifier type.
                  type: string
                seek:
                  description: Required for builder modifiers. The sub-string to find and replace enclosed in curly brackets for `slug_builder` and `sku_builder`.
                  type: string
                set:
                  description: Required for builder modifiers. The value to replace matches the `seek` string for `slug_builder` and `sku_builder`.
                  type: string
                reference_name:
                  description: The name of the modifier.
                  type: string
            id:
              type: string
              description: The unique identifier of the modifier. Must match the modifier ID specified in the request path.
              example: 00000000-0000-0000-0000-000000000000
    attributes_hierarchy:
      type: object
      properties:
        name:
          description: The name of a hierarchy, such as `Major Appliances`.
          type: string
        description:
          description: A description for a hierarchy.
          type: string
        slug:
          description: A unique slug for a hierarchy.
          type: string
        admin_attributes:
          $ref: '#/components/schemas/admin_attributes'
        shopper_attributes:
          $ref: '#/components/schemas/shopper_attributes'
        locales:
          description: Product Experience Manager supports localization of hierarchies and nodes. If you store supports multiple languages, you can localize hierarchy and node names and descriptions.
          type: object
          additionalProperties:
            description: A [three-letter language code](https://www.iso.org/iso-639-language-code) that represents the name of language you have used.
            type: object
            additionalProperties: false
            properties:
              name:
                description: A localized hierarchy or node name.
                type: string
              description:
                description: A localized hierarchy or node description.
                type: string
    relationships_hierarchy:
      type: object
      properties:
        children:
          description: The child nodes related to the hierarchy.
          type: object
          properties:
            data:
              description: An array of child nodes.
              type: array
              items: {}
            links:
              description: Links allow you to move between requests.
              type: object
              properties:
                related:
                  description: A link to a related resource.
                  type: string
    hierarchy:
      type: object
      required:
        - id
        - type
        - meta
        - relationships
        - attributes
      properties:
        id:
          description: A unique identifier generated when a hierarchy is created.
          type: string
        type:
          description: This represents the type of resource object being returned. Always `hierarchy`.
          type: string
          enum:
            - hierarchy
        attributes:
          $ref: '#/components/schemas/attributes_hierarchy'
        relationships:
          $ref: '#/components/schemas/relationships_hierarchy'
        meta:
          type: object
          properties:
            created_at:
              description: The date and time a hierarchy is created.
              type: string
              example: '2020-09-22T09:00:00'
              format: date-time
            updated_at:
              description: The date and time a hierarchy is updated.
              type: string
              example: '2020-09-22T09:00:00'
              format: date-time
            owner:
              description: The owner of a resource, either `organization` or `store`.
              type: string
              enum:
                - store
                - organization
            breadcrumbs:
              type: array
              description: Breadcrumbs
              items:
                type: object
                properties:
                  id:
                    description: A unique identifier generated when a hierarchy is created.
                    type: string
                  name:
                    description: The name of a hierarchy, such as `Major Appliances`.
                    type: string
                  slug:
                    description: A unique slug for a hierarchy.
                    type: string
                  locales:
                    description: Product Experience Manager supports localization of hierarchies and nodes. If you store supports multiple languages, you can localize hierarchy and node names and descriptions.
                    type: object
                    additionalProperties:
                      description: A [three-letter language code](https://www.iso.org/iso-639-language-code) that represents the name of language you have used.
                      type: object
                      additionalProperties: false
                      properties:
                        name:
                          description: A localized hierarchy or node name.
                          type: string
    multi_hierarchy:
      type: object
      required:
        - data
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/hierarchy'
        links:
          $ref: '#/components/schemas/multi_links'
        meta:
          $ref: '#/components/schemas/multi_meta'
    req_attributes_hierarchy:
      type: object
      additionalProperties: false
      properties:
        name:
          description: The name of the hierarchy, such as `Major Appliances`.
          type: string
        description:
          description: A description of the hierarchy.
          type: string
        slug:
          description: A unique slug for the hierarchy.
          type: string
        admin_attributes:
          $ref: '#/components/schemas/admin_attributes'
        shopper_attributes:
          $ref: '#/components/schemas/shopper_attributes'
        locales:
          description: Product Experience Manager supports localization of products and hierarchies. If your store supports multiple languages, you can localize product names and descriptions. You can have as many locales as you want.
          type: object
          additionalProperties:
            description: A [three-letter language code](https://www.iso.org/iso-639-language-code) that represents the name of language you have used.
            type: object
            additionalProperties: false
            properties:
              name:
                description: A localized name for the hierarchy.
                type: string
              description:
                description: A localized description for the hierarchy.
                type: string
    create_hierarchy:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - type
            - attributes
          properties:
            type:
              description: This represents the type of resource object being returned. Always `hierarchy`.
              type: string
              enum:
                - hierarchy
            attributes:
              $ref: '#/components/schemas/req_attributes_hierarchy'
    single_hierarchy:
      type: object
      required:
        - data
      properties:
        data:
          $ref: '#/components/schemas/hierarchy'
    nodes_or_hierarchies:
      type: object
      required:
        - data
      properties:
        data:
          description: An array of nodes or hierarchies.
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/node'
              - $ref: '#/components/schemas/hierarchy'
            discriminator:
              propertyName: type
              mapping:
                node: '#/components/schemas/node'
                hierarchy: '#/components/schemas/hierarchy'
        meta:
          $ref: '#/components/schemas/multi_meta'
        links:
          $ref: '#/components/schemas/multi_links'
    update_hierarchy:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - id
            - type
            - attributes
          properties:
            id:
              type: string
              description: The unique identifier of the hierarchy. Must match the hierarchy ID specified in the request path.
              example: 00000000-0000-0000-0000-000000000000
            type:
              description: This represents the type of resource object being returned. Always `hierarchy`.
              type: string
              enum:
                - hierarchy
              example: hierarchy
            attributes:
              $ref: '#/components/schemas/req_attributes_hierarchy'
    attributes_nodes:
      type: object
      additionalProperties: false
      properties:
        name:
          description: The name of the node, such as `Ranges` or `Refrigerators`. Names must be unique among sibling nodes in the hierarchy. Otherwise, a name can be non-unique within the hierarchy and across multiple hierarchies.
          type: string
        description:
          description: A description of the node.
          type: string
        slug:
          description: A slug for the node. Slugs must be unique among sibling nodes in the hierarchy. Otherwise, a slug can be non-unique within the hierarchy and across multiple hierarchies.
          type: string
        curated_products:
          description: You can curate your products in your nodes product lists. Product curation allows you to promote specific products within each node in a hierarchy, enabling you to create unique product collections in your storefront. See [Curating Products in a Node](/docs/api/pxm/products/create-node#curating-products-in-a-node).
          type: array
          items:
            description: A list of product IDs for the products that you want to curate in a node.
            type: string
        admin_attributes:
          $ref: '#/components/schemas/admin_attributes'
        shopper_attributes:
          $ref: '#/components/schemas/shopper_attributes'
        locales:
          description: Product Experience Manager supports localization of products and hierarchies. If your store supports multiple languages, you can localize product names and descriptions. You can have as many locales as you want.
          type: object
          additionalProperties:
            description: A [three-letter language code](https://www.iso.org/iso-639-language-code) that represents the name of language you have used.
            type: object
            additionalProperties: false
            properties:
              name:
                description: A localized name for the node.
                type: string
              description:
                description: A localized description for the node.
                type: string
    create_node:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - type
            - attributes
          properties:
            type:
              description: This represents the type of resource object being returned. Always `node`.
              type: string
              enum:
                - node
            attributes:
              $ref: '#/components/schemas/attributes_nodes'
            meta:
              type: object
              additionalProperties: false
              properties:
                sort_order:
                  description: |
                    You can sort the order of your nodes, regardless of where the nodes are in the hierarchy. The `sort_order` for each node. This value determines the order of nodes in the response for the `Get a Node’s Children` request. The node with the highest value of sort_order is displayed first. For example, a node with a sort_order value of 3 appears before a node with a sort_order value of 2.

                    - If you don’t provide `sort_order` when creating nodes, all child nodes in the response for `Get a Node’s Children` request are ordered by the `updated_at` time in descending order, with the most recently updated child node first.
                    - If you set `sort_order` for only a few child nodes or not all, the child nodes with a `sort_order` value appear first and then other child nodes appear in the order of `updated_at` time. See [Sorting Nodes in a hierarchy]().
                  type: integer
    single_node:
      type: object
      required:
        - data
      properties:
        data:
          $ref: '#/components/schemas/node'
    update_node:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - id
            - type
            - attributes
          properties:
            id:
              type: string
              description: The unique identifier of the node. Must match the node ID specified in the request path.
              example: 00000000-0000-0000-0000-000000000000
            type:
              description: This represents the type of resource object being returned. Always `node`.
              type: string
              enum:
                - node
            attributes:
              $ref: '#/components/schemas/attributes_nodes'
            meta:
              type: object
              additionalProperties: false
              properties:
                sort_order:
                  description: |
                    You can sort the order of your nodes, regardless of where the nodes are in the hierarchy. The `sort_order` for each node. This value determines the order of nodes in the response for the `Get a Node’s Children` request. The node with the highest value of sort_order is displayed first. For example, a node with a sort_order value of 3 appears before a node with a sort_order value of 2.
                     
                    - If you don’t provide `sort_order` when creating nodes, all child nodes in the response for `Get a Node’s Children` request are ordered by the `updated_at` time in descending order, with the most recently updated child node first.
                    - If you set `sort_order` for only a few child nodes or not all, the child nodes with a `sort_order` value appear first and then other child nodes appear in the order of `updated_at` time.
                  type: integer
    node_children:
      type: object
      required:
        - data
      properties:
        data:
          type: array
          items:
            type: object
            required:
              - id
              - type
            properties:
              id:
                type: string
                description: The unique identifier of the child node. Must not match the node ID specified in the request path.
                example: 00000000-0000-0000-0000-000000000000
              type:
                description: This represents the type of resource object being returned. Always `node`.
                type: string
                enum:
                  - node
    node_parent:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - id
            - type
          properties:
            id:
              type: string
              description: The unique identifier of the new parent node. Must not match the node ID specified in the request path.
              example: 00000000-0000-0000-0000-000000000000
            type:
              description: This represents the type of resource object being returned. Always `node`.
              type: string
              enum:
                - node
    node_products:
      type: object
      required:
        - data
      properties:
        data:
          type: array
          items:
            type: object
            required:
              - id
              - type
            properties:
              id:
                type: string
                description: The unique identifier of the product to be attached to the node.
                example: 00000000-0000-0000-0000-000000000000
              type:
                description: This represents the type of resource object being returned. Always `product`.
                type: string
                enum:
                  - product
    duplicate_job:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          properties:
            type:
              description: This represents the type of resource object being returned. Always `hierarchy`.
              type: string
              enum:
                - hierarchy
            attributes:
              type: object
              additionalProperties: false
              properties:
                name:
                  description: The name of the duplicate hierarchy. The maximum length is 1000 characters.
                  type: string
                description:
                  description: A description of the duplicate hierarchy.
                  type: string
                slug:
                  description: The slug of the duplicate hierarchy. Must be lower case and use dashes instead of spaces.
                  type: string
                include_products:
                  description: Specify `true` if you want the product relationships in the existing nodes associated in your duplicated hierarchy. If not, specify `false`.
                  type: boolean
    tag:
      type: object
      properties:
        id:
          description: A unique identifier generated when a tag is created.
          type: string
        type:
          description: This represents the type of resource object being returned. Always `tag`.
          type: string
          enum:
            - tag
        attributes:
          type: object
          properties:
            value:
              type: string
              description: The text value of the tag.
        meta:
          type: object
          properties:
            x_request_id:
              type: string
              description: A unique request ID is generated when a tag is created.
            created_at:
              type: string
              description: The date and time a tag is created.
              example: '2020-09-22T09:00:00'
              format: date-time
            updated_at:
              type: string
              description: The date and time a tag is updated.
              example: '2020-09-22T09:00:00'
              format: date-time
            owner:
              description: The owner of a resource, either `organization` or `store`.
              type: string
              enum:
                - store
                - organization
    multi_tag:
      type: object
      properties:
        data:
          description: An array of tags.
          type: array
          items:
            $ref: '#/components/schemas/tag'
        meta:
          type: object
          properties:
            results:
              description: Contains the results for the entire collection.
              type: object
              properties:
                total:
                  description: Total number of results for the entire collection.
                  type: integer
                  example: 2
    single_tag:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/tag'
    create_custom_relationship:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - type
            - attributes
          properties:
            type:
              description: This represents the type of resource object being returned. Always `custom-relationship`.
              type: string
              enum:
                - custom-relationship
            attributes:
              $ref: '#/components/schemas/req_attributes_custom_relationship'
    single_custom_relationship:
      type: object
      required:
        - data
      properties:
        data:
          $ref: '#/components/schemas/custom_relationship'
    update_custom_relationship:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - id
            - type
            - attributes
          properties:
            id:
              type: string
              description: The unique identifier of the custom relationship.
              example: 00000000-0000-0000-0000-000000000000
            type:
              description: This represents the type of resource object being returned. Always `custom-relationship`.
              type: string
              enum:
                - custom-relationship
              example: custom-relationship
            attributes:
              $ref: '#/components/schemas/req_attributes_custom_relationship'
  examples:
    multi:
      value:
        data:
          - type: pim-job
            id: 1ea62172-57f6-45e5-a708-ab5bd634e3f9
            attributes:
              completed_at: '2024-01-05T13:46:42.142Z'
              created_at: '2024-01-05T13:46:41.695Z'
              started_at: '2024-01-05T13:46:42.07Z'
              status: success
              type: product-import
              updated_at: '2024-01-05T13:46:42.07Z'
            meta:
              x_request_id: 7e832a26-d615-4305-b26a-e33c9c2fc06a
          - type: pim-job
            id: 3ab3deca-1f11-47b7-a409-24ea3234d72c
            attributes:
              completed_at: null
              created_at: '2024-01-05T15:27:23.161Z'
              started_at: '2024-01-05T15:27:23.65Z'
              updated_at: '2024-01-05T15:27:23.65Z'
              status: started
              type: product-import
            meta:
              x_request_id: 9ac00140-0037-4c6a-913c-b812196a2de6
          - type: pim-job
            id: 7e1b9ba1-c844-4556-9b16-4ae3f0988b0f
            attributes:
              completed_at: '2024-01-05T15:27:23.663Z'
              created_at: '2024-01-05T15:27:23.161Z'
              started_at: '2024-01-05T15:27:23.65Z'
              updated_at: '2024-01-05T15:27:23.65Z'
              status: success
              type: product-export
            meta:
              file_locations: []
              filter: eq(sku,product-1)
              x_request_id: fad8c5c0-9546-4e0c-b68e-8a2d809891e5
        meta:
          results:
            total: 1
    started:
      value:
        data:
          type: pim-job
          id: 1ea62172-57f6-45e5-a708-ab5bd634e3f9
          attributes:
            started_at: null
            completed_at: null
            created_at: '2024-01-05T13:46:41.695Z'
            status: started
            type: product-import
            updated_at: '2024-01-05T13:46:42.07Z'
          meta:
            x_request_id: 7e832a26-d615-4305-b26a-e33c9c2fc06a
    successful:
      value:
        data:
          type: pim-job
          id: 1ea62172-57f6-45e5-a708-ab5bd634e3f9
          attributes:
            completed_at: '2024-01-05T13:46:42.142Z'
            created_at: '2024-01-05T13:46:41.695Z'
            started_at: '2024-01-05T13:46:42.07Z'
            status: success
            type: product-import
            updated_at: '2024-01-05T13:46:42.07Z'
          meta:
            x_request_id: 7e832a26-d615-4305-b26a-e33c9c2fc06a
    product-export:
      value:
        data:
          type: pim-job
          id: 7e1b9ba1-c844-4556-9b16-4ae3f0988b0f
          attributes:
            completed_at: '2024-01-05T15:27:23.663Z'
            created_at: '2024-01-05T15:27:23.161Z'
            started_at: '2024-01-05T15:27:23.65Z'
            status: success
            type: product-export
            updated_at: '2024-01-05T15:27:23.65Z'
          meta:
            file_locations: []
            filter: eq(sku,product-1)
            x_request_id: fad8c5c0-9546-4e0c-b68e-8a2d809891e5
    hierarchy-duplicate:
      value:
        data:
          type: pim-job
          id: 5ba1c98d-87b8-4d63-b2ed-3d3c6c876523
          attributes:
            completed_at: '2024-01-08T11:56:29.257Z'
            created_at: '2024-01-08T11:56:27.553Z'
            started_at: '2024-01-08T11:56:29.222Z'
            status: success
            type: hierarchy-duplicate
            updated_at: '2024-01-08T11:56:29.237Z'
          meta:
            copied_from: 5b912d00-db5a-4e18-86f2-3a652967ee48
            hierarchy_id: c05bfefc-8de4-43ea-858b-eb8984ad9f8f
            x_request_id: an-x-request-id
    build-child-products:
      value:
        data:
          type: pim-job
          id: 14a0a190-cd03-4d7f-a449-e2051ac539ea
          attributes:
            completed_at: '2024-01-08T11:58:19.113Z'
            created_at: '2024-01-08T11:58:04.416Z'
            started_at: '2024-01-08T11:58:19.067Z'
            status: success
            type: child-products
            updated_at: '2024-01-08T11:58:19.067Z'
          meta:
            x_request_id: an-x-request-id
    cancelled:
      value:
        data:
          type: pim-job
          id: 1e5da4bf-b2c0-4619-bb3d-f749875b15bb
          attributes:
            started_at: null
            completed_at: null
            created_at: '2023-11-14T15:37:13.589Z'
            status: cancelled
            type: product-import
            updated_at: '2023-11-14T15:37:13.589Z'
          meta:
            x_request_id: 4fde01c1-95ba-4dd6-948e-b9d5763ff9c2
    errors:
      value:
        data:
          - type: pim-job-error
            id: 2950cae3-1050-4c43-9fbd-2aa60dc5c249
            attributes:
              message: 'data.attributes.sku: Must be unique amongst products.'
    multi_product_response:
      value:
        data:
          - type: product
            id: 9c85b276-09b4-488e-a59c-c561bae14c9e
            attributes:
              commodity_type: physical
              custom_inputs:
                back:
                  name: T-Shirt Back
                  validation_rules:
                    - type: string
                      options:
                        max_length: 50
                  required: false
                front:
                  name: T-Shirt Front
                  validation_rules:
                    - type: string
                      options:
                        max_length: 50
                  required: false
              description: T-shirt.
              mpn: 1234-5678-TTTT
              name: T-Shirt
              sku: '97805'
              slug: '97805'
              status: live
              upc_ean: '12345656'
              tags:
                - tag1
                - tag2
              extensions:
                products(size):
                  widthMM: 600
                  fuelType: electric
                  hasUKPlug: true
                  online: null
            relationships:
              children:
                data: []
                links:
                  self: /products/9c85b276-09b4-488e-a59c-c561bae14c9e/children
              component_products:
                data: []
                links:
                  self: /products/9c85b276-09b4-488e-a59c-c561bae14c9e/relationships/component_products
              files:
                data: []
                links:
                  self: /products/9c85b276-09b4-488e-a59c-c561bae14c9e/relationships/files
              main_image:
                data: null
              templates:
                data: []
                links:
                  self: /products/9c85b276-09b4-488e-a59c-c561bae14c9e/relationships/templates
              variations:
                data: []
                links:
                  self: /products/9c85b276-09b4-488e-a59c-c561bae14c9e/relationships/variations
            meta:
              created_at: '2022-08-18T14:25:57.391Z'
              owner: store
              product_types:
                - standard
              updated_at: '2022-08-18T14:25:57.391Z'
        meta:
          results:
            total: 1
    product_request:
      value:
        data:
          type: product
          attributes:
            external_ref: d0ddf10c-402c-4e0f-b421-94e7f682c603
            name: T-Shirt
            sku: '97805'
            slug: '97805'
            description: T-shirt.
            status: live
            commodity_type: physical
            mpn: 1234-5678-TTTT
            upc_ean: '12345656'
            tags:
              - tag1
              - tag2
            custom_inputs:
              front:
                name: T-Shirt Front
                validation_rules:
                  - type: string
                    options:
                      max_length: 50
                required: false
              back:
                name: T-Shirt Back
                validation_rules:
                  - type: string
                    options:
                      max_length: 50
                required: false
            locales:
              fr-FR:
                name: T_Shirt
                description: T-Shirt.
    build_rules_request:
      value:
        data:
          type: product
          attributes:
            name: Shirt
            sku: '978055216732567'
            slug: '978055216732567'
            description: T-shirt.
            status: live
            commodity_type: physical
            mpn: 1234-5678-SSSS
            upc_ean: '135623456'
            build_rules:
              default: include
              exclude:
                - - cbde9096-e0e1-43d8-a1aa-cb66cf1d299f
                  - 0b261f7d-753d-4af6-b9f4-62b436cca37d
              include:
                - - cf9e99f1-33dc-4991-88a1-3718678e9453
                  - 1592377e-ced8-452e-a025-e50272488b11
          relationships:
            variations:
              data:
                - type: product-variation
                  id: 6c4b5caa-3819-4366-a14e-c5b85009544b
                - type: product-variation
                  id: f192e114-9f8a-4284-99d0-4d9ccd8a0275
                - type: product-variation
                  id: b1ae545e-3375-455f-b5ea-09669b60996f
    bundle_sku_based_request:
      value:
        data:
          type: product
          attributes:
            name: Favourite games bundle
            description: All of your favourite DOOM games in one bundle
            sku: doom-franchise
            mpn: 1234-5678-ABCD
            upc_ean: '123456'
            commodity_type: digital
            components:
              games:
                name: Game 1
                max: 1
                min: 1
                sort_order: 5
                options:
                  - id: 7c0aa6df-0bd3-4d1f-b6f9-fd9358868869
                    type: product
                    quantity: 1
                    default: true
              posters:
                name: Game 2
                max: 1
                min: 1
                sort_order: 4
                options:
                  - id: f0ec8088-13e1-4a53-8b5d-3f4d973e05c9
                    type: product
                    quantity: 1
                    default: false
    bundle_sku_less_request:
      value:
        data:
          type: product
          attributes:
            name: Shower bundle
            description: A bundle of shower products
            commodity_type: physical
            components:
              shampoo:
                name: Shampoo
                max: 1
                min: 1
                sort_order: 1
                options:
                  - id: shampooProductID
                    type: product
                    quantity: 1
                    default: true
              conditioner:
                name: Conditioner
                max: 1
                min: 1
                sort_order: 2
                options:
                  - id: conditionerProductID
                    type: product
                    quantity: 1
                    default: false
    create_bundle_with_quantity_config:
      value:
        data:
          type: product
          attributes:
            name: Coffee Bundle
            description: A customizable coffee bundle with optional syrups and coffee options
            sku: COFFEE-BUNDLE-001
            commodity_type: physical
            status: draft
            components:
              syrup:
                name: Syrup Selection
                min: 0
                max: 2
                options:
                  - id: vanilla-id
                    type: product
                    quantity: 1
                    min: 1
                    max: 3
                    default: true
                  - id: salted-caramel-id
                    type: product
                    quantity: 1
                    min: 1
                    max: 3
                  - id: hazelnut-id
                    type: product
                    quantity: 1
                    min: 1
                    max: 3
                  - id: caramel-id
                    type: product
                    quantity: 1
                    min: 1
                    max: 3
                  - id: toffee-nut-id
                    type: product
                    quantity: 1
                    min: 1
                    max: 3
                  - id: pumpkin-spice-id
                    type: product
                    quantity: 1
                    min: 1
                    max: 3
              coffee:
                name: Coffee Selection
                min: 1
                max: 1
                options:
                  - id: cappuccino-id
                    type: product
                    quantity: 1
                    default: true
                  - id: espresso-id
                    type: product
                    quantity: 1
                  - id: latte-id
                    type: product
                    quantity: 1
    create_single_product_response:
      value:
        data:
          type: product
          id: 9c85b276-09b4-488e-a59c-c561bae14c9e
          attributes:
            commodity_type: physical
            custom_inputs:
              back:
                name: T-Shirt Back
                validation_rules:
                  - type: string
                    options:
                      max_length: 50
                required: false
              front:
                name: T-Shirt Front
                validation_rules:
                  - type: string
                    options:
                      max_length: 50
                required: false
            description: T-shirt.
            external_ref: d0ddf10c-402c-4e0f-b421-94e7f682c603
            locales:
              fr-FR:
                name: T-Shirt
                description: T-Shirt.
            mpn: 1234-5678-TTTT
            name: T-Shirt
            sku: '97805'
            slug: '97805'
            status: live
            upc_ean: '12345656'
            tags:
              - tag1
              - tag2
          relationships:
            children:
              data: []
              links:
                self: /products/9c85b276-09b4-488e-a59c-c561bae14c9e/children
            component_products:
              data: []
              links:
                self: /products/9c85b276-09b4-488e-a59c-c561bae14c9e/relationships/component_products
            files:
              data: []
              links:
                self: /products/9c85b276-09b4-488e-a59c-c561bae14c9e/relationships/files
            main_image:
              data: null
            templates:
              data: []
              links:
                self: /products/9c85b276-09b4-488e-a59c-c561bae14c9e/relationships/templates
            variations:
              data: []
              links:
                self: /products/9c85b276-09b4-488e-a59c-c561bae14c9e/relationships/variations
          meta:
            created_at: '2022-08-18T14:25:57.391Z'
            owner: store
            product_types:
              - standard
            updated_at: '2022-08-18T14:25:57.391Z'
    create_build_rules_response:
      value:
        data:
          type: product
          id: 9214719b-17fe-4ea7-896c-d61e60fc0d05
          attributes:
            build_rules:
              default: include
              exclude:
                - - cbde9096-e0e1-43d8-a1aa-cb66cf1d299f
                  - 0b261f7d-753d-4af6-b9f4-62b436cca37d
            commodity_type: physical
            description: T-shirt.
            locales:
              fr-FR:
                name: shirt
                description: T-shirt.
            mpn: 1234-5678-SSSS
            name: Shirt
            sku: '978055216732567'
            slug: '978055216732567'
            status: live
            upc_ean: '135623456'
          relationships:
            children:
              data: []
              links:
                self: /products/9214719b-17fe-4ea7-896c-d61e60fc0d05/children
            component_products:
              data: []
              links:
                self: /products/9214719b-17fe-4ea7-896c-d61e60fc0d05/relationships/component_products
            files:
              data: []
              links:
                self: /products/9214719b-17fe-4ea7-896c-d61e60fc0d05/relationships/files
            main_image:
              data: null
            templates:
              data: []
              links:
                self: /products/9214719b-17fe-4ea7-896c-d61e60fc0d05/relationships/templates
            variations:
              data: []
              links:
                self: /products/9214719b-17fe-4ea7-896c-d61e60fc0d05/relationships/variations
          meta:
            created_at: '2022-08-18T12:14:52.782Z'
            owner: store
            product_types:
              - standard
            updated_at: '2022-08-18T12:14:52.782Z'
            variations:
              - id: 6c4b5caa-3819-4366-a14e-c5b85009544b
                name: Shirt Size
                options:
                  - id: cbde9096-e0e1-43d8-a1aa-cb66cf1d299f
                    name: Small
                    description: Size Small
                  - id: da9d88d0-8ea6-434c-a0dd-059caf595687
                    name: Medium
                    description: Size Medium
                  - id: 07493fea-74b0-40a2-972a-cd7e1d6561bd
                    name: Large
                    description: Size Large
              - id: b1ae545e-3375-455f-b5ea-09669b60996f
                name: Shirt Material
                options:
                  - id: 994c2029-519c-43d9-9c54-14f3af4e3efd
                    name: Cotton
                    description: Material Cotton
                  - id: 7951f3d9-f628-49f8-8a43-7749d28153d6
                    name: Denim
                    description: Material Denim
                  - id: 58115bff-589a-4287-98d8-373112102617
                    name: Wool
                    description: Material Wool
              - id: f192e114-9f8a-4284-99d0-4d9ccd8a0275
                name: Shirt Color
                options:
                  - id: 0b261f7d-753d-4af6-b9f4-62b436cca37d
                    name: Red
                    description: Color Red
                  - id: 55d6d785-cc52-453a-bff6-2cf9add8a580
                    name: Green
                    description: Color Green
                  - id: a43d8b6f-b411-49aa-adaa-36a1a025051e
                    name: Blue
                    description: Color Blue
    bundle_with_quantity_config_response:
      summary: Bundle with Quantity Configuration
      description: A bundle with configurable quantities for options
      value:
        data:
          type: product
          id: 143e9ded-b549-4631-831c-d27f5fb2fe2e
          attributes:
            name: Coffee Bundle
            description: A customizable coffee bundle with optional syrups and coffee options
            sku: COFFEE-BUNDLE-001
            commodity_type: physical
            status: live
            components:
              syrup:
                name: Syrup Selection
                min: 0
                max: 2
                options:
                  - id: vanilla-id
                    type: product
                    quantity: 1
                    min: 1
                    max: 3
                    default: true
                  - id: salted-caramel-id
                    type: product
                    quantity: 1
                    min: 1
                    max: 3
                  - id: hazelnut-id
                    type: product
                    quantity: 1
                    min: 1
                    max: 3
                  - id: caramel-id
                    type: product
                    quantity: 1
                    min: 1
                    max: 3
                  - id: toffee-nut-id
                    type: product
                    quantity: 1
                    min: 1
                    max: 3
                  - id: pumpkin-spice-id
                    type: product
                    quantity: 1
                    min: 1
                    max: 3
              coffee:
                name: Coffee Selection
                min: 1
                max: 1
                options:
                  - id: cappuccino-id
                    type: product
                    quantity: 1
                    default: true
                  - id: espresso-id
                    type: product
                    quantity: 1
                  - id: latte-id
                    type: product
                    quantity: 1
          relationships:
            children:
              data: []
              links:
                self: /products/143e9ded-b549-4631-831c-d27f5fb2fe2e/children
            component_products:
              data: []
              links:
                self: /products/143e9ded-b549-4631-831c-d27f5fb2fe2e/relationships/component_products
            files:
              data: []
              links:
                self: /products/143e9ded-b549-4631-831c-d27f5fb2fe2e/relationships/files
            main_image:
              data: null
            templates:
              data: []
              links:
                self: /products/143e9ded-b549-4631-831c-d27f5fb2fe2e/templates
            variations:
              data: []
              links:
                self: /products/143e9ded-b549-4631-831c-d27f5fb2fe2e/relationships/variations
          meta:
            created_at: '2024-04-14T10:34:00.000Z'
            owner: organization
            product_types:
              - bundle
            updated_at: '2024-04-14T10:34:00.000Z'
            variation_matrix: {}
        included:
          main_images: []
          files: []
    import:
      value:
        data:
          type: pim-job
          id: 7e1b9ba1-c844-4556-9b16-4ae3f0988b0f
          attributes:
            completed_at: null
            created_at: '2024-01-05T15:27:23.161Z'
            started_at: null
            status: pending
            type: product-import
            updated_at: '2024-01-05T15:27:23.161Z'
          meta:
            x_request_id: fad8c5c0-9546-4e0c-b68e-8a2d809891e5
    export:
      value:
        data:
          type: pim-job
          id: 7e1b9ba1-c844-4556-9b16-4ae3f0988b0f
          attributes:
            completed_at: null
            created_at: '2024-01-05T15:27:23.161Z'
            started_at: null
            status: pending
            type: product-export
            updated_at: '2024-01-05T15:27:23.161Z'
          meta:
            file_locations: null
            filter: eq(sku,product-1)
            x_request_id: fad8c5c0-9546-4e0c-b68e-8a2d809891e5
    get_single_product_response:
      value:
        data:
          type: product
          id: f5bd4e59-a95f-4bda-bfe6-0f34f47ac94b
          attributes:
            commodity_type: physical
            description: This electric model offers an induction heating element and convection oven.
            mpn: BE-R-1111-aaaa-1a1a
            name: BestEver Range, Model 1a1a
            sku: BE-Range-1a1a
            slug: bestever-range-1a1a
            status: draft
            upc_ean: '111122223333'
            tags:
              - tag1
              - tag2
            extensions:
              products(size):
                widthMM: 600
                fuelType: electric
                hasUKPlug: true
                online: null
          relationships:
            custom_relationships:
              data: []
              links:
                self: /products/f5bd4e59-a95f-4bda-bfe6-0f34f47ac94b/custom-relationships
                CRP_summer_session: /products/f5bd4e59-a95f-4bda-bfe6-0f34f47ac94b/custom-relationships/CRP_summer_session/products
                CRP_winter_session: /products/f5bd4e59-a95f-4bda-bfe6-0f34f47ac94b/custom-relationships/CRP_winter_session/products
            files:
              data: []
              links:
                self: /products/f5bd4e59-a95f-4bda-bfe6-0f34f47ac94b/relationships/files
            templates:
              data: []
              links:
                self: /products/f5bd4e59-a95f-4bda-bfe6-0f34f47ac94b/relationships/templates
          meta:
            created_at: '2023-09-28T10:43:41.72Z'
            owner: organization
            product_types:
              - standard
            updated_at: '2023-09-28T10:43:41.72Z'
            variation_matrix: {}
            custom_relationships:
              - CRP_summer_session
              - CRP_winter_session
    get_bundle_response:
      value:
        data:
          type: product
          id: 495f5c48-c747-4540-86fd-40380bf2df91
          attributes:
            commodity_type: physical
            components:
              games:
                name: Games
                options:
                  - id: 1a499918-2ec0-468d-b7b9-f09eab2f6ad8
                    type: product
                    quantity: 2
                    sort_order: 15
                    default: true
                sort_order: 10
            name: DOOM Bundle
            status: draft
          relationships:
            children:
              data: []
              links:
                self: /products/495f5c48-c747-4540-86fd-40380bf2df91/children
            component_products:
              data: []
              links:
                self: /products/495f5c48-c747-4540-86fd-40380bf2df91/relationships/component_products
            files:
              data: []
              links:
                self: /products/495f5c48-c747-4540-86fd-40380bf2df91/relationships/files
            main_image:
              data: null
            templates:
              data: []
              links:
                self: /products/495f5c48-c747-4540-86fd-40380bf2df91/relationships/templates
            variations:
              data: []
              links:
                self: /products/495f5c48-c747-4540-86fd-40380bf2df91/relationships/variations
          meta:
            created_at: '2024-01-08T13:36:53.658Z'
            owner: organization
            product_types:
              - bundle
            updated_at: '2024-01-08T13:36:53.658Z'
            variation_matrix: {}
    get_parent_product_response:
      value:
        data:
          type: product
          id: 571e366f-17e6-4e51-8239-b3cc8ee1144d
          attributes:
            commodity_type: physical
            name: Jeans
            sku: jeans
            slug: jeans
            status: live
          relationships:
            children:
              data: []
              links:
                self: /products/571e366f-17e6-4e51-8239-b3cc8ee1144d/children
            component_products:
              data: []
              links:
                self: /products/571e366f-17e6-4e51-8239-b3cc8ee1144d/relationships/component_products
            files:
              data: []
              links:
                self: /products/571e366f-17e6-4e51-8239-b3cc8ee1144d/relationships/files
            main_image:
              data: null
            templates:
              data: []
              links:
                self: /products/571e366f-17e6-4e51-8239-b3cc8ee1144d/relationships/templates
            variations:
              data: []
              links:
                self: /products/571e366f-17e6-4e51-8239-b3cc8ee1144d/relationships/variations
          meta:
            created_at: '2024-01-05T10:29:44.214Z'
            owner: store
            product_types:
              - parent
            updated_at: '2024-01-05T10:29:45.212Z'
            variation_matrix:
              46fff1c9-668b-461a-9344-e7a8cbbbf931: 4d32b816-4397-4a71-b875-4e4ea3ce6745
              843868fc-2440-44d1-8ce7-dc474f79ad1c: cf501150-f02d-49ad-b7d7-33ed15417b76
            variations:
              - id: ec2bcebd-f42e-4725-8715-c338589e33ea
                name: Paint colour
                options:
                  - id: 843868fc-2440-44d1-8ce7-dc474f79ad1c
                    name: Blue
                    description: This is a colour.
                  - id: 46fff1c9-668b-461a-9344-e7a8cbbbf931
                    name: Red
                    description: This is a colour.
    get_child_product_response:
      value:
        data:
          type: product
          id: 4d32b816-4397-4a71-b875-4e4ea3ce6745
          attributes:
            commodity_type: physical
            name: Jeans
            sku: jeansRed
            slug: jeansRed
            status: live
          relationships:
            base_product:
              data:
                type: product
                id: 571e366f-17e6-4e51-8239-b3cc8ee1144d
            children:
              data: []
            component_products:
              data: []
              links:
                self: /products/4d32b816-4397-4a71-b875-4e4ea3ce6745/relationships/component_products
            files:
              data: []
              links:
                self: /products/4d32b816-4397-4a71-b875-4e4ea3ce6745/relationships/files
            main_image:
              data: null
            templates:
              data: []
              links:
                self: /products/4d32b816-4397-4a71-b875-4e4ea3ce6745/relationships/templates
            variations:
              data: []
              links:
                self: /products/4d32b816-4397-4a71-b875-4e4ea3ce6745/relationships/variations
          meta:
            created_at: '2024-01-05T10:29:44.603Z'
            owner: store
            product_types:
              - child
            updated_at: '2024-01-05T10:29:45.155Z'
            variation_matrix: {}
            child_variations:
              - id: 119b2b76-0014-4077-826e-ae80ff207393
                name: Size
                options: null
                option:
                  id: fad253ad-4485-4b35-8e3b-b475ad28e78d
                  name: Medium
                  description: Medium
              - id: 10ceafef-7ac9-4352-9797-4825a1671482
                name: Colour
                options: null
                option:
                  id: b8128e51-1b0a-4b16-9eda-bb783b17026b
                  name: Red
                  description: '#EE2238'
    get_component_product_response:
      value:
        data:
          type: product
          id: 4ca7de77-994d-4e7c-b834-4cb2ae156f57
          attributes:
            commodity_type: physical
            components:
              Apples:
                name: Apples
                options:
                  - id: f809fe4f-83f7-4db4-8175-e467a0d1974a
                    type: product
                    quantity: 12
              Oranges:
                name: Oranges
                options:
                  - id: 7f8f596a-2dc0-4e78-ba0d-3810eac6f86a
                    type: product
                    quantity: 12
            description: fruit
            name: fruit Bundle
            slug: 45-b
            status: live
          relationships:
            children:
              data: []
              links:
                self: /products/4ca7de77-994d-4e7c-b834-4cb2ae156f57/children
            component_products:
              data: []
              links:
                self: /products/4ca7de77-994d-4e7c-b834-4cb2ae156f57/relationships/component_products
            files:
              data: []
              links:
                self: /products/4ca7de77-994d-4e7c-b834-4cb2ae156f57/relationships/files
            main_image:
              data: null
            templates:
              data: []
              links:
                self: /products/4ca7de77-994d-4e7c-b834-4cb2ae156f57/relationships/templates
            variations:
              data: []
              links:
                self: /products/4ca7de77-994d-4e7c-b834-4cb2ae156f57/relationships/variations
          meta:
            created_at: '2022-02-01T12:51:51.132Z'
            owner: store
            product_types:
              - bundle
            updated_at: '2022-02-01T12:51:51.132Z'
            variation_matrix: {}
        included:
          component_products:
            - type: product
              id: f809fe4f-83f7-4db4-8175-e467a0d1974a
              attributes:
                commodity_type: physical
                description: fruit
                name: Apples
                sku: '45'
                status: live
              relationships:
                children:
                  data: []
                  links:
                    self: /products/f809fe4f-83f7-4db4-8175-e467a0d1974a/children
                component_products:
                  data: []
                  links:
                    self: /products/f809fe4f-83f7-4db4-8175-e467a0d1974a/relationships/component_products
                files:
                  data: []
                  links:
                    self: /products/f809fe4f-83f7-4db4-8175-e467a0d1974a/relationships/files
                main_image:
                  data: null
                templates:
                  data: []
                  links:
                    self: /products/f809fe4f-83f7-4db4-8175-e467a0d1974a/relationships/templates
                variations:
                  data: []
                  links:
                    self: /products/f809fe4f-83f7-4db4-8175-e467a0d1974a/relationships/variations
              meta:
                created_at: '2022-02-01T12:50:33.347Z'
                owner: store
                product_types:
                  - standard
                updated_at: '2022-02-01T12:50:33.347Z'
                variation_matrix: {}
            - type: product
              id: 7f8f596a-2dc0-4e78-ba0d-3810eac6f86a
              attributes:
                commodity_type: physical
                description: fruit
                name: Oranges
                sku: '46'
                status: live
              relationships:
                children:
                  data: []
                  links:
                    self: /products/7f8f596a-2dc0-4e78-ba0d-3810eac6f86a/children
                component_products:
                  data: []
                  links:
                    self: /products/7f8f596a-2dc0-4e78-ba0d-3810eac6f86a/relationships/component_products
                files:
                  data: []
                  links:
                    self: /products/7f8f596a-2dc0-4e78-ba0d-3810eac6f86a/relationships/files
                main_image:
                  data: null
                templates:
                  data: []
                  links:
                    self: /products/7f8f596a-2dc0-4e78-ba0d-3810eac6f86a/relationships/templates
                variations:
                  data: []
                  links:
                    self: /products/7f8f596a-2dc0-4e78-ba0d-3810eac6f86a/relationships/variations
              meta:
                created_at: '2022-02-01T12:49:19.298Z'
                owner: store
                product_types:
                  - standard
                updated_at: '2022-02-01T12:49:19.298Z'
                variation_matrix: {}
    update_product_request:
      value:
        data:
          type: product
          id: 60afe403-a191-455e-b771-c510c928a308
          attributes:
            name: UPDATED BestEver Range, Model 1a1a
    update_build_rules_request:
      value:
        data:
          type: product
          id: 9214719b-17fe-4ea7-896c-d61e60fc0d05
          attributes:
            build_rules:
              default: include
              exclude:
                - - cbde9096-e0e1-43d8-a1aa-cb66cf1d299f
                  - 0b261f7d-753d-4af6-b9f4-62b436cca37d
                  - 994c2029-519c-43d9-9c54-14f3af4e3efd
    update_custom_inputs_request:
      value:
        data:
          type: product
          id: 9214719b-17fe-4ea7-896c-d61e60fc0d05
          attributes:
            custom_inputs:
              front:
                name: T-Shirt Front
                validation_rules:
                  - type: string
                    options:
                      max_length: 50
                required: false
              back:
                name: T-Shirt Back
                validation_rules:
                  - type: string
                    options:
                      max_length: 50
                required: false
    update_bundle_request:
      value:
        data:
          id: 8a0072c0-cedf-4e53-bdc4-a14a5d6389d5
          type: product
          attributes:
            name: Favourite games bundle
            description: Favourite DOOM games in one bundle - Select one from four choices
            sku: fav23455
            mpn: 1234-5678-ABCD00
            upc_ean: '123456'
            commodity_type: digital
            status: live
            components:
              List 1:
                name: PS5
                sort_order: 1
                options:
                  - id: c7cf43f3-24c6-4523-8a24-3663b49b81aa
                    type: product
                    quantity: 1
                    default: true
              List 2:
                name: Controller
                sort_order: 2
                options:
                  - id: e59ca559-37c7-4dc9-8a91-df94cd5700d3
                    type: product
                    quantity: 1
                    default: true
              List 3:
                name: PS+
                sort_order: 3
                options:
                  - id: 8ae2a7ea-f767-4af0-8486-ae203947ecc4
                    type: product
                    quantity: 1
                    default: true
              List 4:
                min: 1
                max: 1
                sort_order: 4
                options:
                  - id: 549a291f-669c-47d0-bc04-60a3f18fc55c
                    type: product
                    quantity: 1
                    default: true
                    sort_order: 2
                  - id: 071e461c-22a2-42e0-9604-c345bbc9b85c
                    type: product
                    quantity: 1
                    default: false
                    sort_order: 1
                  - id: 633b8172-8aa9-4dbd-aa07-0dcefca3de74
                    type: product
                    quantity: 1
                    default: false
                  - id: 549a291f-669c-47d0-bc04-60a3f18fc55c
                    type: product
                    quantity: 1
                    default: false
                    sort_order: 3
    update_bundle_with_quantity_config:
      value:
        data:
          id: 143e9ded-b549-4631-831c-d27f5fb2fe2e
          type: product
          attributes:
            name: Coffee Bundle
            description: A customizable coffee bundle with optional syrups and coffee options
            sku: COFFEE-BUNDLE-001
            commodity_type: physical
            status: live
            components:
              syrup:
                name: Syrup Selection
                min: 0
                max: 2
                options:
                  - id: vanilla-id
                    type: product
                    quantity: 1
                    min: 1
                    max: 3
                    default: true
                  - id: salted-caramel-id
                    type: product
                    quantity: 1
                    min: 1
                    max: 3
                  - id: hazelnut-id
                    type: product
                    quantity: 1
                    min: 1
                    max: 3
                  - id: caramel-id
                    type: product
                    quantity: 1
                    min: 1
                    max: 3
                  - id: toffee-nut-id
                    type: product
                    quantity: 1
                    min: 1
                    max: 3
                  - id: pumpkin-spice-id
                    type: product
                    quantity: 1
                    min: 1
                    max: 3
              coffee:
                name: Coffee Selection
                min: 1
                max: 1
                options:
                  - id: cappuccino-id
                    type: product
                    quantity: 1
                    default: true
                  - id: espresso-id
                    type: product
                    quantity: 1
                  - id: latte-id
                    type: product
                    quantity: 1
    update_single_product_response:
      value:
        data:
          type: product
          id: 60afe403-a191-455e-b771-c510c928a308
          attributes:
            commodity_type: physical
            description: The 30 inch version of this popular electric range.
            mpn: BE-R-1111-aaaa-1a1a-30
            name: UPDATED BestEver Range 30 inch, Model 1a1a-30
            sku: BE-Range-1a1a-30
            slug: bestever-range-1a1a-30
            status: draft
            upc_ean: '111130303030'
            locales:
              fr-FR:
                name: MISE À JOUR de la gamme BestEver 30 pouces, modèle 1a1a-30
                description: La version 30 pouces de cette cuisinière électrique populaire
            tags:
              - tag1
              - tag2
          relationships:
            files:
              data: []
              links:
                self: /products/60afe403-a191-455e-b771-c510c928a308/relationships/files
            templates:
              data: []
              links:
                self: /products/60afe403-a191-455e-b771-c510c928a308/relationships/templates
          meta:
            created_at: '2023-09-28T10:43:41.72Z'
            owner: organization
            product_types:
              - standard
            updated_at: '2023-09-28T10:43:41.72Z'
    update_build_rules_response:
      value:
        data:
          type: product
          id: 9214719b-17fe-4ea7-896c-d61e60fc0d05
          attributes:
            build_rules:
              default: include
              exclude:
                - - cbde9096-e0e1-43d8-a1aa-cb66cf1d299f
                  - 0b261f7d-753d-4af6-b9f4-62b436cca37d
                  - 994c2029-519c-43d9-9c54-14f3af4e3efd
            commodity_type: physical
            description: T-shirt.
            locales:
              fr-FR:
                name: Shirt
                description: T-Shirt.
            mpn: 1234-5678-SSSS
            name: Shirt
            sku: '978055216732567'
            slug: '978055216732567'
            status: live
            upc_ean: '135623456'
          relationships:
            children:
              data: []
              links:
                self: /products/9214719b-17fe-4ea7-896c-d61e60fc0d05/children
            component_products:
              data: []
              links:
                self: /products/9214719b-17fe-4ea7-896c-d61e60fc0d05/relationships/component_products
            files:
              data: []
              links:
                self: /products/9214719b-17fe-4ea7-896c-d61e60fc0d05/relationships/files
            main_image:
              data: null
            templates:
              data: []
              links:
                self: /products/9214719b-17fe-4ea7-896c-d61e60fc0d05/relationships/templates
            variations:
              data: []
              links:
                self: /products/9214719b-17fe-4ea7-896c-d61e60fc0d05/relationships/variations
          meta:
            created_at: '2022-08-18T12:14:52.782Z'
            owner: store
            product_types:
              - standard
            updated_at: '2022-08-18T12:40:13.484Z'
            variation_matrix: {}
            variations:
              - id: 6c4b5caa-3819-4366-a14e-c5b85009544b
                name: Shirt Size
                options:
                  - id: cbde9096-e0e1-43d8-a1aa-cb66cf1d299f
                    name: Small
                    description: Size Small
                  - id: da9d88d0-8ea6-434c-a0dd-059caf595687
                    name: Medium
                    description: Size Medium
                  - id: 07493fea-74b0-40a2-972a-cd7e1d6561bd
                    name: Large
                    description: Size Large
              - id: b1ae545e-3375-455f-b5ea-09669b60996f
                name: Shirt Material
                options:
                  - id: 994c2029-519c-43d9-9c54-14f3af4e3efd
                    name: Cotton
                    description: Material Cotton
                  - id: 7951f3d9-f628-49f8-8a43-7749d28153d6
                    name: Denim
                    description: Material Denim
                  - id: 58115bff-589a-4287-98d8-373112102617
                    name: Wool
                    description: Material Wool
              - id: f192e114-9f8a-4284-99d0-4d9ccd8a0275
                name: Shirt Color
                options:
                  - id: 0b261f7d-753d-4af6-b9f4-62b436cca37d
                    name: Red
                    description: Color Red
                  - id: 55d6d785-cc52-453a-bff6-2cf9add8a580
                    name: Green
                    description: Color Green
                  - id: a43d8b6f-b411-49aa-adaa-36a1a025051e
                    name: Blue
                    description: Color Blue
    update_custom_inputs_response:
      value:
        data:
          type: product
          id: 9214719b-17fe-4ea7-896c-d61e60fc0d05
          attributes:
            commodity_type: physical
            custom_inputs:
              back:
                name: T-Shirt Back
                validation_rules:
                  - type: string
                    options:
                      max_length: 50
                required: false
              front:
                name: T-Shirt Front
                validation_rules:
                  - type: string
                    options:
                      max_length: 50
                required: false
            description: T-shirt.
            locales:
              fr-FR:
                name: T-Shirt
                description: T-Shirt.
            mpn: 1234-5678-SSSS
            name: Shirt
            sku: '978055216732567'
            slug: '978055216732567'
            status: live
          relationships:
            children:
              data: []
              links:
                self: /products/9214719b-17fe-4ea7-896c-d61e60fc0d05/children
            component_products:
              data: []
              links:
                self: /products/9214719b-17fe-4ea7-896c-d61e60fc0d05/relationships/component_products
            files:
              data: []
              links:
                self: /products/9214719b-17fe-4ea7-896c-d61e60fc0d05/relationships/files
            main_image:
              data: null
            templates:
              data: []
              links:
                self: /products/9214719b-17fe-4ea7-896c-d61e60fc0d05/relationships/templates
            variations:
              data: []
              links:
                self: /products/9214719b-17fe-4ea7-896c-d61e60fc0d05/relationships/variations
          meta:
            created_at: '2022-08-18T12:14:52.782Z'
            updated_at: '2022-08-19T12:28:26.343Z'
            variation_matrix: {}
            variations:
              - id: 6c4b5caa-3819-4366-a14e-c5b85009544b
                name: Shirt Size
                options:
                  - id: cbde9096-e0e1-43d8-a1aa-cb66cf1d299f
                    name: Small
                    description: Size Small
                  - id: da9d88d0-8ea6-434c-a0dd-059caf595687
                    name: Medium
                    description: Size Medium
                  - id: 07493fea-74b0-40a2-972a-cd7e1d6561bd
                    name: Large
                    description: Size Large
              - id: b1ae545e-3375-455f-b5ea-09669b60996f
                name: Shirt Material
                options:
                  - id: 994c2029-519c-43d9-9c54-14f3af4e3efd
                    name: Cotton
                    description: Material Cotton
                  - id: 7951f3d9-f628-49f8-8a43-7749d28153d6
                    name: Denim
                    description: Material Denim
                  - id: 58115bff-589a-4287-98d8-373112102617
                    name: Wool
                    description: Material Wool
              - id: f192e114-9f8a-4284-99d0-4d9ccd8a0275
                name: Shirt Color
                options:
                  - id: 0b261f7d-753d-4af6-b9f4-62b436cca37d
                    name: Red
                    description: Color Red
                  - id: 55d6d785-cc52-453a-bff6-2cf9add8a580
                    name: Green
                    description: Color Green
                  - id: a43d8b6f-b411-49aa-adaa-36a1a025051e
                    name: Blue
                    description: Color Blue
    update_bundle_response:
      value:
        data:
          type: product
          id: 8a0072c0-cedf-4e53-bdc4-a14a5d6389d5
          attributes:
            commodity_type: digital
            components:
              List 1:
                name: PS5
                options:
                  - id: c7cf43f3-24c6-4523-8a24-3663b49b81aa
                    type: product
                    quantity: 1
                    default: true
                sort_order: 1
              List 2:
                name: Controller
                options:
                  - id: e59ca559-37c7-4dc9-8a91-df94cd5700d3
                    type: product
                    quantity: 1
                    default: true
                sort_order: 2
              List 3:
                name: PS+
                options:
                  - id: 8ae2a7ea-f767-4af0-8486-ae203947ecc4
                    type: product
                    quantity: 1
                    default: true
                sort_order: 3
              List 4:
                options:
                  - id: 549a291f-669c-47d0-bc04-60a3f18fc55c
                    type: product
                    quantity: 1
                    default: true
                  - id: 071e461c-22a2-42e0-9604-c345bbc9b85c
                    type: product
                    quantity: 1
                    default: false
                  - id: 633b8172-8aa9-4dbd-aa07-0dcefca3de74
                    type: product
                    quantity: 1
                    default: false
                  - id: 549a291f-669c-47d0-bc04-60a3f18fc55c
                    type: product
                    quantity: 1
                    default: false
                min: 1
                max: 1
                sort_order: 4
              headsets:
                name: Headsets
                options:
                  - id: 8ae2a7ea-f767-4af0-8486-ae203947ecc4
                    type: product
                    quantity: 5
                    default: true
            description: Favourite DOOM games in one bundle - Select one from four choices
            mpn: 1234-5678-ABCD00
            name: Favourite games bundle
            sku: fav23455
            slug: PGH69345-B
            status: live
            upc_ean: '123456'
          relationships:
            children:
              data: []
              links:
                self: /products/8a0072c0-cedf-4e53-bdc4-a14a5d6389d5/children
            component_products:
              data: []
              links:
                self: /products/8a0072c0-cedf-4e53-bdc4-a14a5d6389d5/relationships/component_products
            files:
              data: []
              links:
                self: /products/8a0072c0-cedf-4e53-bdc4-a14a5d6389d5/relationships/files
            main_image:
              data: null
            templates:
              data: []
              links:
                self: /products/8a0072c0-cedf-4e53-bdc4-a14a5d6389d5/relationships/templates
            variations:
              data: []
              links:
                self: /products/8a0072c0-cedf-4e53-bdc4-a14a5d6389d5/relationships/variations
          meta:
            created_at: '2022-02-03T19:38:00.602Z'
            owner: store
            updated_at: '2022-02-03T19:43:21.487Z'
            variation_matrix: {}
    resp_multi_nodes:
      value:
        data:
          - id: 9ea0de15-3347-43dd-8faa-cd32f44a04c7
            type: node
            attributes:
              description: Latest Ballet Shoes
              locales:
                fr-FR:
                  name: Chaussons de ballet
                  description: Dernières chaussures de ballet
              name: Ballet Shoes
              slug: ballet-shoes
            relationships:
              children:
                data: []
                links:
                  related: /hierarchies/6183d10c-94b5-4caa-9f12-2f14cb738d41/nodes/9ea0de15-3347-43dd-8faa-cd32f44a04c7/children
              products:
                data: []
                links:
                  related: /hierarchies/6183d10c-94b5-4caa-9f12-2f14cb738d41/nodes/9ea0de15-3347-43dd-8faa-cd32f44a04c7/products
            meta:
              created_at: '2024-01-11T19:19:50.087Z'
              owner: store
              sort_order: 5
              updated_at: '2024-01-11T19:56:53.695Z'
              hierarchy_id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
              breadcrumbs:
                - id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
                  name: Shoes
                  slug: shoes
                  locales:
                    fr-FR:
                      name: hierarchy 1 in French
                - id: 9ea0de15-3347-43dd-8faa-cd32f44a04c7
                  name: Ballet Shoes
                  slug: ballet-shoes
                  locales:
                    fr-FR:
                      name: Node 1 in French
          - type: node
            id: b2f5e53e-de3c-4548-98da-120f8b185d34
            attributes:
              description: All Dress Shoes
              locales:
                fr-FR:
                  name: Chaussures habillées
                  description: Toutes les chaussures habillées
              name: Dress Shoes
              slug: dress-shoes
            relationships:
              children:
                data: []
                links:
                  related: /hierarchies/6183d10c-94b5-4caa-9f12-2f14cb738d41/nodes/b2f5e53e-de3c-4548-98da-120f8b185d34/children
              products:
                data: []
                links:
                  related: /hierarchies/6183d10c-94b5-4caa-9f12-2f14cb738d41/nodes/b2f5e53e-de3c-4548-98da-120f8b185d34/products
            meta:
              created_at: '2024-01-11T19:50:21.729Z'
              owner: store
              sort_order: 3
              updated_at: '2024-01-11T19:50:21.729Z'
              hierarchy_id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
              breadcrumbs:
                - id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
                  name: Shoes
                  slug: shoes
                  locales:
                    fr-FR:
                      name: hierarchy 1 in French
                - id: b2f5e53e-de3c-4548-98da-120f8b185d34
                  name: Dress Shoes
                  slug: dress-shoes
                  locales:
                    fr-FR:
                      name: Node 2 in French
        meta:
          results:
            total: 2
    build-child-products_created:
      value:
        data:
          type: pim-job
          id: dcc9e0bb-526b-4207-9e52-081589cdb50e
          attributes:
            completed_at: null
            created_at: '2024-11-01T14:11:00.917Z'
            started_at: null
            status: pending
            type: child-products
            updated_at: '2024-11-01T14:11:00.917Z'
          meta:
            x_request_id: 85609bc9-6f19-4831-919a-a5b43e662061
    multi_get_child_response:
      value:
        data:
          - type: product
            id: 4d32b816-4397-4a71-b875-4e4ea3ce6745
            attributes:
              commodity_type: physical
              name: Jeans
              sku: jeansRed
              slug: jeansRed
              status: live
            relationships:
              base_product:
                data:
                  type: product
                  id: 571e366f-17e6-4e51-8239-b3cc8ee1144d
              children:
                data: []
              component_products:
                data: []
                links:
                  self: /products/4d32b816-4397-4a71-b875-4e4ea3ce6745/relationships/component_products
              files:
                data: []
                links:
                  self: /products/4d32b816-4397-4a71-b875-4e4ea3ce6745/relationships/files
              main_image:
                data: null
              templates:
                data: []
                links:
                  self: /products/4d32b816-4397-4a71-b875-4e4ea3ce6745/relationships/templates
              variations:
                data: []
                links:
                  self: /products/4d32b816-4397-4a71-b875-4e4ea3ce6745/relationships/variations
            meta:
              created_at: '2024-01-05T10:29:44.603Z'
              owner: store
              product_types:
                - child
              updated_at: '2024-01-05T10:29:45.155Z'
              variation_matrix: {}
              child_variations:
                - id: 119b2b76-0014-4077-826e-ae80ff207393
                  name: Size
                  options: null
                  option:
                    id: fad253ad-4485-4b35-8e3b-b475ad28e78d
                    name: Medium
                    description: Medium
                - id: 10ceafef-7ac9-4352-9797-4825a1671482
                  name: Colour
                  options: null
                  option:
                    id: b8128e51-1b0a-4b16-9eda-bb783b17026b
                    name: Red
                    description: '#EE2238'
    template_response:
      value:
        data:
          - id: 43903bfa-5352-4a3d-9496-c9ab1229a175
            type: template
          - id: 50f56ce9-9381-43f6-8a52-5369a8b42e52
            type: template
    templates_relationship_request:
      value:
        data:
          - id: 43903bfa-5352-4a3d-9496-c9ab1229a175
            type: template
          - id: 50f56ce9-9381-43f6-8a52-5369a8b42e52
            type: template
    component_products_relationship_response:
      value:
        data:
          - id: 43903bfa-5352-4a3d-9496-c9ab1229a175
            type: product
          - id: 50f56ce9-9381-43f6-8a52-5369a8b42e52
            type: product
    file_relationship_response:
      value:
        data:
          - id: 43903bfa-5352-4a3d-9496-c9ab1229a175
            type: file
          - id: 50f56ce9-9381-43f6-8a52-5369a8b42e52
            type: file
    file_relationship_request:
      value:
        data:
          - id: 43903bfa-5352-4a3d-9496-c9ab1229a175
            type: file
          - id: 50f56ce9-9381-43f6-8a52-5369a8b42e52
            type: file
    variations_response:
      value:
        data:
          - id: 43903bfa-5352-4a3d-9496-c9ab1229a175
            type: product-variation
          - id: 50f56ce9-9381-43f6-8a52-5369a8b42e52
            type: product-variation
    product_variations_relationship_request:
      value:
        data:
          - id: 43903bfa-5352-4a3d-9496-c9ab1229a175
            type: product-variation
    attach_custom_relationship_request:
      value:
        data:
          - type: custom-relationship
            slug: CRP_related_products
          - type: custom-relationship
            slug: CRP_cart_products
    resp_multi_custom_relationships:
      value:
        data:
          - id: f3297ee8-da90-45e9-ae56-a2654aebbdfe
            type: custom-relationship
            attributes:
              name: Kitchen electrics
              description: Kitchen electric devices
              slug: CRP_kitchen_individual_devices
              bi_directional: false
            meta:
              owner: store
              timestamps:
                created_at: '2024-01-10T20:16:35.343Z'
                updated_at: '2024-01-10T20:16:35.343Z'
          - id: 21b1315b-c47f-4766-85bf-7bf0f94d73b6
            type: custom-relationship
            attributes:
              name: Related Products
              description: A list of related products shown on the PDP
              slug: CRP_related_products
              bi_directional: true
            meta:
              owner: store
              timestamps:
                created_at: '2024-01-10T20:16:35.343Z'
                updated_at: '2024-01-10T20:16:35.343Z'
          - id: e390ff7e-efc4-4769-90d2-fceabcc1e2cd
            type: custom-relationship
            attributes:
              name: Related Products
              description: A list of related products shown on the PDP
              slug: CRP_related_products
              sort_order: 5
              external_name: Similar items to consider
              external_description: Check out these similar products that may also meet your needs or match your preferences.
              bi_directional: false
            meta:
              owner: store
              timestamps:
                created_at: '2024-01-10T20:16:35.343Z'
                updated_at: '2024-01-10T20:16:35.343Z'
        links:
          last: /pcm/custom_relationships?page[offset]=29&page[limit]=1
          next: /pcm/custom_relationships?page[offset]=1&page[limit]=1
        meta:
          results:
            total: 3
    list_product_association_product_ids_response:
      value:
        data:
          - id: 68c48149-0e94-4ef2-93d5-8d5f3774980a
            type: product
            attributes:
              sort_order: 5
          - id: ab4826d1-4a5a-4951-a2a5-98058899f891
            type: product
    create_product_association_request:
      value:
        data:
          - type: product
            id: 68c48149-0e94-4ef2-93d5-8d5f3774980a
            attributes:
              sort_order: 5
          - type: product
            id: ab4826d1-4a5a-4951-a2a5-98058899f891
          - type: product
            id: 97b7fac2-91dd-4755-81b0-bdffe8e7eabd
          - type: product
            id: a0ef3291-2ec1-4d7d-9d6d-1705ae01bb99
            attributes:
              sort_order: 2
          - type: product
            id: bde79675-4783-40b7-8a7e-ac6df41459c6
          - type: product
            id: aaddd5f4-a5f8-42e8-be9a-097986f22e58
    create_product_association_created_response:
      value:
        meta:
          associated_products:
            - 68c48149-0e94-4ef2-93d5-8d5f3774980a
            - ab4826d1-4a5a-4951-a2a5-98058899f891
          products_not_associated:
            - ID: 97b7fac2-91dd-4755-81b0-bdffe8e7eabd
              Details: could not find product
            - ID: a0ef3291-2ec1-4d7d-9d6d-1705ae01bb99
              Details: product already has 5 custom relationships, cannot associate more as it has reached the limit of 5 custom relationships
            - ID: bde79675-4783-40b7-8a7e-ac6df41459c6
              Details: product already has 5 custom relationships, cannot associate more as it has reached the limit of 5 custom relationships
            - ID: aaddd5f4-a5f8-42e8-be9a-097986f22e58
              Details: product exceeds the maximum limit of associated products (2000). Please review and try again
          owner: store
          timestamps:
            created_at: '2024-08-08T09:29:08.295Z'
            updated_at: '2024-08-08T09:29:08.295Z'
    delete_product_association_request:
      value:
        data:
          - type: product
            id: 68c48149-0e94-4ef2-93d5-8d5f3774980a
          - type: product
            id: ab4826d1-4a5a-4951-a2a5-98058899f891
          - type: product
            id: 97b7fac2-91dd-4755-81b0-bdffe8e7eabd
          - type: product
            id: a0ef3291-2ec1-4d7d-9d6d-1705ae01bb99
          - type: product
            id: bde79675-4783-40b7-8a7e-ac6df41459c6
          - type: product
            id: aaddd5f4-a5f8-42e8-be9a-097986f22e58
    multi_variations:
      value:
        data:
          - type: product-variation
            id: c1ccccba-53e4-46b5-aed8-94f32823148a
            attributes:
              name: Size
              sort_order: 1
            meta:
              options:
                - id: 057a50ba-1afb-4944-9637-bd9b568a9f39
                  name: Large
                  description: Large size
                  sort_order: 3
                  created_at: '2024-01-25T11:25:38.001Z'
                  updated_at: '2024-01-25T11:25:38.001Z'
                - id: fa191e68-9bba-49f9-8e12-056c4e8f50e2
                  name: Medium
                  description: Medium size
                  sort_order: 2
                  created_at: '2024-01-25T11:25:38.001Z'
                  updated_at: '2024-01-25T11:25:38.001Z'
                - id: 112d1c5c-d149-453e-b208-89470968bacf
                  name: Small
                  description: Small size
                  sort_order: 1
                  created_at: '2024-01-25T11:25:38.001Z'
                  updated_at: '2024-01-25T11:25:38.001Z'
              owner: store
              created_at: '2024-01-25T11:25:38.001Z'
              updated_at: '2024-01-25T11:25:38.001Z'
          - type: product-variation
            id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
            attributes:
              name: Paint Color
            meta:
              owner: store
              created_at: '2024-01-25T11:25:38.001Z'
              updated_at: '2024-01-25T11:25:38.001Z'
        meta:
          results:
            total: 2
    create_variation:
      value:
        data:
          type: product-variation
          attributes:
            name: Paint Color
            sort_order: 10
    created_variation:
      value:
        data:
          id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
          type: product-variation
          attributes:
            name: Paint Color
            sort_order: 10
          meta:
            owner: store
            created_at: '2024-01-25T11:25:38.001Z'
            updated_at: '2024-01-25T11:25:38.001Z'
    single_variation:
      value:
        data:
          id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
          type: product-variation
          attributes:
            name: Paint Color
            sort_order: 1
          meta:
            options:
              - id: 3de2c96c-2a99-4ded-bcf8-eeba32c0c5be
                name: Red
                description: Red color
                sort_order: 2
                created_at: '2024-01-25T11:25:38.001Z'
                updated_at: '2024-01-25T11:25:38.001Z'
              - id: 31f2d09b-8a10-447a-b3ad-3358d07f818a
                name: Blue
                description: Blue color
                sort_order: 1
                created_at: '2024-01-25T11:25:38.001Z'
                updated_at: '2024-01-25T11:25:38.001Z'
            owner: store
            created_at: '2024-01-25T11:25:38.001Z'
            updated_at: '2024-01-25T11:25:38.001Z'
    update_variation:
      value:
        data:
          id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
          type: product-variation
          attributes:
            name: Paint Color
            sort_order: 0
    multi_options:
      value:
        data:
          - type: product-variation-option
            id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
            attributes:
              description: Our most popular color
              name: Blue
              sort_order: 0
            meta:
              owner: store
              created_at: '2024-01-25T11:25:38.001Z'
              updated_at: '2024-01-25T11:25:38.001Z'
          - type: product-variation-option
            id: fbe73839-58a2-41b4-aca6-cb0724668c97
            attributes:
              description: Our second most popular color
              name: Red
            meta:
              owner: store
              created_at: '2024-01-25T11:25:38.001Z'
              updated_at: '2024-01-25T11:25:38.001Z'
        meta:
          results:
            total: 2
    create_option:
      value:
        data:
          type: product-variation-option
          attributes:
            name: Blue
            sort_order: 0
            description: Our most popular color
    created_option:
      value:
        data:
          type: product-variation-option
          id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
          attributes:
            description: Our most popular color
            name: Blue
            sort_order: 0
          meta:
            owner: store
            created_at: '2024-01-25T11:25:38.001Z'
            updated_at: '2024-01-25T11:25:38.001Z'
    single_option:
      value:
        data:
          type: product-variation-option
          id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
          attributes:
            description: Our most popular color
            name: Blue
            sort_order: 0
          meta:
            owner: store
            created_at: '2024-01-25T11:25:38.001Z'
            updated_at: '2024-01-25T11:25:38.001Z'
    update_option:
      value:
        data:
          type: product-variation-option
          id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
          attributes:
            description: Our most popular color
            name: Blue
            sort_order: 0
    multi_modifiers:
      value:
        data:
          - type: product-variation-modifier
            id: 68ec4892-9e4c-4154-a9fd-f5a9fb1f6878
            attributes:
              type: sku_equals
              value: newSku
            meta:
              owner: store
          - type: product-variation-modifier
            id: a510cddc-e946-4c22-9541-54626a7cf0ec
            attributes:
              seek: '{color}'
              set: red
              type: slug_builder
            meta:
              owner: store
          - type: product-variation-modifier
            id: 2f0cbb06-8880-4a75-bfc6-a20f0f73a997
            attributes:
              reference_name: PriceEqual
              type: price
            meta:
              owner: store
        meta:
          results:
            total: 3
    create_modifier:
      value:
        data:
          type: product-variation-modifier
          attributes:
            seek: '{color}'
            set: red
            type: slug_builder
    created_modifier:
      value:
        data:
          type: product-variation-modifier
          id: a510cddc-e946-4c22-9541-54626a7cf0ec
          attributes:
            seek: '{color}'
            set: red
            type: slug_builder
          meta:
            owner: store
    single_modifier:
      value:
        data:
          type: product-variation-modifier
          id: 68ec4892-9e4c-4154-a9fd-f5a9fb1f6878
          attributes:
            type: sku_equals
            value: newSku
          meta:
            owner: store
    update_modifier:
      value:
        data:
          type: product-variation-modifier
          id: 68ec4892-9e4c-4154-a9fd-f5a9fb1f6878
          attributes:
            type: sku_equals
            value: anotherSku
    resp_multi_hierarchy:
      value:
        data:
          - type: hierarchy
            id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
            attributes:
              description: Shoes Category
              locales:
                fr-FR:
                  name: Chaussures
                  description: Catégorie de chaussures
              name: Shoes
              slug: shoes
            relationships:
              children:
                data: []
                links:
                  related: /hierarchies/6183d10c-94b5-4caa-9f12-2f14cb738d41/children
            meta:
              created_at: '2024-01-10T20:16:35.343Z'
              owner: store
              updated_at: '2024-01-10T20:30:50.867Z'
              breadcrumbs:
                - id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
                  name: Shoes
                  slug: shoes
                  locales:
                    fr-FR:
                      name: hierarchy 1 in French
        links:
          last: /pcm/hierarchies?page[offset]=29&page[limit]=1
          next: /pcm/hierarchies?page[offset]=1&page[limit]=1
        meta:
          results:
            total: 30
    create_hierarchy:
      value:
        data:
          type: hierarchy
          attributes:
            name: Shoes
            description: Shoes Category
            slug: shoes
            admin_attributes:
              cost_of_goods: '42.0'
              charge_type: credit card
            shopper_attributes:
              cost_of_goods: '42.0'
              charge_type: credit card
            locales:
              fr-FR:
                name: Chaussures
                description: Catégorie de chaussures
    hierarchy_created:
      value:
        data:
          type: hierarchy
          id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
          attributes:
            description: Shoes Category
            locales:
              fr-FR:
                name: Chaussures
                description: Catégorie de chaussures
            admin_attributes:
              cost_of_goods: '42.0'
              charge_type: credit card
            shopper_attributes:
              cost_of_goods: '42.0'
              charge_type: credit card
            name: Shoes
            slug: shoes
          relationships:
            children:
              data: []
              links:
                related: /hierarchies/6183d10c-94b5-4caa-9f12-2f14cb738d41/children
          meta:
            created_at: '2024-01-10T20:16:35.343Z'
            owner: store
            updated_at: '2024-01-10T20:16:35.343Z'
            breadcrumbs:
              - id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
                name: Shoes
                slug: shoes
                locales:
                  fr-FR:
                    name: hierarchy 1 in French
    resp_multi_nodes_or_hierarchies:
      value:
        data:
          - id: 9ea0de15-3347-43dd-8faa-cd32f44a04c7
            type: node
            attributes:
              description: Latest Ballet Shoes
              locales:
                fr-FR:
                  name: Chaussons de ballet
                  description: Dernières chaussures de ballet
              name: Ballet Shoes
              slug: ballet-shoes
            relationships:
              children:
                data: []
                links:
                  related: /hierarchies/6183d10c-94b5-4caa-9f12-2f14cb738d41/nodes/9ea0de15-3347-43dd-8faa-cd32f44a04c7/children
              products:
                data: []
                links:
                  related: /hierarchies/6183d10c-94b5-4caa-9f12-2f14cb738d41/nodes/9ea0de15-3347-43dd-8faa-cd32f44a04c7/products
            meta:
              created_at: '2024-01-11T19:19:50.087Z'
              owner: store
              sort_order: 5
              updated_at: '2024-01-11T19:56:53.695Z'
              hierarchy_id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
              breadcrumbs:
                - id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
                  name: Shoes
                  slug: shoes
                  locales:
                    fr-FR:
                      name: hierarchy 1 in French
                - id: 9ea0de15-3347-43dd-8faa-cd32f44a04c7
                  name: Ballet Shoes
                  slug: ballet-shoes
                  locales:
                    fr-FR:
                      name: Node 1 in French
          - type: node
            id: b2f5e53e-de3c-4548-98da-120f8b185d34
            attributes:
              description: All Dress Shoes
              locales:
                fr-FR:
                  name: Chaussures habillées
                  description: Toutes les chaussures habillées
              name: Dress Shoes
              slug: dress-shoes
            relationships:
              children:
                data: []
                links:
                  related: /hierarchies/6183d10c-94b5-4caa-9f12-2f14cb738d41/nodes/b2f5e53e-de3c-4548-98da-120f8b185d34/children
              products:
                data: []
                links:
                  related: /hierarchies/6183d10c-94b5-4caa-9f12-2f14cb738d41/nodes/b2f5e53e-de3c-4548-98da-120f8b185d34/products
            meta:
              created_at: '2024-01-11T19:50:21.729Z'
              owner: store
              sort_order: 3
              updated_at: '2024-01-11T19:50:21.729Z'
              hierarchy_id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
              breadcrumbs:
                - id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
                  name: Shoes
                  slug: shoes
                  locales:
                    fr-FR:
                      name: hierarchy 1 in French
                - id: b2f5e53e-de3c-4548-98da-120f8b185d34
                  name: Dress Shoes
                  slug: dress-shoes
                  locales:
                    fr-FR:
                      name: Node 2 in French
          - type: hierarchy
            id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
            attributes:
              description: Shoes Category
              locales:
                fr-FR:
                  name: Chaussures
                  description: Catégorie de chaussures
              name: Shoes
              slug: shoes
            relationships:
              children:
                data: []
                links:
                  related: /hierarchies/6183d10c-94b5-4caa-9f12-2f14cb738d41/children
            meta:
              created_at: '2024-01-10T20:16:35.343Z'
              owner: store
              updated_at: '2024-01-10T20:30:50.867Z'
              breadcrumbs:
                - id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
                  name: Shoes
                  slug: shoes
                  locales:
                    fr-FR:
                      name: hierarchy 1 in French
        meta:
          results:
            total: 3
    update_hierarchy:
      value:
        data:
          type: hierarchy
          id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
          attributes:
            description: Shoes Category Updated
            admin_attributes:
              cost_of_goods: '42.0'
              charge_type: null
            shopper_attributes:
              cost_of_goods: null
              charge_type: credit card
            locales:
              fr-FR:
                name: Chaussures mises à jour
                description: Catégorie de chaussures mise à jour
            name: Shoes Updated
            slug: shoes
    hierarchy_updated:
      value:
        data:
          type: hierarchy
          id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
          attributes:
            description: Shoes Category Updated
            locales:
              fr-FR:
                name: Chaussures mises à jour
                description: Catégorie de chaussures mise à jour
            admin_attributes:
              cost_of_goods: '42.0'
            shopper_attributes:
              charge_type: credit card
            name: Shoes Updated
            slug: shoes
          relationships:
            children:
              data: []
              links:
                related: /hierarchies/6183d10c-94b5-4caa-9f12-2f14cb738d41/children
          meta:
            created_at: '2024-01-10T20:16:35.343Z'
            owner: store
            updated_at: '2024-01-10T20:30:50.867Z'
            breadcrumbs:
              - id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
                name: Shoes Updated
                slug: shoes
                locales:
                  fr-FR:
                    name: hierarchy 1 in French
    create_node:
      value:
        data:
          type: node
          attributes:
            name: Ballet Shoes
            description: All Ballet Shoes
            slug: ballet-shoes
            admin_attributes:
              cost_of_goods: '42.0'
              charge_type: credit card
            shopper_attributes:
              cost_of_goods: '42.0'
              charge_type: credit card
            locales:
              fr-FR:
                name: Chaussons de ballet
                description: Toutes les ballerines
          meta:
            sort_order: 2
    node_created:
      value:
        data:
          type: node
          id: 9ea0de15-3347-43dd-8faa-cd32f44a04c7
          attributes:
            description: All Ballet Shoes
            locales:
              fr-FR:
                name: Chaussons de ballet
                description: Toutes les chaussures de ballet
            admin_attributes:
              cost_of_goods: '42.0'
              charge_type: credit card
            shopper_attributes:
              cost_of_goods: '42.0'
              charge_type: credit card
            name: Ballet Shoes
            slug: ballet-shoes
          relationships:
            children:
              data: []
              links:
                related: /hierarchies/6183d10c-94b5-4caa-9f12-2f14cb738d41/nodes/9ea0de15-3347-43dd-8faa-cd32f44a04c7/children
            parent:
              data:
                type: node
                id: 14e8e15a-7214-435d-bccb-6ae9b570d683
            products:
              data: []
              links:
                related: /hierarchies/6183d10c-94b5-4caa-9f12-2f14cb738d41/nodes/9ea0de15-3347-43dd-8faa-cd32f44a04c7/products
          meta:
            created_at: '2024-01-11T19:19:50.087Z'
            owner: store
            parent_name: Shoes
            sort_order: 2
            updated_at: '2024-01-11T19:19:50.087Z'
            hierarchy_id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
            breadcrumbs:
              - id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
                name: Shoes
                slug: shoes
                locales:
                  fr-FR:
                    name: hierarchy 1 in French
              - id: 9ea0de15-3347-43dd-8faa-cd32f44a04c7
                name: Ballet Shoes
                slug: ballet-shoes
                locales:
                  fr-FR:
                    name: Node 1 in French
    update_node:
      value:
        data:
          type: node
          id: 9ea0de15-3347-43dd-8faa-cd32f44a04c7
          attributes:
            name: Ballet Shoes
            description: Latest Ballet Shoes
            slug: ballet-shoes
            admin_attributes:
              cost_of_goods: '42.0'
              charge_type: null
            shopper_attributes:
              cost_of_goods: null
              charge_type: credit card
            locales:
              fr-FR:
                name: Chaussons de ballet
                description: Dernières chaussures de ballet
          meta:
            sort_order: 5
    node_updated:
      value:
        data:
          type: node
          id: 9ea0de15-3347-43dd-8faa-cd32f44a04c7
          attributes:
            description: Latest Ballet Shoes
            locales:
              fr-FR:
                name: Chaussons de ballet
                description: Dernières chaussures de ballet
            admin_attributes:
              cost_of_goods: '42.0'
            shopper_attributes:
              charge_type: credit card
            name: Ballet Shoes
            slug: ballet-shoes
          relationships:
            children:
              data: []
              links:
                related: /hierarchies/6183d10c-94b5-4caa-9f12-2f14cb738d41/nodes/9ea0de15-3347-43dd-8faa-cd32f44a04c7/children
            products:
              data: []
              links:
                related: /hierarchies/6183d10c-94b5-4caa-9f12-2f14cb738d41/nodes/9ea0de15-3347-43dd-8faa-cd32f44a04c7/products
          meta:
            created_at: '2024-01-11T19:19:50.087Z'
            owner: store
            sort_order: 5
            updated_at: '2024-01-11T19:56:53.695Z'
            hierarchy_id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
            breadcrumbs:
              - id: 6183d10c-94b5-4caa-9f12-2f14cb738d41
                name: Shoes
                slug: shoes
                locales:
                  fr-FR:
                    name: hierarchy 1 in French
              - id: 9ea0de15-3347-43dd-8faa-cd32f44a04c7
                name: Ballet Shoes
                slug: ballet-shoes
                locales:
                  fr-FR:
                    name: Node 1 in French
    node_children:
      value:
        data:
          - type: node
            id: b2f5e53e-de3c-4548-98da-120f8b185d34
    node_parent:
      value:
        data:
          type: node
          id: 60dc3982-ab34-47e8-9173-c920c63dc382
    node_products:
      value:
        data:
          - type: product
            id: 9c85b276-09b4-488e-a59c-c561bae14c9e
    duplicate_job:
      value:
        data:
          type: hierarchy
          attributes:
            name: New Shoes
            description: New Shoes Category
            include_products: true
    duplicate_hierarchy_job_created:
      value:
        data:
          type: pim-job
          id: 1d9b101e-a40a-4e53-9f54-08a9ede65019
          attributes:
            completed_at: null
            created_at: '2024-01-11T22:49:10.338Z'
            started_at: null
            status: pending
            type: hierarchy-duplicate
            updated_at: '2024-01-11T22:49:10.338Z'
          meta:
            x_request_id: 40995a1d-c0c1-4d52-a178-bfb5399ab0ec
    resp_multi_tags:
      value:
        data:
          - type: tag
            id: a88aac35-54de-40c2-bb4b-f1c57624db27
            attributes:
              value: shirts
            meta:
              created_at: '2024-03-20T15:56:40.014Z'
              owner: store
              updated_at: '2024-03-20T15:56:40.014Z'
          - type: tag
            id: 6782e020-fefd-431e-9dea-b59d249c2c5e
            attributes:
              value: shoes
            meta:
              created_at: '2024-03-20T15:56:40.014Z'
              owner: store
              updated_at: '2024-03-20T15:56:40.014Z'
        meta:
          results:
            total: 2
    resp_single_tag:
      value:
        data:
          type: tag
          id: 9879a8f5-0da2-4be6-91f6-a0f09d1c77a9
          attributes:
            value: tables
          meta:
            created_at: '2024-03-20T18:37:43.398Z'
            owner: organization
            updated_at: '2024-03-20T18:37:43.398Z'
    create_basic_custom_relationship:
      summary: Basic
      description: Create a custom relationship with minimal fields.
      value:
        data:
          type: custom-relationship
          attributes:
            name: Kitchen electrics
            description: Kitchen electric devices
            slug: CRP_kitchen_individual_devices
    create_custom_relationship_with_external_sort_order:
      summary: External Name and Description, and Sort Order
      description: Create a custom relationship with an external name and description, as well as specifying a sort order.
      value:
        data:
          type: custom-relationship
          attributes:
            name: Related Products
            description: A list of related products shown on the PDP
            slug: CRP_related_products
            sort_order: 5
            external_name: Similar items to consider
            external_description: Check out these similar products that may also meet your needs or match your preferences.
    create_custom_relationship_bi_directional:
      summary: Bi-Directional
      description: Create a custom relationship with bi-directional relationships.
      value:
        data:
          type: custom-relationship
          attributes:
            name: Related Products
            description: A list of related products shown on the PDP
            slug: CRP_related_products
            bi_directional: true
    custom_relationship_created:
      summary: Basic
      value:
        data:
          id: f3297ee8-da90-45e9-ae56-a2654aebbdfe
          type: custom-relationship
          attributes:
            name: Kitchen electrics
            description: Kitchen electric devices
            slug: CRP_kitchen_individual_devices
            bi_directional: false
          meta:
            owner: store
            timestamps:
              created_at: '2024-01-10T20:16:35.343Z'
              updated_at: '2024-01-10T20:16:35.343Z'
    custom_relationship_with_external_sort_order_created:
      summary: External name and description, and sort order
      value:
        data:
          id: e390ff7e-efc4-4769-90d2-fceabcc1e2cd
          type: custom-relationship
          attributes:
            name: Related Products
            description: A list of related products shown on the PDP
            slug: CRP_related_products
            sort_order: 5
            external_name: Similar items to consider
            external_description: Check out these similar products that may also meet your needs or match your preferences.
            bi_directional: false
          meta:
            owner: store
            timestamps:
              created_at: '2024-01-10T20:16:35.343Z'
              updated_at: '2024-01-10T20:16:35.343Z'
    custom_relationship_bi_directional_created:
      summary: Bi-Directional
      value:
        data:
          id: e390ff7e-efc4-4769-90d2-fceabcc1e2cd
          type: custom-relationship
          attributes:
            name: Related Products
            description: A list of related products shown on the PDP
            slug: CRP_related_products
            bi_directional: true
          meta:
            owner: store
            timestamps:
              created_at: '2024-01-10T20:16:35.343Z'
              updated_at: '2024-01-10T20:16:35.343Z'
    custom_relationship_updated:
      value:
        data:
          type: custom-relationship
          id: f3297ee8-da90-45e9-ae56-a2654aebbdfe
          attributes:
            name: Related Products
            description: A list of related products shown on the PDP
            slug: CRP_related_products
            sort_order: 5
            external_name: Similar items to consider
            external_description: Check out these similar products that may also meet your needs or match your preferences.
            bi_directional: false
          meta:
            owner: store
            timestamps:
              created_at: '2024-01-10T20:16:35.343Z'
              updated_at: '2024-01-10T20:16:35.343Z'
    update_custom_relationship:
      summary: Update
      value:
        data:
          type: custom-relationship
          id: f3297ee8-da90-45e9-ae56-a2654aebbdfe
          attributes:
            name: Related Products
            description: A list of related products shown on the PDP
            slug: CRP_related_products
            sort_order: 5
            external_name: Similar items to consider
            external_description: Check out these similar products that may also meet your needs or match your preferences.
            bi_directional: false
  responses:
    bad_request:
      description: Bad request. The request failed validation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          examples:
            bad-request:
              value:
                errors:
                  - title: Bad Request
                    detail: Could not parse the supplied filter
                    status: '400'
    not_found:
      description: Bad Request. Not Found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          examples:
            internal-server-error:
              value:
                errors:
                  - title: Not Found
                    status: '404'
    unprocessable_entity:
      description: Bad request. The request failed validation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          examples:
            failed-validation:
              value:
                errors:
                  - title: Failed Validation
                    status: '422'
                    detail: <XYZ> can not be empty
    internal:
      description: Internal server error. There was a system failure in the platform.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          examples:
            internal-server-error:
              value:
                errors:
                  - status: '500'
                    title: Internal Server Error
                    detail: There was an internal server error, you can report with your request id.
                    request_id: 635da56d-75a1-43cd-b696-7ab119756b3a
    forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          examples:
            internal-server-error:
              value:
                errors:
                  - title: Forbidden
                    status: '403'
                    detail: entity owned by organization
    write_conflict:
      description: Write conflict detected
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          examples:
            internal-server-error:
              value:
                errors:
                  - title: Conflict
                    status: '409'
                    detail: write conflict detected
  parameters:
    job_id:
      name: jobID
      in: path
      schema:
        type: string
        example: 00000000-0000-0000-0000-000000000000
      required: true
      description: A unique identifier for the job.
    page_offset:
      name: page[offset]
      in: query
      description: The number of records to offset the results by.
      schema:
        type: integer
        minimum: 0
        maximum: 10000
        format: int64
        example:
          - '0'
    page_limit:
      name: page[limit]
      in: query
      description: The number of records per page. The maximum limit is 100.
      schema:
        type: integer
        minimum: 0
        maximum: 10000
        format: int64
        example:
          - '10'
    filterproduct:
      name: filter
      in: query
      description: |
        Many Commerce API endpoints support filtering. The general syntax is described [**here**](/guides/Getting-Started/filtering).

        For more information about the attributes and operators that are supported, see [Get all products](/docs/api/pxm/products/get-all-products).
      style: form
      explode: true
      schema:
        type: string
        example:
          - eq(name,some-name)
          - like(name,*some-name*)
          - filter=in(id,some-id)
    include:
      name: include
      in: query
      description: |
        Using the include parameter, you can retrieve top-level resources.

        - Files or main image. For example, `include=files,main_image`.
        - Component product data. For example, `include=component_products`.
        - Key attribute data, such as SKU or slug.
      required: false
      style: form
      explode: false
      schema:
        items:
          type: string
          enum:
            - files
            - main_image
            - component_products
    useTemplateSlugs:
      name: useTemplateSlugs
      description: Set to `true` if you want to use a template slug instead of a template ID when exporting products that have custom data.
      in: query
      style: form
      explode: true
      schema:
        type: boolean
        default: false
    filterexport:
      name: filter
      in: query
      description: |

        Many Commerce API endpoints support filtering. The general syntax is described [**here**](/guides/Getting-Started/filtering), but you must go to a specific endpoint to understand the attributes and operators an endpoint supports.

        For more information about the attributes and operators that this endpoint supports, see [Export Products](/docs/api/pxm/products/export-products).
      style: form
      explode: true
      schema:
        type: string
        example:
          - eq(name,some-name)
          - like(name,*some-name*)
          - filter=in(id,some-id)
    product_id:
      name: productID
      in: path
      schema:
        type: string
        example: 00000000-0000-0000-0000-000000000000
        x-postman-example: '{{productID}}'
      required: true
      description: A unique identifier for the product.
    custom_relationship_slug:
      name: customRelationshipSlug
      in: path
      schema:
        type: string
        example: CRP_electric_devices_2024
      required: true
      description: A custom relationship slug.
    variation_id:
      name: variationID
      in: path
      schema:
        type: string
        example: 00000000-0000-0000-0000-000000000000
        x-postman-example: '{{variationID}}'
      required: true
      description: A unique identifier for the variation.
    option_id:
      name: optionID
      in: path
      schema:
        type: string
        example: 00000000-0000-0000-0000-000000000000
      required: true
      description: A unique identifier for the option.
    modifier_id:
      name: modifierID
      in: path
      schema:
        type: string
        example: 00000000-0000-0000-0000-000000000000
      required: true
      description: A unique identifier for the modifier.
    filter_nodes:
      name: filter
      in: query
      description: |
        Many Commerce API endpoints support filtering. The general syntax is described [**here**](/guides/Getting-Started/filtering).
      style: form
      explode: true
      schema:
        type: string
        example:
          - eq(name,some-name)
          - like(name,*some-name*)
          - in(id,some-id)
          - lt(id,100)
          - le(created_at,2023-01-01)
          - gt(updated_at,2023-01-01)
          - ge(parent_id,500)
          - eq(owner,store)
          - eq(locales.fr-FR.name,Nom-du-produit)
          - like(locales.es-ES.description,*descripción*)
    include_hierarchies:
      name: include_hierarchies
      in: query
      description: When true, includes hierarchy objects in the response alongside nodes
      required: false
      schema:
        type: boolean
        default: false
    hierarchy_id:
      name: hierarchyID
      in: path
      schema:
        type: string
        example: 00000000-0000-0000-0000-000000000000
      required: true
      description: A unique identifier for the hierarchy.
    node_id:
      name: nodeID
      in: path
      schema:
        type: string
        example: 00000000-0000-0000-0000-000000000000
      required: true
      description: A unique identifier for the node.
    tag_id:
      name: tagID
      in: path
      schema:
        type: string
        example: 00000000-0000-0000-0000-000000000000
      required: true
      description: A unique identifier for the tag.
    filtercr:
      name: filter
      in: query
      description: |
        Many Commerce API endpoints support filtering. The general syntax is described [**here**](/guides/Getting-Started/filtering).
      style: form
      explode: true
      schema:
        type: string
        example:
          - eq(owner,store)
