Shein Create Products
Version | Date | Created / Updated | Notes |
---|---|---|---|
v1.0 | Hristiyan | First publish | |
v1.1 | 02.08.2024 | Bogomil | Image URL encode |
v1.2 | 02.08.2024 | Bogomil | Mapping Changes |
v1.3 | 15.08.2024 | Bogomil | Mapping Changes |
v1.4 | 15.08.2024 | Bogomil | Image Validation Included |
v1.5 | 28.08.2024 | Bogomil | If images already uploaded move to next status |
v1.6 | 30.08.2024 | Bogomil | Different payload structure based on Variation Specifics |
v1.7 | 12.02.2025 | Bogomil | Additional logic for sale_attribute |
v1.8 | Bogomil | Material/Composition Logic |
The purpose of this document is to give detailed info on how products are created on Shein.
Shein uses the same call for creating and updating products. We can differentiate if we are creating a product or updating it by a parameter in the payload body (explanation will be below).
In order to create a product we need to have photos first, however Shein does not allow for external picture links to be sent with the product creation , so we first need to submit the pictures to Shein so they can host them on their servers. There is a separate call for “Converting images“, so we need first to call this, to push images and then to download the new images links. We want to introduce a new table called Shein Images
with the following structure :
Field | Required | Comment |
---|---|---|
Image Url |
Yes | This will be our URL which will be taken either from Product or Product Account Shein .It has to be unique URL |
Shein Url |
Yes | This will be where we will store the Shein URL from the response from the below call |
Picture Type |
Yes | This should be an enumretaion dropdown field based on the type of picture that we have sent for transformation, possible values are : |
1: main picture; 2: detail picture; 5: block picture; 6: color block picture
We want to store the name but send the number. The logic for the image type is explained below with the API call. |
So to sum the above up, when we pick a picture for “transformation” we want to create a record in the above table where in the Image url
we will just transfer whatever we have picked from Hemi, then store the Picture type
(logic below) and then wait for Shein’s response so we can store the Shein Url
for the relevant image url. Once we have this, we then need to use the Shein url
when creating a product. We want to store only unique URLs so for example if we have a variation with 5 variant and with 20 urls each which are the same, we want to create only 20 records not 100 in Shein Images
Convert picture to SHEIN product picture
API Call : POST /open-api/goods/transform-pic
API Docs : https://open.sheincorp.com/documents/apidoc/detail/3000096-1000001
The call should pick products with Product Account
> Product Status
= Product Not Created AND Product Account
> Closed
= No
The call is used for single picture upload. This means we will need to make multiple calls to upload all pictures for a product. If any picture for the same product fails for some reason, but the rest are uploaded, we want to continue and use the uploaded pictures only. If all pictures fail we want to store an error in the Product Account
> Update Item Error
and set the Product Account
> List/Update the whole item
= Error
For the language
header we want to hardcode it to “en”.
Example call :
{
"image_type": 2,
"original_url": "http://imgdeal-test01.shein.com/images3_pi/2023/11/15/fe/17000325694031071724_square.jpg"
}
Request mapping :
Shein Field | Required | Hemi Field | Comment |
---|---|---|---|
image_type |
Yes | Product Account Shein is always with priority. |
Depending on the type of picture, we need to send a number as a image_type
Mapping as follows :
1: main picture
2: detail picture
5: block picture
6: color block picture
If we are picking from Product Account Shein
then we want to send the number which corresponds to the field name.
If we are picking from Product
we need the following mapping :
Product
> Main Image
we send as image_type
= 1
Product
> Listing Image
we send as image_type
= 2
Product
> More Picture URLs
we send as image_type
= 2 |
| original_url
| Yes | Product
> Listing
image
Product
> Main Image
Product
> More Picture URLs
OR
Product Account Shein
> Main Picture
Product Account Shein
> Detail Pictures
AND
Product Account Shein
> Block Picture
Product Account Shein
> Color Block Picture
| Product Account Shein
is with priority.
<v1.1>When sending image url we need to encode it for example if we have url “Mens Liverpool Shorts - 7092 (1).jpg” we need to push it as “Mens%20Liverpool%20Shorts%20-%207092%20(1).jpg”</v1.1> |
As we are making the call, we want to simultaneously create a record in the Shein Images
table where we will store the Image url
and Image type
(we want to display the name of the type rather than number)
<v1.4>
We want to add additional validation and return internal error in the following cases:
1 Variation with 1 product (all products must be variations):
We must have main image and minimum one additional image (Detail Pictures
) .
2 Variation with more than 1 product:
We must have main image for each variant, color block image for each variant and minimum of 2 additional images (Detail Pictures
) for the whole variation.
The way we want to group the images will be slightly different because we want to treat the Product Account Shein
> Block Picture
and Product Account Shein
> Color Block Picture
as images separated from our standard logic. What i mean by this is if we have populated data into Product Account Shein
> Block Picture
or Product Account Shein
> Color Block Picture
we still want to use the Product
> Listing
image
, Product
> Main Image
and Product
> More Picture URLs
.
Only if we have populated data intoProduct Account Shein
> Main Picture
or Product Account Shein
> Detail Pictures
then we want to pick them with priority and do not use our standard product fields.
</v1.4>
<v1.5> If we have a product which images are already uploaded we want to move it to the next status with status pending</v1.5>
Example response :
{
"code": "0",
"msg": "OK",
"info": {
"original": "http://imgdeal-test01.shein.com/images3_pi/2023/11/15/fe/17000325694031071724_square.jpg",
"transformed": "",
"failure_reason": "图片下载异常"
},
"bbl": null
}
Response mapping :
Shein Field | Hemi Field | Comment | |
---|---|---|---|
code |
N/A | ||
msg |
N/A | ||
info |
|||
original |
N/A | ||
transformed |
Shein Images > Shein Url |
||
failure_reason |
Product Account > Update Item Error |
We can see the reason is in Chinese. Dev team to advise if we can use some kind of translator so we can store the error in English. | |
bbl |
N/A |
After we have uploaded the photos we are ready to create the product so we need to set the Product Account
> Product Status
= Images uploaded
Product publish
<v1.6>
Shein support different payload structures depends on the sale_attribute (Variation Specifics) and we will need to incorporate additional logic how to detect which payload structure we want to use. For ease I will call the different payloads “Payload with same sale_attributes” and “Payload with different sale_attributes”. This is required in cases where we have a variation group which vary by color and size but the color is same for all variant and only the size defers. This way we cannot push the same color for each variant and we need to group the variants under the same color. The other case is when we have a variation which vary by color and size but we have different colors for the different sizes or even same sizes.
API Call : POST /open-api/goods/product/publishOrEdit
API Docs : https://open.sheincorp.com/documents/apidoc/detail/3000266-1000001
We need to pick products which have Product Account
> Product Status
= Images uploaded AND Product Account
> Closed
= No
All other triggers, validations etc are per the listing abstraction Product Listing general requirements
Example Request Body “Payload with different sale_attributes”. : Please pay attention to the “” which must be applied as per the example response!
{
"brand_code": "254p8",
"category_id": 1909,
"edit_type": 0,
"multi_language_desc_list": [
{
"language": "en",
"name": "[Eye-catching]: Byootique Lipstick Case features a gradient color with gold glitter to deliver a delicate, mysterious, youthful and eye-catching appearance which stands out among other cosmetic cases, helping you to show your unique fashion taste whenever you go\n[Portable & Convenient]: Features a compact size of 4\" x 3\" x 1\" and weighs only 0.22 Lb for easy storage in handbag and toiletry bag, or even can be put in your pocket for carry-on use; Enables to hold 2 lipsticks of different colors or 1 lipstick and 1 lip balm for meeting your makeup needs\n[Built-in Mirror]: Equipped with a built-in mirror for allowing you to put on your lipstick or gloss on the go, also helping to check and reapply your makeup conveniently\n[Durable & User-friendly]: Made of wear-resistant & water-resistant PU leather for ensuring a long lifespan and support daily frequent use; Featuring a magnetic snap closure for holding your lipsticks securely and protecting them from scratches or loss\n[Best Gift Idea]: Thanks to its fabulous and stylish design, it's a great gift for women and girls and ideal for giving to your loved ones\n\nSpecifications:\n- Overall Dimension(LxWxH): 4 5/16\" x 2 3/4\" x 1 3/16\" (11 x 7 x 3 cm)\n- Material: PU Leather\n- Net Weight: 0.22 Lb (0.1 kg)\n\nPackage Contents:\n- 1x Lipstick Case"
}
],
"multi_language_name_list": [
{
"language": "en",
"name": "BYOOTIQUE Makeup Lipstick Case Portable Lip Gloss Cosmetic Pouch Lipstick Holder Makeup Organizer with Built-in Mirror Makeup Bag for Purse Mini Bag Travel"
}
],
"product_attribute_list": [
{
"attribute_id": 62,
"attribute_value_id": 212,
"attribute_extra_value":100
}
],
"product_type_id": 158,
"site_list": [
{
"main_site": "shein",
"sub_site_list": [
"shein-uk"
]
}
],
"skc_list": [
{
"image_info": {
"image_group_code": "G11e9v2gq5u3",
"image_info_list": [
{
"image_sort": 1,
"image_type": "1",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/52\/172441869098b8e5cfa7d8eb4642aaa5ab7574486d_square.jpg"
},
{
"image_sort": 2,
"image_type": "2",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/7f\/172441869573ff21642bcd5fc0e1789c55207b20fc_square.jpg"
},
{
"image_sort": 3,
"image_type": "2",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/01\/172441870053765d54473aeb391361720ddc3905b2_square.jpg"
},
{
"image_sort": 4,
"image_type": "2",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/8a\/17244187050b5e99693e777fccef9f249f504e7ab8_square.jpg"
},
{
"image_sort": 5,
"image_type": "2",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/28\/1724418710d0a631ec9e3a7270bb5d0f178e109b3f_square.jpg"
},
{
"image_sort": 6,
"image_type": "2",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/dc\/172441871469a1461ebe850c407b5048152187ea0d_square.jpg"
},
{
"image_sort": 7,
"image_type": "6",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/3f\/17244188738174a75d3d17bc1d353ccd1d81df3d10.jpg"
}
]
},
"sale_attribute": {
"attribute_id": 27,
"attribute_value_id": 513
},
"sku_list": [
{
"height": "4",
"length": "14",
"mall_state": 1,
"sale_attribute_list": [
{
"attribute_id": 87,
"attribute_value_id": 474
}
],
"stock_info_list": [
{
"inventory_num": 0,
"supplier_warehouse_id": "PS8377568967"
}
],
"price_info_list": [
{
"base_price": 12.99,
"currency": "GBP",
"sub_site": "shein-uk"
}
],
"stop_purchase": 1,
"supplier_sku": "12MKC076-LIPSTICK-12_sh",
"weight": "150",
"width": "10",
"competing_product_link": "https://www.amazon.com/dp/TEST"
}
]
},
{
"image_info": {
"image_group_code": "G12xk1ubqxz9",
"image_info_list": [
{
"image_sort": 1,
"image_type": "1",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/52\/172441869098b8e5cfa7d8eb4642aaa5ab7574486d_square.jpg"
},
{
"image_sort": 2,
"image_type": "2",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/7f\/172441869573ff21642bcd5fc0e1789c55207b20fc_square.jpg"
},
{
"image_sort": 3,
"image_type": "2",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/01\/172441870053765d54473aeb391361720ddc3905b2_square.jpg"
},
{
"image_sort": 4,
"image_type": "2",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/8a\/17244187050b5e99693e777fccef9f249f504e7ab8_square.jpg"
},
{
"image_sort": 5,
"image_type": "2",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/28\/1724418710d0a631ec9e3a7270bb5d0f178e109b3f_square.jpg"
},
{
"image_sort": 6,
"image_type": "2",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/dc\/172441871469a1461ebe850c407b5048152187ea0d_square.jpg"
},
{
"image_sort": 7,
"image_type": "6",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/3f\/17244188738174a75d3d17bc1d353ccd1d81df3d10.jpg"
}
]
},
"sale_attribute": {
"attribute_id": 27,
"attribute_value_id": 112
},
"sku_list": [
{
"height": "4",
"length": "14",
"mall_state": 1,
"sale_attribute_list": [
{
"attribute_id": 87,
"attribute_value_id": 474
}
],
"sale_attribute_list": [
{
"attribute_id": 87,
"attribute_value_id": 474
}
],
"stock_info_list": [
{
"inventory_num": 0,
"supplier_warehouse_id": "PS8377568967"
}
],
"price_info_list": [
{
"base_price": 12.99,
"currency": "GBP",
"sub_site": "shein-uk"
}
],
"stop_purchase": 1,
"supplier_sku": "12MKC076-LIPSTICK-06_sh",
"weight": "150",
"width": "10",
"competing_product_link": "https://www.amazon.com/dp/TEST"
}
]
},
{
"image_info": {
"image_group_code": "G81rvr32tzct",
"image_info_list": [
{
"image_sort": 1,
"image_type": "1",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/52\/172441869098b8e5cfa7d8eb4642aaa5ab7574486d_square.jpg"
},
{
"image_sort": 2,
"image_type": "2",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/7f\/172441869573ff21642bcd5fc0e1789c55207b20fc_square.jpg"
},
{
"image_sort": 3,
"image_type": "2",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/01\/172441870053765d54473aeb391361720ddc3905b2_square.jpg"
},
{
"image_sort": 4,
"image_type": "2",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/8a\/17244187050b5e99693e777fccef9f249f504e7ab8_square.jpg"
},
{
"image_sort": 5,
"image_type": "2",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/28\/1724418710d0a631ec9e3a7270bb5d0f178e109b3f_square.jpg"
},
{
"image_sort": 6,
"image_type": "2",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/dc\/172441871469a1461ebe850c407b5048152187ea0d_square.jpg"
},
{
"image_sort": 7,
"image_type": "6",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/3f\/17244188738174a75d3d17bc1d353ccd1d81df3d10.jpg"
}
]
},
"sale_attribute": {
"attribute_id": 27,
"attribute_value_id": 2431
},
"sku_list": [
{
"height": "4",
"length": "14",
"mall_state": 1,
"sale_attribute_list": [
{
"attribute_id": 87,
"attribute_value_id": 474
}
],
"sale_attribute_list": [
{
"attribute_id": 87,
"attribute_value_id": 474
}
],
"stock_info_list": [
{
"inventory_num": 0,
"supplier_warehouse_id": "PS8377568967"
}
],
"price_info_list": [
{
"base_price": 12.99,
"currency": "GBP",
"sub_site": "shein-uk"
}
],
"stop_purchase": 1,
"supplier_sku": "12MKC076-LIPSTICK-05_sh",
"weight": "150",
"width": "10",
"competing_product_link": "https://www.amazon.com/dp/TEST"
}
]
},
{
"image_info": {
"image_group_code": "G72jy90s89w7",
"image_info_list": [
{
"image_sort": 1,
"image_type": "1",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/52\/172441869098b8e5cfa7d8eb4642aaa5ab7574486d_square.jpg"
},
{
"image_sort": 2,
"image_type": "2",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/7f\/172441869573ff21642bcd5fc0e1789c55207b20fc_square.jpg"
},
{
"image_sort": 3,
"image_type": "2",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/01\/172441870053765d54473aeb391361720ddc3905b2_square.jpg"
},
{
"image_sort": 4,
"image_type": "2",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/8a\/17244187050b5e99693e777fccef9f249f504e7ab8_square.jpg"
},
{
"image_sort": 5,
"image_type": "2",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/28\/1724418710d0a631ec9e3a7270bb5d0f178e109b3f_square.jpg"
},
{
"image_sort": 6,
"image_type": "2",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/dc\/172441871469a1461ebe850c407b5048152187ea0d_square.jpg"
},
{
"image_sort": 7,
"image_type": "6",
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/08\/23\/3f\/17244188738174a75d3d17bc1d353ccd1d81df3d10.jpg"
}
]
},
"sale_attribute": {
"attribute_id": 27,
"attribute_value_id": 334
},
"sku_list": [
{
"height": "4",
"length": "14",
"mall_state": 1,
"sale_attribute_list": [
{
"attribute_id": 87,
"attribute_value_id": 474
}
],
"sale_attribute_list": [
{
"attribute_id": 87,
"attribute_value_id": 474
}
],
"stock_info_list": [
{
"inventory_num": 0,
"supplier_warehouse_id": "PS8377568967"
}
],
"price_info_list": [
{
"base_price": 12.99,
"currency": "GBP",
"sub_site": "shein-uk"
}
],
"stop_purchase": 1,
"supplier_sku": "12MKC076-LIPSTICK-04_sh",
"weight": "150",
"width": "10",
"competing_product_link": "https://www.amazon.com/dp/TEST"
}
]
}
],
"source_system": "openapi",
"suit_flag": 0,
"supplier_code": "12MKC076_shv"
}
Example Request Body “Payload with same sale_attributes”. : Please pay attention to the “” which must be applied as per the example response!
{
"category_id": "2425",
"edit_type": 0,
"multi_language_name_list": [
{
"language": "pt-br",
"name": "kit 2 Moletons, Moletom Casal B\u00e1sico Homem Aranha"
}
],
"product_attribute_list": [
{
"attribute_id": 62,
"attribute_value_id": 212,
"attribute_extra_value":60
},
{
"attribute_id": 62,
"attribute_value_id": 210,
"attribute_extra_value":40
}
],
"product_type_id": 428,
"site_list": [
{
"main_site": "shein",
"sub_site_list": [
"shein-br"
]
}
],
"skc_list": [
{
"image_info": {
"image_info_list": [
{
"image_sort": 1,
"image_type": 1,
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/07\/17\/dc\/1721156966f94c6630c721c957444b1811d8d78356_square.png"
},
{
"image_sort": 2,
"image_type": 2,
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/07\/17\/8c\/1721156968bbf68cbf1011eed56bb95e55ba079dcd_square.png"
},
{
"image_sort": 3,
"image_type": 5,
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/07\/17\/84\/17211569712f87ba2c508b05412d1d13176e2fcdba.png"
}
]
},
"sale_attribute": {
"attribute_id": 27,
"attribute_value_id": 1000134
},
"sku_list": [
{
"height": 30,
"length": 12,
"width": 20,
"weight": 850,
"mall_state": 1,
"stop_purchase": 1,
"supplier_sku": "180709737564",
"sale_attribute_list": [
{
"attribute_id": 87,
"attribute_value_id": "1005895",
"language": "pt-br"
}
],
"cost_info": {
"cost_price": "159.00",
"currency": "BRL"
},
"price_info_list": [
{
"base_price": "159.00",
"currency": "BRL",
"sub_site": "shein-br"
}
],
"stock_info_list": [
{
"inventory_num": 10
}
]
},
{
"height": 30,
"length": 12,
"width": 20,
"weight": 850,
"mall_state": 1,
"stop_purchase": 1,
"supplier_sku": "KR180709737550",
"sale_attribute_list": [
{
"attribute_id": 87,
"attribute_value_id": "1452",
"language": "pt-br"
}
],
"cost_info": {
"cost_price": "159.00",
"currency": "BRL"
},
"price_info_list": [
{
"base_price": "159.00",
"currency": "BRL",
"sub_site": "shein-br"
}
],
"stock_info_list": [
{
"inventory_num": 10
}
]
},
{
"height": 30,
"length": 12,
"width": 20,
"weight": 850,
"mall_state": 1,
"stop_purchase": 1,
"supplier_sku": "180709737552",
"sale_attribute_list": [
{
"attribute_id": 87,
"attribute_value_id": "417",
"language": "pt-br"
}
],
"cost_info": {
"cost_price": "159.00",
"currency": "BRL"
},
"price_info_list": [
{
"base_price": "159.00",
"currency": "BRL",
"sub_site": "shein-br"
}
],
"stock_info_list": [
{
"inventory_num": 10
}
]
},
{
"height": 30,
"length": 12,
"width": 20,
"weight": 850,
"mall_state": 1,
"stop_purchase": 1,
"supplier_sku": "180709737554",
"sale_attribute_list": [
{
"attribute_id": 87,
"attribute_value_id": "1447",
"language": "pt-br"
}
],
"cost_info": {
"cost_price": "159.00",
"currency": "BRL"
},
"price_info_list": [
{
"base_price": "159.00",
"currency": "BRL",
"sub_site": "shein-br"
}
],
"stock_info_list": [
{
"inventory_num": 10
}
]
},
{
"height": 30,
"length": 12,
"width": 20,
"weight": 850,
"mall_state": 1,
"stop_purchase": 1,
"supplier_sku": "180709737556",
"sale_attribute_list": [
{
"attribute_id": 87,
"attribute_value_id": "1005893",
"language": "pt-br"
}
],
"cost_info": {
"cost_price": "159.00",
"currency": "BRL"
},
"price_info_list": [
{
"base_price": "159.00",
"currency": "BRL",
"sub_site": "shein-br"
}
],
"stock_info_list": [
{
"inventory_num": 10
}
]
},
{
"height": 30,
"length": 12,
"width": 20,
"weight": 850,
"mall_state": 1,
"stop_purchase": 1,
"supplier_sku": "180709737558",
"sale_attribute_list": [
{
"attribute_id": 87,
"attribute_value_id": "1007394",
"language": "pt-br"
}
],
"cost_info": {
"cost_price": "159.00",
"currency": "BRL"
},
"price_info_list": [
{
"base_price": "159.00",
"currency": "BRL",
"sub_site": "shein-br"
}
],
"stock_info_list": [
{
"inventory_num": 10
}
]
}
]
}
],
"suit_flag": 1,
"supplier_code": "KR4777486076"
}
{
"category_id": "2425",
"edit_type": 0,
"multi_language_name_list": [
{
"language": "pt-br",
"name": "kit 2 Moletons, Moletom Casal B\u00e1sico Homem Aranha"
}
],
"product_attribute_list": [
{
"attribute_id": 62,
"attribute_value_id": 212,
"attribute_extra_value":60
},
{
"attribute_id": 62,
"attribute_value_id": 210,
"attribute_extra_value":40
}
],
"product_type_id": 428,
"site_list": [
{
"main_site": "shein",
"sub_site_list": [
"shein-br"
]
}
],
"skc_list": [
{
"image_info": {
"image_info_list": [
{
"image_sort": 1,
"image_type": 1,
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/07\/17\/dc\/1721156966f94c6630c721c957444b1811d8d78356_square.png"
},
{
"image_sort": 2,
"image_type": 2,
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/07\/17\/8c\/1721156968bbf68cbf1011eed56bb95e55ba079dcd_square.png"
},
{
"image_sort": 3,
"image_type": 5,
"image_url": "https:\/\/img.ltwebstatic.com\/images3_spmp\/2024\/07\/17\/84\/17211569712f87ba2c508b05412d1d13176e2fcdba.png"
}
]
},
"sale_attribute": {
"attribute_id": 27,
"attribute_value_id": 1000134
},
"sku_list": [
{
"height": 30,
"length": 12,
"width": 20,
"weight": 850,
"mall_state": 1,
"stop_purchase": 1,
"supplier_sku": "180709737564",
"sale_attribute_list": [
{
"attribute_id": 87,
"attribute_value_id": "1005895",
"language": "pt-br"
}
],
"cost_info": {
"cost_price": "159.00",
"currency": "BRL"
},
"price_info_list": [
{
"base_price": "159.00",
"currency": "BRL",
"sub_site": "shein-br"
}
],
"stock_info_list": [
{
"inventory_num": 10
}
]
},
{
"height": 30,
"length": 12,
"width": 20,
"weight": 850,
"mall_state": 1,
"stop_purchase": 1,
"supplier_sku": "KR180709737550",
"sale_attribute_list": [
{
"attribute_id": 87,
"attribute_value_id": "1452",
"language": "pt-br"
}
],
"cost_info": {
"cost_price": "159.00",
"currency": "BRL"
},
"price_info_list": [
{
"base_price": "159.00",
"currency": "BRL",
"sub_site": "shein-br"
}
],
"stock_info_list": [
{
"inventory_num": 10
}
]
},
{
"height": 30,
"length": 12,
"width": 20,
"weight": 850,
"mall_state": 1,
"stop_purchase": 1,
"supplier_sku": "180709737552",
"sale_attribute_list": [
{
"attribute_id": 87,
"attribute_value_id": "417",
"language": "pt-br"
}
],
"cost_info": {
"cost_price": "159.00",
"currency": "BRL"
},
"price_info_list": [
{
"base_price": "159.00",
"currency": "BRL",
"sub_site": "shein-br"
}
],
"stock_info_list": [
{
"inventory_num": 10
}
]
},
{
"height": 30,
"length": 12,
"width": 20,
"weight": 850,
"mall_state": 1,
"stop_purchase": 1,
"supplier_sku": "180709737554",
"sale_attribute_list": [
{
"attribute_id": 87,
"attribute_value_id": "1447",
"language": "pt-br"
}
],
"cost_info": {
"cost_price": "159.00",
"currency": "BRL"
},
"price_info_list": [
{
"base_price": "159.00",
"currency": "BRL",
"sub_site": "shein-br"
}
],
"stock_info_list": [
{
"inventory_num": 10
}
]
},
{
"height": 30,
"length": 12,
"width": 20,
"weight": 850,
"mall_state": 1,
"stop_purchase": 1,
"supplier_sku": "180709737556",
"sale_attribute_list": [
{
"attribute_id": 87,
"attribute_value_id": "1005893",
"language": "pt-br"
}
],
"cost_info": {
"cost_price": "159.00",
"currency": "BRL"
},
"price_info_list": [
{
"base_price": "159.00",
"currency": "BRL",
"sub_site": "shein-br"
}
],
"stock_info_list": [
{
"inventory_num": 10
}
]
},
{
"height": 30,
"length": 12,
"width": 20,
"weight": 850,
"mall_state": 1,
"stop_purchase": 1,
"supplier_sku": "180709737558",
"sale_attribute_list": [
{
"attribute_id": 87,
"attribute_value_id": "1007394",
"language": "pt-br"
}
],
"cost_info": {
"cost_price": "159.00",
"currency": "BRL"
},
"price_info_list": [
{
"base_price": "159.00",
"currency": "BRL",
"sub_site": "shein-br"
}
],
"stock_info_list": [
{
"inventory_num": 10
}
]
}
]
}
],
"suit_flag": 1,
"supplier_code": "KR4777486076"
}
The mapping remains the same only the payload body is changed
</v1.6>
Request Mapping :
Shein Field | Required | Hemi Field | Comment | |||
---|---|---|---|---|---|---|
brand_code |
Yes | Product Account > Item Specific |
OR
Product Brand
| Product account is with priority we want to match the name and send the code.
We want to have internal validation if this is missing! |
| category_id
| | | | Yes | Product Account
> Primary Category ID
| We want to have internal validation if this is missing! |
| edit_type
| | | | Yes | Hardcoded as “0” | We should pick products only with Product Status
= Images Uploaded because when we are sending 0 as edit_type
this means that we are creating a new product |
| multi_language_desc_list
| | | | | | |
| | language
| | | Yes | Account Shein
> Country
| Shein support multi language descriptions so we need to have a logic and based on the account territory we need to send the iso2 country code. For example “en”.
Full mapping list here |
| | name
| | | Yes | Product Account
> Description
| We want to have internal validation if this is missing or more than 5000 characters |
| multi_language_name_list
| | | | | | |
| | language
| | | Yes | | Shein support multi language descriptions so we need to have a logic and based on the account territory we need to send the iso2 country code. For example “en”.
Full mapping list here |
| | name
| | | Yes | Product Account
> Title
| We want to have internal validation if this is missing or more than 1000 characters |
| product_attribute_list
| | | | | | |
| | attribute_id
| | | No | <v1.2>Product Account
> Item Specific Name
| part of Taxonomy
Based on the validation and mapping we need to push the actual ID |
| | attribute_value_id
| | | No | Product Account
> Item Specific Value
| part of Taxonomy
Based on the validation and mapping we need to push the actual ID</v1.2> |
| | <v1.6>attribute_extra_value
| | | No | Product Account
> Item Specific Value
| We want to include this node only when we are sending attributes Material or Composition because we must specify the percentage of each material.
We want to set a default case when if we have only one material or composition added to send 100 but if we have more than one we need to properly specify the percentage for each one until we have 100%
In Hemi we will expect the values as follows: Material- Cotton[20],Wool[80] or Material - Cotton
<v1.8>
In order support Material- Cotton[20],Wool[80] multi value material or composition we want to validate the attribute against the attribute_mode and if we have attribute_mode = 1 only then to allow multiple selections
</v1.8>
</v1.6> |
| | attribute_extra_value
| | | No | N/A | |
| product_type_id
| | | | Yes | | Each category_id has a product_type_id that we need to send that corresponds to the selected category and we can do this via the Taxonomy. |
| site_list
| | | | | | |
| | main_site
| | | Yes | ‘shein’ | Hardcoded as ‘shein’ |
| | sub_site_list
| | | Yes | Account Shein > Country | We need to send the shein country code. See Shein Authorization and Limits for info on country codes. |
| skc_list
| | | | Yes | | |
| | image_info
| | | Yes | | |
| | | image_group_code
| | No | N/A | |
| | | image_info_list
| | Yes | | |
| | | | image_sort
| Yes | | The image sort. We need to make sure we are not sending duplicates so we can create a logic that will push every other image with next number. For example 1, 2, 3 etc |
| | | | image_type
| Yes | Shein Images
> Image type
| |
| | | | image_url
| Yes | Shein Images
> Shein Url
| |
| | sale_attribute
| | | Yes | | |
| | | attribute_id
| | Yes | Product Account
> Variation Specific Name
| We need to pick the variation specific but send the ID based on the taxonomy.
<v1.2>We also want to incorporate additional check and we when we have a case of more than one variation specific added for a variation group we need to validate them and the one which is with "attribute_label": 1 in the taxonomy to be included as sale_attribute
</v1.2>
<v1.7>
Another check we want to perfor is we can have a category where we have multiple attributes with "attribute_label": 1 but in Shein we can add just one as sale_attribute
so we want to validate to have at least one attribute with "attribute_label": 1 added as Variation Specific and if we have more than one Variation Specifics added with “attribute_label": 1 to pick the first one as sale_attribute
and all other to be pushed as sale_attribute_list
.
So 3 we gonna have 3 cases:
1
We check to have at least one attribute with label = 1 added as Variation Specific and do not require to have all other label = 1 attributes added on the listing.
2
We check if we have at least one attribute with label = 1 added as Variation Specific and allow the rest of the attribute with label = 1 to be added as Item Specifics
3
We have more than one Variation Specific added with label = 1 so we pick the first one as sale_attribute
and the rest we send as sale_attribute_list
<v/1.7> |
| | | attribute_value_id
| | Yes | Product Account
> Variation Specific Value
| We need to pick the value but send the ID based on the taxonomy.
<v1.2>We also want to incorporate additional check and we when we have a case of more than one variation specific added for a variation group we need to validate them and the one which is with "attribute_label": 1 in the taxonomy to be included as sale_attribute
</v1.2><v1.7>
Another check we want to perfor is we can have a category where we have multiple attributes with "attribute_label": 1 but in Shein we can add just one as sale_attribute
so we want to validate to have at least one attribute with "attribute_label": 1 added as Variation Specific and if we have more than one Variation Specifics added with “attribute_label": 1 to pick the first one as sale_attribute
and all other to be pushed as sale_attribute_list
.
So 3 we gonna have 3 cases:
1
We check to have at least one attribute with label = 1 added as Variation Specific and do not require to have all other label = 1 attributes added on the listing.
2
We check if we have at least one attribute with label = 1 added as Variation Specific and allow the rest of the attribute with label = 1 to be added as Item Specifics
3
We have more than one Variation Specific added with label = 1 so we pick the first one as sale_attribute
and the rest we send as sale_attribute_list
<v/1.7> |
| | sku_list
| | | Yes | | |
| | | height
| | No | Product > Height(cm)
| Height - in centimeters |
| | | length
| | No | Product > Length(cm)
| Length - in centimeters |
| | | width
| | No | Product > Width(cm)
| Width - in centimeters |
| | | weight
| | Yes | Product > Weight(g)
| Weight - in grams
We want to have internal validation if this is missing! |
| | | mall_state
| | Yes | Product Account Shein
> Mall State
| New field in table.
Needs to have two options = On Sale and Out of sale.
If on sale we need to send mall_state
= 1
If out of sale we need to send mall_state
= 2
Default option should be On sale |
| | | sale_attribute_list
| | | | |
| | | | attribute_id
| No | Product Account
> Variation Specific Name
| We need to pick the variation specific but send the ID based on the taxonomy.
<v1.2>We also want to incorporate additional check and we when we have a case of more than one variation specific added for a variation group we need to validate them and the one which is with "attribute_label": 0 in the taxonomy to be included as sale_attribute_list
</v1.2> |
| | | | attribute_value_id
| No | Product Account
> Variation Specific Value
| We need to pick the value but send the ID based on the taxonomy.
<v1.2>We also want to incorporate additional check and we when we have a case of more than one variation specific added for a variation group we need to validate them and the one which is with "attribute_label": 0 in the taxonomy to be included as sale_attribute_list
</v1.2> |
| | | stop_purchase
| | Yes | | Hardcoded as “1” |
| | | supplier_sku
| | Yes | Product
> SKU
| |
| | | stock_info_list
| | | | |
| | | | inventory_num
| Yes | Product Account > Quantity
| |
| | | | supplier_warehouse_id
| Yes | Account Shein > Shein location
| If a location is not mapped we want to return internal error |
| | | price_info_list
| | | | |
| | | | base_price
| Yes | Product Account > Price OR Product Account > RRP
| If RRP > Price we want to pick the RRP |
| | | | currency
| Yes | Account > Exchange Rate Calculator Currency
| |
| | | | special_price
| Yes | Product Account > Price
| If RRP > Price we want to push this in the payload |
| | | | sub_site
| Yes | Account Shein > Country
| We need to send the shein country code. See Shein Authorization and Limits for info on country codes. |
| suit_flag
| | | | Yes | Product Account Shein
> Suit Flag
| New field.
Indicates if the product is a set or not. We should have two options 1: Yes 0: No . A set is buying an item that may include tops and bottom for example swimsuit.
Default option should be No on this field. |
| supplier_code
| | | | Yes | <v1.3>Product Account > Variation Group
</v1.3> | |
Example success response :
{
"code": "0",
"msg": "OK",
"info": {
"success": true,
"spu_name": "z24080989888",
"skc_list": [
{
"skc_name": "sz2408098988881576",
"sku_list": [
{
"sku_code": "I725t0bki4n5",
"supplier_sku": "sku22"
}
]
}
],
"version": "SPMP240809054953987",
"pre_valid_result": null,
"mcc_valid_result": null,
"extra": {}
},
"bbl": null
}
Example error response :
{
"code": "0",
"msg": "OK",
"info": {
"success": false,
"spu_name": null,
"skc_list": null,
"version": null,
"pre_valid_result": [
{
"module": "basic_info",
"form": "category",
"messages": [
"Current shop of the product category is not available."
]
},
{
"module": "basic_info",
"form": "chinese_name",
"messages": [
"Item title cannot be empty"
]
},
{
"module": "basic_info",
"form": "brand_code",
"messages": [
"Current shop of the brand is not authorized."
]
},
{
"module": "specification_info",
"form": "other_specification",
"messages": [
"Sub sale attribute cannot exceed 2."
]
},
{
"module": "specification_info",
"form": "supplier_info",
"messages": [
"仓库ID未填写(sku: Green/棉布网眼刺绣/30 sku: Blue/24/棉布网眼刺绣 sku: Red/26/棉布网眼刺绣/棉布网眼刺绣)"
]
},
{
"module": "sales_info",
"form": "publish_site",
"messages": [
"Launch site cannot be empty."
]
}
],
"mcc_valid_result": null
},
"bbl": null
}
Response mapping :
Shein Field | Hemi Field | Comment | |||
---|---|---|---|---|---|
code |
N/A | ||||
msg |
N/A | ||||
info |
N/A | ||||
success |
N/A | ||||
spu_name |
Product Account Shein > SPU |
||||
skc_list |
If we are sending a variation the skc will be the same for the whole variation but we still need to store it individually per every product | ||||
skc_name |
Product Account Shein > SKC |
||||
sku_list |
|||||
sku_code |
Product Account > Channel Item ID |
||||
supplier_sku |
N/A | This should be the SKU in Hemi if we need to map anything | |||
version |
N/A | ||||
pre_valid_result |
N/A | ||||
module |
N/A | ||||
form |
N/A | ||||
messages |
Product Account > Update Item Error |
||||
mcc_valid_result |
N/A | ||||
bbl |
N/A |
After successfully creating a product we want to update the statuses accordingly and any errors we want to store as per the abstraction Product Listing general requirements.