media_type_automation to control whether videos surface in ads and set to OPT_OUT as needed.video field.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_TAG_1>", "<OPTIONAL_TAG_2>"]}, {"url": "http://www.jaspersmarket-example2.com/video-file.avi", "tag": ["<OPTIONAL_TAG_1>", "<OPTIONAL_TAG_2>"]} ]
video tags like:<video> <url>https://<URL_1></url> <tag>video_product_set1</tag> <tag>video_product_set2 </tag> </video> <video> <url>https://<URL_2></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.video_fetch_status may show as NO_STATUS until the video is used in an ad or another event triggers video processing.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_TAG_1>", "<OPTIONAL_TAG_2>"]}, {"url": "http://www.jaspersmarket-example2.com/video-file.avi", "tag": ["<OPTIONAL_TAG_1>", "<OPTIONAL_TAG_2>"]} ] } }, { "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 endpoint:media_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=Product video 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 delivers available catalog product videos by default. 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": "Product video 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
curl -X POST \
-F 'name=Product video 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": "Product video 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 allow product video when opted into media_type_automation.curl -X POST \
-F 'adset_id=<ADSET_ID>' \
-F 'creative={
"name": "Product video 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": "Product video 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