media_type_automation to control whether videos surface in ads and set to OPT_OUT as needed.3g2, 3gp, 3gpp, asf, avi, dat, divx, dv, f4v, flv, gif, m2ts, m4v, mkv, mod, mov, mp4, mpe, mpeg, mpeg4, mpg, mts, nsv, ogm, ogv, qt, tod, ts, vob, or wmv.video_fetch_status may show as NO_STATUS until the video is used in an ad or another event that requires the video is triggered.video and add tags to the video. The video column can contain multiple video URLs per product and multiple tags per URL encoded in a JSON format. If you choose to use a tag column for the product set filter, you’ll need to add this column to the feed file too.[{"url": "http://www.jaspersmarket-example1.com/video-file.avi", "tag": ["Optional Tag1", "Optional Tag2"]},{"url": "http://www.jaspersmarket-example2.com/video-file.avi", "tag": ["Optional Tag1", "Optional Tag2"]}]<video> tags like:<video> <url>https://{URL1}</url> <tag>video_product_set1</tag> <tag>video_product_set2 </tag> </video> <video> <url>https://{URL2}</url> <tag>video_product_set1</tag> </video>
videos, videos_metadata, and video_fetch_status fields are available on the catalog APIs to retrieve catalog product video details.curl -i GET \
"http://graph.facebook.com/v25.0/<PRODUCT_ITEM_ID>?fields=videos,videos_metadata,video_fetch_status"
/{product_catalog_id}/items_batch endpoint. You can make a POST API call with the video field, which is an array of URLs.curl \ -d @body.json \ -H "Content-Type: application/json" > cat body.json { "access_token": "<ACCESS_TOKEN>", "item_type": "PRODUCT_ITEM", "requests": [ { "method": "CREATE", "data": { "id": "retailer-2", "availability": "in stock", "brand": "BrandName", "google_product_category": "t-shirts", "description": "product description", "image_link": "http://www.images.example.com/t-shirts/1.png", "title": "product name", "price": "10.00 USD", "shipping": [ { "shipping_country": "US", "shipping_region": "CA", "shipping_service": "service", "shipping_price_value": "10", "shipping_price_currency": "USD" } ], "condition": "new", "link": "http://www.images.example.com/t-shirts/1.png", "item_group_id": "product-group-1", "video": [ {"url": "http://www.jaspersmarket-example1.com/video-file.avi", "tag": ["Optional Tag1", "Optional Tag2"]}, {"url": "http://www.jaspersmarket-example2.com/video-file.avi", "tag": ["Optional Tag1", "Optional Tag2"]} ] } }, { "method": "UPDATE", "data": { "availability": "out of stock", "id": "retailer-3", "video": [ { "url": "https://yourvideo.com/demo.mp4?q=1411" }, { "url": "https://yourvideo.com/demo.mp4?q=1421" } ] } } ] }
act_<AD_ACCOUNT_ID>/adcreatives endpointmedia_type_automation to OPT_out to turn off catalog product videos from surfacing in ads.media_type_automation key works with Carousel, Collection, and Single Image formats.curl -X POST \
-F 'name=Dynamic Media Ad Creative' \
-F 'object_story_spec={
...
}' \
-F 'degrees_of_freedom_spec={
"creative_features_spec": {
"media_type_automation": {
"enroll_status": "OPT_IN"
}
}
}' \
-F 'product_set_id=<PRODUCT_SET_ID>' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/adcreatives
act_<AD_ACCOUNT_ID>/ads endpoint, the ad will begin delivering available catalog product videos by default. You may set the media_type_automation key to OPT_out to turn off catalog product videos from surfacing in ads.curl -X POST \
-F 'adset_id=<ADSET_ID>' \
-F 'creative={
"name": "Dynamic Media Ad Creative",
"object_story_spec": {
...
},
"degrees_of_freedom_spec": {
"creative_features_spec": {
"media_type_automation": {
"enroll_status": "OPT_IN"
}
}
},
"product_set_id": "<PRODUCT_SET_ID>"
}' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/ads
media_type_automation to OPT_OUT to turn off catalog product videos from surfacing in ads.curl -X POST \
-F 'name=Dynamic Media Ad Creative' \
-F 'object_story_spec={
"template_data": {
...
"format_option": "collection_video",
"link": "https://fb.com/canvas_doc/<CANVAS_ID>",
"message": "Your Collection Ad",
...
}
}' \
-F 'degrees_of_freedom_spec={
"creative_features_spec": {
"media_type_automation": {
"enroll_status": "OPT_IN"
}
}
}' \
-F 'product_set_id=<PRODUCT_SET_ID>' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/adcreatives
object_story_spec, change format_option to single_video. This is only available for single image/video format.curl -X POST \
-F 'adset_id=<ADSET_ID>' \
-F 'creative={
"name": "Dynamic Media Ad Creative",
"object_story_spec": {
"page_id": "<PAGE_ID>",
"template_data": {
...
"format_option": "single_video",
...
}
},
"product_set_id": "<PRODUCT_SET_ID>"
}' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/ads
object_story_spec, the format_option of single_image will show dynamic media when opted into media_type_automation.format_option of single_image will be opted into dynamic media by default and will surface available catalog product videos in ads. You may set media_type_automation to OPT_OUT to turn off catalog product videos from surfacing in ads.curl -X POST \
-F 'adset_id=<ADSET_ID>' \
-F 'creative={
"name": "Dynamic Media Ad Creative",
"object_story_spec": {
"page_id": "<PAGE_ID>",
"template_data": {
"format_option": "single_image"
}
},
"degrees_of_freedom_spec": {
"creative_features_spec": {
"media_type_automation": {
"enroll_status": "OPT_IN"
}
}
}
},
"product_set_id": "<PRODUCT_SET_ID>"
}' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/ads
video_crop_style field to control automatic video cropping. The available values are AUTO or NONE.video_crop_style to NONE, or remove customizations from the media_type_automation settings.curl -X POST \
-F 'adset_id=<ADSET_ID>' \
-F 'creative={
"name": "Dynamic Media Ad Creative",
"object_story_spec": {
...
},
"degrees_of_freedom_spec": {
"creative_features_spec": {
"media_type_automation": {
"customizations": {
"video_crop_style": "NONE"
},
"enroll_status": "OPT_IN"
}
}
},
"product_set_id": "<PRODUCT_SET_ID>"
}' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/ads
AUTO returns the auto-cropped video and NONE returns the original video.| Ads Manager metric | Ads Insights API field |
|---|---|
Impressions | impressions |
2-second continuous video plays | video_continuous_2_sec_watched_actions:video_view |
Cost per 2-second continuous video play (BRL) | cost_per_2_sec_continuous_video_view:video_view |
3-second video plays | actions:video_view |
Cost per 3-second video play (BRL) | cost_per_action_type:video_view |
ThruPlays | video_thruplay_watched_actions:video_view |
Cost per ThruPlay (BRL) | cost_per_thruplay:video_view |
Reach | reach |
Amount spent (BRL) | spend |
Video plays at 25% | video_p25_watched_actions:video_view |
Video plays at 50% | video_p50_watched_actions:video_view |
Video plays at 75% | video_p75_watched_actions:video_view |
Video plays at 95% | video_p95_watched_actions:video_view |
Video plays at 100% | video_p100_watched_actions:video_view |
Video plays | video_play_actions:video_view |
curl GET \
-d 'access_token=<ACCESS_TOKEN>' \
-d 'fields=impressions,video_continuous_2_sec_watched_actions,actions,video_thruplay_watched_actions' \
https://graph.facebook.com/v25.0/<AD_ID>/insights