v2.discount.update_discount_item
POST/api/v2/discount/update_discount_itemVia 360: POST https://partner.quantri360.com/v1/shopee/api/v2/discount/update_discount_item
Write endpoint — changes data on Shopee. The key must be created with "Allow write API calls" ticked, otherwise you get 403 write_not_allowed. Every call is logged.
Description
Sửa giá và giới hạn mua của sản phẩm trong chương trình giảm giá.
- Gọi qua /v1/shopee/api/v2/discount/update_discount_item với Authorization: Bearer <key>; dùng platform_shop_id khi có nhiều shop. 360 tự gắn partner_id, shop_id, sign và access_token.
- API GHI: thay đổi dữ liệu thật trên Shopee; cần key có quyền ghi (can_write) và gói mở module Khuyến mãi. Thay đổi cấu hình ưu đãi hoặc giá khuyến mãi người mua thấy.
- HTTP 200 vẫn có thể có lỗi nghiệp vụ; kiểm error trước khi dùng kết quả. Kiểm từng phần tử trong danh sách kết quả, gồm mã lỗi và thông báo của phần tử.
- Đọc trạng thái hiện tại bằng get_discount trước khi gọi.
- Không sửa / xóa chương trình đã kết thúc; các sản phẩm phải có trạng thái hợp lệ và không thuộc ngành bị cấm khuyến mãi.
- Tối đa 50 sản phẩm mỗi lần; một chương trình tối đa 1000 sản phẩm (15000 khi được cấp riêng) và 50000 phân loại. Giá khuyến mãi không cao hơn giá gốc, phải trong khoảng giá thị trường; tại VN mức giảm không quá 50%. Tồn khuyến mãi phải nhỏ hơn tồn hiện tại và lớn hơn số lượng mua tối thiểu được trả trong message.
Request
Endpoint
POST https://partner.quantri360.com/v1/shopee/api/v2/discount/update_discount_item
Authentication & shop
| Name | In | Type | Sample | Description |
|---|---|---|---|---|
| Authorization | header | header | Bearer q360_live_ab12cd34_… | Khóa API của brand (tạo ở mục API key). Bắt buộc với mọi request. Brand suy từ key — không truyền mã brand. |
| platform_shop_id | query | string | 100001 | Gian hàng (lấy ở GET /v1/platforms → shops[].platform_shop_id). BẮT BUỘC khi brand có > 1 gian hàng trên nền tảng; 360 bỏ tham số này trước khi chuyển tiếp. |
Request parameters
| Name | In | Type | Required | Sample | Description |
|---|---|---|---|---|---|
| discount_id | body | int64 | Yes | 100001 | Mã chương trình giảm giá. |
| item_list | body | object[] | Yes | [{"item_id":100011,"item_promotion_price":45000,"model_list":[{"model_id":100012,"model_promotion_price":45000}],"purchase_limit":1}] | Danh sách sản phẩm cần sửa; tối đa 50 sản phẩm mỗi lần. |
| item_list[].item_id | body | int64 | Yes | 100011 | Mã sản phẩm. |
| item_list[].item_promotion_price | body | float | No | 45000 | Giá khuyến mãi của sản phẩm. |
| item_list[].model_list | body | object[] | No | [{"model_id":100012,"model_promotion_price":45000}] | Danh sách phân loại thuộc sản phẩm. |
| item_list[].model_list[].model_id | body | int64 | Yes | 100012 | Mã phân loại sản phẩm; không có phân loại thì có thể bỏ, mặc định 0. |
| item_list[].model_list[].model_promotion_price | body | float | Yes | 45000 | Giá khuyến mãi của phân loại. |
| item_list[].purchase_limit | body | int32 | No | 1 | Số lượng tối đa người mua được mua trong chương trình. |
Request examples
curl -s -X POST "https://partner.quantri360.com/v1/shopee/api/v2/discount/update_discount_item" \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{"discount_id":100001,"item_list":[{"item_id":100011,"purchase_limit":1,"model_list":[{"model_id":100012,"model_promotion_price":45000}]}]}'
Python
import requests
KEY = "q360_live_..." # khóa API của brand
r = requests.post(
"https://partner.quantri360.com/v1/shopee/api/v2/discount/update_discount_item",
params={},
json={
"discount_id": 100001,
"item_list": [
{
"item_id": 100011,
"purchase_limit": 1,
"model_list": [
{
"model_id": 100012,
"model_promotion_price": 45000
}
]
}
]
},
headers={"Authorization": f"Bearer {KEY}"},
timeout=60,
)
print(r.status_code)
print(r.json())Node.js
const KEY = 'q360_live_...'; // khóa API của brand
const url = new URL('https://partner.quantri360.com/v1/shopee/api/v2/discount/update_discount_item');
for (const [k, v] of Object.entries({})) url.searchParams.set(k, typeof v === 'object' ? JSON.stringify(v) : String(v));
const r = await fetch(url, {
method: 'POST',
headers: { Authorization: `Bearer ${KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({"discount_id":100001,"item_list":[{"item_id":100011,"purchase_limit":1,"model_list":[{"model_id":100012,"model_promotion_price":45000}]}]}),
});
console.log(r.status, await r.json());PHP
<?php
$key = 'q360_live_...'; // khóa API của brand
$url = 'https://partner.quantri360.com/v1/shopee/api/v2/discount/update_discount_item' . '?' . http_build_query([]);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer ' . $key, 'Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"discount_id":100001,"item_list":[{"item_id":100011,"purchase_limit":1,"model_list":[{"model_id":100012,"model_promotion_price":45000}]}]}');
$res = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status, "\n", $res;Response
Response fields (as returned by Shopee)
Phản hồi minh họa thành công; đọc error/message trước khi dùng kết quả.
| Name | Type | Sample | Description |
|---|---|---|---|
| request_id | string | d52ca43b277a4f9292fb8be658bfd33d | Mã request của Shopee để tra lỗi. |
| error | string | Mã lỗi Shopee; rỗng = thành công. | |
| message | string | Mô tả lỗi. | |
| warning | string | Cảnh báo cần kiểm tra. | |
| response | object | Kết quả xử lý. | |
| discount_id | int64 | 100001 | Mã chương trình giảm giá. |
| count | int32 | 1 | Số sản phẩm xử lý thành công. |
| error_list | object[] | Danh sách sản phẩm / phân loại gặp lỗi. | |
| item_id | int64 | 100011 | Mã sản phẩm. |
| model_id | int64 | 100012 | Mã phân loại sản phẩm; không có phân loại thì có thể bỏ, mặc định 0. |
| fail_message | string | Chi tiết lỗi của phần tử; rỗng khi thành công. | |
| fail_error | string | Mã lỗi của phần tử; rỗng khi thành công. |
Response sample
{
"request_id": "demo-request",
"error": "",
"message": "",
"warning": "",
"response": {
"discount_id": 100001,
"count": 1,
"error_list": []
}
}
Shopee error codes (41)
Show
| Code | Meaning |
|---|---|
| discount.error_assigned_promo_stock | Không sửa tồn dành riêng của sản phẩm đã thêm hoặc đã tắt. |
| discount.error_item_abnormal | Sản phẩm bất thường. |
| discount.item_status_abnormal | Trạng thái sản phẩm bất thường. |
| discount.error_item_under_block_categories | Ngành hàng bị cấm khuyến mãi theo quy định thị trường. |
| discount.fail_model_price_check | Chênh lệch giá cao nhất và thấp nhất của sản phẩm quá lớn. |
| discount.get_model_orgin_price_error | Không lấy được giá gốc phân loại; thử lại. |
| discount.discount_is_end | Không sửa hoặc xóa chương trình đã kết thúc. |
| discount.error_b2c_item_not_allowed | Sản phẩm B2C không được khuyến mãi trong gian hàng FBS. |
| discount.item_in_promotion_too_many | Tối đa 1000 sản phẩm mỗi chương trình. |
| discount.item_in_promotion_too_many_whitelist | Tối đa 15000 sản phẩm mỗi chương trình khi được cấp riêng. |
| discount.item_purchase_limit_error | Giới hạn mua phải lớn hơn ngưỡng trong message. |
| discount.item_need_model_id | Sản phẩm có phân loại phải gửi model_id. |
| discount.item_not_in_promotion | Không tìm thấy sản phẩm trong chương trình. |
| discount.item_status_invalid | Trạng thái sản phẩm không hợp lệ. |
| discount.item_id_not_exist | Không tìm thấy item_id. |
| discount.item_id_repeated | item_id bị trùng. |
| discount.model_in_promotion_too_many | Tối đa 50000 phân loại mỗi chương trình. |
| discount.model_not_in_promotion | Phân loại không thuộc chương trình này. |
| discount.model_id_not_exist | Không tìm thấy model_id. |
| discount.model_id_repeated | model_id bị trùng. |
| discount.promotion_price_for_vn | Mức giảm tại VN vượt 50% giá gốc. |
| discount.promotoin_price_too_high | Giá khuyến mãi vượt mức tối đa của thị trường. |
| discount.promotion_price_too_low | Giá khuyến mãi thấp hơn mức tối thiểu của thị trường. |
| discount.item_exceed_discount_limit | Sản phẩm đã đạt giới hạn tham gia khuyến mãi. |
| discount.error_update_admin_discount | Không sửa chương trình do quản trị tạo. |
| discount.error_update_streaming_discount | Không sửa chương trình tạo từ phát trực tiếp. |
| discount.exceed_discount_item_batch_size | Mỗi lần chỉ thêm tối đa 50 sản phẩm. |
| error_data | Dữ liệu không tồn tại hoặc không hợp lệ cho thao tác (vd mã không có, loại yêu cầu không cho phép). |
| error_param | Tham số sai / thiếu / sai kiểu — xem `message` để biết tham số nào. |
| common.error_not_found | Không tìm thấy thông tin. |
| error_server | Lỗi hệ thống Shopee — thử lại sau ít phút. |
| common.error_server | Lỗi hệ thống Shopee — thử lại sau. |
| error_shop | Gian hàng không hợp lệ — kiểm tra platform_shop_id. |
| common.error_shop | Gian hàng không hợp lệ — kiểm tra platform_shop_id. |
| discount.discount_need_promotion_price | Thiếu giá khuyến mãi. |
| discount.promotion_price_higher_input_price | Giá khuyến mãi cao hơn giá gốc. |
| error_auth | Ủy quyền gian hàng cho 360 đã hết hạn hoặc bị thu hồi (360 đã tự làm mới token một lần) — chủ gian hàng kết nối lại Shopee trong Partner. |
| error_limit | Chạm hạn mức gọi Shopee trong ngày của kết nối — 360 trả kèm thời điểm thử lại; giảm tần suất gọi. |
| error_rate_limit | Gọi quá nhanh — chờ vài giây rồi gọi lại (360 cũng giới hạn theo key: 429 + Retry-After). |
| shop_banned | Gian hàng đang bị Shopee khóa — mọi API tạm ngưng tới khi gỡ khóa. |
| error_kyc_auth | Gian hàng chưa hoàn tất đăng ký người bán trên Kênh Người Bán. |
Get started
- Sign up for Partner
- Enable a data type of the Khuyến mãi (Marketing) group on the platform page
- Create an API key (tick the Shopee channel)
- Call it as in the examples above