zuckerbot_create_ad
Create ONE new ad (a new creative built from a declared asset) in an EXISTING ad set of the connected ad account — the way to add a brand-new image or video into a campaign that is already running, including ZuckerBot-external campaigns.
Instructions
Create ONE new ad (a new creative built from a declared asset) in an EXISTING ad set of the connected ad account — the way to add a brand-new image or video into a campaign that is already running, including ZuckerBot-external campaigns. Dry-run by default: returns the exact object plan (1 new creative + 1 new ad) without creating anything; pass execute: true plus an idempotency_key to build it. The ad is ALWAYS created PAUSED — activating it is a separate deliberate action. Optionally pass images (1–10 labeled image_hash/image_url/file_path entries); multiple images use placement customisation with a dry-run placement_table. Local file_path works only in local stdio/CLI and uploads automatically on execute. Omitted placements are inferred from original 1:1, 4:5 or 9:16 dimensions; remaining ad-set placements use square or the first image. Explicit placements use platform.position or platform.position.device (e.g. facebook.feed.mobile). Every target placement/device is assigned once, including newer placements returned by Meta. No ad-set settings are changed. Multiple images currently require final_url and cta. Asset: IMAGE (image_hash from zuckerbot_upload_ad_asset, or image_url — uploaded to the library automatically) or VIDEO (video_id from zuckerbot_upload_ad_asset, which must be processed/ready; thumbnail auto-derived, thumbnail_url overridable). Destination: exactly one of final_url (website) or lead_form_id (instant form — requires cta). VIDEO ads carry their link in the call_to_action, so VIDEO + final_url also requires cta. To clone an ad that already exists in the account instead, use zuckerbot_duplicate_ad.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| cta | No | Uppercase Meta CTA type, e.g. LEARN_MORE or SIGN_UP (required for VIDEO ads and instant-form destinations) | |
| name | Yes | Name for the new ad | |
| images | No | Labeled images; choose exactly one hash, HTTPS URL or local file path per image. Mutually exclusive with the single-asset fields. | |
| execute | No | Default false (dry-run). Set true to actually create the PAUSED ad — requires idempotency_key | |
| headline | No | Headline | |
| video_id | No | VIDEO: Meta video id (from zuckerbot_upload_ad_asset; must be processed/ready) | |
| final_url | No | Website destination URL (exactly one of final_url or lead_form_id) | |
| image_url | No | IMAGE: https URL — uploaded to the ad-account library automatically on execution | |
| asset_type | No | IMAGE (image_hash or image_url) or VIDEO (video_id) | |
| image_hash | No | IMAGE: 32-char Meta library image hash from zuckerbot_upload_ad_asset for THIS ad account — hashes from the business media library or another ad account are rejected as image_hash_unusable | |
| business_id | No | Optional business ID override for the authenticated API key | |
| description | No | Description | |
| lead_form_id | No | Meta instant-form id on the connected Page (exactly one of final_url or lead_form_id; see zuckerbot_lead_forms) | |
| primary_text | No | Primary text / body copy | |
| thumbnail_url | No | VIDEO: optional https thumbnail override (default: derived from the processed video) | |
| thumbnail_hash | No | VIDEO: optional library image hash to use as the thumbnail | |
| idempotency_key | No | Required when execute is true. Generate once per logical operation (UUIDv4 recommended); reuse the identical value only when retrying the identical request | |
| target_adset_id | Yes | Numeric Meta ad set id to create the ad in (must be an EXISTING ad set in the connected ad account) |