Temu Price Update
Version | Date | Created / Updated | Notes |
---|---|---|---|
v1.0 | 29.01.2024 | Bogomil | First publish |
The price update is used to edit the price information of specified products. By providing the product ID and the new price, merchants can update the product price ensuring the accuracy and timeliness of stock information.
All triggers, validations etc are as per abstraction - Price Update General requirements
Update Price
Please note all price updates are happening via Temu’s own IDs.
First they are always grouped per goodsId
(or in other words per variation since one variation group in Hemi will have the same goodsId
on each item). And then price per product are provided by the skuId
which is Temu’s own single product ID
After examination of docs and examples it seems we can send only one goodsId
at a time so that’s how we will start. We want to select only the changed SKUs within a variation as well so essentially we want to select all pending changes, group by goodsId and then fire away 1 by 1
Please note - there is an option we are missing an example or something that we can send multiple objects in an array. In any such case we will change up the structure but the logic for selection will remain
Also with the update price we can update only the Base Price on Temu and we are not able to change the RRP.
API Call : POST https://openapi-b-eu.temu.com/openapi/router
API Name: bg.local.goods.priceorder.change.sku.price
Please don’t forget that the call itself is to be used based on the value of Channel > Country
as described here: ‼ Please note that the above is true for all calls. In each call we will give the endpoint with an example host but we need to use the correct domain pointer based on the Channel > Country
value ‼
Find a request sample with params below :
{
"type": "bg.local.goods.priceorder.change.sku.price",
"timestamp": timestamp,
"app_key": "app_key",
"data_type": "JSON",
"access_token": "access_token"
}
Sample Body
[
{
"goodsId": "604269868588112",
"changeSkuPriceDTOList": [
{
"skuChangePriceBaseDTOList": [
{
"newSupplierPrice": {
"amount": "1",
"currency": "EUR"
},
"skuId": "58224724203874"
},
{
"newSupplierPrice": {
"amount": "10",
"currency": "EUR"
},
"skuId": "58224724203875"
}
]
}
]
}
]
Request mapping :
Temu Field | Hemi Field | Required | Comment | |||
---|---|---|---|---|---|---|
goodsId |
Product Account > Channel Item Id | Yes | ||||
changeSkuPriceDTOList |
||||||
skuChangePriceBaseDTOList |
||||||
newSupplierPrice |
||||||
amount |
Product Account > Price | Yes | ||||
currency |
Product Account > Currency |
OR
Account > Exchange Rate Calculator Currency | Yes | Product Account is with priority |
| | | skuId
| | Product Account Temu > SKU Id | Yes | New Field which should be available for import |
Example success response 200:
{
"result": {
"failedSkuReasonMap": {},
"failedSkuList": [],
"successSkuList": [
62897648567566
]
},
"success": true,
"requestId": "eu-d8e3f165-f364-45e9-918a-0f4e59355a39",
"errorCode": 1000000,
"errorMsg": ""
}
Example success response 200:
{
"result": {
"failedSkuReasonMap": {
"62897648567566": "Skc/Sku supply price has not changed"
},
"failedSkuList": [
62897648567566
],
"successSkuList": []
},
"success": true,
"requestId": "eu-e45fb644-eb20-4e03-af47-44afda01de0a",
"errorCode": 1000000,
"errorMsg": ""
}
We want to treat this as success as well because it means the price on the product is the same!
Example error response 200:
{
"result": {
"failedSkuReasonMap": {
"55441585353697": "Sku has unfinished price order"
},
"failedSkuList": [
55441585353697
],
"successSkuList": []
},
"success": true,
"requestId": "eu-c3d26da0-603e-46fc-aa64-19336909d9c5",
"errorCode": 1000000,
"errorMsg": ""
}
This error indicates that the price change is send to Temu but they have not processed it yet, so we want to return an error with Product Account > Update Price Error
= “”
"SKU has a pending price update that has not been processed yet. Please wait until the update is completed before proceeding.”
Example error response 200:
{
"success": false,
"requestId": "eu-ce84d1d3-d1e3-4756-8b56-55495a935cb7",
"errorCode": 4000000,
"errorMsg": "Temu internal system error, please try again later."
}
Example error response 200:
{
"success": false,
"requestId": "eu-fa06ca81-b1b8-44bd-bbf5-783322c28a78",
"errorCode": 150010188,
"errorMsg": "The mall and goods not match."
}
Example partial error error response 200:
{
"result": {
"failedSkuReasonMap": {
"53998476360382": "Skc/Sku supply price has not changed",
"55613384045069": "Skc/Sku supply price has not changed"
},
"failedSkuList": [
55613384045069,
53998476360382
],
"successSkuList": [
67398774303169
]
},
"success": true,
"requestId": "eu-b20a5912-b34c-4d70-ac3a-b879bc46a8e3",
"errorCode": 1000000,
"errorMsg": ""
}
Example error response 200:
{
"result": {
"failedSkuReasonMap": {
"68429566448399": "Sku has unfinished price order",
"65268470569097": "Sku has unfinished price order",
"56291988916091": "Sku has unfinished price order"
},
"failedSkuList": [
68429566448399,
56291988916091,
65268470569097
],
"successSkuList": []
},
"success": true,
"requestId": "eu-df6d7ce4-2f3f-41b0-81b7-12e3e318b2f7",
"errorCode": 1000000,
"errorMsg": ""
}
In all other cases we will treat the update as error and in Product Account > Update Price Error
we want to store both the errorCode
and errorMsg
because in some cases we may not have errorMsg