Direct Post
POST/v2/post/publish/video/init/Gọi qua 360: POST https://partner.quantri360.com/v1/tiktok_business/v2/post/publish/video/init/
Endpoint ghi — thay đổi dữ liệu trên TikTok Business. Key phải được tạo với tick "Cho phép gọi API ghi", nếu không sẽ nhận 403 write_not_allowed. Mỗi lần gọi được ghi nhật ký.
Mô tả API
Mở phiên đăng video thẳng lên tài khoản TikTok: trả publish_id và upload_url để bạn đẩy file lên TikTok. Bài đăng theo mức hiển thị bạn chọn.
- Đẩy file lên
upload_url(máy chủ TikTok, hạn 1 giờ) bằng PUT từng phần, headerContent-Type: video/mp4(hoặcvideo/quicktime,video/webm) vàContent-Range: bytes <đầu>-<cuối>/<tổng>. Video MP4 / MOV / WebM, tối đa 4 GB, 23–60 khung hình/giây; sai khung hình →FAILEDvớiframe_rate_check_failed. - App chưa được TikTok duyệt cho đăng thẳng chỉ đăng được lên tài khoản đang để riêng tư; tài khoản công khai nhận lỗi
unaudited_client_can_only_post_to_private_accounts. Khi đó dùng /v2/post/publish/inbox/video/init/ (gửi vào bản nháp). - Theo quy định của TikTok, ứng dụng của bạn phải cho người dùng xem tài khoản sẽ đăng, tự chọn mức hiển thị và đồng ý trước khi đăng (Content Sharing Guidelines).
Request
Địa chỉ
POST https://partner.quantri360.com/v1/tiktok_business/v2/post/publish/video/init/
Xác thực & gian hàng
| Tên | Vị trí | Kiểu | Mẫu | Mô tả |
|---|---|---|---|---|
| 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 | 7000000000000000001 | Tài sản TikTok Business đã kết nối — "Mã tài sản" ở trang Nền tảng hoặc GET /v1/platforms (tài khoản quảng cáo cho Marketing API, tài khoản TikTok cho Organic / Messaging). Có thể bỏ khi chỉ kết nối một tài sản. |
Tham số request
| Tên | Vị trí | Kiểu | Bắt buộc | Mẫu | Mô tả |
|---|---|---|---|---|---|
| post_info | body | object | Có | {"title":"Mẫu mới #thoitrang","privacy_level":"SELF_ONLY","disable_comment":false,"disable_duet":false,"disable_stitch":false} | Thông tin bài: title (mô tả, tối đa 2.200 ký tự, có thể có #hashtag), privacy_level (một giá trị trong privacy_level_options của creator_info — bắt buộc, không có mặc định), disable_comment / disable_duet / disable_stitch, brand_organic_toggle (quảng bá thương hiệu của mình), brand_content_toggle (nội dung có tài trợ — không dùng với SELF_ONLY). |
| source_info | body | object | Có | {"source":"FILE_UPLOAD","video_size":26045680,"chunk_size":26045680,"total_chunk_count":1} | Nguồn video. source = FILE_UPLOAD: bạn tự đẩy file lên upload_url trả về. video_size = số byte. Video ≤ 64 MB: một phần, chunk_size = video_size, total_chunk_count = 1. Lớn hơn: mỗi phần 5–64 MB, total_chunk_count = floor(video_size / chunk_size), phần cuối nhận phần dư (tối đa 128 MB). |
Ví dụ request
curl -s -X POST "https://partner.quantri360.com/v1/tiktok_business/v2/post/publish/video/init/?platform_shop_id=-000AbCdEfGhIjKlMnOpQrStUvWxYz012345" \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{"post_info":{"title":"Mẫu mới #thoitrang","privacy_level":"SELF_ONLY"},"source_info":{"source":"FILE_UPLOAD","video_size":26045680,"chunk_size":26045680,"total_chunk_count":1}}'
Python
import requests
KEY = "q360_live_..." # khóa API của brand
r = requests.post(
"https://partner.quantri360.com/v1/tiktok_business/v2/post/publish/video/init/",
params={
"platform_shop_id": "-000AbCdEfGhIjKlMnOpQrStUvWxYz012345"
},
json={
"post_info": {
"title": "Mẫu mới #thoitrang",
"privacy_level": "SELF_ONLY"
},
"source_info": {
"source": "FILE_UPLOAD",
"video_size": 26045680,
"chunk_size": 26045680,
"total_chunk_count": 1
}
},
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_business/v2/post/publish/video/init/');
for (const [k, v] of Object.entries({"platform_shop_id":"-000AbCdEfGhIjKlMnOpQrStUvWxYz012345"})) 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({"post_info":{"title":"Mẫu mới #thoitrang","privacy_level":"SELF_ONLY"},"source_info":{"source":"FILE_UPLOAD","video_size":26045680,"chunk_size":26045680,"total_chunk_count":1}}),
});
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_business/v2/post/publish/video/init/' . '?' . http_build_query(['platform_shop_id' => '-000AbCdEfGhIjKlMnOpQrStUvWxYz012345']);
$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, '{"post_info":{"title":"Mẫu mới #thoitrang","privacy_level":"SELF_ONLY"},"source_info":{"source":"FILE_UPLOAD","video_size":26045680,"chunk_size":26045680,"total_chunk_count":1}}');
$res = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status, "\n", $res;Response
Tham số phản hồi (nguyên của TikTok Business)
| Tên | Kiểu | Mẫu | Mô tả |
|---|---|---|---|
| data | object | Dữ liệu. | |
| publish_id | string | v_pub_file~v2.123456789 | Mã đăng — dùng cho /v2/post/publish/status/fetch/. |
| upload_url | string | https://open-upload-sg.tiktokapis.com/upload/?… | Nơi đẩy file. |
| error | object | Kết quả: `code = "ok"` là thành công, khác "ok" là lỗi (xem `message`). | |
| code | string | ok | Mã kết quả. |
| message | string | Mô tả lỗi. | |
| log_id | string | 202610261729… | Mã nhật ký của TikTok, gửi kèm khi cần hỗ trợ. |
Bắt đầu dùng
- Đăng ký tài khoản Partner
- Mở loại dữ liệu thuộc nhóm Tài khoản TikTok (Organic API) ở trang nền tảng
- Tạo API key (tick kênh TikTok Business)
- Gọi theo ví dụ ở trên