Update ads
Use this endpoint to modify the creatives of your regular ads such as call-to-action, ad name, text, image and video material.
> Important
> Creating non-Spark Ads using Custom Identities in ad groups that deliver to Automatic Placement or Select Placement when TikTok is included is no longer supported for existing ad accounts. All new ad accounts created on or after January 15, 2026 cannot create non-Spark Ads using Custom Identities for these placements. Existing ads remain unaffected and editable. Ad campaigns that deliver only to Pangle or Global App Bundle placements are not be affected by Custom Identity deprecation. Learn more about changes coming to Custom Identity and migrate to Spark Ads.
To update creative materials for Smart Creative ads, use the /ad/aco/update/ endpoint.
Incremental updates in this endpoint are only supported for the following fields when patch_update is set to true.
ad_nameidentity_ididentity_typeidentity_authorized_bc_idvideo_idimage_idsmusic_idtiktok_item_idad_textad_texts
For other fields, you can only use full update mode and pass in all the necessary parameters to update the ad. Otherwise, some parameters may be overwritten as null value. However, if you would like incremental updates to be supported for other fields as well, please contact your TikTok representative.
Request
Endpoint
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 |
|---|---|---|---|---|---|
| adgroup_id | body | string | Yes | Ad group ID. | |
| patch_update | body | boolean | No | Whether to use incremental update mode.
The following fields are supported when you set this field to true:
- ad_name
- identity_id
- identity_type
- identity_authorized_bc_id
- video_id
- image_ids
- music_id
- tiktok_item_id
- ad_text
- ad_texts
For example, to update the ad name by using incremental update mode, configure the following settings only:
- Set patch_update to true.
- Set ad_name to the new ad name.
- Pass the required fields, including the Header parameters, advertiser_id, and ad_id.
Important: If you choose to enable the incremental update mode by passing this field, we recommend thoroughly testing to prevent any disruptions to your current ad update workflow. | |
| creatives | body | object[] | Yes | Advertising creatives. Max size: 20. |
Request examples
curl -s -X POST "https://partner.quantri360.com/v1/tiktok_business/ad/update/" \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{"adgroup_id":"","creatives":[{"ad_id":""}]}'
Python
import requests
KEY = "q360_live_..." # khóa API của brand
r = requests.post(
"https://partner.quantri360.com/v1/tiktok_business/ad/update/",
params={},
json={
"adgroup_id": "",
"creatives": [
{
"ad_id": ""
}
]
},
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/ad/update/');
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({"adgroup_id":"","creatives":[{"ad_id":""}]}),
});
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/ad/update/' . '?' . 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, '{"adgroup_id":"","creatives":[{"ad_id":""}]}');
$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. | |
| ad_ids | string[] | Ad IDs. | |
| creatives | object[] | A List of Ads. The returned fields are generated based on the `fields` specified in the request parameters. If not specified, all fields are returned by default. | |
| advertiser_id | string | Advertiser ID. | |
| campaign_id | string | Campaign ID. | |
| campaign_name | string | Campaign name. | |
| adgroup_id | string | Ad group ID. | |
| adgroup_name | string | Ad group name. | |
| ad_id | string | Ad ID. | |
| ad_name | string | Ad name. | |
| create_time | string | Time at which the ad was created. | |
| modify_time | string | Time at which the ad was modified. | |
| identity_id | string | Identity ID. | |
| identity_type | string | Identity type. Enum values: `CUSTOMIZED_USER`, `AUTH_CODE`, `TT_USER`, `BC_AUTH_TT`. | |
| identity_authorized_bc_id | string | Returned when `identity_type` is `BC_AUTH_TT`. ID of the Business Center that a TikTok Account User in Business Center identity is associated with. | |
| catalog_id | string | The catalog you choose for your ads. Note: Starting June 30th, 2024, this field will no longer be returned for newly created Shopping Ads where `product_source` is `STORE` at the ad group level because the specified `catalog_id` will be ignored. Existing Shopping Ads where `product_source` is `STORE` will not be affected unless you update them. If you update the existing ads, the existing `catalog_id`, if present for the ad, will no longer be returned. | |
| product_specific_type | string | Different dimensions to choose products. Enum values: - `ALL`: Allow TikTok to dynamically choose from all products. - `PRODUCT_SET`: Specify a product set. TikTok will dynamically choose products from this set. - `CUSTOMIZED_PRODUCTS`: Specify a customized number of products. | |
| item_group_ids | string[] | Product SPU IDs. | |
| product_set_id | string | The ID of the product set. | |
| sku_ids | string[] | IDs of the SKUs. | |
| vehicle_ids | string[] | IDs of vehicles. | |
| showcase_products | object[] | The list of Showcase products that you use in your ad. | |
| item_group_id | string | SPU ID of the product. | |
| store_id | string | The ID of the store that the product (`item_group_id`) belongs to. | |
| catalog_id | string | The ID of the catalog that the product (`item_group_id`) belongs to. Note: Starting June 30th, 2024, this field will no longer be returned for newly created Shopping Ads where `product_source` is `STORE` at the ad group level because the specified `catalog_id` within the `showcase_products` object array will be ignored. Existing Shopping Ads where `product_source` is `STORE` will not be affected unless you update them. If you update the existing ads, the existing `catalog_id` within the `showcase_products` object array, if present for the ad, will no longer be returned. | |
| ad_format | string | The ad format. Enum values: `SINGLE_IMAGE`, `SINGLE_VIDEO`, `LIVE_CONTENT`, `CAROUSEL_ADS` (non-VSA Carousel Ads), `CATALOG_CAROUSEL`(VSA Carousel Ads). | |
| vertical_video_strategy | string | The video type that you use for Product Sales scenarios. Enum values: `UNSET` (unset), `SINGLE_VIDEO` (single video), `CATALOG_VIDEOS` (catalog video using video templates), `CATALOG_UPLOADED_VIDEOS` (catalog video using uploaded videos), `LIVE_STREAM` (livestream video). | |
| dynamic_format | string | Dynamic format. Enum values: - `UNSET`: Unset. - `DYNAMIC_CREATIVE`: smart creative. To display different videos, product cards and destinations to each person based on purchase intent, maximizing conversions. | |
| video_id | string | The video ID. If the ad is a Spark Ad created by pulling organic videos from linked Business Account, authorized posts, or authorized TikTok accounts in the Business Center, the value of this field will be null. You can get the the ID of a TikTok post via the `tiktok_item_id` field. To learn more about Spark Ads, see Create Spark Ads. | |
| image_ids | string[] | A list of image IDs. | |
| carousel_image_index | integer | The index that specifies the additional images to be used in the VSA Carousel ad. The number you set via this field represents the position of the product image within the additional image list (`additional_image_urls`) for each catalog product. | |
| end_card_cta | string | Call-to-action for the end card (`image_ids`) of an Automotive Carousel Ad for Inventory or Automotive Carousel Ad for Models. Enum values: - `SEARCH_INVENTORY` (Recommended): Search inventory. - `LEARN_MORE`: Learn more. - `SHOP_NOW`: Shop now. - `SIGN_UP`: Sign up. - `CONTACT_US`: Contact us. - `BOOK_NOW`: Book now. - `READ_MORE`: Read more. - `VIEW_MORE`: View now. - `ORDER_NOW`: Order now. | |
| auto_disclaimer_types | string[] | The type of disclaimer to show in the Automotive Carousel Ads for Models. Enum values: - `EMISSION`: Emssion disclaimer. - `DISCOUNT`: Discount or offer disclaimer. | |
| product_display_field_list | string[] | A list of product details to display in your Automotive Carousel Ad for Inventory. Max size: 2. Enum values: - `DEALER_NAME`: the `dealer_name` field of vehicles. - `MAKE`: the `make` field of vehicles. - `MODEL`: the `model` field of vehicles. - `YEAR`: the `year` field of vehicles. - `MILEAGE`: the `mileage` field of vehicles. - `PRICE`: the `price` field of vehicles. - `SALE_PRICE`: the `sale_price` field of vehicles. - `EXTERIOR_COLOR`: the `exterior_color` field of vehicles. - `TRIM`: the `trim` field of vehicles. - `ADDRESS_CITY`: the `city` field of vehicles. - `VEHICLE_STATE`: the `state_of_vehicle` field of vehicles. The title of each vehicle is displayed automatically. For instance, if you set this field to `["MILEAGE","YEAR"]`, the ad will display the `mileage`, `price` and `title` fields of each vehicle. To retrieve the product detail fields of your vehicles in an Auto-Inventory catalog and check whether you need to update the details, use /catalog/product/get/. | |
| music_id | string | The ID of the piece of music that is used in the TikTok Carousel Ad. | |
| tiktok_item_id | string | The ID of the TikTok post that is used as Spark Ad. To learn more about Spark Ads, see Create Spark Ads. | |
| promotional_music_disabled | boolean | Whether to disable the promotional use of the music in the Spark Ad post. The default value is `true`. If you want to allow dueting and stitching for the Spark Ad post, you need to set this field to `false`. This field is only valid for Spark Ad posts. | |
| item_duet_status | string | Whether to enable dueting for the Spark Ad post. This field is valid only when `promotional_music_disabled` is set to `false`. Enum values: `ENABLE`, `DISABLE`. This field is only valid for Spark Ad posts. | |
| item_stitch_status | string | Whether to enable stitching for the Spark Ad post. This field is valid only when `promotional_music_disabled` is set to `false`. Enum values: `ENABLE`, `DISABLE`. This field is only valid for Spark Ad posts. | |
| dark_post_status | string | Indicates whether the ad is a Spark Ads dark post. Value can be `ON` or `OFF`. | |
| branded_content_disabled | boolean | Default is false. If `branded_content_disabled` is `true`, you cannot modify `dark_post_status`. | |
| shopping_ads_video_package_id | string | Catalog video template ID. Returned when the corresponding campaign `objective_type` is `PRODUCT_SALES`. | |
| ad_text | string | The ad text. It is shown to your audience as part of your ad creative, to deliver the message you intend to communicate to them. | |
| ad_texts | string | A list of ad texts. | |
| call_to_action | string | For call-to-action text, see Enumeration - Call-to-action | |
| call_to_action_id | string | The ID of the CTA portfolio that you want to use in your ads. A CTA portfolio is a group of auto-optimized CTAs. If both this field and `call_to_action` are specified, this field will be used, and `call_to_action` will be ignored. For details about auto-optimized CTAs, see CTA Recommendations - Auto-Optimized CTAs. | |
| card_id | string | Creative portfolio ID. | |
| landing_page_url | string | Landing page URL. | |
| utm_params | object[] | A list of URL parameters. | |
| key | string | The URL parameter. | |
| value | string | The value of the URL parameter. | |
| page_id | number | Page ID. | |
| cpp_url | string | The Custom Product Page (CPP) URL. CPPs are product pages with customized screenshots, promotional text, and app previews that can be used to highlight specific content or features of the promoted app, or reach specific audiences. | |
| tiktok_page_category | string | The category of the TikTok pages that you want to promote. Enum values: - `PROFILE_PAGE`: TikTok account profile page. - `OTHER_TIKTOK_PAGE`: Other TikTok pages, including Playlist Page, Hashtag Page, Music Page and Branded Effect Page. - `TIKTOK_INSTANT_PAGE`: Custom TikTok Instant Page. | |
| phone_region_code | string | Returned only when `promotion_type` is set to `LEAD_GEN_CLICK_TO_CALL` at the ad group level. The region code for the phone number that the audience can click on the ad to call. To learn about how to create a Lead Generation ad with promotion type as phone call, refer to here. Note: Creating a Lead Generation ad with promotion type as phone call is currently an allowlist-only feature. If you would like to access it, please contact your TikTok representative. | |
| phone_region_calling_code | string | Returned only when `promotion_type` is set to `LEAD_GEN_CLICK_TO_CALL` at the ad group level. The phone number that the audience can click on the ad to call. Note: Creating a Lead Generation ad with promotion type as phone call is currently an allowlist-only feature. If you would like to access it, please contact your TikTok representative. | |
| phone_number | string | Returned only when `promotion_type` is set to `LEAD_GEN_CLICK_TO_CALL` at the ad group level. The phone number that the audience can click on the ad to call. Note: Creating a Lead Generation ad with promotion type as phone call is currently an allowlist-only feature. If you would like to access it, please contact your TikTok representative. | |
| creative_auto_enhancement_strategy_list | string[] | The list of automatic enhancement strategies to apply to your ads. The enhancements you specified will be automatically applied in real-time as your campaign is delivered. Enum values: - `VIDEO_QUALITY`: Video quality. Improve overall visual quality with increased resolution and clarity. - `MUSIC_REFRESH`: Music refresh. Stay on-trend by swapping in music currently popular on TikTok. - `IMAGE_QUALITY`: Image quality. Improve overall visual quality with increased resolution and clarity. - `IMAGE_RESIZE`: Resize. Resize your image to take advantage of full-screen capabilities. | |
| deeplink | string | The specific location where you want your audience to go if they have your app installed. | |
| deeplink_type | string | The deeplink type. Enum values: - `NORMAL`: non-deferred deeplink. - `DEFERRED_DEEPLINK`: deferred deeplink. | |
| deeplink_format_type | string | The format type of the deeplink. Enum values: - `UNIVERSAL_OR_APP_LINK`: Apple’s universal link or Android App Link starting with ` or ` - `SCHEME_LINK`: Custom URL scheme, in the format of `scheme://resource`. For instance, a Custom URL scheme of WhatsApp should follow the format `whatsapp://resource`. - `NONE`: Not a deeplink. | |
| shopping_ads_deeplink_type | string | The source of the deeplink to be used in the Shopping Ads. Enum values: - `NONE`: No deeplink. - `CUSTOM`: Custom deeplink. Use the deeplink you provided in the ad. - `SHOPPING_ADS`: Product deeplink. Use the deeplink you've provided for each product in the catalog. | |
| deeplink_utm_params | object[] | A list of deeplink URL parameters. | |
| key | string | The deeplink URL parameter. | |
| value | string | The value of the deeplink URL parameter. | |
| shopping_ads_fallback_type | string | In the Shopping Ads retargeting scenario, the fallback website type when the deeplink fails to be triggered. Enum values: - `DEFAULT`: Unset. - `CUSTOM`: Custom link. Fall back to the web page link you provide. - `SHOPPING_ADS`: Product link. Fall back to the web page link you've provided for each product in the catalog. | |
| fallback_type | string | Fallback Type. If the audience do not have the app installed, you can have them fall back to install the app, or to view a specific web page. Enum values: - `APP_INSTALL`: the App Store or Google Play page for the promoted App that is specified through the `app_id` field at the ad group level. - `WEBSITE`: the promoted web page that is specified through `landing_page_url`. - `UNSET`: Unset. | |
| dynamic_destination | string | Dynamic destination strategy. Enum values: - `DLP`: Dynamic Landing Page. Displaying different destinations including a custom website or Instant Product Page to each person based on their profile, behavior, and intent to maximize ad conversion. - `UNSET`: Unset. | |
| auto_message_id | string | The ID of the automatic message to use in a TikTok Direct Messaging Ad. Currently, the only supported automatic message type is welcome message. | |
| aigc_disclosure_type | string | Whether to turn on the AIGC (Artificial Intelligence Generated Content) self-disclosure toggle to indicate the ad contains AI-generated content. After the toggle is turned on, your ad will carry an "Advertiser labeled as Al-generated" label when viewed in full. Enum values: - `SELF_DISCLOSURE`: To turn on the toggle to declare that the ad contains AI-generated content. - `NOT_DECLARED`: To not declare that the ad contains AI-generated content. | |
| disclaimer_type | string | Type of disclaimer in the ad. Enum values: `TEXT_LINK`(clickable disclaimers), `TEXT_ONLY`(text-only disclaimers). | |
| disclaimer_text | object | The text-only disclaimer in the ad. | |
| text | string | The disclaimer text. | |
| disclaimer_clickable_texts | object[] | The clickable disclaimer or clickable disclaimers in the ad. | |
| text | string | The disclaimer text. | |
| url | string | The URL for the clickable disclaimer. When users tap each text, they will be redirected to the URL and see more disclaimer details. | |
| tracking_pixel_id | number | The pixel ID that is tracked. You can use this field to track offsite events that do not happen on the TikTok instant page. | |
| tracking_app_id | string | The ID of the application that is tracked. | |
| tracking_offline_event_set_ids | string[] | A list of Offline Event set IDs that are tracked. | |
| tracking_message_event_set_id | string | The ID of the message event set that is measured in the Instant Messaging Ad. | |
| vast_moat_enabled | boolean | Whether Moat Viewability Verification is enabled for the ad. TikTok has partnered with Moat to launch viewability measurement for Brand Auction and Reach & Frequency In-feed ads purchased on TikTok for Business. Note: If you want to enable Moat Viewability Measurement for the ad, we recommend setting `viewability_postbid_partner` to `MOAT` instead of using `vast_moat_enabled`. | |
| viewability_postbid_partner | string | Post-bid third-party viewability measurement partner. Enum values: `UNSET`, `MOAT`, `DOUBLE_VERIFY`, `IAS`, `ZEFR`. | |
| viewability_vast_url | string | The wrapped VAST URL used by the post-bid third-party partner to measure viewability. The value is null when `viewability_postbid_partner` is not `IAS`. | |
| brand_safety_postbid_partner | string | Post-bid third-party brand safety measurement partner. Enum values: `UNSET`,`DOUBLE_VERIFY`, `IAS`, `ZEFR`. | |
| brand_safety_vast_url | string | The wrapped VAST URL used by the post-bid third-party partner to measure brand safety. The value is null when `brand_safety_postbid_partner` is not `IAS`. | |
| impression_tracking_url | string | Default Impression Tracking URL. | |
| click_tracking_url | string | Click Tracking URL. | |
| playable_url | string | Playable material URL. | |
| operation_status | string | Operation status. Enum values: - `ENABLE` : The ad is enabled (in 'ON' status). - `DISABLE`: The ad is disabled (in 'OFF' status). - `FROZEN`: The ad is terminated and cannot be enabled. | |
| secondary_status | string | Ad status(Secondary status,See Enumeration - Secondary Status | |
| creative_type | string | Creative type for Live Shopping Ads, Product Shopping Ads, App Pre-Registration, Automotive Ads for Inventory, or Automotive Ads for Models scenarios. Enum values: - `SHOP_PDP`: Shop ads with a single product link. - `SHOP_PLP`: Shop ads with 6-50 product links. - `SHORT_VIDEO_LIVE`: Short videos that direct traffic to live shopping room. - `DIRECT_LIVE`: Live shopping room. Each campaign can have only one live shopping room. - `PSA`: The product visuals will be used as ad creative. - `CUSTOM_INSTANT_PAGE`: Customized TikTok Instant Page. Returned only when `app_promotion_type` is `APP_PREREGISTRATION` at the campaign level and `promotion_website_type` is set to `TIKTOK_NATIVE_PAGE` at the ad group level. - `AUTO_INVENTORY_INSTANT_PAGE`:A video or carousel with an auto-generated Instant Product Page showcasing the inventory of the Auto-Inventory catalog in Automotive Ads for Inventory or the models of the Auto-Model Catalog in the Automotive Ads for Models. Returned only when `objective_type` is `LEAD_GENERATION` and `catalog_enabled` is set to `true` at the campaign level. | |
| app_name | string | The display name of app download ad | |
| display_name | string | The display name of landing page or pure exposure ad. | |
| profile_image_url | string | Avatar URL. | |
| creative_authorized | boolean | Whether you grant displaying some of your ads in our TikTok For Business Creative Center. Only valid for non-US advertisers, the default value is `false`. Note: `creative_authorized` can only be used for video ads. | |
| is_aco | boolean | Whether the ad is an automated ad. Set to `true` for automated ad and `false` for non-automated ad. | |
| is_new_structure | boolean | Whether the campaign is a new structure (for the same campaign, the structure of campaign, adgroups and ads are the same). | |
| optimization_event | string | Conversion event for the ad group. See Conversion events for more. | |
| page_info | object | Pagination information. | |
| page | number | Current page number. | |
| page_size | number | Paging size. | |
| total_number | number | Total number of results. | |
| total_page | number | Total pages of results. |
Response sample
HTTPS/1.1 200 OK
{
"code": 0,
"message": "OK",
"request_id": "{{request_id}}",
"data": {
"ad_ids": [
"{{ad_id}}"
],
"need_audit": false,
"creatives": [
{
"deeplink_type": "NORMAL",
"call_to_action_id": null,
"brand_safety_postbid_partner": "UNSET",
"creative_type": null,
"tracking_pixel_id": 0,
"advertiser_id": "{{advertiser_id}}",
"viewability_postbid_partner": "UNSET",
"image_ids": [
"{{image_id}}"
],
"app_name": "",
"profile_image_url": "{{profile_image_url}}",
"landing_page_url": "{{landing_page_url}}",
"ad_texts": null,
"viewability_vast_url": null,
"identity_id": "{{identity_id}}",
"click_tracking_url": null,
"avatar_icon_web_uri": "{{avatar_icon_web_uri}}",
"optimization_event": null,
"deeplink": "",
"is_aco": false,
"landing_page_urls": null,
"ad_name": "{{ad_name}}",
"music_id": null,
"operation_status": "ENABLE",
"is_new_structure": true,
"brand_safety_vast_url": null,
"create_time": "{{create_time}}",
"ad_id": "{{ad_id}}",
"adgroup_name": "{{adgroup_name}}",
"display_name": "{{display_name}}",
"impression_tracking_url": null,
"adgroup_id": "{{adgroup_id}}",
"identity_type": "CUSTOMIZED_USER",
"video_id": "{{video_id}}",
"creative_authorized": false,
"modify_time": "{{modify_time}}",
"card_id": null,
"page_id": null,
"ad_text": "{{ad_text}}",
"playable_url": "",
"call_to_action": "{{call_to_action}}",
"campaign_id": "{{campaign_id}}",
"ad_format": "SINGLE_VIDEO",
"campaign_name": "{{campaign_name}}",
"vast_moat_enabled": false,
"fallback_type": "UNSET"
}
]
}
}
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