Marketplaces / Shein / Shein Order Management / Shein Ship Orders

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
Is this article helpful?
0 0 0