openapi: 3.0.3 info: x-api-type: Shopper x-api-family: Product title: Shopper Products version: 1.12.0 description: |- [Download API specification](https://developer.salesforce.com/static/commercecloud/commerce-api/shopper-products/shopper-products-oas-v1-public.yaml) # API Overview The Shopper Products API enables you to access product details for products that are online, merchandised to a particular site catalog, and ready to be sold. You can use these product details to merchandise the product on other ecommerce channels. To set up category navigation paths on other commerce apps or storefronts, you can use the Categories API. ## Authentication & Authorization The client requesting the product information must have access to the Products resource. The Shopper Products API requires a shopper access token from the Shopper Login and API Access Service (SLAS). You must include the relevant scopes in the client ID used to generate the SLAS token. For a full list of required permissions, see the [Authorization Scopes Catalog.](https://developer.salesforce.com/docs/commerce/commerce-api/guide/auth-z-scope-catalog.html) For details on how to request a shopper access token from SLAS, see the guest user flows for [public clients](https://developer.salesforce.com/docs/commerce/commerce-api/guide/slas-public-client.html#guest-user) and [private clients](https://developer.salesforce.com/docs/commerce/commerce-api/guide/slas-private-client.html#guest-user) in the SLAS guides. ## Customization ### Custom Properties This API supports custom properties (prefixed with `c_`). For details, see [Custom Properties.](https://developer.salesforce.com/docs/commerce/commerce-api/guide/custom-properties.html) ### Hooks For details on working with hooks, see [Extensibility with Hooks.](https://developer.salesforce.com/docs/commerce/commerce-api/guide/extensibility_via_hooks.html) ## Request Details ### Property Selection This API supports the `select` query parameter for filtering response properties. For details, see [Property Selection.](https://developer.salesforce.com/docs/commerce/commerce-api/guide/scapi-property-selection.html) ### URL Encoding If resource identifiers in request parameters contain commas (`,`) or percent signs (`%`), they must be URL encoded. For details, see [Encode URL Special Characters.](https://developer.salesforce.com/docs/commerce/commerce-api/guide/url-encode.html) ## Response Details ### Personalization Responses from this API can be personalized using the [Shopper Context API.](https://developer.salesforce.com/docs/commerce/commerce-api/guide/shopper-context-api.html) By setting context attributes such as customer group, source code, or store ID, you can retrieve personalized promotions, pricing, and shipping methods. For details on how personalization interacts with caching, see [Personalized Caching.](https://developer.salesforce.com/docs/commerce/commerce-api/guide/server-side-web-tier-caching.html#personalized-caching) ### Caching Caching is provided for this API. For details, see [Server-Side Web-Tier Caching.](https://developer.salesforce.com/docs/commerce/commerce-api/guide/server-side-web-tier-caching.html) ### Timeouts Shopper API requests must respond within 10 seconds, including any hook execution. If a response exceeds this threshold, an HTTP 504 status code is returned. For details, see [Timeouts and Limits.](https://developer.salesforce.com/docs/commerce/commerce-api/guide/timeouts-limits.html) ### Error Handling Error responses follow the [RFC 7807](https://datatracker.ietf.org/doc/html/rfc7807) problem detail format. To trace errors, include a `correlation-id` header in your request — the response returns it as `x-correlation-id`. For details, see [HTTP Status Codes and Errors.](https://developer.salesforce.com/docs/commerce/commerce-api/guide/error-response-codes.html) ## Use Cases ### Get a Single Product Retrieve product details by ID. Replace `{access_token}` with a valid SLAS token. ```sh curl "https://{shortCode}.api.commercecloud.salesforce.com/product/shopper-products/v1/organizations/{organizationId}/products/25695327M?siteId=RefArch" \ -H "Authorization: Bearer {access_token}" ``` ### Get Multiple Products Retrieve up to 24 products in a single request: ```sh curl "https://{shortCode}.api.commercecloud.salesforce.com/product/shopper-products/v1/organizations/{organizationId}/products?ids=25695327M,25519318M&siteId=RefArch" \ -H "Authorization: Bearer {access_token}" ``` ### Populate Product Listing Pages Use the Shopper Product API so that a customer, browsing on a commerce shopping app built using Commerce Cloud APIs, can see a list of products. For example, hydrate a list of products (max 24). The API returns product details including images, prices, promotions, and product availability.  ### Get Variation Product Details on an Ecommerce Channel Use the API so that a customer, browsing on a commerce shopping app built using Commerce Cloud APIs, can switch between different variation products. The API returns product details including images, prices, promotions, and available to sell inventory.  ### Retrieve Promotion Information Promotions provide discounts to shoppers when they meet certain purchase requirements. Promotion information is described in detail in [Promotion Details](https://developer.salesforce.com/docs/commerce/commerce-api/guide/promotion-details.html), but the following list provides several key points: - Pricing discounts for basket and shipping promotions are NEVER returned by the 'getProduct' or 'getProducts' endpoint. - Promotional pricing is ONLY returned for products that are included with non-conditional promotions. - Callout messages are ALWAYS returned by the 'getProduct' and 'getProducts' endpoints. By default, 'getProduct' and 'getProducts' return promotion information for a queried product. Promotion information includes both pricing and callout message information. However, the specific pricing and callout information that is fetched is determined by: - Promotion Type - Product Type - Product Purchase Requirements Some promotions can be displayed on a Product Data Page (PDP) or Product Listing page (PLP), while other promotions are displayed in the context of a basket, such as an order level promotion: "add the product to your basket to view price information". It is important to understand what is included in the response when designing a PDP or PLP on top of SCAPI to ensure your design aligns with implementable features. #### Shopper Personalization The SCAPI response can be personalized using the Shopper Context API or hooks. By setting specific values in the Shopper Context API, you can modify the response of the 'getProduct' or 'getProducts' endpoint based on the shopper's context. For instance, you can offer a 5% discount or free shipping to shoppers using mobile devices. #### JWA Caching The response is cached in JWA, which means promotion data contained in the response is also cached based on the TTL (Time to Live) specified in the Business Manager [Feature Switches](https://help.salesforce.com/s/articleView?id=cc.b2c_feature_switches.htm&type=5) configuration. When the shopper context value is updated, a check is conducted to see if the updated shopper context affects the retrieval of product-promotion data. If it does, then the response is fetched from the source and cached in the JWA. For details, see [Server-Side Web-Tier Caching.](https://developer.salesforce.com/docs/commerce/commerce-api/guide/server-side-web-tier-caching.html) ## Resources ### Product A full representation of a product or service that is to merchandise. A ready to merchandise product is one that is online, categorized, and published to a channel. The information associated with a product includes, the product name, description, custom and system attributes, variations, price, availability, and images. ### Category Categories and subcategories are the structure by which products are organized and grouped in a catalog and on a storefront. Categories can have relationships to other categories. Further, each category can provide context that is inherited by subcategories. For example, a category can have an assigned attribute. A product assigned to that category or any subcategory inherits the categories’s attribute value. Once the product is removed from the category, the attribute value is no longer inherited by the product. You can also use category linking for site hierarchical navigation. For example, inside the Clothing category you may have Men’s, and inside the Men’s category you may have Pants. Categories are not tags. ## Related APIs - [Products (Admin)](https://developer.salesforce.com/docs/commerce/commerce-api/references/products?meta=Summary) — Manage product catalogs, variations, and options. servers: - url: https://{shortCode}.api.commercecloud.salesforce.com/product/shopper-products/v1 variables: shortCode: description: An eight-character string assigned to a realm for routing purposes. See [Base URL and Request Formation.](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html) default: shortCode paths: /organizations/{organizationId}/products: parameters: - $ref: '#/components/parameters/organizationId' get: description: Allows access to multiple product details with a single request. Only products that are online and assigned to a site catalog are returned. The maximum number of product IDs that you can request is 24. In addition to product details, the availability, images, price, bundled_products, set_products, recommendations, product options, variations, shipping_methods, and promotions for the products are included, as applicable. operationId: getProducts summary: Returns product details for multiple products. security: - ShopperToken: - sfcc.shopper-products - sfcc.shopper-standard - ShopperClientContextToken: - sfcc.shopper-products - sfcc.shopper-standard parameters: - $ref: '#/components/parameters/ids' - $ref: '#/components/parameters/inventoryIds' - $ref: '#/components/parameters/expand_multiId' - $ref: '#/components/parameters/allImages' - $ref: '#/components/parameters/imgTypes' - $ref: '#/components/parameters/perPricebook' - $ref: '#/components/parameters/siteId' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/locale' - $ref: '#/components/parameters/currency' - $ref: '#/components/parameters/sfdcUsid' - $ref: '#/components/parameters/sfdcDwDnt' - $ref: '#/components/parameters/personalized' - $ref: '#/components/parameters/sfdcShopperContext' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/ProductResult' '400': description: Bad Request content: application/problem+json: schema: $ref: '#/components/schemas/ErrorResponse' examples: GetProductsBadRequestResponseExample: $ref: '#/components/examples/GetProductsBadRequestResponseExample' MalformedSelectorResponseExample: $ref: '#/components/examples/MalformedSelectorResponseExample' '401': $ref: '#/components/responses/401unauthorized' /organizations/{organizationId}/products/{id}: parameters: - $ref: '#/components/parameters/organizationId' - $ref: '#/components/parameters/id' get: description: Allows access to product details for a single product ID. Only products that are online and assigned to a site catalog are returned. In addition to product details, the availability, images, price, bundled_products, set_products, recommendations, product options, variations, shipping_methods, and promotions for the products are included, as applicable. operationId: getProduct summary: Returns product details for a single product. security: - ShopperToken: - sfcc.shopper-products - sfcc.shopper-standard - ShopperClientContextToken: - sfcc.shopper-products - sfcc.shopper-standard parameters: - $ref: '#/components/parameters/inventoryIds' - $ref: '#/components/parameters/expand_singleId' - $ref: '#/components/parameters/allImages' - $ref: '#/components/parameters/imgTypes' - $ref: '#/components/parameters/perPricebook' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/currency' - $ref: '#/components/parameters/locale' - $ref: '#/components/parameters/siteId' - $ref: '#/components/parameters/sfdcUsid' - $ref: '#/components/parameters/sfdcDwDnt' - $ref: '#/components/parameters/personalized' - $ref: '#/components/parameters/sfdcShopperContext' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Product' examples: GetProductResponseExample: $ref: '#/components/examples/GetProductResponseExample' '400': description: Bad Request. content: application/problem+json: schema: $ref: '#/components/schemas/ErrorResponse' examples: MalformedSelectorResponseExample: $ref: '#/components/examples/MalformedSelectorResponseExample' '401': $ref: '#/components/responses/401unauthorized' '404': description: Product Not Found. content: application/problem+json: schema: $ref: '#/components/schemas/ErrorResponse' examples: GetProductNotFoundResponseExample: $ref: '#/components/examples/GetProductNotFoundResponseExample' /organizations/{organizationId}/products/{productId}/images: parameters: - $ref: '#/components/parameters/organizationId' - $ref: '#/components/parameters/productId' get: description: |- Returns a Product document for the specified product ID, focused on imageGroups and related image fields. Only online products assigned to a site catalog are returned. Use the following parameters to control image output: imgTypes — Filters which catalog view types to include, with optional per-type image limits. Defaults to all view types with a 200-image cap per type. allImages — Controls whether the full image model is returned. variationAttribute — Narrows image selection by variation context. Applies only when allImages is true. operationId: getProductImages summary: Returns product image data for a single product. security: - ShopperToken: - sfcc.shopper-products - ShopperClientContextToken: - sfcc.shopper-products parameters: - $ref: '#/components/parameters/parameters-imgTypes' - $ref: '#/components/parameters/parameters-allImages' - $ref: '#/components/parameters/variationAttribute' - $ref: '#/components/parameters/siteId' - $ref: '#/components/parameters/locale' - $ref: '#/components/parameters/sfdcUsid' - $ref: '#/components/parameters/sfdcDwDnt' - $ref: '#/components/parameters/personalized' - $ref: '#/components/parameters/sfdcShopperContext' x-extensionPoints: - phase: before name: sfcc.product.shopper-products.v1.products.productId.images.beforeGET description: Called before retrieving product images. arguments: - $ref: '#/components/parameters/productId' - $ref: '#/components/parameters/imgTypes' - $ref: '#/components/parameters/allImages' - $ref: '#/components/parameters/variationAttribute' - phase: modifyResponse name: sfcc.product.shopper-products.v1.products.productId.images.modifyGETResponse description: Called to modify the product images response. arguments: - $ref: '#/components/schemas/ProductImages' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/ProductImages' examples: GetProductImagesResponseExample: $ref: '#/components/examples/GetProductImagesResponseExample' '400': description: Bad Request. content: application/problem+json: schema: $ref: '#/components/schemas/ErrorResponse' examples: GetProductImagesBadRequestResponseExample: $ref: '#/components/examples/GetProductImagesBadRequestResponseExample' '401': $ref: '#/components/responses/401unauthorized' '404': description: Product Not Found. content: application/problem+json: schema: $ref: '#/components/schemas/ErrorResponse' examples: GetProductImagesNotFoundResponseExample: $ref: '#/components/examples/GetProductImagesNotFoundResponseExample' /organizations/{organizationId}/products/{productId}/prices: parameters: - $ref: '#/components/parameters/organizationId' - $ref: '#/components/parameters/parameters-productId' get: description: Returns price details for a single product that is online and assigned to a site catalog. Returns the effective sales price, tiered prices, and per-pricebook prices. Prices are personalized by customer group and pricebook. Responses are not CDN-cached but are eligible for JWA caching with a 15-minute TTL. operationId: getProductPrices summary: Returns price details for a single product. security: - ShopperToken: - sfcc.shopper-products - ShopperClientContextToken: - sfcc.shopper-products x-extensionPoints: - phase: before name: sfcc.product.shopper-products.v1.products.productId.prices.beforeGET description: called before retrieving product price details. arguments: - $ref: '#/components/parameters/productId' - $ref: '#/components/parameters/siteId' - $ref: '#/components/parameters/locale' - $ref: '#/components/parameters/currency' - phase: modifyResponse name: sfcc.product.shopper-products.v1.products.productId.prices.modifyGETResponse description: called to modify the product price details response. arguments: - $ref: '#/components/schemas/PricesResult' parameters: - $ref: '#/components/parameters/siteId' - $ref: '#/components/parameters/locale' - $ref: '#/components/parameters/currency' - $ref: '#/components/parameters/sfdcUsid' - $ref: '#/components/parameters/sfdcDwDnt' - $ref: '#/components/parameters/personalized' - $ref: '#/components/parameters/sfdcShopperContext' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/PricesResult' examples: GetProductPricesResponseExample: $ref: '#/components/examples/GetProductPricesResponseExample' '400': description: Bad Request. content: application/problem+json: schema: $ref: '#/components/schemas/ErrorResponse' examples: GetProductPricesBadRequestResponseExample: $ref: '#/components/examples/GetProductPricesBadRequestResponseExample' '401': $ref: '#/components/responses/401unauthorized' '404': description: Product Not Found. content: application/problem+json: schema: $ref: '#/components/schemas/ErrorResponse' examples: GetProductPricesNotFoundResponseExample: $ref: '#/components/examples/GetProductPricesNotFoundResponseExample' /organizations/{organizationId}/products/{productId}/promotions: parameters: - $ref: '#/components/parameters/organizationId' - $ref: '#/components/parameters/components-parameters-productId' get: description: Returns active promotion details for a single product that is online and assigned to a site catalog. Active promotions are filtered by customer group, campaign date range, and time slot. Promotions are personalized. Responses are not CDN-cached but are eligible for JWA caching with a 15-minute TTL. operationId: getProductPromotions summary: Returns active promotion details for a single product. security: - ShopperToken: - sfcc.shopper-products - ShopperClientContextToken: - sfcc.shopper-products x-extensionPoints: - phase: before name: sfcc.product.shopper-products.v1.products.productId.promotions.beforeGET description: called before retrieving product promotion details. arguments: - $ref: '#/components/parameters/productId' - $ref: '#/components/parameters/siteId' - $ref: '#/components/parameters/locale' - $ref: '#/components/parameters/currency' - phase: modifyResponse name: sfcc.product.shopper-products.v1.products.productId.promotions.modifyGETResponse description: called to modify the product promotions response. arguments: - $ref: '#/components/schemas/PromotionsResult' parameters: - $ref: '#/components/parameters/siteId' - $ref: '#/components/parameters/locale' - $ref: '#/components/parameters/currency' - $ref: '#/components/parameters/sfdcUsid' - $ref: '#/components/parameters/sfdcDwDnt' - $ref: '#/components/parameters/personalized' - $ref: '#/components/parameters/sfdcShopperContext' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/PromotionsResult' examples: GetProductPromotionsResponseExample: $ref: '#/components/examples/GetProductPromotionsResponseExample' '400': description: Bad Request. content: application/problem+json: schema: $ref: '#/components/schemas/ErrorResponse' examples: GetProductPromotionsBadRequestResponseExample: $ref: '#/components/examples/GetProductPromotionsBadRequestResponseExample' '401': $ref: '#/components/responses/401unauthorized' '404': description: Product Not Found. content: application/problem+json: schema: $ref: '#/components/schemas/ErrorResponse' examples: GetProductPromotionsNotFoundResponseExample: $ref: '#/components/examples/GetProductPromotionsNotFoundResponseExample' /organizations/{organizationId}/categories: parameters: - $ref: '#/components/parameters/organizationId' get: description: When you use the URL template, the server returns multiple categories (a result object of category documents). You can use this template to obtain up to 50 categories in a single request. You must enclose the list of IDs in parentheses. If a category identifier contains parenthesis or the separator sign, you must URL encode the character. operationId: getCategories summary: Returns category and subcategory details for one or more categories. security: - ShopperToken: - sfcc.shopper-categories - sfcc.shopper-standard - ShopperClientContextToken: - sfcc.shopper-categories - sfcc.shopper-standard parameters: - $ref: '#/components/parameters/parameters-ids' - $ref: '#/components/parameters/levels' - $ref: '#/components/parameters/locale' - $ref: '#/components/parameters/siteId' - $ref: '#/components/parameters/sfdcUsid' - $ref: '#/components/parameters/sfdcDwDnt' - $ref: '#/components/parameters/personalized' - $ref: '#/components/parameters/sfdcShopperContext' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/CategoryResult' examples: GetCategoriesResponseExample: $ref: '#/components/examples/GetCategoriesResponseExample' '400': description: Bad Request. content: application/problem+json: schema: $ref: '#/components/schemas/ErrorResponse' examples: GetCategoriesBadRequestResponseExample: $ref: '#/components/examples/GetCategoriesBadRequestResponseExample' '401': $ref: '#/components/responses/401unauthorized' /organizations/{organizationId}/categories/{id}: parameters: - $ref: '#/components/parameters/parameters-id' - $ref: '#/components/parameters/organizationId' get: description: "When you use the URL template, the server returns a category identified by the ID. By default, the server\nalso returns the first level of subcategories, but you can specify an additional level using the levels\nparameter.\n\nThis endpoint fetches both online and offline categories. For offline categories, only the top-level \ncategory is returned, not offline subcategories.\n\nUsing a large value for levels can cause performance issues when there is a large and deep category tree." operationId: getCategory summary: Returns category and subcategory details for a single category. security: - ShopperToken: - sfcc.shopper-categories - sfcc.shopper-standard - ShopperClientContextToken: - sfcc.shopper-categories - sfcc.shopper-standard parameters: - $ref: '#/components/parameters/levels' - $ref: '#/components/parameters/locale' - $ref: '#/components/parameters/siteId' - $ref: '#/components/parameters/sfdcUsid' - $ref: '#/components/parameters/sfdcDwDnt' - $ref: '#/components/parameters/personalized' - $ref: '#/components/parameters/sfdcShopperContext' responses: '200': description: Success. content: application/json: schema: $ref: '#/components/schemas/Category' examples: GetCategoryResponseExample: $ref: '#/components/examples/GetCategoryResponseExample' '400': description: Bad Request. content: application/problem+json: schema: $ref: '#/components/schemas/ErrorResponse' examples: GetCategoryBadRequestResponseExample: $ref: '#/components/examples/GetCategoryBadRequestResponseExample' '401': $ref: '#/components/responses/401unauthorized' '404': description: No online or offline category was found with the specified ID. content: application/problem+json: schema: $ref: '#/components/schemas/ErrorResponse' examples: GetCategoryNotFoundResponseExample: $ref: '#/components/examples/GetCategoryNotFoundResponseExample' components: securitySchemes: ShopperToken: type: oauth2 description: "ShopperToken authentication follows the authorization code grant flow, as defined by the OAuth 2.1 standard. Depending on the type of OAuth client (public or private), this authorization flow has further requirements. \nFor a detailed description of the authorization flow, see the [SLAS overview](https://developer.salesforce.com/docs/commerce/commerce-api/references?meta=shopper-login:Summary).\nA shopper token allows you to access the Shopper API endpoints of both the Open Commerce API (OCAPI) and the B2C Commerce API. These endpoints can be used to build headless storefronts and other applications.\nThe `ShopperToken` security scheme is a parent of other security schemes, such as `ShopperTokenTsob`. A Shopper API endpoint can require a specific child scheme (`ShopperTokenTsob`, for example) that cannot be accessed with a regular shopper token.\n" flows: clientCredentials: tokenUrl: https://{shortCode}.api.commercecloud.salesforce.com/shopper/auth/v1/organizations/{organizationId}/oauth2/token scopes: sfcc.shopper-products: scope granting read-access to product endpoints sfcc.shopper-categories: scope granting read-access to category endpoints authorizationCode: authorizationUrl: https://{shortCode}.api.commercecloud.salesforce.com/shopper/auth/v1/organizations/{organizationId}/oauth2/authorize tokenUrl: https://{shortCode}.api.commercecloud.salesforce.com/shopper/auth/v1/organizations/{organizationId}/oauth2/token scopes: sfcc.shopper-products: scope granting read-access to product endpoints sfcc.shopper-categories: scope granting read-access to category endpoints ShopperClientContextToken: type: oauth2 description: | ShopperClientContextToken is a separate security scheme used to track and validate client context information. It is valid for Guest shoppers flows only using SLAS private clients. For registered shoppers, use existing ShopperToken flows. For authentication details, see the [SLAS overview](https://developer.salesforce.com/docs/commerce/commerce-api/references?meta=shopper-login:Summary). This token allows access to Shopper API endpoints for guest shoppers only. flows: clientCredentials: tokenUrl: https://{shortCode}.api.commercecloud.salesforce.com/shopper/auth/v1/organizations/{organizationId}/oauth2/token?hint=client_context scopes: sfcc.shopper-products: scope granting read-access to product endpoints sfcc.shopper-categories: scope granting read-access to category endpoints schemas: OrganizationId: description: An identifier for the Salesforce Commerce Cloud organization the request is being made by. It consists of a prefix 'f_ecom_' followed by a 4-character [realm identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#realm-id) and a 3-character [instance type identifier](https://developer.salesforce.com/docs/commerce/commerce-api/guide/base-url.html#instance-id). example: f_ecom_zzxy_prd type: string pattern: ^f_ecom_[a-z]{4}_(prd|stg|dev|s[0-9]{2}|[0-9]{3})$ ProductId: minLength: 1 maxLength: 100 type: string description: The id (SKU) of the product. example: apple-ipod-classic InventoryId: description: The inventory ID. type: string minLength: 1 maxLength: 256 example: Site1InventoryList SiteId: minLength: 1 maxLength: 32 description: The identifier of the site that a request is being made in the context of. Attributes might have site specific values, and some objects may only be assigned to specific sites example: RefArch type: string Select: minLength: 1 description: The property selector declaring which fields are included into the response payload. You can specify a single field name, a comma-separated list of names or work with wildcards. You can also specify array operations and filter expressions. The actual selector value must be enclosed within parentheses. For more information, please read the documentation about property selectors [here](https://developer.salesforce.com/docs/commerce/commerce-api/guide/scapi-property-selection.html). example: (name,id,variationAttributes.(**)) type: string pattern: ^[(].*[)]$ LanguageCountry: pattern: ^[a-z][a-z]-[A-Z][A-Z]$ description: A concatenated version of the standard Language and Country codes, combined with a hyphen '`-`'. example: en-US type: string LanguageCode: pattern: ^[a-z][a-z]$ description: A two letter lowercase language code conforming to the [ISO 639-1](https://www.iso.org/iso-639-language-codes.html) standard. Additionally, this may be used to submit requests with the header parameter `Accept-Language`, following [RFC 2616](https://tools.ietf.org/html/rfc2616) & [RFC 1766](https://tools.ietf.org/html/rfc1766). example: en type: string DefaultFallback: default: default description: A specialized value indicating the system default values for locales. pattern: ^default$ example: default type: string LocaleCode: description: A descriptor for a geographical region by both a language and country code. By combining these two, regional differences in a language can be addressed, such as with the request header parameter `Accept-Language` following [RFC 2616](https://tools.ietf.org/html/rfc2616) & [RFC 1766](https://tools.ietf.org/html/rfc1766). This can also just refer to a language code, also RFC 2616/1766 compliant, as a default if there is no specific match for a country. Finally, can also be used to define default behavior if there is no locale specified. oneOf: - $ref: '#/components/schemas/LanguageCountry' - $ref: '#/components/schemas/LanguageCode' - $ref: '#/components/schemas/DefaultFallback' CurrencyCode: description: A three letter uppercase currency code conforming to the [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html) standard, or the string `N/A` indicating that a currency is not applicable. pattern: ^([A-Z][A-Z][A-Z]|N/A)$ example: USD type: string Product: description: Any product that is sold, shown alone, and does not have variations such as different sizes or colors. A product has no reliance on any other product for inheritance. *A product has a SKU and can have a product option, which has a different SKU*. properties: brand: description: The product's brand. example: Apple type: string bundledProducts: description: The array of all bundled products of this product. type: array items: $ref: '#/components/schemas/BundledProduct' currency: $ref: '#/components/schemas/CurrencyCode' ean: description: The European Article Number of the product. example: 8essdf9w3 type: string fetchDate: format: int32 example: 5 type: integer id: $ref: '#/components/schemas/ProductId' imageGroups: description: The array of product image groups. type: array items: $ref: '#/components/schemas/ImageGroup' inventories: description: |- The array of product inventories explicitly requested via the 'inventory_ids' query parameter. This property is only returned in context of the 'availability' expansion. type: array items: $ref: '#/components/schemas/Inventory' inventory: description: |- The site default inventory information. This property is only returned in context of the 'availability' expansion. allOf: - $ref: '#/components/schemas/Inventory' longDescription: description: The localized product's long description. example: Awesome long description of product type: string manufacturerName: description: The product's manufacturer name. example: Apple type: string manufacturerSku: description: The product's manufacturer SKU. example: 2ND8834 type: string master: description: 'The master product information, only for types: master, variation group, and variant.' allOf: - $ref: '#/components/schemas/Master' minOrderQuantity: format: double description: The minimum order quantity for this product. example: 2 type: number name: description: The localized product name. example: Apple IPod Classic type: string options: description: The array of product options, only for type option. This array can be empty. type: array items: $ref: '#/components/schemas/Option' pageDescription: description: The localized product's page description. example: Really good Product type: string pageKeywords: description: The localized product's page description. example: Ipod, Music Player type: string pageTitle: description: The localized product's page title. example: Apple IPod Classic type: string pageMetaTags: description: Page Meta tags associated with the given product. type: array items: $ref: '#/components/schemas/PageMetaTag' price: format: double description: |- The sales price of the product. In case of complex products, like master or set, this is the minimum price of related child products. example: 59.99 type: number pricePerUnit: format: double description: The price per unit if defined for the product example: 19.99 type: number pricePerUnitMax: format: double description: The max price per unit typically for a master product's variant. example: 29.99 type: number priceMax: format: double description: The maximum sales of related child products in complex products like master or set. example: 69.99 type: number priceRanges: description: Array of one or more price range objects representing one or more Pricebooks in context for the site. type: array items: $ref: '#/components/schemas/PriceRange' prices: description: The prices map with pricebook IDs and their values. type: object additionalProperties: format: double type: number primaryCategoryId: description: The ID of the products primary category. example: electronics type: string primaryCategory: description: |- The primary category of the product, including its full ancestor breadcrumb path (root to leaf, root category node excluded). Only present when the primary_category expand is requested. type: object properties: id: description: The ID of the primary category. example: electronics-digital-media-players type: string minLength: 1 maxLength: 256 name: description: The localized name of the primary category. example: iPod & MP3 Players type: string minLength: 1 maxLength: 256 parentCategoryTree: description: The list of ancestor categories from root to the primary category (root category node excluded). type: array items: type: object properties: id: description: The ID of the ancestor category. example: electronics type: string minLength: 1 maxLength: 256 name: description: The name of the ancestor category. example: Electronics type: string minLength: 1 maxLength: 256 productLinks: description: The array of source and target product links information. type: array items: $ref: '#/components/schemas/ProductLink' productPromotions: description: |- An array of active customer product promotions for this product, sorted by promotion priority using SORT_BY_EXCLUSIVITY ordering (exclusivity → rank → promotion class → discount type → best discount → ID). This array can be empty. Coupon promotions are not returned in this array. See [PromotionPlan.SORT_BY_EXCLUSIVITY](https://salesforcecommercecloud.github.io/b2c-dev-doc/docs/current/scriptapi/html/index.html?target=class_dw_campaign_PromotionPlan.html) for more details. type: array items: $ref: '#/components/schemas/ProductPromotion' recommendations: description: Returns a list of recommendations. type: array items: $ref: '#/components/schemas/Recommendation' setProducts: description: The array of set products of this product. type: array items: $ref: '#/components/schemas/Product' shortDescription: description: The localized product short description. example: Awesome Product type: string slugUrl: description: The complete link to this product's storefront page. example: https://www.example.com/on/store/Sites-MySite/default/Product-Show?pid=MyProduct type: string stepQuantity: format: double description: |- The steps in which the order amount of the product can be increased. example: 2 type: number tieredPrices: description: The document represents list of tiered prices if the product is a variant type: array items: $ref: '#/components/schemas/ProductPriceTable' type: description: 'The product type information. Can be one or more of the following values: item, master, variation_group, variant, bundle, and set.' allOf: - $ref: '#/components/schemas/ProductType' unit: description: The sales unit of the product. example: lbs type: string upc: description: The Universal Product Code (UPC). example: JSDU876 type: string validFrom: description: The time a product is valid from. example: '9999-12-31T00:00:00.0Z' type: string format: date-time validTo: description: The time a product is valid to. example: '9999-12-31T23:59:59.0Z' type: string format: date-time variants: description: The array of actual variants. Only for master, variation group, and variant types. This array can be empty. type: array items: $ref: '#/components/schemas/Variant' variationAttributes: description: |- Sorted array of variation attributes information. Only for master, variation group, and variant types. This array can be empty. type: array items: $ref: '#/components/schemas/VariationAttribute' variationGroups: description: The array of actual variation groups. Only for master, variation group, and variant types. This array can be empty. type: array items: $ref: '#/components/schemas/VariationGroup' variationValues: description: |- The actual variation attribute ID - value pairs. Only for variant and variation group types. type: object additionalProperties: type: string shippingMethods: description: |- The array of applicable shipping methods for this product. This array can be empty. This property is only returned in context of the 'shipping_methods' expansion. type: array items: $ref: '#/components/schemas/ShippingMethod' required: - id type: object additionalProperties: title: Additional Property Support description: |- This type supports additional properties passed along with the defined properties of this API. To indicate that the properties were defined and expected to be handled as additional properties, they are expected to be prefixed with a `c_`. The type will reject any property that does not fit this pattern, only allowing additional properties beginning with the known prefix. example: c_trackingId BundledProduct: description: A bundle of products that can be bought together (all or nothing). Each product in the bundle can itself be bought independently, but this is outside of the context of the bundle. A bundle is a purchasing convenience. *Product bundle has a SKU and price.* properties: id: example: '823476' type: string product: description: The product being bundled. allOf: - $ref: '#/components/schemas/Product' quantity: format: double description: For the product being bundled, the quantity added to the bundle. example: 5 type: number required: - id - product - quantity type: object Image: description: Product image properties: alt: description: The localized alternative text of the image. example: Apple iPod Shuffle, large type: string disBaseLink: description: Base URL for the Dynamic Image Service (DIS) address. This is only shown if the image is stored on the server and DIS is enabled. example: https://example.com/images/large/ipod-shuffle-silver.jpg type: string link: minLength: 1 description: The URL of the actual image. example: https://example.com/on/demandware.static/-/Sites-electronics-catalog/default/dwc2/images/large/ipod-shuffle.jpg type: string title: description: The localized title of the image. example: Apple iPod Shuffle type: string required: - link type: object VariationAttributeValue: description: Document representing a variation attribute value. properties: description: description: The localized description of the variation value. example: Color of the product type: string image: description: The first product image for the configured viewtype and this variation value. allOf: - $ref: '#/components/schemas/Image' imageSwatch: description: The first product image for the configured viewtype and this variation value (typically the swatch image). allOf: - $ref: '#/components/schemas/Image' name: description: The localized display name of the variation value. example: Red type: string orderable: description: A flag indicating whether at least one variant with this variation attribute value is available to sell. example: true type: boolean value: minLength: 1 description: The actual variation value. example: red type: string required: - value type: object VariationAttribute: description: Document representing a variation attribute. properties: id: minLength: 1 description: The ID of the variation attribute. example: color type: string name: description: The localized display name of the variation attribute. example: Color type: string values: description: The sorted array of variation values. This array can be empty. type: array items: $ref: '#/components/schemas/VariationAttributeValue' required: - id type: object ImageGroup: description: Document representing an image group containing a list of images for a particular view type and an optional variation value. properties: images: description: The images of the image group. type: array items: $ref: '#/components/schemas/Image' variationAttributes: description: Returns a list of variation attributes applying to this image group. type: array items: $ref: '#/components/schemas/VariationAttribute' viewType: description: The image view type. example: hi-res type: string required: - images - viewType type: object Inventory: description: Document representing inventory information of the current product for a particular inventory list. properties: ats: format: double description: |- The Available To Sell (ATS) of the product. If it is infinity, the return value is 999999. The value can be overwritten by the OCAPI setting 'product.inventory.ats.max_threshold'. example: 15 type: number backorderable: description: A flag indicating whether the product is backorderable. example: true type: boolean id: $ref: '#/components/schemas/InventoryId' inStockDate: description: A flag indicating the date when the product will be in stock. example: '9999-12-31T00:00:00.0Z' type: string format: date-time orderable: description: A flag indicating whether at least one of the products is available to sell. example: true type: boolean preorderable: description: A flag indicating whether the product is preorderable. example: false type: boolean stockLevel: format: double description: |- The stock level of the product. If it is infinity, the return value is 999999. The value can be overwritten by the OCAPI setting 'product.inventory.stock_level.max_threshold'. example: 10 type: number required: - id type: object Price: type: number description: Document representing a price for a product format: double example: 12.99 Master: description: The master product is a representation of a group of variant products. This is a non-buyable entity, provides inheritable attributes for its product variants, and is used for navigation. *Doesn't have a SKU.* properties: masterId: description: The ID (SKU) of the master product. allOf: - $ref: '#/components/schemas/ProductId' orderable: description: A flag indicating whether at least one of the variants can be ordered. example: true type: boolean price: description: The minimum sales price of the related variants. allOf: - $ref: '#/components/schemas/Price' priceMax: description: The maximum sales price of the related variants. allOf: - $ref: '#/components/schemas/Price' prices: description: List of sale prices. type: object additionalProperties: format: double type: number required: - masterId type: object OptionValue: description: Document representing an option value. properties: default: description: A flag indicating whether this option value is the default one. example: true type: boolean id: description: The ID of the option value. example: 5YR allOf: - $ref: '#/components/schemas/ProductId' name: description: The localized name of the option value. example: 5 Year Warranty type: string price: description: The effective price of the option value. allOf: - $ref: '#/components/schemas/Price' required: - id type: object Option: description: Product options enable you to sell configurable products that have optional accessories, upgrades, or additional services. Options are always purchased with a product and can't be purchased separately. *Product Option has a SKU and a price associated with it.* properties: description: description: The localized description of the option. example: Get this Option type: string id: description: The ID of the option. example: Warranty allOf: - $ref: '#/components/schemas/ProductId' image: description: The URL to the option image. example: https://www.exampleimage.com/images/optionImage.jpg type: string name: description: The localized name of the option. example: Warranty type: string values: description: The array of option values. This array can be empty. type: array items: $ref: '#/components/schemas/OptionValue' required: - id type: object PageMetaTag: description: Document representing a Page Meta Tag object. properties: id: description: The ID of the Page Meta Tag. type: string example: title value: description: Locale-specific value of the Page Meta Tag, evaluated by resolving the rule set for the given Business Manager ID. type: string example: Buy the Long Sleeve Covered Placket Blouse for USD 61.99. type: description: |- The kind of Page Meta Tag, indicating how the storefront should render the value. Documented values are `name`, `property`, `title`, and `jsonld`: * `name` — render as ``. * `property` — render as `` (e.g. Open Graph tags). * `title` — render as the HTML `