Shein Ship Orders
Version | Date | Created / Updated | Notes |
---|---|---|---|
v1.0 | 11.05.2024 | Bogomil Pavlov | First publish |
v1.1 | 10.06.2024 | Bogomil Pavlov | Mapping changes |
v1.2 | 20.08.2024 | Bogomil Pavlov | Mapping changes |
v1.3 | 17.01.2025 | Hristiyan | Dispatched logic added |
v1.4 | 10.07.2025 | Bogomil | Get Carriers for multiple countries |
All validations, triggers and standardizations which are not mentioned here are as per : Order management general requirements Order General Shipment
Shein DO support partial shipping so we want to incorporate this as well. Also they have a list with carriers which we can obtain via API.
Get Carrier List
Please note the carriers are per country so we want to incorporate a prefix when displaying the value in the UI. <v1.4> When we have multiple Shein channels from different countries we want to make sure we store all carriers and do not overwrite them </v1.4>
API Call: POST /open-api/order/express-channel API Docs: https://open.sheincorp.com/documents/apidoc/detail/3000241-2000001 Body: {{no body required}}
Sample Response:
{
"code": "0",
"msg": "OK",
"info": {
"expressChannels": [
{
"site": "shein-fr",
"expressIdCode": "AAAAA SASAS",
"expressChannelCode": "SHeMXZFH-MEX-SS-PC-B-B1-AM"
},
{
"site": "shein-fr",
"expressIdCode": "Amazon Logistic",
"expressChannelCode": "SHeMXZFH-MEX-SS-PC-B-B1-AMZ"
},
{
"site": "shein-fr",
"expressIdCode": "HDCL",
"expressChannelCode": "SHeMXZFH-MEX-SS-PC-B-B1-"
},
{
"site": "shein-fr",
"expressIdCode": "HJAHHAH DHJAHJDAH",
"expressChannelCode": "SHeMXZFH-MEX-SS-PC-B-BZ"
}
]
},
"bbl": {}
}
Response Mapping:
Shein Field | Hemi Field | Comment | |||
---|---|---|---|---|---|
code | N/A | ||||
msg | |||||
info | N/A | ||||
expressChannels | |||||
site | Added as a prefix of the expressIdCode | ||||
e.g “FR - expressIdCode” which we want to display in the dropdown list. | |||||
expressIdCode | <v1.2>Shien Courier Mapping > Shein Courier | We want to push to shein the expressIdCode | |||
expressChannelCode | We want to store the code in the back end</v1.2> | ||||
bbl | N/A |
To ship an order, the order must be with Orders > Status “Ready for shipping“ or “Partially Shipped”
We want to introduce Courier mapping. Thus we need to create a dependant table under Courier called “Shein Courier Mapping”. In this table we need to have a dropdown field with all the carriers.
field name | notes |
---|---|
Shein Courier | This should be a drop-down menu with the carriers mentioned in the carrier list |
Have all this structure the mapping will works based on:
If Order Shipment > Carrier
match Courier > Name
we send the selected courier from Shien Courier Mapping > Shein Courier
We also would like to introduce a default case in Account Shein called “Default Carrier” where again the same list with carriers to be able to select one specific carrier.
This way the logic will be first we are checking if there is any mapping set in Shein Courier Mapping and if we match any of the couriers we push the mapped value If not We are checking if there is default carrier set in Account Shein which we will be using If not we want to return an error in Order Error table.
Ship Orders
API Call: POST /open-api/order/import-batch-multiple-express API Docs: https://open.sheincorp.com/documents/apidoc/detail/3000190-2000001 Body:
{
"orderNo": "GSON7W18T000009",
"infoList": [
{
"expressCode": 423423234,
"expressIdCode": "UPS",
"goodsId": 3000000000019227,
"status": 2
}
]
}
Request Parameters (Request Body)
Parameter Name | Data Type | Required | Hemi Field | Description |
---|---|---|---|---|
orderNo | string | Yes | Orders > Marketplace Order Id | order number |
infoList | object[] | Yes | Waybill Information(size 1~100) | |
expressCode | string | Yes | <v1.2>Order Shipment > Tracking Number</v1.2> | |
expressIdCode | string | Yes | <v1.2>Order Shipment > Courier | Carrier Name - Obtained from the Courier Mapping</v1.2> |
goodsId | bigint | Yes | <v1.1> Order Item Line > Marketplace Order Item ID</v1.1> | Product ID |
status | integer | Yes | Hardcoded as “2” | Whether to delete the waybill information, 1: delete the waybill number of the product ID of the order, 2: update the waybill number of the product ID of the order |
Sample request:
POST https://openapi.sheincorp.com/**open-api/order/import-batch-multiple-express**
Body:
{
"orderNo": "GSON7W18T000009",
"infoList": [
{
"expressCode": 423423234,
"expressIdCode": "UPS",
"goodsId": 3000000000019227,
"status": 2
}
]
}
Sample Response: **200OK
Partial Success**
If the interface request succeeds but partly fails, the failed waybill will be returned on info, response code = 0
{
"Code": 0,
"Msg": "",
"Info": [
{"goodsId": xxx, "expressCode": "xxxx", "expressIdCode": "DHL ecommerce", "errorMsg": "xxxxxx", "status": 2}
]
}
If we have a partially shipped order because some of the products return error in order to handle this correctly we want to use our Order Shipment Row > Successfully shipped lines which hold the successfully shipped quantity and based on this field we will know if the whole order is shipped or we have a partial shipment so we will know what Order > Status we have to assign for the order. In such cases the whole shipment is treated as Order Shipment > Status = “Completed” only in cases where we receive all order items with errorMesg we want to set the Order Shipment > Status = “Error” and do not mark the order as “Shipped” or “Partially Shipped”
<v1.3> Once we have successfully shipped an order (fully or partially) the status should remain either Shipped or Partially shipped. We should not change the status back to Ready for Shipping, regardless of what Shein order status we have received</v1.3>
Success
If the interface request succeeds without any failure, no waybill information will be returned, info will be empty, response code = 0
{
"Code": 0,
"Msg": "",
"Info": [
]
}
Error if request error (eg.api request limit), response code! = 0, info will be a object
{
"Code": 99999,
"Msg": "api request limit 10/s",
"Info": {}
}
Response Mapping:
Parameter Name | Data Type | Required | Hemi Field | Description | |
---|---|---|---|---|---|
Code | |||||
Msg | Order Error > Error | We will receive either this error or errorMsg so we want to store to one available | |||
Info | |||||
goodsId | bigint | Yes | This is our Order Item Line > Marketplace Order Item ID so we will used it for mapping purposes | ||
expressCode | string | Yes | N/A | ||
errorMsg | string | Yes | Order Error > Message | We will receive either this error or Msg so we want to store to one available | |
status | integer | Yes | N/A | Whether to delete the waybill information, 1: delete the waybill number of the product ID of the order, 2: update the waybill number of the product ID of the order |