---
title: Catalog product sub-handlers
slug: configured-commerce/docs/catalog-product-sub-handlers
docTags: 
createdAt: 2026-08-13T10:46:25.000Z
---

## GET Cross-Sell Collection

**HTTP Verb** – N/A (internal service, called as part of product retrieval)

**Description** – Get cross-sell products for a product or website

**Base** – `HandlerBase\<GetCrossSellCollectionParameter, GetCrossSellCollectionResult\>`

**Handlers** –

| Order | Handler                        | Description                                                                                                                                                                                                                                                                 |
| ----- | ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 500   | `ValidateContext`              | Retrieves product settings. Returns error if settings retrieval fails. Returns Forbidden if the user cannot see products.                                                                                                                                                   |
| 600   | `GetWebsiteCrossSellQuery`     | If `WebCrossSell` parameter is `true`, retrieves active website-level cross-sell products for the current website. Enables brand settings in the per-request cache.                                                                                                         |
| 700   | `GetProductCrossSellQuery`     | If `WebCrossSell` parameter is `false`, validates the product exists (returns `NotFound` if not). Retrieves active cross-sell products for the specified `ProductId`.                                                                                                       |
| 800   | `CreateCrossSellProductDtos`   | Gets product settings. If the OverrideProductV1 performance setting is enabled, retrieves cross-sell products via `GetProductCollection`. Otherwise, executes the cross-sell query and creates `ProductDto` objects for each cross-sell product using the catalog pipeline. |
| 900   | `CopyCustomPropertiesToResult` | If OverrideProductV1 is enabled, bypasses handler. Retrieves viewable custom properties for the Product entity definition and loads custom property values for the cross-sell products. Copies custom properties to each `ProductDto`.                                      |

## GET Product Availability

**HTTP Verb** – N/A (internal service, called as part of product retrieval)

**Description** – Get product availability/inventory information

**Base** – `HandlerBase\<GetProductAvailabilityParameter, GetProductAvailabilityResult\>`

**Handlers** –

| Order | Handler              | Description                                                                                                                                                                                                                                                                                   |
| ----- | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 500   | `GetQtyOnHand`       | Retrieves the Product entity by Id. Returns `NotFound` if not found. Calls the inventory pipeline to get quantity on hand, respecting warehouse pickup settings (uses pickup warehouse when fulfillment method is `PickUp`). Handles configured product inventory with configuration options. |
| 600   | `GetProductSettings` | Retrieves product settings via the `ProductService`. Returns error if settings retrieval fails. Sets the settings on the result for use by subsequent handlers.                                                                                                                               |
| 700   | `GetAvailability`    | Calls the catalog pipeline's `PopulateAvailabilities` to compute product availability based on the quantity on hand, product settings, and current site context. Sets the availability DTO on the result.                                                                                     |

## GET Product Price Collection

**HTTP Verb** – N/A (internal service, called as part of product retrieval)

**Description** – Get pricing for one or more products

**Base** – `HandlerBase\<GetProductPriceCollectionParameter, GetProductPriceCollectionResult\>`

**Handlers** –

| Order | Handler                          | Description                                                                                                                                                                                                                                                                   |
| ----- | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 500   | `ValidateContext`                | Retrieves product settings. Returns Forbidden if the user cannot see products or prices. For each product in the request, validates the product exists and checks via the catalog pipeline whether the price can be shown. Returns Forbidden if price display is not allowed. |
| 600   | `CreatePricingServiceParameters` | For each product, creates `PricingServiceParameter` objects with the product, unit of measure, quantity ordered, and configuration data set (for configured products).                                                                                                        |
| 700   | `GetProductPricing`              | Calls the pricing pipeline's `GetProductPricing` with the prepared pricing service parameters. Returns error if the pricing call fails.                                                                                                                                       |
| 800   | `CreateProductPriceDtos`         | For each product, creates a `ProductPriceDto`. If the product requires a quote, returns an empty price DTO with only the `ProductId`. Otherwise, returns the full pricing information from the pricing pipeline result.                                                       |
