Bill of Material Reference
This section describes the Bill of Material (BOM) in JSON format retrieved from iFrame messages in the planner or from the project metadata through web services API. The Bill of Material is used for instance to generate customer specific display of Item List. For compatibility reasons the Bill of Material is versionned. It is recommended to use the most recent version in development phase but to set the version used in production phase.
Refer to Web Services API GET/projects/{ID}/metadata/{applicationID} to get the Bill Of Material through API.
BOM in iFrame messages
The BOM retrieved from a project through iFrame messages is a JSON object structured with the following sections.
products: array of objects describing products directly inserted in the project; e.g. sofas, beds, chairs, accessories. For individual product description in BOM, see products.
decos: array of objects describing products related to decorations e.g. paint, wallpaper, tile, flooring. For individual decoration description in BOM, see decorations.
bays: array of objects describing products related to bays e.g. openings, doors, windows. For individual bays description in BOM, see bays.
packs: array of objects describing products that are bought by batch. e.g. leg, handle. See packs description.
marketZone: the marketZone to define the catalog that is used for a country in the external configurator.
totalPrice: the total price of the home project.
Structure sample
"products": [
{
(see products description)
},
...
],
"decos": [
{
(see linears description)
},
...
],
"bays": [
{
(see bays description)
},
...
],
"packs": [
{
(see packs description)
},
...
],
"marketZone": (string),
"totalPrice": {
"regular": (number),
"current": (number),
"discountType": (string),
"vatInformation": (string),
"startDate": (string),
"endDate": (string),
"currency": (string)
}
}
products
The attributes below are used to describe a product in the BOM.
Attribute | Description | Data Type | Example |
---|---|---|---|
dbID | Database ID of the product | String | "dbID": "14562" |
reference | Product reference | String | "reference": "chaise_accoudoir_20" |
name | Product name | String | "name": "Baker Francis Chairs" |
typeID | The product closed tag ID of the product | Number | "typeID": 7 |
type | Furniture type | String | "type": "furniture" |
freeTags | Array of free tags associated to the furniture | Array of String | "freeTags": ["illustrationProduct"] |
commercialDescription | Commercial description of the product | String | "commercialDescription": "Baker Francis Chair" |
shortDescription | Short description of the product | String | "shortDescription": "Chair with several materials", |
thumbnailURLLarge | Product thumbnail (size 512 pixels) | String | "thumbnailURLLarge": "https://.../512.jpg" |
thumbnailURLMedium | Product thumbnail (size 256 pixels) | String | "thumbnailURLMedium": "https://.../256.jpg" |
thumbnailURLSmall | Product thumbnail (size 64 pixels) | String | "thumbnailURLSmall": "https://.../64.jpg" |
startDate | Start date of the product availability (timestamp) | String | "startDate": "2016-12-12T00:00:00.000Z", |
endDate | End date of the product availability (timestamp) | String | "endDate": "2017-12-18T00:00:00.000Z", |
isExpired | True if the product was expired at the time of BOM generation | Boolean | "isExpired": false |
brandID | ID of the brand where the product is available | Number | "brandID": 1 |
brandName | Brand name | String | "brandName": "BryoForHR" |
clientMetadata | Information from the product info of the product | String | "clientMetadata": {json} |
width | Product width as defined in product information | Number | "width": 400 |
height | Product height as defined in product information | Number | "height": 800 |
depth | Product depth as defined in product information | Number | "depth": 370 |
price | Product price if defined | PriceStructure | See Price |
roomName | Current room name of the product. | String | "roomName": "Living room" |
roomType | Current room type of the product. | String | "roomType": "12" |
decos
The attributes below are used to describe a decoration product in the BOM.
Attribute | Description | Data Type | Example |
---|---|---|---|
dbID | Database ID of the product | String | "dbID": "74450" |
reference | Product reference | String | "reference": "oak_parquet" |
name | Product name | String | "name": "Oak Parquet" |
typeID | The product closed tag ID of the product | Number | "typeID": 355 |
type | Furniture type | String | "type": "material" |
freeTags | Array of free tags associated to the furniture | Array of String | "freeTags": ["material"] |
commercialDescription | Commercial description of the product | String | "commercialDescription": "Solid parquet is made from one and the same thickness of noble wood." |
shortDescription | Short description of the product | String | "shortDescription": "Oak parquet with different thickness.", |
thumbnailURLLarge | Product thumbnail (size 512 pixels) | String | "thumbnailURLLarge": "https://.../512.jpg" |
thumbnailURLMedium | Product thumbnail (size 256 pixels) | String | "thumbnailURLMedium": "https://.../256.jpg" |
thumbnailURLSmall | Product thumbnail (size 64 pixels) | String | "thumbnailURLSmall": "https://.../64.jpg" |
startDate | Start date of the product availability (timestamp) | String | "startDate": "2016-12-12T00:00:00.000Z", |
endDate | End date of the product availability (timestamp) | String | "endDate": "2017-12-18T00:00:00.000Z", |
isExpired | True if the product was expired at the time of BOM generation | Boolean | "isExpired": false |
brandID | ID of the brand where the product is available | Number | "brandID": 1 |
brandName | Brand name | String | "brandName": "BryoForHR" |
clientMetadata | Information from the product info of the product | String | "clientMetadata": {json} |
square | Value used only for decorations (e.g. calculated square meters of a parquet) | Number | "square": 26 |
quantity | Number of the same element | Number | "quantity": 1 |
materialTagName | The tag name used to identify the type of the decoration displayed in the item list | String | "materialTagName": "Hardwoods" |
price | Product price if defined | PriceStructure | See Price |
bays
The attributes below are used to describe a product in the BOM.
Attribute | Description | Data Type | Example |
---|---|---|---|
dbID | Database ID of the product | String | "dbID": "18962" |
reference | Product reference | String | "reference": "fen_4_anthracite_blanc" |
name | Product name | String | "name": "Cancun double window" |
typeID | The product closed tag ID of the product | Number | "typeID": 252 |
type | Furniture type | String | "type": "opening" |
freeTags | Array of free tags associated to the furniture | Array of String | "freeTags": ["RemoveFromSearch"] |
commercialDescription | Commercial description of the product | String | "commercialDescription": "Double window" |
shortDescription | Short description of the product | String | "shortDescription": "Double window", |
thumbnailURLLarge | Product thumbnail (size 512 pixels) | String | "thumbnailURLLarge": "https://.../512.jpg" |
thumbnailURLMedium | Product thumbnail (size 256 pixels) | String | "thumbnailURLMedium": "https://.../256.jpg" |
thumbnailURLSmall | Product thumbnail (size 64 pixels) | String | "thumbnailURLSmall": "https://.../64.jpg" |
startDate | Start date of the product availability (timestamp) | String | "startDate": "2016-12-12T00:00:00.000Z", |
endDate | End date of the product availability (timestamp) | String | "endDate": "2017-12-18T00:00:00.000Z", |
isExpired | True if the product was expired at the time of BOM generation | Boolean | "isExpired": false |
brandID | ID of the brand where the product is available | Number | "brandID": 1 |
brandName | Brand name | String | "brandName": "BryoForHR" |
clientMetadata | Information from the product info of the product | String | "clientMetadata": {json} |
width | Product width as defined in product information | Number | "width": 1400 |
height | Product height as defined in product information | Number | "height": 800 |
depth | Product depth as defined in product information | Number | "depth": 370 |
price | Product price if defined | PriceStructure | See Price |
packs
The packs products are described with the same attributes than products with the additional attribute quantity. See products description. Notice that price is unitary price of each pack element. Multiply quantity by price to compute contribution of pack products to the total price.
Attribute | Description | Data Type | Example |
---|---|---|---|
quantity | Number of packs products needed for the project | Number | "quantity": 5 |
marketZone
MarketZone is a parameter in the app distribution settings to allow the retailers to specify the marketZone for the catalog that is used for a country in the external configurator in Home Retailers. It is a string value like "West-EU" for example. It's an optional parameter and the retailers fill this parameter as per the requirement.
Attribute | Description | Data Type | Example |
---|---|---|---|
marketZone | marketZone for specific catalog | String | "marketZone": "West-EU" |
Price
The price of a product is defined by a JSON object called PriceStructure.
The PriceStructure is composed of 2 objects regular and current and the attribute discountType. regular object contains information on the regular price of the object. current object contains information on the price that is applied currently. discountType is the type of discount applied for the current price. Possible values for discountType are:
▪ regular: no discount, the current price is the regular price.
▪ reduced : current price is a reduced price.
▪ discounted : current price is a discounted price.
▪ membership : current price is a membership price.
NOTE : The "totalPrice" attribute of the BOM is not a PriceStructure object, but it has the same top-level attributes.
Price Sample
"price":
{
"regular": {
"value": 630,
"type": "regular",
"startDate": null,
"endDate": null,
"additionalData": null
},
"current": {
"value": 575,
"type": "reduced",
"startDate": null,
"endDate": null,
"additionalData": null
},
"discountType": "reduced"
}
Below are described the 5 attributes of the regular and current prices.
Attribute | Description | Data Type | Example |
---|---|---|---|
value | The price value | Number | "value": 150 |
type | The price type | String | "type": "regular" "type": "reduced" "type": "membership" |
startDate | Start date of the price validity (timestamp) | String | "startDate": "2016-12-12T00:00:00.000Z", |
endDate | End date of the price validity (timestamp) | String | "endDate": "2017-12-18T00:00:00.000Z", |
additionalData | Additional price information | Object | " additionalData ": { "pricingMethod" : "squareFeet"} |
BOM in project metadata
The BOM of a project retrieved through web services API GET/projects/{ID}/metadata/{applicationID} is a JSON object with a similar structure than BOM object retrieved from iFrame Message. This BOM in metadata is stored when saving the project with minimun product information. It is sufficient to retrieve products and gather up to date information on each product. The expand option of GET/projects/{ID}/metadata/{applicationID} is designed for that.
The 4 sections products, decos, bays and packs are presents but with less products information than in BOM from iFrame message. Product information needs to be completed before use.
The section totalPrice is identical to BOM from iFrame message.
4 additional attributes are provided :
locale: the locale used in the planner to edit the project. Usually it is a combination of 2 letter langage code following ISO 639-1 with a 2 letter country code following ISO 3166-1.
currency: string of 3 letter string following ISO 4217.
distributionID: Application Distribution ID
version: the iframe version. It drives the data structure of the returned BOM items.
Structure sample
"products": [
{
(see product structure description)
},
...
],
"decos": [
{
(see linear structure description)
},
...
],
"bays": [
{
(see bays structure description)
},
...
],
"packs": [
{
(see pack structure description)
},
...
],
"totalPrice": {
"regular": (number),
"current": (number),
"discountType": (string),
"vatInformation": (string),
"startDate": (string),
"endDate": (string)
},
"locale": (string),
"currency": (string),
"distributionID": (string),
"version": (number),
BOM Object Version 1
BOM Structure
Structure Example
"products": [
{
{see product structure description}
},
...
]
"decos": [
{
{see linear structure description}
},
...
]
"bays": [
{
(see bays structure description)
},
...
]
"packs": [
{
(see pack structure description)
},
...
]
"totalPrice": {
"regular": (number),
"current": (number),
"discountType": (string),
"vatInformation": (string),
"startDate": (string),
"endDate": (string)
},
"formattedTotalPrice": (string)
Structure Description
Context: This structure is sent through iframe messages in the application. BOM is retrieved as an "Object".
High Level BOM Structure
▪ products: Array of objects - describing products in the scene (sofa, beds, accessories, etc.)
▪ decos: Array of objects - describing products related to home decoration (paint, wallpaper, tiles, flooring)
▪ bays: Array of objects - describing products related to bays(openings, doors, windows)
▪ packs: Array of objects - describing products that are bought by batch.
▪ totalPrice: Object - describing total price of the project.
▪ formattedTotalPrice: String - Total price of the kitchen, formatted as per the current currency locale
Low Level BOM Structure
Product structure
Attribute | Description | Data Type | Example |
---|---|---|---|
dbID | Database ID of the product | String | "dbID": "14562" |
price | Product price | Number | "price": 50 |
formattedPrice | Product price | String | "formattedPrice": "€50" |
reference | Product reference | String | "reference": "chaise_accoudoir_20" |
name | Product name | String | "name": "Baker Francis Chairs" |
typeID | The product closed tag ID of the product | Number | "typeID": 7 |
type | Furniture type | String | "type": "furniture" |
freeTags | Array of free tags associated to the furniture | Array of String | "freeTags": ["illustrationProduct"] |
commercialDescription | Commercial description of the product | String | "commercialDescription": "Baker Francis Chair" |
shortDescription | Short description of the product | String | "shortDescription": "Chair with several materials", |
thumbnailURLLarge | Product thumbnail (size 512 pixels) | String | "thumbnailURLLarge": "https://.../512.jpg" |
thumbnailURLMedium | Product thumbnail (size 256 pixels) | String | "thumbnailURLMedium": "https://.../256.jpg" |
thumbnailURLSmall | Product thumbnail (size 64 pixels) | String | "thumbnailURLSmall": "https://.../64.jpg" |
startDate | Start date of the product availability (timestamp) | String | "startDate": "2016-12-12T00:00:00.000Z", |
endDate | End date of the product availability (timestamp) | String | "endDate": "2017-12-18T00:00:00.000Z", |
isExpired | True if the product was expired at the time of BOM generation | Boolean | "isExpired": false |
brandID | ID of the brand where the product is available | Number | "brandID": 1 |
brandName | Brand name | String | "brandName": "BryoForHR" |
clientMetadata | Information from the product info of the product | String | "clientMetadata": {json} |
width | Product width as defined in product information | Number | "width": 400 |
height | Product height as defined in product information | Number | "height": 800 |
depth | Product depth as defined in product information | Number | "depth": 370 |
Decos Structure
Attribute | Description | Data Type | Example |
---|---|---|---|
dbID | Database ID of the product | String | "dbID": "74450" |
price | Product price | Number | "price": 50 |
formattedPrice | Product price | String | "formattedPrice": "€50" |
reference | Product reference | String | "reference": "oak_parquet" |
name | Product name | String | "name": "Oak Parquet" |
typeID | The product closed tag ID of the product | Number | "typeID": 355 |
type | Furniture type | String | "type": "material" |
freeTags | Array of free tags associated to the furniture | Array of String | "freeTags": ["material"] |
commercialDescription | Commercial description of the product | String | "commercialDescription": "Solid parquet is made from one and the same thickness of noble wood." |
shortDescription | Short description of the product | String | "shortDescription": "Oak parquet with different thickness.", |
thumbnailURLLarge | Product thumbnail (size 512 pixels) | String | "thumbnailURLLarge": "https://.../512.jpg" |
thumbnailURLMedium | Product thumbnail (size 256 pixels) | String | "thumbnailURLMedium": "https://.../256.jpg" |
thumbnailURLSmall | Product thumbnail (size 64 pixels) | String | "thumbnailURLSmall": "https://.../64.jpg" |
startDate | Start date of the product availability (timestamp) | String | "startDate": "2016-12-12T00:00:00.000Z", |
endDate | End date of the product availability (timestamp) | String | "endDate": "2017-12-18T00:00:00.000Z", |
isExpired | True if the product was expired at the time of BOM generation | Boolean | "isExpired": false |
brandID | ID of the brand where the product is available | Number | "brandID": 1 |
brandName | Brand name | String | "brandName": "BryoForHR" |
clientMetadata | Information from the product info of the product | String | "clientMetadata": {json} |
square | Value used only for decorations (e.g. calculated square meters of a parquet) | Number | "square": 26 |
quantity | Number of the same element | Number | "quantity": 1 |
materialTagName | The tag name used to identify the type of the decoration displayed in the item list | String | "materialTagName": "Hardwoods" |
Bays structure
Attribute | Description | Data Type | Example |
---|---|---|---|
dbID | Database ID of the product | String | "dbID": "18962" |
price | Product price | Number | "price": 50 |
formattedPrice | Product price | String | "formattedPrice": "€50" |
reference | Product reference | String | "reference": "fen_4_anthracite_blanc" |
name | Product name | String | "name": "Cancun double window" |
typeID | The product closed tag ID of the product | Number | "typeID": 252 |
type | Furniture type | String | "type": "opening" |
freeTags | Array of free tags associated to the furniture | Array of String | "freeTags": ["illustrationProduct"] |
commercialDescription | Commercial description of the product | String | "commercialDescription": "Double window" |
shortDescription | Short description of the product | String | "shortDescription": "Double window", |
thumbnailURLLarge | Product thumbnail (size 512 pixels) | String | "thumbnailURLLarge": "https://.../512.jpg" |
thumbnailURLMedium | Product thumbnail (size 256 pixels) | String | "thumbnailURLMedium": "https://.../256.jpg" |
thumbnailURLSmall | Product thumbnail (size 64 pixels) | String | "thumbnailURLSmall": "https://.../64.jpg" |
startDate | Start date of the product availability (timestamp) | String | "startDate": "2016-12-12T00:00:00.000Z", |
endDate | End date of the product availability (timestamp) | String | "endDate": "2017-12-18T00:00:00.000Z", |
isExpired | True if the product was expired at the time of BOM generation | Boolean | "isExpired": false |
brandID | ID of the brand where the product is available | Number | "brandID": 1 |
brandName | Brand name | String | "brandName": "BryoForHR" |
clientMetadata | Information from the product info of the product | String | "clientMetadata": {json} |
width | Product width as defined in product information | Number | "width": 1400 |
height | Product height as defined in product information | Number | "height": 800 |
depth | Product depth as defined in product information | Number | "depth": 370 |
Pack structure
Same structure as "Product" with quantity value. Refer to the section "Product structure". Notice that price is unitary price of each pack element. You have to multiply quantity by price to get total price of the packs.
BOM in Project metadata
Structure
"products": [
{
{see product structure description}
},
...
],
"decos": [
{
{see linear structure description}
},
...
],
"bays": [
{
{see bays structure description}
},
...
],
"packs": [
{
(see pack structure description)
},
...
],
"totalPrice": {
"regular": (number),
"current": (number),
"discountType": (string),
"vatInformation": (string),
"startDate": (string),
"endDate": (string)
},
"locale": (string),
"currency": (string),
"distributionID": (string),
"version": (number),
Structure Description
Context: This structure is sent through project metadata web service (/projects/:projectID/metadata/2). As information is stored, product information needs to be refreshed before use. That is why there is less information than in the previous structure. BOM is retrieved as an "Object".
High Level BOM Structure
▪ products: Array of objects - describing products in the scene (sofa, beds, accessories, etc.)
▪ decos: Array of objects - describing products related to home decoration (paint, wallpaper, tiles, flooring)
▪ bays: Array of objects - describing products related to bays(openings, doors, windows)
▪ packs: Array of objects - describing products that are bought by pack.
▪ totalPrice: Object - describing total price of the project.
▪ formattedTotalPrice: String - Total price of the kitchen, formatted as per the current currency locale
▪ locale: String - Combination of :
▪ MANDATORY: 2 letter code of a language, following ISO 639-1.
Refer to ISO 639-1 documentation 🔗
▪ OPTIONAL: 2 letter code of a region / country, following ISO 3166-1.
Refer to ISO 3166-1 documentation 🔗
▪ currency: String - 3 letter string following ISO 4217
▪ distributionID: Application Distribution ID (Refer to ISO 4217 documentation 🔗)
▪ marketZone: String - describing marketZone for catalog
▪ version: The iframe version. It drives the data structure of the returned BOM items.