---
title: Product
slug: model-api/product
docTags: 
createdAt: 2024-06-11T14:22:21.962Z
---

# Product

All physical objects (e.g. wall, floor, window) and spatial objects (e.g. space, building, building storey) in a IFC data model are represented as `IfcProduct`. `IfcProduct` is represented as **Product** in Catenda. A **Product** contains most of the explicit attributes of `IfcProduct` and the most commonly used related entities; such as property sets, quantity sets and types. Other product relations (e.g. group, layer) can be requested separately. Attributes for owner history, product representation (e.g. 3D geometry) and product placement are ommitted from the Product JSON object.

The following sections describe the structure of the **Product** JSON object. A full example of how a **Product** may be presented is provided at the end of this page.

## Overview

Below is an overview of the **Product** JSON object that includes all the top level keys. Each key is described in detail in their respective sections.

**Example**

```json
{
  "objectId": 25028483530,
  "revisionId": "2364bf81107e4b0da346740bb03cea96",
  "ifcSchema": "IFC2X3",
  "ifcType": "IfcWall",
  "attributes": {},
  "propertySets": {},
  "quantitySets": {},
  "materials": [],
  "type": {}
}
```

**Parameters**

| **Name**       | **Type** | **Description**                                      |
| -------------- | -------- | ---------------------------------------------------- |
| `objectId`     | Number   | The object id of the product                         |
| `revisionId`   | String   | The id of the model revision                         |
| `ifcType`      | String   | The entity type of the product (e.g. `IFCWall`)      |
| `ifcSchema`    | String   | The IFC schema used by the revision (e.g. `IFC2X3`)  |
| `attributes`   | Object   | The attributes of the product                        |
| `propertySets` | Object   | The property sets specific to this product ocurrence |
| `quantitySets` | Object   | The quantity sets specific to this product ocurrence |
| `materials`    | Array    | The materials specific to this product ocurrence     |
| `type`         | Object   | Information common to all ocurrences of this type    |

## Attributes

Map of attributes of the product. The key is the name of the attribute.

**Example**

```json
{
  "GlobalId": {
    "ifcType": "IfcGloballyUniqueId",
    "type": "string",
    "value": "01z4sauevCmvwKu5R3BKL1"
  },
  "Name": {
    "ifcType": "IfcLabel",
    "type": "string",
    "value": "Wall 123"
  }
}
```

**Parameters**

| **Name**  | **Type** | **Description**                                    |
| --------- | -------- | -------------------------------------------------- |
| `ifcType` | String   | The entity type of the attribute (e.g. `IFCLabel`) |
| `type`    | String   | The type of the attribute                          |
| `value`   | String   | The value of the attribute                         |
| `unit`    | String   | The unit of the attribute if applicable            |

## Property Sets

Map of property sets of the product. The key is the name of the property set.

**Example**

```json
{
  "Dimensions": {
    "objectId": 25028483531,
    "revisionId": "2364bf811d7e4b0da346740bb03cea96",
    "ifcSchema": "IFC2X3",
    "ifcType": "IfcPropertySet",
    "attributes": {},
    "properties": {}
  }
}
```

**Parameters**

| **Name**     | **Type** | **Description**                                     |
| ------------ | -------- | --------------------------------------------------- |
| `objectId`   | Number   | The object id of the property set                   |
| `revisionId` | String   | The id of the model revision                        |
| `ifcSchema`  | String   | The IFC schema used by the revision (e.g. `IFC2X3`) |
| `ifcType`    | String   | The entity type of the property set                 |
| `attributes` | Object   | The attributes of the property set                  |
| `properties` | Object   | The properties of the property set                  |

## Properties

Map of properties of the property set. The key is the name of the property.

**Example**

```json
{
  "Width": {
    "ifcType": "IfcPropertySingleValue",
    "nominalValue": {
      "ifcType": "IfcLengthMeasure",
      "type": "number",
      "value": "5",
      "unit": "m"
    }
  }
}
```

**Property Parameters**

| **Name**  | **Type** | **Description**                                 |
| --------- | -------- | ----------------------------------------------- |
| `ifcType` | String   | The entity type of the property                 |
| value     | Object   | The value for the specific `ifcType`, see below |

The key and shape of the value object depends on the `ifcType` of the property.

| **IfcType**                  | **Key**                               | **Type**    |
| ---------------------------- | ------------------------------------- | ----------- |
| `IfcPropertySingleValue`     | `nominalValue`                        | Value       |
| `IfcPropertyEnumeratedValue` | `enumerationValues`                   | Array       |
| `IfcPropertyListValue`       | `listValues`                          | Array       |
| `IfcPropertyBoundedValue`    | `lowerBoundValue` & `upperBoundValue` | Value       |
| `IfcPropertyReferenceValue`  | `propertyReference`                   | Value       |
| `IfcComplexProperty`         | `properties`                          | Map\[Value] |

**Value**

The value of the property.

| **Name**  | **Type** | **Description**              |
| --------- | -------- | ---------------------------- |
| `ifcType` | String   | The entity type of the value |
| `type`    | String   | The type of the value        |
| `value`   | String   | The value of the value       |

**IfcPropertyBoundedValue example**

```json
{
  "Depth Range": {
    "ifcType": "IfcPropertyBoundedValue",
    "lowerBoundValue": {
      "type": "number",
      "ifcType": "IfcLengthMeasure",
      "value": 0.13,
      "unit": "m"
    },
    "upperBoundValue": {
      "type": "number",
      "ifcType": "IfcLengthMeasure",
      "value": 0.18,
      "unit": "m"
    }
  }
}
```

**IfcComplexProperty example**

```json
{
  "Color": {
    "ifcType": "IfcComplexProperty",
    "properties": {
      "Red": {
        "type": "integer",
        "ifcType": "IfcInteger",
        "value": 31
      },
      "Green": {
        "type": "integer",
        "ifcType": "IfcInteger",
        "value": 31
      },
      "Blue": {
        "type": "integer",
        "ifcType": "IfcInteger",
        "value": 31
      }
    }
  }
}
```

## Quantity Sets

Map of quantity sets of the product. The key is the name of the quantity set.

**Example**

```json
{
  "Area": {
    "objectId": 35024486532,
    "revisionId": "2364bf811d7e4b0da346740bb03cea96",
    "ifcSchema": "IFC2X3",
    "ifcType": "IfcElementQuantity",
    "attributes": {},
    "quantities": {}
  }
}
```

**Parameters**

| **Name**     | **Type** | **Description**                                     |
| ------------ | -------- | --------------------------------------------------- |
| `objectId`   | Number   | The object id of the quantity set                   |
| `revisionId` | String   | The id of the model revision                        |
| `ifcSchema`  | String   | The IFC schema used by the revision (e.g. `IFC2X3`) |
| `ifcType`    | String   | The entity type of the quantity set                 |
| `attributes` | Object   | The attributes of the quantity set                  |
| `quantities` | Object   | The quantities of the quantity set                  |

## Quantities

Map of quantities of the quantity set. The key is the name of the quantity.

**Example**

```json
{
  "GrossArea": {
    "ifcType": "IfcQuantityArea",
    "value": {
      "type": "number",
      "ifcType": "IfcAreaMeasure",
      "value": 15,
      "unit": "m²"
    }
  }
}
```

**Quantity Parameters**

| **Name**  | **Type** | **Description**                                 |
| --------- | -------- | ----------------------------------------------- |
| `ifcType` | String   | The entity type of the property                 |
| value     | Object   | The value for the specific `ifcType`, see below |

Value is one of the following.

- The key will be `value` and the value will be a single **value** object.

## Materials

The materials of the product. The IFC data model has a wide range of material entities and it is not possible to cover all of them here. The materials are represented as an array of **material** objects.

**Example**

```json
[
  {
    "objectId": 427168953156,
    "ifcSchema": "IFC2X3",
    "ifcType": "IfcMaterial",
    "attributes": {
      "Name": {
        "type": "string",
        "ifcType": "IfcLabel",
        "value": "Plaster"
      }
    }
  }
]
```

**Material Parameters**

| **Name**     | **Type** | **Description**                                     |
| ------------ | -------- | --------------------------------------------------- |
| `objectId`   | Number   | The object id of the material                       |
| `ifcSchema`  | String   | The IFC schema used by the revision (e.g. `IFC2X3`) |
| `ifcType`    | String   | The entity type of the material                     |
| `attributes` | Object   | The attributes of the material                      |

## Type

The type defines a list of commonly shared property sets, quantity sets and materials for all occurrences of the type.

**Example**

```json
{
  "objectId": 14993093688,
  "revisionId": "2364bf81107e4b0da346740bb03cea96",
  "ifcSchema": "IFC2X3",
  "ifcType": "IfcWallType",
  "attributes": {},
  "propertySets": {},
  "quantitySets": {},
  "materials": []
}
```

**Parameters**

| **Name**       | **Type** | **Description**                                         |
| -------------- | -------- | ------------------------------------------------------- |
| `objectId`     | Number   | The object id of the type                               |
| `revisionId`   | String   | The id of the model revision                            |
| `ifcSchema`    | String   | The IFC schema used by the revision (e.g. `IFC2X3`)     |
| `ifcType`      | String   | The entity type of the type (e.g. `IFCWallType`)        |
| `attributes`   | Object   | The attributes of the type                              |
| `propertySets` | Object   | The property sets common to all ocurrences of this type |
| `quantitySets` | Object   | The quantity sets common to all ocurrences of this type |
| `materials`    | Array    | The materials common to all ocurrences of this type     |

:::hint{type="info"}
The shape of `attributes`, `propertySets`, `quantitySets` and `materials` is the same as described in the previous sections.
:::

# Usage Example

Below is an example of how a product is provided through the Catenda APIs and then how it could be presented after combining the base type data with the product instance data.

:::ExpandableHeading
## Product JSON object

```json
{
  "objectId": 74999093683,
  "revisionId": "2364bf81107e4b0da346740bb03cea96",
  "ifcSchema": "IFC2X3",
  "ifcType": "IfcWall",
  "attributes": {
    "GlobalId": {
      "type": "string",
      "ifcType": "IfcGloballyUniqueId",
      "value": "01z4sauevCmvwKu5R3BKL1"
    },
    "Name": {
      "type": "string",
      "ifcType": "IfcLabel",
      "value": "Wall 123"
    }
  },
  "propertySets": {
    "Dimensions": {
      "objectId": 74999093684,
      "revisionId": "2364bf81107e4b0da346740bb03cea96",
      "ifcSchema": "IFC2X3",
      "ifcType": "IfcPropertySet",
      "attributes": {},
      "properties": {
        "Height": {
          "ifcType": "IfcPropertySingleValue",
          "nominalValue": {
            "type": "number",
            "ifcType": "IfcLengthMeasure",
            "value": 3,
            "unit": "m"
          }
        },
        "Width": {
          "ifcType": "IfcPropertySingleValue",
          "nominalValue": {
            "type": "number",
            "ifcType": "IfcLengthMeasure",
            "value": 5,
            "unit": "m"
          }
        }
      }
    }
  },
  "quantitySets": {
    "Area": {
      "objectId": 74999093685,
      "revisionId": "2364bf81107e4b0da346740bb03cea96",
      "ifcSchema": "IFC2X3",
      "ifcType": "IfcElementQuantity",
      "attributes": {},
      "quantities": {
        "GrossArea": {
          "ifcType": "IfcQuantityArea",
          "value": {
            "type": "number",
            "ifcType": "IfcAreaMeasure",
            "value": 15,
            "unit": "m²"
          }
        }
      }
    }
  },
  "materials": [
    {
      "objectId": 74999093686,
      "attributes": {
        "Name": {
          "type": "string",
          "ifcType": "IfcLabel",
          "value": "Plaster"
        }
      },
      "ifcSchema": "IFC2X3",
      "ifcType": "IfcMaterial"
    }
  ],
  "type": {
    "objectId": 74999093687,
    "revisionId": "2364bf81107e4b0da346740bb03cea96",
    "ifcSchema": "IFC2X3",
    "ifcType": "IfcWallType",
    "attributes": {
      "GlobalId": {
        "type": "string",
        "ifcType": "IfcGloballyUniqueId",
        "value": "0EmFKqq8T43wInuWJ0A6Po"
      },
      "Name": {
        "type": "string",
        "ifcType": "IfcLabel",
        "value": "BA13"
      },
      "PredefinedType": {
        "type": "enum",
        "ifcType": "IfcWallTypeEnum",
        "value": "NOTDEFINED"
      }
    },
    "propertySets": {
      "Dimensions": {
        "objectId": 74999093688,
        "revisionId": "2364bf81107e4b0da346740bb03cea96",
        "ifcSchema": "IFC2X3",
        "ifcType": "IfcPropertySet",
        "attributes": {},
        "properties": {
          "Depth": {
            "ifcType": "IfcPropertySingleValue",
            "nominalValue": {
              "type": "number",
              "ifcType": "IfcLengthMeasure",
              "value": 0.13,
              "unit": "m"
            }
          },
          "Height": {
            "ifcType": "IfcPropertySingleValue",
            "nominalValue": {
              "type": "number",
              "ifcType": "IfcLengthMeasure",
              "value": 3,
              "unit": "m"
            }
          },
          "Width": {
            "ifcType": "IfcPropertySingleValue",
            "nominalValue": {
              "type": "number",
              "ifcType": "IfcLengthMeasure",
              "value": 3,
              "unit": "m"
            }
          }
        }
      }
    },
    "quantitySets": null,
    "materials": null
  }
}
```


:::

## Product technical sheet

:::CodeblockTabs
Product

```none
Identification:
 - Name: Wall 123
 - Entity: Wall
 - Guid: 01z4sauevCmvwKu5R3BKL1
 - ObjectId: 74999093683
 - Type: BA13
 - PredefinedType: NOTDEFINED

Properties:
 - Dimensions:
  - Depth: 0.13m
  - Height: 3.00m
  - Width: 5.00m

Quantities:
 - Area:
  - GrossArea: 15m²

Materials:
 - Name: Plaster
```
:::

