create_tiktok_campaign

TikTok Ads Write

User wants to create a TikTok ad campaign with IMAGES, Spark Ads, or Carousel ads (not video)

Endpoint

POST https://api.adspirer.ai/api/v1/tools/create_tiktok_campaign/execute

Headers

Description

User wants to create a TikTok ad campaign with IMAGES, Spark Ads, or Carousel ads (not video). LONG-RUNNING TOOL: Creates a TikTok In-Feed ad campaign with image creatives, Spark Ads (boost organic posts), or Carousel ads. Supported creative types: - Standard Image Ads: Provide asset_bundle_id or existing_image_ids - Spark Ads: Provide tiktok_item_id to boost an existing organic TikTok post as a paid ad - Carousel Ads: First call create_tiktok_carousel_card to get a card_id, then provide card_id + card_type here - App Promotion: Set objective=APP_PROMOTION + app_id for app install campaigns Emits MCP progress updates during campaign creation (typically 15-30 seconds). Progress stages: validate - commit. CRITICAL WARNING: - Call this tool ONLY ONCE per campaign - Creates REAL campaigns that cost REAL money - Do NOT retry automatically if errors occur - Report errors to user instead of retrying YOUR ROLE: TikTok Ads Campaign Strategist BEFORE calling this tool, YOU MUST: 1. Prepare Assets (choose ONE method): - METHOD A: Upload new images - Call `validate_and_prepare_tiktok_assets` with image URLs - Get `asset_bundle_id` - Use in create_tiktok_campaign - METHOD B: Reuse existing images - Call `discover_tiktok_assets` to browse library - Get `existing_image_ids` - Use in create_tiktok_campaign 2. Research the business: - Understand products/services, target audience - Review brand messaging and offers - Consider TikTok-specific creative best practices (authentic, engaging, mobile-first) 3. Craft compelling ad creative: - Ad text: 12-100 chars (50 or less recommended for no truncation) - Write for TikTok's young, mobile audience - Use casual, authentic language - Include clear call-to-action 4. Define targeting: - Locations: Default is USA, can specify others - Age groups: TikTok audience skews younger (18-34) - Gender: Unless product is gender-specific, use GENDER_UNLIMITED Required Fields: 1. campaign_name - Descriptive name (auto-suffixed with timestamp) 2. budget_daily - Minimum $20/day for image ads 3. ad_text - Main message (12-100 chars, 50 recommended) 4. display_name - Brand name (max 40 chars) 5. landing_page_url - HTTPS URL where users land 6. asset_bundle_id OR existing_image_ids - Choose one Optional Fields: - target_locations - List of TikTok location IDs (default: USA) - target_age_groups - Age ranges to target - target_gender - Gender targeting (default: all) - advertiser_id - TikTok advertiser account What happens when you call this tool: 1. Creates Campaign with daily budget 2. Creates Ad Group with targeting and auto-bidding 3. Uploads images to TikTok (if using asset_bundle_id) OR links existing images 4. Creates Ad with your creative 5. Campaign goes ACTIVE immediately Idempotency Support: - If creation fails partway, partial state is logged (campaign_id, ad_group_id) - You can retry with same parameters - system will resume from checkpoint - Prevents duplicate campaigns Execution time: 15-30 seconds (TikTok API has 10-second image processing wait) Error handling: - If validation fails: Error message with specific issue - If TikTok API fails: Error with partial state IDs for manual cleanup - Check TikTok Ads Manager for partial campaigns Best Practices: - Start with smaller budgets ($20-50/day) and scale what works - Test multiple ad variations (different images, text) - Monitor performance in TikTok Ads Manager after 2-3 days - TikTok learning phase is ~7 days - don't make changes too quickly - Use vertical 9:16 images - horizontal images won't work well

Request body

All tool arguments are wrapped in an arguments object.

FieldTypeDescription
campaign_namestring requiredCampaign name (will be automatically suffixed with timestamp for uniqueness)
objectivestring optionalCampaign objective. Options: 'TRAFFIC' (website visits), 'CONVERSIONS' (website conversions), 'LEAD_GENERATION' (leads), 'REACH' (maximum impressions), 'VIDEO_VIEWS' (video views), 'APP_PROMOTION' (app installs — requires app_id). Default: TRAFFIC default: "TRAFFIC"
app_idstring optionalTikTok app ID for APP_PROMOTION campaigns. Required when objective is APP_PROMOTION.
app_promotion_typestring optionalApp promotion type for APP_PROMOTION campaigns. Options: 'APP_INSTALL' (new installs), 'APP_RETARGETING' (re-engage existing users). Default: APP_INSTALL
budget_dailynumber optionalDaily budget in account currency (minimum varies by region, typically $20-50/day). Mutually exclusive with budget_lifetime.
budget_lifetimenumber optionalLifetime budget in account currency (total spend over campaign duration). Requires schedule_end_time. Mutually exclusive with budget_daily.
schedule_end_timestring optionalCampaign end time in format 'YYYY-MM-DD HH:MM:SS'. Required when using budget_lifetime. Optional with budget_daily.
budget_optimize_onboolean optionalCampaign 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.
asset_bundle_idstring optionalAsset bundle ID from validate_and_prepare_tiktok_assets tool. Use this for NEW image uploads. Mutually exclusive with existing_image_ids.
existing_image_idsarray optionalList of existing TikTok image IDs from discover_tiktok_assets tool. Use this to REUSE images from TikTok Asset Library. Mutually exclusive with asset_bundle_id.
ad_textstring requiredAd text (1-100 characters). Recommended: 50 characters or less for no truncation.
display_namestring requiredBrand/business name displayed on the ad (max 40 characters)
landing_page_urlstring requiredLanding page URL (must be HTTPS).
call_to_actionstring optionalCall-to-action button text. Options: 'LEARN_MORE', 'SHOP_NOW', 'SIGN_UP', 'DOWNLOAD', 'CONTACT_US', 'APPLY_NOW', 'BOOK_NOW', 'GET_QUOTE', 'SUBSCRIBE', 'ORDER_NOW', 'BUY_NOW', 'GET_OFFER', 'WATCH_NOW'. Default: auto-selected by TikTok.
pixel_idstring optionalTikTok Pixel ID for conversion tracking. Required for CONVERSIONS objective.
optimization_eventstring optionalConversion event to optimize for when pixel_id is provided. Options: COMPLETE_PAYMENT, ON_WEB_CART (add to cart), ON_WEB_DETAIL (view content), ON_WEB_REGISTER (registration), FORM (form submit), CONVERSION_LEADS (lead gen), INITIATE_ORDER, PAGE_VISIT, CLICK_LANDING_PAGE, ON_WEB_SUBSCRIBE, PHONE_CONNECT, CONSULT, SEARCH, SUBSCRIBE, DOWNLOAD_FINISH. Default: COMPLETE_PAYMENT
target_locationsarray optionalList of TikTok location IDs. Default: ['6252001'] (United States). Common IDs: USA=6252001, UK=2635167, Canada=6251999, Australia=2077456.
target_age_groupsarray optionalAge groups to target. Options: 'AGE_13_17', 'AGE_18_24', 'AGE_25_34', 'AGE_35_44', 'AGE_45_54', 'AGE_55_100'. Default: all 18+.
target_genderstring optionalGender targeting: 'GENDER_UNLIMITED', 'GENDER_MALE', 'GENDER_FEMALE'. default: "GENDER_UNLIMITED"
interest_category_idsarray optionalInterest category IDs for interest-based targeting. Get IDs from TikTok Ads Manager or search_tiktok_interests tool.
audience_idsarray optionalCustom audience IDs to include (DMP audiences, lookalikes).
excluded_audience_idsarray optionalCustom audience IDs to exclude.
languagesarray optionalLanguage targeting codes (e.g., ['en', 'es']). Default: all languages.
placement_typestring optionalPlacement type: 'PLACEMENT_TYPE_AUTOMATIC' (recommended) or 'PLACEMENT_TYPE_NORMAL' (manual). Default: PLACEMENT_TYPE_AUTOMATIC.
placementsarray optionalManual placement selection (when placement_type=PLACEMENT_TYPE_NORMAL). Options: 'PLACEMENT_TIKTOK', 'PLACEMENT_PANGLE', 'PLACEMENT_GLOBAL_APP_BUNDLE'.
operating_systemsarray optionalTarget device OS. Options: 'ANDROID', 'IOS'. Default: all.
video_download_disabledboolean optionalDisable video download on TikTok. Default: false (users can download).
comment_disabledboolean optionalDisable comments on ads. Default: false (comments allowed).
tiktok_item_idstring optionalTikTok organic post ID for Spark Ads. Boosts an existing TikTok post as a paid ad. The post's video/content becomes the ad creative. Get the post ID from TikTok Ads Manager > Spark Ads. When using Spark Ads, asset_bundle_id and existing_image_ids are NOT required.
card_idstring optionalCarousel card ID for multi-card image ads. Create carousel cards first in TikTok Ads Manager, then provide the card ID here. When using carousel, asset_bundle_id and existing_image_ids are NOT required.
card_typestring optionalCarousel card type: 'IMAGE' (image carousel) or 'PRODUCT' (product catalog carousel). Required when card_id is provided.
advertiser_idstring optionalTikTok advertiser ID. Required for multi-account users. Get from list_connected_accounts.

Example request

{
  "arguments": {
    "campaign_name": "string",
    "ad_text": "string",
    "display_name": "string",
    "landing_page_url": "https://example.com",
    "objective": "TRAFFIC",
    "app_id": "string",
    "app_promotion_type": "string",
    "budget_daily": 1.0,
    "budget_lifetime": 1.0,
    "schedule_end_time": "string"
  }
}

Example responses

200 — Success

{
  "success": true,
  "data": {
    "text": "(tool-specific textual output for create_tiktok_campaign)",
    "quota": {
      "used": 42,
      "limit": 150,
      "tier": "plus",
      "period_end": "2026-05-01"
    }
  },
  "tool": "create_tiktok_campaign"
}

400 — Tool-level error (bad arguments / multi-account selection)

{
  "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_campaign"
}

402 — Quota exhausted

{
  "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_campaign",
  "quota": {
    "used": 150,
    "limit": 150,
    "tier": "plus",
    "period_end": "2026-05-01",
    "upgrade_url": "https://adspirer.ai"
  }
}

Try it live


Adspirer REST API — get an API key at adspirer.ai/keys · adspirer.ai