tiktok.product.202604.opportunities.opportunity_id.submit
POST/product/202604/opportunities/{opportunity_id}/submitVia 360: POST https://partner.quantri360.com/v1/tiktok/product/202604/opportunities/{opportunity_id}/submit
Write endpoint — changes data on TikTok Shop. The key must be created with "Allow write API calls" ticked, otherwise you get 403 write_not_allowed. Every call is logged.
Description
Gửi sản phẩm ACTIVATE thuộc gian hàng đã ủy quyền để tham gia một cơ hội bán hàng; sản phẩm được liên kết với cơ hội và đưa vào quy trình xét duyệt.
- Gọi qua /v1/tiktok/product/202604/opportunities/{opportunity_id}/submit với Authorization: Bearer <key>; dùng platform_shop_id khi có nhiều shop. 360 tự gắn app_key, shop_cipher, sign và access_token.
- API GHI: thay đổi dữ liệu thật trên TikTok Shop; cần key có quyền ghi (can_write) và gói mở module products. Tạo hồ sơ gửi sản phẩm tham gia cơ hội bán hàng.
- HTTP 200 vẫn có thể có lỗi nghiệp vụ; kiểm code trước khi dùng kết quả.
- Sản phẩm AS_DRAFT chưa đủ điều kiện. Với sản phẩm toàn cầu chưa chuyển sang sao chép địa phương, phải đăng thành sản phẩm địa phương, chọn mã của gian hàng đã ủy quyền và chờ ACTIVATE rồi mới gửi. Theo dõi kết quả qua danh sách submissions với opportunity_id hoặc product_id.
Request
Endpoint
POST https://partner.quantri360.com/v1/tiktok/product/202604/opportunities/{opportunity_id}/submit
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 |
|---|---|---|---|---|---|
| opportunity_id | path | string | Yes | 900000000000000001 | Mã cơ hội cần tham gia; không hỗ trợ cơ hội có opportunity_type=CATEGORY; giá trị liên quan: CATEGORY. |
| product_id | body | string | Yes | 900000000000000001 | Mã sản phẩm. |
Request examples
curl -s -X POST "https://partner.quantri360.com/v1/tiktok/product/202604/opportunities/900000000000000001/submit" \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{"product_id":"900000000000000001"}'
Python
import requests
KEY = "q360_live_..." # khóa API của brand
r = requests.post(
"https://partner.quantri360.com/v1/tiktok/product/202604/opportunities/900000000000000001/submit",
params={},
json={
"product_id": "900000000000000001"
},
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/tiktok/product/202604/opportunities/900000000000000001/submit');
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({"product_id":"900000000000000001"}),
});
console.log(r.status, await r.json());PHP
<?php
$key = 'q360_live_...'; // khóa API của brand
$url = 'https://partner.quantri360.com/v1/tiktok/product/202604/opportunities/900000000000000001/submit' . '?' . 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, '{"product_id":"900000000000000001"}');
$res = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status, "\n", $res;Response
Response fields (as returned by TikTok Shop)
| Name | Type | Sample | Description |
|---|---|---|---|
| code | int | 0 | Mã kết quả; 0 là thành công. |
| message | string | Success | Thông báo kết quả. |
| request_id | string | YEU_CAU_MINH_HOA | Mã yêu cầu để tra cứu lỗi. |
| data | object | Dữ liệu. | |
| submission | object | Thông tin gửi sản phẩm tham gia. | |
| id | string | 900000000000000001 | Mã định danh. |
| opportunity_id | string | 900000000000000001 | Mã cơ hội bán hàng. |
| product_id | string | 900000000000000001 | Mã sản phẩm. |
| status | string | PENDING_REVIEW | Trạng thái; giá trị liên quan: UNDER_REVIEW, PENDING_REVIEW. |
| submit_time | int | 1793494800 | Thời gian gửi; Unix giây. |
| rejection_reason | string | Minh họa | Lý do từ chối. |
Response sample
{
"code": 0,
"message": "Success",
"request_id": "YEU_CAU_MINH_HOA",
"data": {
"submission": {
"id": "900000000000000001",
"opportunity_id": "900000000000000001",
"product_id": "900000000000000001",
"status": "PENDING_REVIEW",
"submit_time": 1793494800,
"rejection_reason": "Minh họa"
}
}
}
Get started
- Sign up for Partner
- Enable a data type of the Sản phẩm group on the platform page
- Create an API key (tick the TikTok Shop channel)
- Call it as in the examples above