# 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.