TikTok Ads Write
Add a new ad to an existing TikTok ad group
POST https://api.adspirer.ai/api/v1/tools/add_tiktok_ad/execute
Authorization: Bearer sk_live_... — your Adspirer API key (required)Content-Type: application/json (required)Idempotency-Key: <uuid> — recommended for write operations to make retries safeAll tool arguments are wrapped in an arguments object.
| Field | Type | Description |
|---|---|---|
adgroup_id | string required | Existing TikTok ad group ID to add the ad to |
ad_text | string required | Ad text (1-100 characters). |
landing_page_url | string required | Landing page URL (must be HTTPS). |
ad_name | string optional | Ad name. Auto-generated if not provided. |
ad_format | string optional | Ad format. **Auto-detected by Adspirer based on creative source** — video_url/video_id → SINGLE_VIDEO; image_urls (slideshow) / image_ids → SINGLE_VIDEO (TikTok in-feed rejects SINGLE_IMAGE). Pass explicitly only when you know what you're doing. |
display_name | string optional | Brand name (max 40 chars). |
call_to_action | string optional | CTA button text. Common: LEARN_MORE, SHOP_NOW, SIGN_UP, DOWNLOAD_NOW, INSTALL_NOW, ORDER_NOW, BOOK_NOW, APPLY_NOW, SUBSCRIBE, WATCH_NOW, CONTACT_US. Synonyms (DOWNLOAD, INSTALL, BUY_NOW) are auto-corrected. |
image_ids | array optional | TikTok image IDs from upload_tiktok_images (for SINGLE_IMAGE). |
image_urls | array optional | Public image URLs (HTTPS) — auto-uploaded to TikTok and routed through the slideshow path (image→video). |
video_id | string optional | TikTok video ID (for SINGLE_VIDEO format). Use when the video already exists on the advertiser. |
video_url | string optional | Public video URL (HTTPS, MP4/MOV). Adspirer downloads + uploads + extracts cover. Provide one of: video_url (auto-upload), video_id (already on advertiser), image_urls (slideshow), or tiktok_item_id (Spark). |
identity_id | string optional | Advertiser identity ID. **Auto-resolved by Adspirer**. Leave blank unless you specifically need to use a non-default identity (e.g. for Spark Ads with a particular TT_USER). Run list_tiktok_identities to see available IDs. |
identity_type | string optional | Identity type: BC_AUTH_TT (Business Center authorized — preferred) or TT_USER (for Spark Ads). **Auto-resolved by Adspirer**, leave blank in most cases. Note: CUSTOMIZED_USER was deprecated by TikTok in 2026-04 and is no longer accepted for new ads — Adspirer will reject it. |
tiktok_item_id | string optional | TikTok organic post ID for Spark Ads (boost existing TikTok posts as ads). |
card_id | string optional | Carousel card ID. |
card_type | string optional | Card type: IMAGE or PRODUCT. |
click_tracking_url | string optional | 3rd-party click tracking URL (DCM, IAS, Branch, AppsFlyer, etc.). Fired when a user clicks. Required by some agencies and brand-safety partners. |
impression_tracking_url | string optional | 3rd-party impression tracking URL. Fired on each impression. Pairs with click_tracking_url for full-funnel measurement. |
video_view_tracking_url | string optional | 3rd-party video-view tracking URL. Fired when a video view threshold is met. |
tracking_pixel_id | string optional | Numeric tracking-pixel ID for additional event measurement (separate from the conversion pixel). |
deeplink | string optional | App deep link (e.g. 'myapp://product/123'). Required for re-engagement and app-promotion campaigns to land users in the right in-app screen. |
deeplink_type | string optional | Deep link type: NORMAL, DEFERRED. NORMAL opens the app if installed; DEFERRED installs first then triggers the deep-link on first launch. |
fallback_type | string optional | Fallback when deep link fails (app not installed): APP_INSTALL, WEB_LANDING (use landing_page_url). |
disclaimer_text | string optional | Disclaimer text shown alongside the ad — required for regulated industries (financial services, healthcare, alcohol, etc.). **TikTok hard limit: 90 characters.** Backend wraps this in the OpenApiv13adcreateDisclaimerText SDK object automatically. Disclaimer is an allowlist-only feature; non-allowlisted accounts will see TikTok reject with 'feature not available'. |
disclaimer_clickable_texts | array optional | Clickable disclaimer text segments — schema: [{'text': '...', 'url': '...'}]. Use when disclaimer needs links to terms / risk-factor pages. |
disclaimer_type | string optional | Disclaimer type: TEXT_LINK (clickable, default for clickable_texts), TEXT_ONLY. TikTok Ads Manager → Compliance → Disclaimers shows the configured disclaimer presets. |
vertical_video_strategy | string optional | Video format strategy. **Live-verified accepted values** (TikTok 2026-05-04): SINGLE_VIDEO (single uploaded video, most common), CATALOG_VIDEOS (DPA from catalog, requires catalog.read scope), CATALOG_UPLOADED_VIDEOS (catalog with manual uploads), LIVE_STREAMING (TikTok Live shopping). Adspirer-default: omit and let TikTok auto-pick. |
item_duet_status | string optional | Allow user duets: ENABLE (creators can react/duet your ad — increases viral potential), DISABLE (brand-safety lockdown). Default: ENABLE. |
item_stitch_status | string optional | Allow user stitches: ENABLE (creators can stitch your ad), DISABLE. |
promotional_music_disabled | boolean optional | Disable TikTok's promotional commercial-music library. Required for some brand-safe placements when you only want your own audio. |
creative_authorized | boolean optional | Mark creative as authorized for use across all campaigns / ad-sets in this advertiser (creative library reuse). Default: false. |
dark_post_status | string optional | Dark post (only visible as ad, not on organic profile): ENABLE, DISABLE. Useful for A/B testing ad copy without polluting your organic feed. |
brand_safety_postbid_partner | string optional | Postbid brand-safety partner (DV, IAS, MOAT). Measures viewability and brand-safety after the bid is won. Different from pre-bid brand_safety_partner on the ad-group. |
brand_safety_vast_url | string optional | VAST tag URL for IAS/DV postbid measurement. |
viewability_postbid_partner | string optional | Viewability measurement partner: MOAT, DV, IAS. |
viewability_vast_url | string optional | VAST URL for postbid viewability measurement. |
vast_moat_enabled | boolean optional | Enable Moat viewability measurement integration. |
page_id | string optional | TikTok Page ID — for Instant Form ads, Custom Instant Page, or App Profile Page. Required for LEAD_GENERATION objective when using TikTok Instant Forms. Discover via list_tiktok_lead_forms (pending lead.read scope). |
advertiser_id | string optional | TikTok advertiser ID (optional). |
{
"arguments": {
"adgroup_id": "string",
"ad_text": "string",
"landing_page_url": "https://example.com",
"ad_name": "string",
"ad_format": "string",
"display_name": "string",
"call_to_action": "string",
"image_ids": [
"string"
],
"image_urls": [
"string"
]
}
}
{
"success": true,
"data": {
"text": "(tool-specific textual output for add_tiktok_ad)",
"quota": {
"used": 42,
"limit": 150,
"tier": "plus",
"period_end": "2026-05-01"
}
},
"tool": "add_tiktok_ad"
}
{
"success": false,
"error": "You have 25 meta_ads accounts connected. Please specify which account to use by passing the ad_account_id parameter:\n - Acme Holdings (ad_account_id=\"act_123456789\")\n - Acme EU (ad_account_id=\"act_987654321\")",
"is_error": true,
"tool": "add_tiktok_ad"
}
{
"success": false,
"error": "\ud83d\udea8 Monthly limit reached (150/150 tool calls on Plus tier).\nUpgrade to Pro at https://adspirer.ai to keep building.",
"is_error": true,
"tool": "add_tiktok_ad",
"quota": {
"used": 150,
"limit": 150,
"tier": "plus",
"period_end": "2026-05-01",
"upgrade_url": "https://adspirer.ai"
}
}
Interactive: Swagger UI
Machine-readable: OpenAPI 3.1 spec · llms-full.txt
More tools: TikTok Ads · All tools
Adspirer REST API — get an API key at adspirer.ai/keys · adspirer.ai