Create Meta Video Ad
create_meta_video_adCreates a Meta video ad. Give EITHER video_id (already uploaded via upload_meta_video — reusable) OR video_url (Meta fetches and processes it asynchronously). Thumbnail: image_hash, image_base64 or image_url — Meta REQUIRES a cover image; if you omit it, one is auto-generated from the video's own frame. To reuse a video already published on the Page (including Reels), take video_url from list_meta_page_posts and pass it here. page_id REQUIRED. cta_type = the button (LEARN_MORE | SHOP_NOW | SIGN_UP | BUY_NOW | WHATSAPP_MESSAGE | SEND_MESSAGE | INSTAGRAM_MESSAGE | ...) — leave EMPTY to auto-pick from the ad set's messaging destination, else the campaign objective. INSTAGRAM DM ADS: an ad set with destination_type=INSTAGRAM_DIRECT only delivers with cta_type INSTAGRAM_MESSAGE; LEARN_MORE creates the ad but Meta kills delivery with 1487891, and MESSAGE_PAGE/SEND_MESSAGE is rejected on Instagram (2875003). For Click-to-WhatsApp/Messenger/Instagram-DM video ads (cta_type WHATSAPP_MESSAGE / SEND_MESSAGE / INSTAGRAM_MESSAGE) you can pre-fill the chat: welcome_message = the ready-written text that auto-populates the user's compose box, greeting = optional in-thread greeting, ice_breakers = up to 4 tappable quick replies (≤80 chars each; if given they replace the auto-fill). MUSIC / AUDIO / SOUNDTRACK: a video ad already carries the audio embedded in the video file — that is how you ship a SPECIFIC song. enhancements=['ai_music','subtitles','video_auto_crop',...] (or music=true) enrol the video in Meta's Advantage+ creative features; the response reports enhancements_applied vs enhancements_not_applied. INSTAGRAM IDENTITY: by default Meta derives the Instagram account from page_id, which silently picks one when the Page has several — pass instagram_user_id (from list_meta_instagram_accounts) to choose it explicitly. Either way the response returns the instagram_user_id the ad ACTUALLY runs from, so you can confirm the identity without opening Ads Manager. LEAD ADS (Instant Form): pass lead_gen_form_id and the button opens Meta's instant form instead of a website — pair it with a LEAD_GENERATION ad set (promoted_object page_id) and cta_type SIGN_UP / APPLY_NOW / GET_QUOTE. You can build the form itself here too (create_meta_lead_form) or reuse one made in Meta Ads Manager (Page > Instant Forms) by passing its ID. If Meta answers (#200) the account was connected before this permission was granted — reconnect Meta from the panel once. confirm=false = preview.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| link | No | ||
| name | Yes | ||
| music | No | ||
| status | No | PAUSED | |
| confirm | No | ||
| message | No | ||
| page_id | Yes | ||
| adset_id | Yes | ||
| cta_type | No | ||
| greeting | No | ||
| headline | No | ||
| video_id | No | ||
| image_url | No | ||
| video_url | No | ||
| account_id | Yes | ||
| image_hash | No | ||
| enhancements | No | ||
| ice_breakers | No | ||
| image_base64 | No | ||
| welcome_message | No | ||
| lead_gen_form_id | No | ||
| instagram_user_id | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||