Ads and Commerce
Ads and Commerce
Resources

Placement Asset Customization

Updated: Oct 9, 2025
Use this solution to customize the creative assets displayed in different ad placements. Maintain control over the creative, while using several different placements.
Placement Asset Customization is one of our three APIs that use asset customization rules. Learn more about Asset Customization Rules.

Get Started

Placement Asset Customization with existing posts is no longer supported via the API. You can only use this option in Ads Manager.

Step 2: Provide Creative

Use asset_feed_spec to provide your creative. You can specify multiple creative assets for each asset type, including images, videos, carousels, headlines, and body text. Only provide one link description, since the link description cannot be customized per placement.
To apply customization:
  1. Set asset_customization_rules inside your asset_feed_spec.
  2. For each rule, add customization_spec and asset labels.
For Placement Asset Customization, every asset_feed_spec needs to have more than one customization rule attached to it.

Supported Properties


Property Name Description
customization_spec
Required.
Placements where you want to display the assets.
image_label
format: {"name": "{LABEL_NAME}"}
Required for SINGLE_IMAGE format.
Label of the image you want to display. It is attached to the image assets in asset_feed_spec.
video_label
format: {"name": "{LABEL_NAME}"}
Required for SINGLE_VIDEO format.
Label of the video you want to display. It is attached to the video assets in asset_feed_spec.
carousel_label
format: {"name": "{LABEL_NAME}"}
Required for CAROUSELS format.
Label of the carousel you want to display. It is attached to the carousel assets in asset_feed_spec.
Note: if providing carousels via Placement Asset Customization, all child attachments must be defined within the Asset Feed Spec and referenced via adlabels. Child attachments may not be defined inline. See Asset Feed Spec Options for more details on the carousels format.

Supported Fields in customization_spec


Property Name Description
publisher_platforms
Required.
Possible placements for your ad. Options are: facebook, instagram, messenger, audience_network, and threads.
facebook_positions
Optional, but required if Facebook is selected in publisher_platforms.
Facebook specific placement. Options are: feed, right_hand_column, marketplace, video_feeds, search, story, and notification.
instagram_positions
Optional, but required if Instagram is selected in publisher_platforms.
Instagram specific placements. Options are: stream, story, explore, explore_home, profile_feed and ig_search.
Note: The explore_home placement only supports the SINGLE_IMAGE format.
messenger_positions
Optional, but required if Messenger is selected in publisher_platforms.
Messenger specific placements. Options are: sponsored_messages and story.
audience_network_positions
Optional, but required if Audience Networks is selected in publisher_platforms.
Audience Network specific placement. Options are: classic, instream_video, and rewarded_video.
threads_positions
Optional, but required if Threads is selected in publisher_platforms.
Threads specific placement: threads_stream
Note: publisher_platform: instagram and instagram_positions: stream are required to select threads_positions: threads_stream.
Learn more about our available placement options.
Example — Feed Setup
curl -X POST \
  -F 'object_story_spec={
      "page_id": "<PAGE_ID>",
      "instagram_user_id": "<IG_USER_ID>",
    }' \
  -F 'asset_feed_spec={
      "videos": [{
        "adlabels": [{"name": "labelfb"}],
        "video_id": "<VIDEO_ID>"
      },
      {
        "adlabels": [{"name": "labelig"}],
        "video_id": "<VIDEO_ID>"
      }],
      "bodies": [{"text": "Begin Your Adventure"}],
      "link_urls": [{
        "website_url": "<WEBSITE_URL>",
        "display_url": "<DISPLAY_URL>"
      }],
      "titles": [{"text": "Level Up"}],
      "ad_formats": ["SINGLE_VIDEO"],
      "call_to_action_types": ["WATCH_MORE"],
      "descriptions": [{"text": "Description"}],
      "asset_customization_rules": [{
        "customization_spec": {
          "publisher_platforms": ["facebook"],
          "facebook_positions": ["feed","instream_video"]
        },
        "video_label": {
          "name": "labelfb"
        }
      },
      {
        "customization_spec": {
          "publisher_platforms": ["instagram"],
          "instagram_positions": ["stream"]
        },
        "video_label": {
          "name": "labelig"
        }
      }]
  }' \
  -F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/adcreatives
Example — Instagram Explore home Asset Customization
curl -X POST \
  -F 'object_story_spec={
      "page_id": "<PAG_-ID>",
      "instagram_user_id": "<INSTAGRAM_ID>",
    }' \
  -F 'asset_feed_spec={
    "ad_formats": ["SINGLE_IMAGE"],
    "asset_customization_rules": [{
      "image_label": {
        "name": "<IMAGE_LABEL>"
      },
      "customization_spec": {
        "publisher_platforms": ["instagram"],
        "instagram_positions": ["explore_home"]
      }
    }],
    "bodies": [{
      "text": "",
      "adlabels": [{
        "name": "adlabel1"
      },
      {
        "name": "adlabel2"
      }]
    }],
    "call_to_action_types": ["LEARN_MORE"],
    "images": [{
      "hash": "<IMAGE_HASH>",
      "adlabels": [{"name": "adlabel1"}]
    },
    {
      "hash": "<IMAGE_HASH>",
      "image_crops": {
        "100x100": [
          [
            604,
            0
          ],
          [
            1659,
            1055
          ]
        ]
      },
      "adlabels": [{"name": "adlabel2"}]
    }],
    "link_urls": [{
      "website_url": "<WEBSITE_URL>",
      "display_url": "<DISPLAY_URL>",
      "deeplink_url": "<DEEPLINK_URL>",
      "adlabels": [
        {
          "name": "adlabel1"
        },
        {
          "name": "adlabel2"
        }
      ]
    }],
    "optimization_type": "PLACEMENT",
    "titles": [{
      "text": "<TEXT>",
      "adlabels": [
        {
          "name": "adlabel1"
        },
        {
          "name": "adlabel2"
        }
      ]
      }]
  }' \
  -F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/adcreatives
Example - Instagram search results Asset Customization
curl -X POST \
  -F 'object_story_spec={
      "page_id": "<PAGE_ID>",
      "instagram_user_id": "<INSTAGRAM_ID>",
    }' \
  -F 'asset_feed_spec={
    "ad_formats": ["SINGLE_IMAGE"],
    "asset_customization_rules": [{
      "image_label": {
        "name": "placement_asset_f1048d832ecd558_1661539731099"
      },
      "customization_spec": {
        "publisher_platforms": ["instagram"],
        "instagram_positions": ["ig_search"]
      }
    }],
    "bodies": [{
      "text": "<TEXT>",
      "adlabels": [
        {
          "name": "adlabel1"
        },
        {
          "name": "adlabel2"
        }
      ]
    }],
    "call_to_action_types": ["LEARN_MORE"],
    "images": [{
      "hash": "9ffd7307eae1f9c6e5250fc8760d285f",
      "adlabels": [{"name": "adlabel1"}]
    },
    {
      "hash": "9ffd7307eae1f9c6e5250fc8760d285f",
      "image_crops": {
        "100x100": [
          [
            604,
            0
          ],
          [
            1659,
            1055
          ]
        ]
      },
      "adlabels": [{"name": "adlabel2"}]
    }],
    "link_urls": [{
      "website_url": "<WEBSITE_URL>",
      "display_url": "<DISPLAY_URL>",
      "deeplink_url": "<DEEPLINK_URL>",
      "adlabels": [
        {
          "name": "adlabel1"
        },
        {
          "name": "adlabel2"
        }
      ]
    }],
    "optimization_type": "PLACEMENT",
    "titles": [{
      "text": "",
      "adlabels": [
        {
          "name": "adlabel1"
        },
        {
          "name": "adlabel2"
        }
      ]
    }]
  }' \
  -F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/adcreatives
Example — Threads Feed Setup
curl -X POST \
  -F 'object_story_spec={
    "page_id": "<PAGE_ID>",
    "instagram_user_id": "<IG_USER_ID>",
    "threads_user_id" : "<THREADS_USER_ID>",
  }' \
  -F 'asset_feed_spec={
    "videos": [{
      "adlabels": [{"name": "labelfb"}],
      "video_id": "<VIDEO_ID>"
    },
    {
      "adlabels": [{"name": "labelig"}],
      "video_id": "<VIDEO_ID>"
    },
    {
      "adlabels": [{"name": "labelthreads"}],
      "video_id": "<VIDEO_ID>"
    }],
    "bodies": [{"text": "Begin Your Adventure"}],
    "link_urls": [{
      "website_url": "<WEBSITE_URL>",
      "display_url": "<DISPLAY_URL>"
    }],
    "titles": [{"text": "Level Up"}],
    "ad_formats": ["SINGLE_VIDEO"],
    "call_to_action_types": ["WATCH_MORE"],
    "descriptions": [{"text": "Description"}],
    "asset_customization_rules": [{
      "customization_spec": {
        "publisher_platforms": ["instagram"],
        "instagram_positions": ["stream"]
      },
      "video_label": {
        "name": "labelig"
      }
    },
    {
      "customization_spec": {
        "publisher_platforms": ["threads"],
        "threads_positions": ["threads_stream"]
      },
      "video_label": {
        "name": "labelthreads"
      }
    },
    {
      "customization_spec": {},
      "video_label": {
        "name": "labelfb"
      }
    }],
    "optimization_type": "PLACEMENT"
  }' \
  -F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v23.0/act_<AD_ACCOUNT_ID>/adcreatives

Optional Step 5: Read Ad Creative

For Placement Asset Customization ads, Instagram-related creative fields should be retrieved via act_<AD_ACCOUNT_ID>/ads. For example:
https://graph.facebook.com/v25.0/act_<AD_ACCOUNT_ID>/ads?fields=creative{effective_instagram_media_id,instagram_permalink_url}
Did you find this page helpful?
Thumbs up icon
Thumbs down icon