create_ad_from_manifest
Creates a PAUSED ad from a manifest entry with full validation, duplicate detection, and placement enforcement (Facebook/Instagram). Supports video ads, manual or auto-generated copy, and dry-run mode for safe testing.
Instructions
Create an ad from a manifest entry (always PAUSED, manifest-driven, no exceptions).
Loads the manifest entry, detects creative mode, resolves identity, checks for duplicates, validates pre-write, creates the ad, and verifies post-write.
INSTAGRAM GATE: Enforced via placement_mode parameter.
full_meta (default): requires IG identity, BLOCKS if unavailable
facebook_only: explicit FB-only, no IG placements
instagram_only: requires IG identity, BLOCKS if unavailable
For video ads: provide meta_video_id from upload_video_asset + poll_video_processing. The video must be in 'ready' state before calling this tool.
Args: account_id: Ad account ID (e.g., 'act_123456789'). adset_id: Target ad set ID. logical_creative_id: ID of the creative entry in the manifest (e.g., 'lc_example_brand_001'). manifest_json: JSON string containing the manifest or a single creative entry. Must include the logical_creative_id entry with variants, CTA, etc. ad_name: Name for the ad. Greek text validated. page_id: Facebook Page ID for the ad identity. destination_url: Primary destination URL for the ad CTA. primary_text: Primary text / message body. Required for manual mode, optional for auto/hybrid. cta_type: Call to action type (default 'SHOP_NOW'). See VALID_CTA_TYPES. headline: Optional headline text. Auto-generated if copy_mode='auto' and not provided. description: Optional description text. Auto-generated if copy_mode='auto' and not provided. instagram_user_id: Optional IG user ID. If not provided, attempts resolution from account. destination_url_override: If set, overrides manifest URL. Logged explicitly. cta_override: If set, overrides manifest CTA. Logged explicitly. primary_text_override: If set, overrides manifest primary text. Logged explicitly. headline_override: If set, overrides manifest headline. Logged explicitly. copy_mode: 'manual' (default), 'auto' (generate from vault), 'hybrid' (fill gaps). angle_name: Marketing angle for auto/hybrid copy generation. icp_name: Target ICP for auto/hybrid copy generation. funnel_stage: 'tofu', 'mofu', 'bofu' for copy tone/structure. dry_run: If true, runs all validation but does not create the ad. Returns what would be created.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| adset_id | Yes | ||
| logical_creative_id | Yes | ||
| manifest_json | Yes | ||
| ad_name | Yes | ||
| page_id | Yes | ||
| destination_url | Yes | ||
| primary_text | No | ||
| cta_type | No | SHOP_NOW | |
| headline | No | ||
| description | No | ||
| instagram_user_id | No | ||
| meta_video_id | No | ||
| destination_url_override | No | ||
| cta_override | No | ||
| primary_text_override | No | ||
| headline_override | No | ||
| copy_mode | No | manual | |
| angle_name | No | ||
| icp_name | No | ||
| funnel_stage | No | tofu | |
| dry_run | No | ||
| placement_mode | No | full_meta |