---
title: OrderingQuery.products()
description: 'Retrieve products for a manufacturer by SKU, with availability for an address.'
sidebar:
  label: List products
---

> **Deprecated**
>
> This query is deprecated. Use the REST endpoint
> [`GET /products`](/api-reference/products/operations/get) instead. It returns the same products, with
> availability and pricing, and is the supported way to look up products. The query continues to work while
> integrations move to REST.

```graphql
type OrderingQuery {
  products(address: OrderingAddressInput, manufacturer: String!, skus: [String!]!): [OrderingProduct]!
    @deprecated(reason: "Use the REST endpoint GET https://api.sibipro.com/products instead.")
}
```

## Input

### `address`

[`OrderingAddressInput`](/graphql/ordering/ordering-address) - The address associated with the order. Optional. If provided, the address must be a valid address — if it is not valid, the query will fail with an error. If the address is valid but we don't already have a property for it, then a property will be created and assigned to the organization the calling credentials belong to. If omitted, availability will return a status of `UNKNOWN` and a quantity of 0.

### `manufacturer`

`string` - The manufacturer of the products to search for. (example: 'ge', 'msi')

### `skus`

`string[]` - List of SKUs to search for. If a product cannot be found for a given sku, the response will contain a null in the corresponding index.

## Response

### `OrderingProduct`

[`OrderingProduct[]`](#orderingproduct) - List of products matching the input skus criteria. If a product cannot be found for a given sku, the response will contain a null in the corresponding index.

## `OrderingProduct`

```graphql
type OrderingProduct {
  sku: String!
  manufacturer: String!
  title: String!
  subtitle: String
  description: String
  category: String!
  subcategories: [String!]!
  color: String @deprecated(reason: "Use attributes instead.")
  attributes: [OrderingProductAttribute!]!
  viewUrl: String!
  availability: OrderingAvailability!
  imageUrl: String!
  imageUrls: [String!]!
  priceCents: Int!
  msrpPriceCents: Int
  addons: [OrderingProductAddon!]!
  dimensions: OrderingProductDimensions!
  baseUnitOfMeasure: String!
  unitsOfMeasure: [OrderingProductUnitOfMeasure!]!
  recommendedParts: [OrderingProductPart!]!
  availableFulfillmentMethods: [OrderingProductFulfillmentMethod!]!
  warranties: [OrderingProductWarranty!]!
  options: [OrderingProductOption!]!
  id: ID! @deprecated(reason: "Use sku instead.")
}
```

### `sku`

`string` - The SKU of the product. Is defined by the manufacturer or distributor.

---

### `manufacturer`

`string` - The manufacturer of the product. This value is valid for use in the `manufacturer` field of all input types that accept a manufacturer.

---

### `title`

`string` - The human readable name of the product.

---

### `subtitle`

`string | null` - A short description of the product.

---

### `description`

`string | null` - A brief description of the product. Will be `null` when not available.

---

### `category`

`string` - The broad category this product falls into.

---

### `subcategories`

`string[]` - Array of strings of all the specific subcategories this product falls into. May be empty and may also be 1:1 with `category`

---

### `color` (deprecated)

`string | null` - **Deprecated.** Read the `color` entry of [`attributes`](#attributes) instead. The color of the product. Is not available for all products.

---

### `attributes`

[`OrderingProductAttribute[]`](/graphql/ordering/ordering-product-attribute) - The catalog attributes of this product that are relevant to ordering it, as `{ name, value }` pairs — e.g. `sheen` or `color`. Which attributes a product carries varies by product; empty when it has none.

---

### `viewUrl`

`string` - A URL to view the product in the Sibi Web UI.

---

### `availability`

[`OrderingAvailability`](#orderingavailability) - The availability of the product. Returns a status of 'UNKNOWN' and a quantity of 0 if the address is missing.

---

### `imageUrl`

`string` - The URL of the product's image.

---

### `imageUrls`

`string[]` - The URLs of all of the product's images, with the primary image (the same image returned by `imageUrl`) always first.

---

### `priceCents`

`number` - The price of the product in cents, per base unit (denominated in `baseUnitOfMeasure`).

---

### `msrpPriceCents`

`number | null` - The Manufacturer's Suggested Retail Price of the product in cents. Is not available for all products. Will be `null` when not available.

---

### `addons`

[`OrderingProductAddon`](/graphql/ordering/ordering-order-product#orderingproductaddon)\[] - An array of addons (services and/or accessories) that can be ordered with the product.

---

### `dimensions`

[`OrderingProductDimensions`](#orderingproductdimensions) - The physical dimensions of the product.

---

### `baseUnitOfMeasure`

`string` - The unit this product's `priceCents` is denominated in (e.g. "Each", "Sq Ft"). When `unitsOfMeasure` is non-empty, the product cannot be purchased in fractional amounts of this base unit directly — pass one of `unitsOfMeasure`'s `unitOfMeasure` values as `unitOfMeasure` when calling `reviewOrder` or `createOrder`. When `unitsOfMeasure` is empty, pass this value instead (or omit `unitOfMeasure` to default to it).

---

### `unitsOfMeasure`

[`OrderingProductUnitOfMeasure[]`](#orderingproductunitofmeasure) - Alternate purchasable units for this product — e.g. a flooring product priced by the `Sq Ft` that can only be ordered by the `Box` or `Pallet`, each covering a fixed quantity of `baseUnitOfMeasure` (see `quantityPerBaseUnit`). Empty when the product has no alternate units and can be ordered directly in `baseUnitOfMeasure`.

---

### `recommendedParts`

[`OrderingProductPart[]`](#orderingproductpart) - An array of products that can be purchased with the parent. Will include things like power cables for electric ranges or ice makers for refrigerators. Some of these parts are included with addons. For example, an electric range's "Install" addon will generally include the power cable part.

---

### `availableFulfillmentMethods`

[`OrderingProductFulfillmentMethod[]`](/graphql/ordering/ordering-product-fulfillment-method) - The fulfillment methods available for this product, each showing the earliest date it can be fulfilled and the distribution center that provides that date. Each method also carries the full set of distribution centers that can fulfill this product by that method, each with its own estimated fulfillment date, in [`distributionCenters`](/graphql/ordering/ordering-product-fulfillment-method#distributioncenters) — sorted earliest first, so the top-level `estimatedFulfillmentDate` and `distributionCenter` correspond to its first entry. Use that list when you need to offer a choice of distribution center rather than defaulting to the earliest. Returns an empty array when no address is provided or when fulfillment information is unavailable.

---

### `warranties`

[`OrderingProductWarranty[]`](/graphql/ordering/ordering-product-warranty) - The extended-warranty products that can be purchased alongside this product. Returns an empty array when no address is provided or when no warranty coverage is available for the product.

---

### `options`

[`OrderingProductOption[]`](#orderingproductoption) - The selectable option values for this product — e.g. the standard color palette of a PPG tintable paint, one entry per color. Entries sharing a `key` are alternative values for the same option. Empty for products with no selectable options. Some products have an option that must be selected at order time (e.g. PPG tintable paints) — one of its `{ key, value }` pairs must be included in `products[].options`, and omitting it is rejected with an `INVALID_PRODUCT_OPTIONS` error — when calling [`reviewOrder`](/graphql/ordering/review-order) or [`createOrder`](/graphql/ordering/create-order). This list holds each option's standard values; other valid values may exist beyond it (e.g. the full PPG color catalog), and any valid value identifier is accepted at order time.

```graphql
query {
  ordering {
    products(manufacturer: "ppg", skus: ["ppg-interior-paint-1gal"]) {
      sku
      title
      options {
        key
        value
        name
        hex
      }
    }
  }
}
```

---

### `id` (deprecated)

`string` - **Deprecated.** Use [`sku`](#sku) to identify products instead.

---

## `OrderingAvailability`

```graphql
type OrderingAvailability {
  status: OrderingAvailabilityStatus!
  quantity: Int!
  distributionCenters: [OrderingDistributionCenterAvailability!]!
}
```

### `status`

`OrderingAvailabilityStatus` - The availability status of the product. One of `IN_STOCK`, `OUT_OF_STOCK`, `UNAVAILABLE`, or `UNKNOWN`. The value of `status` reflects local availability for the address provided, or `UNKNOWN` if no address was given.

### `quantity`

`number` - The quantity of the product that is available at the closest distribution center to the property that has the product available.

### `distributionCenters`

[`OrderingDistributionCenterAvailability[]`](#orderingdistributioncenteravailability) - Per-distribution-center availability breakdown. Each entry represents a distribution center that carries this product. Only populated when an address is provided. Returns an empty array when distribution center information is unavailable.

---

## `OrderingDistributionCenterAvailability`

```graphql
type OrderingDistributionCenterAvailability {
  status: OrderingAvailabilityStatus!
  quantity: Int!
  distributionCenter: OrderingDistributionCenter!
  distributionCenterId: ID! @deprecated(reason: "Use distributionCenter { id } instead.")
  distributionCenterLatitude: Float @deprecated(reason: "Use distributionCenter { latitude } instead.")
  distributionCenterLongitude: Float @deprecated(reason: "Use distributionCenter { longitude } instead.")
  distributionCenterAddress: OrderingAddress! @deprecated(reason: "Use distributionCenter { address } instead.")
}
```

### `status`

`OrderingAvailabilityStatus` - The availability status of the product at this distribution center. One of `IN_STOCK`, `OUT_OF_STOCK`, `UNAVAILABLE`, or `UNKNOWN`.

### `quantity`

`number` - The quantity of the product available at this distribution center.

### `distributionCenter`

[`OrderingDistributionCenter`](#orderingdistributioncenter) - The distribution center where this product is available. Use `distributionCenter { id }` when calling `reviewOrder` or `createOrder` to specify a distribution center.

### `distributionCenterId` (deprecated)

`string` - **Deprecated.** Use `distributionCenter { id }` instead.

### `distributionCenterLatitude` (deprecated)

`number | null` - **Deprecated.** Use `distributionCenter { latitude }` instead.

### `distributionCenterLongitude` (deprecated)

`number | null` - **Deprecated.** Use `distributionCenter { longitude }` instead.

### `distributionCenterAddress` (deprecated)

[`OrderingAddress`](/graphql/ordering/ordering-address) - **Deprecated.** Use `distributionCenter { address }` instead.

---

## `OrderingDistributionCenter`

```graphql
type OrderingDistributionCenter {
  id: ID!
  name: String!
  latitude: Float
  longitude: Float
  address: OrderingAddress!
  imageUrl: String
  storeNumber: String!
  phone: String
}
```

### `id`

`string` - The distribution center's unique identifier. Use this when placing orders at a specific DC.

### `name`

`string` - The name of the distribution center.

### `latitude`

`number | null` - The latitude of the distribution center's location.

### `longitude`

`number | null` - The longitude of the distribution center's location.

### `address`

[`OrderingAddress`](/graphql/ordering/ordering-address) - The address of the distribution center.

### `imageUrl`

`string | null` - The URL of the distribution center's logo.

### `storeNumber`

`string` - The store number of the distribution center. May not actually be numeric.

---

### `phone`

`string | undefined` - The phone number of the distribution center, as the distributor publishes it. Absent when the distributor has not provided one.

---

## `OrderingProductDimensions`

```graphql
type OrderingProductDimensions {
  length: Float
  lengthUnit: String
  width: Float
  widthUnit: String
  height: Float
  heightUnit: String
  depth: Float
  depthUnit: String
}
```

A product reports its front-to-back extent under either `depth` or `length` depending on its manufacturer's convention — most appliances report `depth`, most HVAC equipment reports `length` — not both.

### `length`

`number | null` - The numerical length value. Will be null if not available.

### `lengthUnit`

`string | null` - The unit of measurement for length (e.g., "inch"). Will be null if not available.

### `width`

`number | null` - The numerical width value. Will be null if not available.

### `widthUnit`

`string | null` - The unit of measurement for width (e.g., "inch"). Will be null if not available.

### `height`

`number | null` - The numerical height value. Will be null if not available.

### `heightUnit`

`string | null` - The unit of measurement for height (e.g., "inch"). Will be null if not available.

### `depth`

`number | null` - The numerical depth value. Will be null if not available.

### `depthUnit`

`string | null` - The unit of measurement for depth (e.g., "inch"). Will be null if not available.

---

## `OrderingProductUnitOfMeasure`

```graphql
type OrderingProductUnitOfMeasure {
  unitOfMeasure: String!
  quantityPerBaseUnit: Float!
}
```

An alternate purchasable unit for a product, and how it converts to the product's `baseUnitOfMeasure`. See [`OrderingProduct.unitsOfMeasure`](#unitsofmeasure).

### `unitOfMeasure`

`string` - The unit to pass as `unitOfMeasure` when calling `reviewOrder` or `createOrder` to purchase this product in this unit (e.g. "Box", "Pallet").

### `quantityPerBaseUnit`

`number` - The number of `baseUnitOfMeasure` contained in each of this unit (e.g. 23.77 sq ft per box). Multiply by the requested quantity of this unit to get the total in the base unit.

## `OrderingProductOption`

```graphql
type OrderingProductOption {
  key: String!
  value: String!
  name: String!
  title: String! @deprecated(reason: "Use name instead.")
  hex: String
}
```

A value a product's selectable option can be set to — e.g. one paint color. To select it, pass its `{ key, value }` in `products[].options` when calling [`reviewOrder`](/graphql/ordering/review-order) or [`createOrder`](/graphql/ordering/create-order). Entries sharing a `key` are alternative values for the same option. The same type is echoed on reviewOrder responses as the selection on each product line — see [`OrderingOrderProduct.options`](/graphql/ordering/ordering-order-product#options).

### `key`

`string` - The option identifier (e.g. `"ppg-paint-color"`). Pass this as `options[].key` when calling `reviewOrder` or `createOrder`.

### `value`

`string` - The value identifier (e.g. the PPG color code `"PPG1105-3"`). Pass this as `options[].value` when calling `reviewOrder` or `createOrder`.

### `name`

`string` - The human readable name of the value (e.g. the paint color name "Delicate White").

### `title` (deprecated)

`string` - **Deprecated.** Use `name` instead.

### `hex`

`string | null` - The CSS hex color (`#RRGGBB`) of this value, for values that represent a color (e.g. a paint color). Will be `null` when the value has no color representation.

---

## `OrderingProductPart`

```graphql
type OrderingProductPart {
  sku: String!
  title: String!
  category: String!
  priceCents: Int!
}
```

### `sku`

`string` - The SKU of the part. It is defined by the manufacturer or distributor.

### `title`

`string` - The human readable name of the part.

### `category`

`string` - The broad category this part falls into.

### `priceCents`

`number` - The price of the part in cents.
