TikTok Ads Write
User wants to create a TikTok ad campaign with a VIDEO (not images)
POST https://api.adspirer.ai/api/v1/tools/create_tiktok_video_campaign/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 |
|---|---|---|
campaign_name | string required | Campaign name (will be automatically suffixed with timestamp for uniqueness) |
objective | string optional | Campaign objective. Options: 'TRAFFIC', 'WEB_CONVERSIONS' (website conversions — this is what TikTok uses today; requires pixel_id + optimization_event, get both from list_tiktok_pixels), 'CONVERSIONS' (legacy alias, still accepted), 'LEAD_GENERATION', 'REACH', 'VIDEO_VIEWS', 'APP_PROMOTION' (requires app_id). Default: TRAFFIC default: "TRAFFIC" |
app_id | string optional | TikTok app ID for APP_PROMOTION campaigns. Required when objective is APP_PROMOTION. |
app_promotion_type | string optional | App promotion type: 'APP_INSTALL' or 'APP_RETARGETING'. Default: APP_INSTALL. |
budget_daily | number optional | Daily budget in account currency. Mutually exclusive with budget_lifetime. |
budget_lifetime | number optional | Lifetime budget in account currency. Requires schedule_end_time. Mutually exclusive with budget_daily. |
schedule_end_time | string optional | Campaign end time 'YYYY-MM-DD HH:MM:SS'. Required for budget_lifetime. |
budget_optimize_on | boolean optional | Campaign Budget Optimization (CBO). TikTok default: true (enabled). When enabled, TikTok auto-distributes budget across ad groups. Set to false to manage budgets per ad group manually. |
video_url | string optional | Public video URL (Google Drive, Vimeo, Dropbox, etc.). Adspirer downloads + uploads to TikTok. Provide one of: video_url, video_id (pre-uploaded), or tiktok_item_id (Spark). |
video_id | string optional | Pre-uploaded TikTok video ID. Use this when the video already exists on the advertiser account (from a prior upload). Run list_tiktok_ad_videos to see the advertiser's video library and get this ID. Skips re-upload — faster than video_url. |
cover_image_url | string optional | Custom cover image URL (9:16, 1080x1920). Auto-generated if not provided. |
ad_text | string required | Ad text (1-100 characters). Recommended: 50 characters or less. |
display_name | string optional | Brand/business name displayed on the ad (max 40 characters). If not provided, uses the campaign name. |
landing_page_url | string optional | Landing page URL (must be HTTPS). Required for every objective EXCEPT a LEAD_GENERATION campaign using a TikTok Instant Form — there, supply page_id instead and omit this. |
call_to_action | string optional | CTA button: 'WATCH_NOW', 'LEARN_MORE', 'SHOP_NOW', 'SIGN_UP', 'DOWNLOAD', 'APPLY_NOW', 'BOOK_NOW', 'CONTACT_US', 'GET_QUOTE', 'SUBSCRIBE', 'ORDER_NOW'. Default: auto-selected. |
pixel_id | string optional | TikTok Pixel ID — must be the NUMERIC pixel ID (e.g. '1776777769'), NOT the alphanumeric Pixel Code (e.g. 'D7JNKABC77U588SOHT7G'). Run `list_tiktok_pixels` to get it plus the events this pixel supports. Required for WEB_CONVERSIONS. |
page_id | string optional | TikTok Instant Form page ID, for LEAD_GENERATION campaigns that collect leads in a native TikTok form. Run `list_tiktok_lead_pages` to get it (the form must be PUBLISHED). Omit it to run website/message lead gen instead, where the ad group's pixel captures leads on your own page. |
conversion_bid_price | number optional | Target cost per conversion (oCPM target CPA), in the account's currency. REQUIRED for LEAD_GENERATION campaigns — TikTok rejects them without it ('Please enter a cost per conversion') and its no-bid strategy is not supported for that objective. Optional for other objectives. |
optimization_event | string optional | Conversion event name. The valid set depends on the campaign objective and which events have been configured on the pixel. Common valid values include: ON_WEB_ORDER (purchase), ON_WEB_CART, ON_WEB_DETAIL, ON_WEB_REGISTER, LANDING_PAGE_VIEW, CLICK_LANDING_PAGE, FORM, START_TRIAL, SUBSCRIBE, DOWNLOAD_FINISH, SEARCH. Note: 'COMPLETE_PAYMENT' is rejected by some advertisers — TikTok will return 'optimization_event: one or more value of the param is not acceptable' with the exact list it accepts. |
target_locations | array optional | TikTok location IDs. Default: ['6252001'] (US). UK=2635167, Canada=6251999, Australia=2077456. |
target_age_groups | array optional | Age groups: 'AGE_13_17', 'AGE_18_24', 'AGE_25_34', 'AGE_35_44', 'AGE_45_54', 'AGE_55_100'. |
target_gender | string optional | Gender: 'GENDER_UNLIMITED', 'GENDER_MALE', 'GENDER_FEMALE'. default: "GENDER_UNLIMITED" |
interest_category_ids | array optional | Interest category IDs for targeting. |
audience_ids | array optional | Custom audience IDs to include. |
excluded_audience_ids | array optional | Custom audience IDs to exclude. |
languages | array optional | Language codes (e.g., ['en', 'es']). |
placement_type | string optional | 'PLACEMENT_TYPE_AUTOMATIC' (default) or 'PLACEMENT_TYPE_NORMAL' (manual). |
placements | array optional | Manual placements: 'PLACEMENT_TIKTOK', 'PLACEMENT_PANGLE', 'PLACEMENT_GLOBAL_APP_BUNDLE'. |
operating_systems | array optional | Target device OS. Options: 'ANDROID', 'IOS'. Default: all. |
video_download_disabled | boolean optional | Disable video download on TikTok. Default: false (users can download). |
comment_disabled | boolean optional | Disable comments on ads. Default: false (comments allowed). |
tiktok_item_id | string optional | TikTok organic post ID for Spark Ads. Boosts an existing TikTok post as a paid ad. The post's video becomes the ad creative instead of video_url. Get the post ID from TikTok Ads Manager > Spark Ads. |
card_id | string optional | Carousel card ID for multi-card ads. Create carousel cards first in TikTok Ads Manager. |
card_type | string optional | Carousel card type: 'IMAGE' or 'PRODUCT'. Required when card_id is provided. |
advertiser_id | string optional | TikTok advertiser ID. Required for multi-account users. Get from list_connected_accounts. |
{
"arguments": {
"campaign_name": "string",
"ad_text": "string",
"objective": "TRAFFIC",
"app_id": "string",
"app_promotion_type": "string",
"budget_daily": 1.0,
"budget_lifetime": 1.0,
"schedule_end_time": "string"
}
}
{
"success": true,
"data": {
"text": "(tool-specific textual output for create_tiktok_video_campaign)",
"quota": {
"used": 42,
"limit": 150,
"tier": "plus",
"period_end": "2026-05-01"
}
},
"tool": "create_tiktok_video_campaign"
}
{
"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": "create_tiktok_video_campaign"
}
{
"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": "create_tiktok_video_campaign",
"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