VI | EN
Message us on Messenger
Developer resources

Update ads — TikTok Business API

Update ads · 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.

Update ads

POST/ad/update/Via 360: POST https://partner.quantri360.com/v1/tiktok_business/ad/update/
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 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_name
  • identity_id
  • identity_type
  • identity_authorized_bc_id
  • video_id
  • image_ids
  • music_id
  • tiktok_item_id
  • ad_text
  • ad_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

POST https://partner.quantri360.com/v1/tiktok_business/ad/update/

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_idquerystring7000000000000000001Tà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

NameInTypeRequiredSampleDescription
adgroup_idbodystringYesAd group ID.
patch_updatebodybooleanNoWhether 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.
creativesbodyobject[]YesAdvertising 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)

NameTypeSampleDescription
codenumberResponse code. For the complete list of response codes and descriptions, see Appendix - Return Codes.
messagestringResponse message. For details, see Appendix - Return Codes.
request_idstringThe log ID of the request, which uniquely identifies a request.
dataobjectReturned data.
ad_idsstring[]Ad IDs.
creativesobject[]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_idstringAdvertiser ID.
campaign_idstringCampaign ID.
campaign_namestringCampaign name.
adgroup_idstringAd group ID.
adgroup_namestringAd group name.
ad_idstringAd ID.
ad_namestringAd name.
create_timestringTime at which the ad was created.
modify_timestringTime at which the ad was modified.
identity_idstringIdentity ID.
identity_typestringIdentity type. Enum values: `CUSTOMIZED_USER`, `AUTH_CODE`, `TT_USER`, `BC_AUTH_TT`.
identity_authorized_bc_idstringReturned 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_idstringThe 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_typestringDifferent 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_idsstring[]Product SPU IDs.
product_set_idstringThe ID of the product set.
sku_idsstring[]IDs of the SKUs.
vehicle_idsstring[]IDs of vehicles.
showcase_productsobject[]The list of Showcase products that you use in your ad.
item_group_idstringSPU ID of the product.
store_idstringThe ID of the store that the product (`item_group_id`) belongs to.
catalog_idstringThe 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_formatstringThe ad format. Enum values: `SINGLE_IMAGE`, `SINGLE_VIDEO`, `LIVE_CONTENT`, `CAROUSEL_ADS` (non-VSA Carousel Ads), `CATALOG_CAROUSEL`(VSA Carousel Ads).
vertical_video_strategystringThe 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_formatstringDynamic 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_idstringThe 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_idsstring[]A list of image IDs.
carousel_image_indexintegerThe 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_ctastringCall-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_typesstring[]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_liststring[]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_idstringThe ID of the piece of music that is used in the TikTok Carousel Ad.
tiktok_item_idstringThe ID of the TikTok post that is used as Spark Ad. To learn more about Spark Ads, see Create Spark Ads.
promotional_music_disabledbooleanWhether 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_statusstringWhether 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_statusstringWhether 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_statusstringIndicates whether the ad is a Spark Ads dark post. Value can be `ON` or `OFF`.
branded_content_disabledbooleanDefault is false. If `branded_content_disabled` is `true`, you cannot modify `dark_post_status`.
shopping_ads_video_package_idstringCatalog video template ID. Returned when the corresponding campaign `objective_type` is `PRODUCT_SALES`.
ad_textstringThe 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_textsstringA list of ad texts.
call_to_actionstringFor call-to-action text, see Enumeration - Call-to-action
call_to_action_idstringThe 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_idstringCreative portfolio ID.
landing_page_urlstringLanding page URL.
utm_paramsobject[]A list of URL parameters.
keystringThe URL parameter.
valuestringThe value of the URL parameter.
page_idnumberPage ID.
cpp_urlstringThe 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_categorystringThe 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_codestringReturned 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_codestringReturned 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_numberstringReturned 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_liststring[]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.
deeplinkstringThe specific location where you want your audience to go if they have your app installed.
deeplink_typestringThe deeplink type. Enum values: - `NORMAL`: non-deferred deeplink. - `DEFERRED_DEEPLINK`: deferred deeplink.
deeplink_format_typestringThe 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_typestringThe 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_paramsobject[]A list of deeplink URL parameters.
keystringThe deeplink URL parameter.
valuestringThe value of the deeplink URL parameter.
shopping_ads_fallback_typestringIn 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_typestringFallback 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_destinationstringDynamic 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_idstringThe 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_typestringWhether 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_typestringType of disclaimer in the ad. Enum values: `TEXT_LINK`(clickable disclaimers), `TEXT_ONLY`(text-only disclaimers).
disclaimer_textobjectThe text-only disclaimer in the ad.
textstringThe disclaimer text.
disclaimer_clickable_textsobject[]The clickable disclaimer or clickable disclaimers in the ad.
textstringThe disclaimer text.
urlstringThe URL for the clickable disclaimer. When users tap each text, they will be redirected to the URL and see more disclaimer details.
tracking_pixel_idnumberThe 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_idstringThe ID of the application that is tracked.
tracking_offline_event_set_idsstring[]A list of Offline Event set IDs that are tracked.
tracking_message_event_set_idstringThe ID of the message event set that is measured in the Instant Messaging Ad.
vast_moat_enabledbooleanWhether 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_partnerstringPost-bid third-party viewability measurement partner. Enum values: `UNSET`, `MOAT`, `DOUBLE_VERIFY`, `IAS`, `ZEFR`.
viewability_vast_urlstringThe 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_partnerstringPost-bid third-party brand safety measurement partner. Enum values: `UNSET`,`DOUBLE_VERIFY`, `IAS`, `ZEFR`.
brand_safety_vast_urlstringThe 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_urlstringDefault Impression Tracking URL.
click_tracking_urlstringClick Tracking URL.
playable_urlstringPlayable material URL.
operation_statusstringOperation 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_statusstringAd status(Secondary status,See Enumeration - Secondary Status
creative_typestringCreative 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_namestringThe display name of app download ad
display_namestringThe display name of landing page or pure exposure ad.
profile_image_urlstringAvatar URL.
creative_authorizedbooleanWhether 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_acobooleanWhether the ad is an automated ad. Set to `true` for automated ad and `false` for non-automated ad.
is_new_structurebooleanWhether the campaign is a new structure (for the same campaign, the structure of campaign, adgroups and ads are the same).
optimization_eventstringConversion event for the ad group. See Conversion events for more.
page_infoobjectPagination information.
pagenumberCurrent page number.
page_sizenumberPaging size.
total_numbernumberTotal number of results.
total_pagenumberTotal 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

  1. Sign up for Partner
  2. Enable a data type of the Ads (Marketing API) group on the platform page
  3. Create an API key (tick the TikTok Business channel)
  4. Call it as in the examples above