VI | EN
Message us on Messenger
Developer resources

Submit Product via Opportunity — TikTok Shop API

tiktok.product.202604.opportunities.opportunity_id.submit · call it through Quantri360 with one API key for your own accounts / assets that you connected and authorized — 360 handles request signing and refreshing the authorization you granted.

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

NameInTypeSampleDescription
AuthorizationheaderheaderBearer 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_idquerystring100001Gian 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

NameInTypeRequiredSampleDescription
opportunity_idpathstringYes900000000000000001Mã 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_idbodystringYes900000000000000001Mã 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)

NameTypeSampleDescription
codeint0Mã kết quả; 0 là thành công.
messagestringSuccessThông báo kết quả.
request_idstringYEU_CAU_MINH_HOAMã yêu cầu để tra cứu lỗi.
dataobjectDữ liệu.
submissionobjectThông tin gửi sản phẩm tham gia.
idstring900000000000000001Mã định danh.
opportunity_idstring900000000000000001Mã cơ hội bán hàng.
product_idstring900000000000000001Mã sản phẩm.
statusstringPENDING_REVIEWTrạng thái; giá trị liên quan: UNDER_REVIEW, PENDING_REVIEW.
submit_timeint1793494800Thời gian gửi; Unix giây.
rejection_reasonstringMinh họaLý 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

  1. Sign up for Partner
  2. Enable a data type of the Sản phẩm group on the platform page
  3. Create an API key (tick the TikTok Shop channel)
  4. Call it as in the examples above