Data type ProductData

Description:

TYRIOS PIM saves all product-related data in a ProductData type data structure. The data class is one central information architecture used in the online shop, the PIM system, the order management, and the POS system. 

Please be aware: TYRIOS is an aspect-oriented system, and the concrete data structure depends on your system configuration. Especially in case you want to update existing data, please be aware of taking all available fields into account or using an update-specific API endpoint to avoid data loss.

It is essential to understand that the concrete data structure of products depends on the system's concrete setup. As ProductData is a central data class, it is very likely that additionally installed apps and modules extend it. A ProductData is one of the most complex data structures in TYRIOS, with many sub-data classes. Therefore, it is generally not recommended to use the complete data structure but to use APIs that support partial updates.

Language depending fields

TYRIOS can realize multilingual systems in as many languages as you want. Therefore, in the API language, you find depending on fields, e.g., "name_de" for the German name field, "description_de" for the German description, etc. The more languages there are, the more corresponding fields the API provides. German is, at this moment, a required language.

Stock definitions

It is possible with TYRIOS to manage as many stocks as you want. Therefore, each product needs to provide relevant stock data like stock count, stock base price, stock position, etc. 

Alternative Prices

In TYRIOS, it is possible to define alternative prices for different customer groups. The product data structure provides fields accordingly automatically.

General data structure

With the previous information, we can now discuss the general data structure of ProductData objects:

{
  "id": 441, // ID of the product, automatically generated
  "materialNumber": null, // material number. This is not enforced to be unique, but it is recommended
  "name_de": "Product name", // name of the product, required and language depending
  "shortDescription_de": null, // short description, used in order overviews, order details, invoices, ..., optional, however recommended due to legal issues.
  "description_de": null, // full description of the product, supports HTML
  "metaDescription_de": null, // meta description for the product
  "metaKeywords_de": null, // meta keywords as string
  "alternateHtmlTitle_de": null, // an alternative HTML title as string
  "hideDescription": false, //specifies if the description block should be hidden in product detail page
  "basePrice": 0, // total base price, is automatically calculated based on the stock base prices
  "listPrice": null, // net list price
  "price": 32.14, // net price, can save as many decimal points you want
  "isDiscountable": true, // specifies if the product is discountable using coupons
  "pricePrefix": null, // specifies if a prefix should be added to the product price, only possible if there is no sales support activated
  "isFlexPrice": false, // specifies if the client can specify the price
  "minFlexPrice": null, // if isFlexPrice=true, specifies the minimum price
  "defaultFlexPrice": null, // if isFlexPrice=true, specifies the default price
  "maxFlexPrice": null, // if isFlexPrice=true, specifies the max price
  "tax": 19, // specifies he tax value
  "ShopCategoryData": [ // array of ShopCategoryData objects or IDs the product should be assigned to
    {
      "id": 2
    }
  ],
  "carry": false, // specifies, if the product can be delivered (false) or not.
  "freeDelivery": false, // specifies if this product is with free delivery costs
  "visible": true, // specifies if this product is public
  "stockState": "1", // specifies the stock state: 1=available, 2=shortly available, 3=no available
  "stockable": true, // specifies if TYRIOS should activate the stock management
  "stockCount": 0, // specifies the stock count, automatically calculated on stock specific stockCounts
  "isbn": null,
  "ean": null,
  "upc": null,
  "manufacturer": null,
  "brand": null,
  "manufacturerProductNumber": null,
  "MediahelperFile": null, // array of MediahelperFile objects to specify used media. Could be provided as full objects or just be IDs
  "productIcons": null, // array of MediahelperFile objects to specify used media. Could be provided as full objects or just be IDs
  "mainMediaFile": null, // MediahelperFile object or ID for the preview image
  "state": "1", // state of the product: 1=new, 2=used, 3=refurbished
  "googleCategory": null, // google category, required if AdWords should be used
  "googleProductType": null, // google product type, recommended if adWords should be used
  "googleCustomLabel0": null,
  "googleCustomLabel1": null,
  "googleCustomLabel2": null,
  "googleCustomLabel3": null,
  "googleCustomLabel4": null,
  "alternateHtmlTitle": null,
  "CrosssellingProduct": null, // array of ProductData objects for cross selling
  "UpsellingProduct": null,// array of ProductData objects for up selling
  "youtubeURLs": [], // array of youtube URLs that should be embedded
  "unit": "Stk", // product unit, free string
  "searchKeywords": null, // additional search keywords to improve product search within the system
  "productType": 1, // specifies the product type: 1=digital product, 2=physical product, 3=evne
  "energyEfficiencyClass": null, // energy class
  "energyEfficiencyClassDetailImage": null, // MediahelperFile for specifying the energy class image, object or ID
  "multiPack": null,
  "isBundle": false,
  "isAdult": false,
  "gender": null, // gender, possible values: maile / female / unisex
  "ageGroup": null, // age group, possible values: newborn / infant / toddler / kids / adult
  "size": null, // size as string
  "sizeType": null, // possible values: regular / petite / plus / big and tall / maternity
  "sizeSystem": null, // possible values: US / UK / EU / DE / FR / JP / CN / IT / BR / MEX / AU
  "sizeRange": null, // string
  "width": null, // in cm
  "height": null, // in cm
  "depth": null, // in cm 
  "length": null, // in cm 
  "weight": null, // in kg
  "unit4unitPricing": "Stk",
  "unitPricingMeasure": null, // required if base price should be calculated. Specifies the amount of the item
  "unitPricingBaseMeasure": null, // required if base price should be calculated. Specifies the amount the base price is calculated for
  "useUnitPriceAsPresentationPrice": false,
  "offerSupportActivated": false, // specifies if offer requests can be placed
  "season": null,
  "salesSupportActivated": true, // specifies if sales support is activated
  "isPricePubliclyVisible": true, // specifies if price should be shown
  "showHiddenPrice4UsersWithRight": false, // specifies if price is only visible for special users
  "limitPaymentOption": false, // specifies if only special payment options should be supported
  "PaymentOption": [], // Payment options which should be supported. Either specifies as object or as ID
  "limitDeliveryOptionData": false, // specifies if delivery options should be limited.
  "DeliveryOptionData": [], // array of delivery options, objects or IDs
  "alternativeFakturaDescription": null, // specifies alternative texts for invoices,...
  "voucherDataDescription": null, // specifies alternative texts for POS system
  "executeZeroStockCountActions": false, // specifies if an automatism should be activated if there is no stock count any more
  "ZeroStockCountAction": null, array of ZeroStockCountAction definitions.
  "replacementDaysMin": null,
  "replacementDaysMax": null,
  "customsTariffNumber": null,
  "countryOfOrigin": null,
  "SameSeriesProductData": null, //array of products within the same series
  "SparePartsProductData": null, // array of products for spare parts
  "notes": null,
  "hideDeliveryTime": false,
  "hideDeliveryCosts": false,
  "hideProductDetailTabs": false,
  "ProductDataOffer": null, // array of product offers
  "reorderable": true, // specifies if the product can be reordered
  "overbookable": true, // specifies if the product can be overbooked
  "showStockCountMode": "visibleIfLimited",
  "increaseDeliveryTimeOnStockCountOverbooking": true,
  "ProductSpecificOrderAcceptanceText": null,
  "eventAvailableSeats": null,
  "eventTotalSeats": null,
  "eventBasePrice": null,
  "eventStartDate": null,
  "eventEndDate": null,
  "eventLocationName": null,
  "eventStreetAddress": null,
  "eventPostCode": null,
  "eventCity": null,
  "eventCountry": null,
  "rejectRevocationSupport": false,
  "showAdddressInput4OfferRequest": false,
  "requireStreet4OfferRequest": false,
  "requireCity4OfferRequest": false,
  "requireCountry4OfferRequest": false,
  "showPhoneInput4OfferRequest": false,
  "requirePhone4OfferRequest": false,
  "ScaledProductDataPrice": null,
  "ProductDataRightProvisioning": null,
  "ProductSpecificOrderCmsLink": null,
  "ProductDataStateMessage": null,
  "FreeProductDeliveryOptionTerm": null,
  "ProductDataInventoryItem": null,
  "inventoryItemType": "untracked",
  "annotationValue_de": null,
  "searchKeywords_de": [],
  "color_de": [], // colors as array definition, available for every language
  "material_de": [], // material ar array definition, available for every language
  "pattern_de": null, // // pattern as array definition, available for every language
  "alternativeFakturaDescription_de": null,
  "voucherDataDescription_de": null,
  "individualDeliveryPeriod_de": null,
  "productHighlights_de": [],
  "reason4rejectRevocationSupport_de": null,
  "alternativePrice1": null,
  "alternativePrice2": null,
  "alternativePrice3": null,
  "stockCount4LocationHauptlager": 0,
  "basePrice4LocationHauptlager": 0,
  "position4LocationHauptlager": null,
  "minimumStockCount4LocationHauptlager": null,
  "maximumStockCount4LocationHauptlager": null
}

Typically, in your instance, there are many references to ensure that a media cannot be deleted while in use. Depending on the API, these references can be loaded and provided. In addition, the system typically includes preview and download URLs automatically via JSON. 

ProductDataOffer

You can add as many offers you want to a ProductData. The offer is automatically taken into account in the online shop, in the order editor, and POS:

The data structure is like this:

{
    "price": 50, // net price of the offer
    "alternativePrice1": null, // alternative prices as offer
    "alternativePrice2": null,
    "alternativePrice3": null,
    "startTime": "2021-12-31T23:00:00.000Z", // when does the offer start, required, optionally as unix timestamp with milliseconds
    "endTime": "2022-01-30T23:00:00.000Z" // when does the offer end, required, optionally as unix timestamp with milliseconds
}

ZeroStockCountAction

If you want to execute an automatic task when stock gets empty, you need to define a ZeroStockCountAction:

{
    "action": "1", // possible values: 1=set stockState to 2 (inreases the deliery time), 2=set stock state to 3 (not available), 3=unpublish product, 4=delete product
    "afterEventTime": 0, // seconds after the event occurs, 0= immediately
    "validUntil": null, // optional, specifies until which date this rule applies
}

You can specify multiple actions at once. 

Solution:

Tips und Tricks:

Subscribe to our newsletter

Stay informed at all times. We will gladly inform you about product news and offers.