Create a portfolio
POST/creative/portfolio/create/Via 360: POST https://partner.quantri360.com/v1/tiktok_business/creative/portfolio/create/
Write endpoint — changes data on TikTok Business. The key must be created with "Allow write API calls" ticked, otherwise you get 403 write_not_allowed. Every call is logged.
Description
Use this endpoint to create a portfolio of creative assets.
> Note
> You can only create one portfolio each time you call the endpoint.
Request
Endpoint
POST https://partner.quantri360.com/v1/tiktok_business/creative/portfolio/create/
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 | 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. |
Request parameters
| Name | In | Type | Required | Sample | Description |
|---|---|---|---|---|---|
| creative_portfolio_type | body | string | No | Type of the portfolio.
Enum values:
- CTA: call-to-action text.
- CARD: card (Display Card).
- HOTEL_CARD : Hotel Card. Hotel Cards can only be used in App Travel Catalog Ads.
- FLIGHT_CARD : Flight Card. Flight Cards can only be used in App Travel Catalog Ads.
- DESTINATION_CARD: Destination Card. Destination Cards can only be used in App Travel Catalog Ads.
- WEB_INFO_CARD: Website info card.
- DOWNLOAD_CARD: Download Card.
- INVENTORY_CARD: Inventory Card.
- PRODUCT_CARD: Product Card.
- PRODUCT_TILE: Product Tiles.
- STICKER: Countdown Sticker or Gift Code Sticker.
- PREMIUM_BADGE: Pop-up Showcase.
- GESTURE: Gesture.
- SUPER_LIKE: Superlike. A Superlike engages the audience with a surprise visual element after they like a video ad. With Superlke, heart-shaped and customized icons float across the screen when the audience likes or double-taps on the ads.
Default value: CTA.
Note:
- You can only create one creative portfolio of any type at a time.
- Website info cards can only be used for auction ads with the objective_type as WEB_CONVERSIONS or TRAFFIC (with promotion_type set to WEBSITE).
- You can only use the Inventory Card portfolio in Automotive Ads.
- Product Cards can only be used in Video Shopping Ads.
- Product Tiles can only be used in Video Shopping Ads with product source as catalog.
- Before creating a Product Tiles portfolio, ensure that you have a catalog containing at least four products that have passed the review. To verify whether you have a catalog with enough eligible products for the Product Tile portfolio, use /catalog/product/get/ and confirm that the audit_status of at least four products is approved.
- Using a Product Tiles portfolio to create ads is currently an allowlist-only feature. If you would like to access it, please contact your TikTok representative.
- Countdown Sticker can only be used for auction ads with the advertising objective (objective_type) as Reach (REACH), Traffic (TRAFFIC), Video views(VIDEO_VIEW), App promotion (APP_PROMOTION), Lead generation(LEAD_GENERATION), Website conversions (WEB_CONVERSIONS), or Product sales (PRODUCT_SALES), as well as for R&F (RF_REACH) ads.
- If you want to use Countdown Stickers in Lead Generation ads, you can only set the Optimization location as Website at the ad group level. To learn about how to create such ads, see Create a Lead Generation ad with optimization location as Website.
- Reminder Countdown Sticker (sticker_type as REMINDER_COUNTDOWN or LIVE_REMINDER_COUNTDOWN) is an allowlist-only feature for Traffic (TRAFFIC), App promotion (APP_PROMOTION), Website conversions (WEB_CONVERSIONS) ads. If you would like to access it for ads with these objectives, please contact your TikTok representative.
- Gift Code Sticker can only be used for auction ads with the advertising objective (objective_type) as Reach (REACH), Traffic (TRAFFIC), Video views(VIDEO_VIEW), App promotion (APP_PROMOTION), Lead generation(LEAD_GENERATION), Website conversions (WEB_CONVERSIONS), or Product sales (PRODUCT_SALES), as well as for R&F ads with the advertising objective(objective_type) as Reach (RF_REACH).
- Gestures can only be used for auction ads with the objective_type (advertising objective) as REACH, TRAFFIC, VIDEO_VIEWS (with optimization_goal as ENGAGED_VIEW), APP_PROMOTION, WEB_CONVERSIONS, as well as for R&F ads with the advertising objective (objective_type) as Reach (RF_REACH).
- Using Gesture portfolios in campaigns with the advertising objective APP_PROMOTION, TRAFFIC, or WEB_CONVERSIONS are currently separate allowlist-only features. If you would like to access them, please contact your TikTok representative.
- Superlikes can only be used for auction ads with the objective_type (advertising objective) as REACH, TRAFFIC, VIDEO_VIEWS (with optimization_goal as ENGAGED_VIEW), ENGAGEMENT (with optimization_goal as PAGE_VISIT), APP_PROMOTION, WEB_CONVERSIONS, as well as for R&F ads with the advertising objective (objective_type) as Reach (RF_REACH).
- Using Superlike portfolios in campaigns with the advertising objective APP_PROMOTION or TRAFFIC are currently separate allowlist-only features. If you would like to access them, please contact your TikTok representative. | |
| portfolio_content | body | object[] | No | The content of the portfolio. |
Request examples
curl -s -X POST "https://partner.quantri360.com/v1/tiktok_business/creative/portfolio/create/" \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{"portfolio_content":[{}]}'
Python
import requests
KEY = "q360_live_..." # khóa API của brand
r = requests.post(
"https://partner.quantri360.com/v1/tiktok_business/creative/portfolio/create/",
params={},
json={
"portfolio_content": [
{}
]
},
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/creative/portfolio/create/');
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({"portfolio_content":[{}]}),
});
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/creative/portfolio/create/' . '?' . 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, '{"portfolio_content":[{}]}');
$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 Business)
| Name | Type | Sample | Description |
|---|---|---|---|
| code | number | Response code. For the complete list of response codes and descriptions, see Appendix - Return Codes. | |
| message | string | Response message. For details, see Appendix - Return Codes. | |
| request_id | string | The log ID of the request, which uniquely identifies a request. | |
| data | object | Returned data. | |
| creative_portfolio_id | string | ID of the creative portfolio that has just been created. |
Response sample
HTTPS/1.1 200 OK
{
"message": "OK",
"code": 0,
"data": {
"creative_portfolio_id": "{{creative_portfolio_id}}"
},
"request_id": "{{request_id}}"
}
Get started
- Sign up for Partner
- Enable a data type of the Ads (Marketing API) group on the platform page
- Create an API key (tick the TikTok Business channel)
- Call it as in the examples above