The Range - Full Update Product - In progress
The purpose of this page is to describe in details the flow of updating products in The Range marketplace.
Note: Create Product & Update product use the same API calls. However, here will be described the part, regarding Update product.
As per the payload below, the update call will be used for updating product content (title, description, price, etc.) and also will be used to deactivate, respectively activate a product and deleting a product. We need to look at our internal statuses and based on them to send the marketplace the correct operation.
In order to make the flow easier, into this page there will be described the flow only for updating product content ( title, description, price, etc.) Deactivation, Re-activation and Delete product will be described into separate pages.
We should push a product for full (content) update when we have following internal states:
Case 1: Product is created and it is on live:
Product Status = Product Published ; Listing Status=Active ; List / Update the whole item= Pending;
If update was successful, we will have following statuses:
Product Status =Product Published ; Listing Status= Active; List/ Update the whole item= Not Needed;
If we receive an error message, we will have following statuses:
Product Status = Product Published; Listing Status=Active; List / Update the whole item= Error;
Respective error need to be stored in Update Item Error field;
Case 2: Product is created but it is not live: Positive quantity is a must!
Product Status = Product Created ; Listing Status=Inactive ; List / Update the whole item= Pending; QTY > 0;
If update was successful, we will have following statuses:
Product Status = Product Created ; Listing Status=Inactive ; List / Update the whole item= Not Needed
If we receive an error message, we will have following statuses:
Product Status = Product Created; Listing Status=Inactive; List / Update the whole item= Error;
Respective error need to be stored in Update Item Error field;
API Call: https://supplier.rstore.com/rest/product_feed.api?supplier_id=12345
API Docs: https://marketplacetherange.zendesk.com/hc/en-gb/articles/360018370397-API-Product-Feed
Example call:
Example Call:
{
"product_arr" : [{
"vendor_sku" : "ABC 123",
"related_product" : "M1234567", # Optional - Kube will generate its own unique product code if
not provided
"title" : "Test Shoe",
"brand" : "The Range",
''gtin'' : ''12345678901'' , #Optional
"price_arr": [{
"price" : "49.50", # No currency symbol expected
"currency" : "GBP", # Not supporting other currencies at the moment
"effective_from" : "2019-05-10" # May be the current active price - can also provide
future price changes
}],
"product_category" : "Shoes",
"description" : "A Shoe Test", # We allow for HTML to be captured here - excluding script/embed
/iframe tags
"feature_arr" : [ # May be empty - not to be confused with attributes, certain Amazon fields such as TargetAudience and SubjectContent belong here
"Includes Sole",
"Prevents falling over",
"Waterproof"
],
"child_hazard" : 0, # Optional whether this product is hazardous to children
"age_restriction" : "16", # Optional minimum age
"image_url_arr" : [ # All media to be linked to this SKU
"https://www.therange.co.uk/example1.jpg",
"https://www.therange.co.uk/example2.jpg",
"https://www.therange.co.uk/example3.jpg"
],
"youtube_url_arr" : [ # All video media to be linked to this SKU
"https://www.youtube.com/watch?v=Zhr1uk_O-so",
"https://www.youtube.com/watch?v=Zhr1uk_O-so"
],
51
"fulfilment_class" : "Small", # May be one of our supported size classes (Small/Regular/Fragile
/Medium/Large/Extra Large), only required if not using Free Delivery
"product_attribute" : { # All attributes listed below are optional, only colour becomes
mandatory if colour_name is present
"colour" : "#8B4513", # Only required if colour is a distinct attribute of the SKU - we
should be able to map the HEX to our colour group.
"colour_name" : "Saddle Brown", # Optional descriptive name of the colour
"colour_group" : "Brown", # Optional Colour group the primary colour belongs to eg. Red
/Blue/Yellow/Orange etc.
"length" : "1m",
"width" : "5mm",
"height" : "10cm",
"weight" : "9kg",
# Other common attributes batteries required/included, legal disclaimer, warning -
list to be finalised
"other_attribute" : { # Optional list of any other unusual attributes of interest, may
be a dynamic list of key/value pairs.
"ATTR_NAME" : "ATTR_VALUE"
}
},
"launch_date" : "2019-05-30", # Optional date when the SKU will automatically be activated
(given that it has completed the onboarding process)
"active" : 1, # Optional - only to be used once the product is already Live, allows it to be
deactivated/discontinued (still visible but not saleable on the website though), or later be re-activated
"visible" : 1 # Optional - only to be used once the product is already Live, allows it to be
hidden from the website
}]
}
Mapping:
Integration Field | Integration Notes | Integration required | Hemi Mapping | Hemi Notes | |
---|---|---|---|---|---|
product_arr |
The list of products | ||||
vendor_sku |
Your variation reference. Use a reference code or an ID. This won't appear to customers. | Yes | Product > SKU | ||
related_product |
Kube will generate its own unique product code if not provided | Optional | TBD on later stage if we would want to save it | ||
title |
Product Account > Title | ||||
brand |
Product > Brand | TBD Taxonomy | |||
gtin |
Optional | N/A | TBD if we would want to create such field, or we can push Barcode/EAN/UPC/ISBN | ||
price_arr |
|||||
price |
No currency symbol expected | Product Account > Price | |||
currency |
Not supporting other currencies at the moment | Product Account > Currency | |||
effective_from |
May be the current active price - can also provide future price changes | N/A | |||
product_category |
Product Account> Primary Category ID | ||||
description |
We allow for HTML to be captured here - excluding script/embed | ||||
/iframe tags | Product Account > Description | We would want to use the logic of design template. |
If we have design template we will pick the design template; If we haven’t design template, we will pick the default one. If we haven’t the default one, we will pick the description; | feature_arr |
May be empty - not to be confused with attributes, certain Amazon fields such as TargetAudience and SubjectContent belong here | TBD | TBD |
TBD |
TBD |
child_hazard |
Whether this product is hazardous to children | Optional | N/A | age_restriction |
minimum age | Optional | N/A | image_url_arr |
All media to be linked to this SKU | Product > Main Image Product > More Picture URL OR Product Account The Range > Main Image Product Account The Range > More Picture URL | We pick images from Product Account TikTok with priority! | https://www.therange.co.uk/example1.jpg |
https://www.therange.co.uk/example1.jpg |
youtube_url_arr |
All video media to be linked to this SKU | https://www.youtube.com/watch?v=Zhr1uk_O-so |
fulfilment_class |
May be one of our supported size classes (Small/Regular/Fragile /Medium/Large/Extra Large), only required if not using Free Delivery | We will have a validation here, depends on delivery service cost . TBD how to handle it | product_attribute |
(maybe should be an array, in order to send more attributes within the node? To be confirmed) All attributes listed below are optional, only colour becomes mandatory if colour_name is present | TBD | as per description should be considered as item specifics | colour |
Only required if colour is a distinct attribute of the SKU - we should be able to map the HEX to our colour group. | TBD | colour_name |
descriptive name of the colour | Optional | colour_group |
Colour group the primary colour belongs to eg. Red /Blue/Yellow/Orange etc. | Optional | length |
meters | Product >Length | By default, in Hemi the measure unit is “cm“ We need to divide the length value by 100 in order to convert the centimeters into meters. | width |
millimeters | Product >Width | By default, in Hemi the measure unit is “cm“ We need to multiply the width value by 10 in order to convert centimeters into millimeters. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
height |
cm | Product >Height | By default, in Hemi the measure unit is “cm“ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
No mathematical action is required here 😃 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
weight |
kg | Product >Weight | By default, in Hemi the measure unit is “gram“ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
We need to divided the mass value by 1000 in order to convert the grams into kg. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
other_attribute |
Optional list of any other unusual attributes of interest, may be a dynamic list of key/value pairs. "ATTR_NAME" : "ATTR_VALUE" | Optional | TBD | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
launch_date |
Optional date when the SKU will automatically be activated (given that it has completed the onboarding process) | Optional | TBD | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
active |
Optional - only to be used once the product is already Live, allows it to be deactivated/discontinued (still visible but not saleable on the website though), or later be re-activated | Optional | TBD | When we send content updates to already active product (which is on LIVE), we can skip this field; |
When we send content updates to inactive product (product status is product created), we will push the value for activation (TBD the value) BUT we need to make sure there is positive quantity to a product before activating it!!!
Notes/Explanations: If the product is already Live and we would want to update the content only, we will not push this field;
If the product is already Live, but we would want to deactivate a product, we will push this field with value “TBD with The Range“ - will be described in page “deactivate product“
If the product was deactivated and we would want to re-activate it , we will push this field with value “TBD with The Range“
will be described in page “re-deactivate product“ |
| visible
| | Only to be used once the product is already Live, allows it to be hidden from the website | Optional | TBD |
If the product is already Live and we would want to update the content only, we will not push this field;
If the product is already Live, but we would want to delete a product, we will push this field with value “TBD with The Range“ - will be described in page “delete product“ |
Example Response:
{"result":[{"label": "product_feed", "sku_list":"ABC 123"}]}
TBC - If we update 10 variants, and we have incorrect parameters only for one variant, what will be the response? It will show us the variants which update were successful and the failed variant? Or it will show a general error to all variants and no one of the variant will be updated?
TBC - If we send update to a variant, without including related product and the opposite case (if included) what will happen - the update will occur to each variant maybe?
Error cases: