# The product item data model The result from a product list is a collection of [ProductItem](/api-reference/schemas/product#productitem)'s. ProductItems provide a simplified view of a product compared to the [Product](/api-reference/schemas/product#product) entity returned by `GetProduct` calls. ## ProductItem For information about the elements of [ProductItem](/api-reference/schemas/product#productitem), read the Working with Products and Variants documentation [here](/developer-portal/app-development/working-with-products-and-variants). ### Product identifiers The `ProductItem` contains the same identifiers as the `Product` entity, including `Id`, `PartNo`, `Manufacturer/PartNo`, and `UniqueName`. Identifiers are left empty for products with variants (asVariants=false), just like the `Product` entity. The identifier `GroupByKey` is used in certain situations when variants are listed. Learn more about this below when discussing variants. ### Text information Most text information is left out of the `ProductItem` entity. You need to call `GetProduct` to retrieve more. Only these are returned. - `Name` - `VariantName` (if `asVariant` = true in the call) - `SubHeader` - `SubDescription` - `ParametricTextField` (all global text parametrics) - `Synonyms` ### Parametrics The full parametric information is not returned as on the Product entity. Instead, comma-separated lists are returned, including: - **`ParametricValueSeed`** (Format is Id1:Value1,Id2:Value2…) where Id is the parametric Id and value is the actual value of the product unless the parametric type is List or MultipleList. Learn more below. - **`ParametricListSeed`** (Format is Id1:ListValueId1,Id2:ListValueId2…) - **`ParametricMultipleSeed`** (Format is Id1:MultipleValueId1,Id1:MultipleValueId2,Id2:MultipleValueId3…) - **`VariantParametricSeed`** (Format is Id1:Id2:Id3…). This list contains only the IDs of the variant defining parametrics of the product. The respective values are under the other fields above. Read more about variants below. Note HTML or Text type parameters are normally not returned as they can be quite large. The exception is global text parametrics, see above. Note Use the method [ListParametricInfo](/api-reference/services/productservice/openapi/parametric/listparametricinfo) and [ListParametricValues2](/api-reference/services/productservice/openapi/parametric/listparametricvalues2) to retrieve cacheable data on the parametrics. ### Product flags Just like on the Product entity, the ProductItem's `FlagIdSeed` contains a comma-separated list of flag IDs. However, if the item is a variant, `VariantFlagIdSeed` contains the variant-specific flags. Otherwise, it is empty. ### Images and files The `ProductItem` returns image information but no file information. To get files you must fetch a `Product` entity by calling one of the `GetProduct`-methods. `ImageKey` has the main image, `VariantImageKey` has the variant's main image (if the item is a variant), and `AdditionalImageKeySeed` contains more images by type and key pairs. If the type exists on both product and variant level, the variant image is returned. ### Price information Price fields in the `Product` entity are also returned for `ProductItem`, except for the cost fields. ### On hand information `OnHand`, `OnHandStore` and `OnHandSupplier` are returned in `ProductItem` as well. ### Buying information Same as for `Product`, `ProductItem` returns some fields to help you with implementing a buying behaviour. See the product documentation [here](/developer-portal/app-development/working-with-products-and-variants). Note In `ProductItem`, variant information is handled differently than in `Product`. `Product` has a `VariantCollection`, while `ProductItem` does not. Details are discussed [here](/developer-portal/app-development/working-with-listing-products-and-variants#list-products-with-variants). ## ProductItem2 The more dynamic product listings uses [ProductItem2](/api-reference/schemas/product#productitem2). `ProductItem2` contains about the same data as `ProductItem`, but several fields are optional and only returned if they are defined in the input parameter expand. Read the section [here](/developer-portal/app-development/working-with-listing-products-and-variants#listing-with-a-dynamic-result).