User wants to add another ad/creative variation to an EXISTING ad set.
DO NOT USE to create a new campaign. For new campaigns:
create_meta_video_campaigncreate_meta_image_campaigncreate_meta_carousel_campaignCommon scenarios:
KEY DISTINCTION — add_meta_ad vs add_meta_ad_set:
add_meta_ad_set instead (creates a new ad set)Ads in the same ad set SHARE: targeting, budget, schedule, pixel tracking. Each ad has its OWN: creative (image/video/carousel), headline, primary text, CTA, landing page.
IMPORTANT: You need an ad_set_id from a previously created ad set. Use list_meta_ad_sets first if you don’t have the ad_set_id.
Supports all 3 ad types + Dynamic Creative:
image: Different image + copy variationvideo: Different video + copy variationcarousel: Different card set + copy variationimage_urls (2-10 images), headlines (up to 5), primary_texts (up to 5), descriptions (up to 5). Meta tests ALL combinations and optimizes delivery automatically.Dynamic Creative Optimization (DCO) workflow:
is_dynamic_creative=true via add_meta_ad_setimage_urls (list of 2-10 image URLs), plus optional headlines, primary_texts, descriptions arraysStandard workflow:
list_meta_ad_setsAPI key from https://adspirer.ai/keys. Prefix sk_live_. Treat as a secret — never commit.
Client-generated UUID to make writes idempotent. Strongly recommended for write tools. A repeat call with the same key returns the cached result instead of re-executing. Example: 550e8400-e29b-41d4-a716-446655440000
All tool arguments are wrapped in an arguments object. The fields accepted inside arguments are listed below — required fields are marked with a red asterisk.
Input schema for adding a new ad to an existing ad set
Tool executed successfully. data.text carries the human-readable result (markdown-friendly). data.quota shows your current usage against the plan limit. data.structured appears when the tool emits machine-parseable structured content. data.content appears for tools that return non-text blocks (images, resources).
Returned on HTTP 200. data.text is the primary human-readable output. data.quota is always present for billable calls. data.structured is set only when the tool emits machine-parseable structured content. data.content is set only when the tool emits non-text content blocks.