# 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: 1.0.0 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"; ### Product Types ### Personalizing Products ### Products and Catalog Releases ### Bundles ### Bundle Components and Options ### Bundle Pricing ### Dynamic Bundles #### 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 #### 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'; ``` - name: Extending Products with Templates description: | ```mdx-code-block import TemplatesOverview from '/docs/partials/pxm/templates/extendingproducts.mdx'; ``` - name: Bundle Component Products Relationships description: | With Product Experience Manager, you can create and manage bundles. A bundle is a purchasable product, comprising 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 VariationsResuability 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"; ### Resuability ### Child Products ### Building Child Products ### 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 ### Price Modifiers ``` - 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'; ``` #### 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::` | 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::` 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'; ``` ### 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::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::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::` | 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::` - `template::` 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'; ## 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 ``` - name: Jobs description: | ```mdx-code-block import ProductJobs from '/docs/partials/pxm/jobs/jobs.mdx'; ``` 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 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, comprising 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' 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' '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. #### 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` | `sku`, `slug`,`upc_ean`, `manufacturer_part_num`, `name`, `templates`, `commodity_type`, `owner`, `product_types`, `tags` | 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. For example, `filter=eq(product_types,child)` | `filter=eq(name,some-name)` | | `like` | `sku`, `slug`,`upc_ean`, `manufacturer_part_num`, `name`, `tags` | 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`, `tags` | Checks if the values are included in the specified string. If they are, the condition is true. For `product_types`, you can specify more than one product type. For example, `filter=in(product_types,child,bundle)`. | `filter=in(id,some-id)` | 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 and custom extension data. 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). 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' /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). ### Filtering The following attributes and operators are supported. | Operator | Attribute | Description | Example | | :--- |:-------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------| :--- | | `eq` | `sku`, `slug`, `upc_ean`, `manufacturer_part_num`, `name`, `description`, `tags` | Equals. Checks if the values of two operands are equal. If they are, the condition is true. When filtering on tags, you can only specify one product tag. | `filter=eq(name,some-name)` | | `In` | `sku`, `tags` | Checks if the values are included in the specified string. If they are, the condition is true. When filtering on tags, you can specify a list of product tags. | `filter=in(id,some-id)` | | `like` | `sku`, `slug`, `upc_ean`, `manufacturer_part_num`, `name`, `description` | Like. Checks if the operand contains the specified string. Wildcards are supported. | `filter=like(name,some-name)` | operationId: exportProducts tags: - Product Export requestBody: content: application/json: schema: type: object 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-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' 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' '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` | `sku`, `slug`,`upc_ean`, `manufacturer_part_num`, `name`, `templates`, `commodity_type`, `owner`, `product_types` | 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. For example, `filter=eq(product_types,child)` | `filter=eq(name,some-name)` | | `like` | `sku`, `slug`,`upc_ean`, `manufacturer_part_num`, `name` | 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` | Checks if the values are included in the specified string. If they are, the condition is true. For `product_types`, you can specify more than one product type. For example, `filter=in(product_types,child,bundle)`. | `filter=in(id,some-id)` | 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` | `sku`, `slug`,`upc_ean`, `mpn`, `name`, `templates`, `commodity_type`, `owner`, `product_types` | 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. For example, `filter=eq(product_types,child)` | `filter=eq(name,some-name)` | | `like` | `sku`, `slug`,`upc_ean`, `mpn`, `name` | Like. Checks if the operand contains the specified string. Wildcards are supported. | `filter=like(name,*some-name*)` | | `In` | `id`, `name`, `SKU`, `slug`, `upc_ean`, `mpn`, `product_types` | Checks if the values are included in the specified string. If they are, the condition is true. For `product_types`, you can specify more than one product type. For example, `filter=in(product_types,child,bundle)`. | `filter=in(id,some-id)` | 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 '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/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: Create a hierarchy 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' summary: Get all hierarchies description: Get all hierarchies 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/{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: Specify whichever attributes you want to change. The values of the other attributes remain the same. If the attributes section is empty, the hierarchy is not updated. 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: | Creates a node in the specified hierarchy. ### 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/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. 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: | Updates the specified node in a hierarchy. You can do a partial update, where you specify only the field value to change. ### 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/page_offset' - $ref: '#/components/parameters/page_limit' summary: Get a hierarchy's children description: Get a hierarchy's children 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}/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**), 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 node's children 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/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. 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 for the duplicated hierarchy. All other attributes, such as slug and locales, 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 associations 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' components: securitySchemes: bearerAuth: type: http scheme: bearer schemas: job: type: object 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 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 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 properties: data: description: An array of jobs. type: array items: $ref: '#/components/schemas/job' 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 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 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, comprising 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 description: The number of this product option that a shopper must purchase. 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. 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 multi_product_response: type: object properties: data: type: array items: $ref: '#/components/schemas/product_response' included: type: object 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. properties: 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' 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`. 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: type: object 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. properties: component_products: description: 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' 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' 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 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 required: [] 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 required: [] 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 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 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_links: type: object description: Links are used to allow you to move between requests. properties: first: description: Always the first page. type: string example: /pcm/hierarchies?page[offset]=0&page[limit]=10 last: description: This is `null` if there is only one page. type: string example: /pcm/hierarchies?page[offset]=20&page[limit]=10 next: description: This is `null` if there is only one page. type: string example: /pcm/hierarchies?page[offset]=10&page[limit]=10 prev: description: This is `null` if you on the first page. type: string example: /pcm/hierarchies?page[offset]=8&page[limit]=10 multi_nodes: type: object 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: array items: 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 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 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 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 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 required: [] 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 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 multi_hierarchy: type: object 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 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 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 properties: data: $ref: '#/components/schemas/hierarchy' 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 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 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 properties: data: $ref: '#/components/schemas/node' update_node: type: object 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 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 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 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 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 include_products: description: Specify `true` if you want the product associations 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' 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: created_at: '2024-01-05T13:42:41.695Z' status: started type: product-import updated_at: '2024-01-05T13:42:42.07Z' 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' 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 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_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 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: 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: {} 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_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 Meduim - 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' - 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' meta: results: total: 2 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 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' 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 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 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' update_hierarchy: 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 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 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' create_node: value: data: type: node attributes: name: Ballet Shoes description: All Ballet Shoes slug: ballet-shoes 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 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' update_node: value: data: type: node id: 9ea0de15-3347-43dd-8faa-cd32f44a04c7 attributes: name: Ballet Shoes description: Latest Ballet Shoes slug: ballet-shoes 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 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' 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' 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: 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**](/docs/commerce-cloud/api-overview/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. style: form explode: true schema: type: string example: - 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**](/docs/commerce-cloud/api-overview/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. 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. 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.