Managing products
Products are a central entity in the NewStore platform. Most of the business flows depend on it.
For a product to appear in the platform or in the apps, it needs at least:
Some product information in the master catalog
A price for the specific
shop
andlocale
Identifying products
The attribute product_id
is the universal identifier of a product
inside a shop
and locale
in NewStore. It is the only identifier
that is used in all API calls to identify the product in NewStore
Omnichannel Cloud.
If you have other identifiers for your products, such as SKU or EAN
in your business, import them in the external_identifiers
property.
You can query and scan a product by using its exact product_id
or any identifier defined in external_identifiers
.
If you want to be able to search for a specific external
identifier, see here .
We do not recommend using special characters when specifying a value
for the product_id
or external_identifiers
property. However,
NewStore supports special characters (reserved, unreserved, and
escaped characters) based on the RFC guidelines, except
=
(the equal symbol) and %
(the percentage symbol). For more
information, see Section 2.1 in the RFC guidelines.
Master locale
The master locale is a way to define default field values (e.g. SKUs or extended attributes) that other locales in the same catalog inherit when you import them. In every catalog there can be only one master locale.
To set a locale as master locale in a catalog, set the is_master
property in the import file's header to true
. This will set all the products in that import file as master products. That means that if you import the same product to another locale, and it does not have all the properties filled in,
the import will fill in the missing properties with those of the master product.
For example, let's take three imports with the following locales and master settings:
catalog
:storefront-en
,locale
:en-us
,product_id
:product1
,is_master
:true
catalog
:storefront-en
,locale
:en-uk
,product_id
:product1
,is_master
:false
catalog
:storefront-en
,locale
:en-au
,product_id
:product1
,is_master
:false
In this case, data of product1
will be copied from the master locale en-us
to non-master locales en-uk
and en-au
.
- After importing the master locale for the first time, in every consecutive imports to the same locale you have to set the
is_master
property totrue
. If you set theis_master
property in the header tofalse
, the import marks the products in that specific import as non-master products within your master locale, and hence their data won't be copied to other locales. - If you do an import to the master locale with changes in the products, those changes won't be automatically propagated to non-master locales. To update products in non-master locales, reimport the products to the non-master locale.
To change the master locale of a catalog, do an import with the new master locale in the header and set the is_master
property to true
.
If the is_master
property is not specified in the head of an import file, NewStore considers the import to be a master locale, and consecutive imports to other locales will copy product data from this import.
However, if you set the is_master
property to false
in every import, then there is no master locale and no data will be inherited during imports.
Controlling visibility of products in NewStore
For a product to appear in Omnichannel Manager, in Associate App, and in Shopping App,
set the attribute show_in_listing
of the product to true
. When this is set to false
for a product,
the only way to retrieve this product is via the Get product details method
in the Customer API.
To control season-specific products, set the attributes online_from
and
online_to
to the appropriate date. Leave this empty if the product is
always available to be sold and is not limited to specific dates. To indicate when the
product is available to be sold for a specific period, provide
either the start date, the end date or both. This also determines if
the product is returned in Shopping App depending on the current
date. Keep this in mind when you test your import. To see how to use
these attributes in combination with pre-orders,
see here .
Searching and filtering
By default products can be searched by title, description, color, size, and caption.
You can also enable searching for products that have been imported from an external OMS without ATP values. To enable this feature, see Showing products imported without ATP .
To enable search and filtering in additional fields, use the head
section of your product import.
You can enable filtering using the
filterable_attributes
property. It uses JSONPath.You can enable searching using the
searchable_attributes
property. It uses JSONPath. You can set theweight
property to specify the importance of each attribute compared to other searchable attributes.To validate JSONPath, use a JSONPath validator.
If you change (add/delete) searchable or filterable attributes in the head of your product import, ensure to reimport all products with the changed head. Otherwise, the changes are only applied to the products imported along with the changed head attributes.
Tutorial to configure filter and search attributes
Follow the product import tutorial ,
but use this payload as products.json
instead.
{
"head": {
"shop": "storefront-catalog-en",
"locale": "en-US",
"is_master": true,
"filterable_attributes": [
{
"name": "material",
"path": "$.material"
},
{
"name": "fit",
"path": "$.extended_attributes[?(@.name == 'fit')].value"
}
],
"searchable_attributes": [
{
"name": "product_id",
"path": "$.product_id",
"weight": 10
},
{
"name": "ean13",
"path": "$.external_identifiers[?(@.type == 'ean13')].value",
"weight": 5
}
]
},
"items": [
{
"product_id": "1000101",
"variant_group_id": "variant_group_10001",
"title": "Bohemian Print Cutout Chiffon Maxi Dress",
"caption": "Our summer-ready chiffon dress features a bohemian print and beaded cut-outs for a textural twist to maxi styles. Full of creativity on every level, it offers delicate transparencies with a pleated hem for extra swish as you move through the summer heat.",
"description": "Bohemian Print Chiffon Gathered Waist Silk Dress",
"show_in_listing": true,
"images": [
{
"url": "https://mycompany/hoster/images/default/products/SU16/10001_014_Multi_OFR-1.jpg",
"internal_dimension_height": 2000,
"internal_dimension_width": 1414,
"internal_dominant_color": "#F4F2F4",
"is_main": true
}
],
"tax_class_id": "standard",
"categories": [
{
"path": "Shop > Dresses",
"position": 10,
"is_main": true
}
],
"material": "LADIES' 100% SILK WOVEN DRESS",
"variation_color_value": "Grace Sweater Beige",
"variation_size_value": "4",
"variation_size_gender": "unisex",
"variation_size_type": "regular",
"variation_size_system": "US",
"external_identifiers": [
{
"type": "ean13",
"value": "1000101000007"
}
],
"extended_attributes": [
{
"name": "fit",
"value": "1000101 Tight"
}
]
}
]
}
Follow the rest of the tutorial as explained. After this import is done, the products included in the import will be searchable and filterable by the newly configured attributes.
Product images
A product can have multiple images. To define a main image, set the
attribute is_main
of the image to true
.
By default, NewStore downloads all the images that are imported and uses its own image processing service to make them available in different sizes and formats for consumption in the apps.
To use your own image hosting service, set the property internal_disable_image_processing
to false
in the head
element of you product import. Make sure
your image hosting service can handle the expected amount of requests.
In this case, you also need to specify internal_dimension_height
,
internal_dimension_width
and internal_dominant_color
for each
image you provide.
Use case: Pre-orders
To enable pre-orders for a product, ensure that you specify a date
for the online_from
property. NewStore starts fulfilling
pre-ordered products from the date you provide in the online_from
property.
NewStore checks periodically every 2 hours if there are pre-order
products for which the online_from
date has been reached,
and makes them available for routing.
If your product can be pre-ordered, specify a date in the preorder_start
attribute to indicate from when the product will be available for pre-orders.
Specify an earlier date than the date you have specified in the
online_from
property.
Both these attributes are needed for pre-orders to be enabled for the product.
See here the more thorough guide about pre-orders .
General product-related FAQs
Why isn’t my product(s) showing up in Omnichannel Manager or in Associate App?
Some of the possible reasons of your product not showing up in the catalog are:
- The product is missing from the master catalog.
- The product didn't have a default price specified during the import process.
- You may have requested for the catalog to be set to
Don’t display without availability
.
How do I delete products or categories from the catalog?
We do not support a direct way to delete a certain product because we want to ensure the continuity of business flows, such as a customer returning a product that is no longer sold, as well as data integrity - keeping product information of all existing orders.
The easiest and safest way to delete a product is to set its
online_to
property to a past date. This way, the product will not be shown while browsing the Associate App, but other functionalities such asreturns
If you need to delete all products, such as when a mistake is made when setting up the tenant in a sandbox or staging environment, use the full import functionality.
To delete all products and categories from the catalog, perform a full import. This is an action with high impact and consequences, we recommend not using this method for tenants running in production.
:::important
Be aware that a full import **deletes ALL** of the currently stored data. Only the data freshly imported via the
new import job is retained, and this may affect other operations or functionalities in the platform.
We **do not** recommend using full imports in your production environment.
Performing a full import with multiple catalog/locale combinations in the same zip file can lead to unexpected behavior, and can result in complete loss of data of the affected entities.
If you only want to delete specific products or categories, the easiest way is to set their `online_to` property to a past date.
:::
See Importing data for more details on performing a full import.
Related topics