HTTP/2 301
location: https://developers.facebook.com/docs/marketing-api/ad-creative/asset-feed-spec/asset-customization-rules
strict-transport-security: max-age=15552000; preload
content-type: text/html; charset="utf-8"
x-fb-debug: 0jDPSp36Zj4+VjH6lubT3hPPp30TI8EG1o5MvGtNEsuuw2pC7YUtcYDUQB1gTS94AVc1N+ZY5jsvbJYhdrb3WA==
content-length: 0
date: Thu, 31 Jul 2025 09:45:45 GMT
x-fb-connection-quality: UNKNOWN; q=-1, rtt=-1, rtx=0, c=10, mss=1380, tbw=3535, tp=-1, tpl=-1, uplat=308, ullat=0
alt-svc: h3=":443"; ma=86400
HTTP/2 200
vary: Accept-Encoding
content-encoding: gzip
reporting-endpoints: coop_report="https://www.facebook.com/browser_reporting/coop/?minimize=0", coep_report="https://www.facebook.com/browser_reporting/coep/?minimize=0", permissions_policy="https://www.facebook.com/ajax/browser_error_reports/"
report-to: {"max_age":2592000,"endpoints":[{"url":"https:\/\/www.facebook.com\/browser_reporting\/coop\/?minimize=0"}],"group":"coop_report","include_subdomains":true}, {"max_age":86400,"endpoints":[{"url":"https:\/\/www.facebook.com\/browser_reporting\/coep\/?minimize=0"}],"group":"coep_report"}, {"max_age":21600,"endpoints":[{"url":"https:\/\/www.facebook.com\/ajax\/browser_error_reports\/"}],"group":"permissions_policy"}
x-frame-options: DENY
content-security-policy: default-src blob: 'self' https://*.fbsbx.com *.facebook.com *.fbcdn.net;script-src *.facebook.com *.fbcdn.net *.facebook.net 127.0.0.1:* 'nonce-ph4Nlbtu' blob: 'self' connect.facebook.net 'unsafe-eval' https://www.googletagmanager.com/gtag/js https://www.googletagmanager.com https://*.google-analytics.com https://translate.google.com *.google.com gw.conversionsapigateway.com;style-src *.fbcdn.net data: *.facebook.com 'unsafe-inline' https://fonts.googleapis.com;connect-src *.facebook.com facebook.com *.fbcdn.net *.facebook.net wss://*.facebook.com:* wss://*.whatsapp.com:* wss://*.fbcdn.net attachment.fbsbx.com ws://localhost:* blob: *.cdninstagram.com 'self' https://localhost:3103 wss://gateway.facebook.com wss://edge-chat.facebook.com wss://snaptu-d.facebook.com wss://kaios-d.facebook.com/ v.whatsapp.net *.fbsbx.com *.fb.com https://analytics.google.com https://*.analytics.google.com https://*.google-analytics.com https://*.googletagmanager.com https://stats.g.doubleclick.net gw.conversionsapigateway.com;font-src data: *.facebook.com *.fbcdn.net *.fbsbx.com https://fonts.gstatic.com;img-src *.fbcdn.net *.facebook.com data: https://*.fbsbx.com facebook.com *.cdninstagram.com fbsbx.com fbcdn.net connect.facebook.net *.carriersignal.info blob: android-webview-video-poster: *.whatsapp.net *.fb.com *.oculuscdn.com https://*.google-analytics.com https://*.googletagmanager.com https://www.googletagmanager.com https://www.googleadservices.com https://googleads.g.doubleclick.net *.doubleclick.net *.tenor.co *.tenor.com *.giphy.com https://trustly.one/ https://*.trustly.one/ https://paywithmybank.com/ https://*.paywithmybank.com/ dc.ads.linkedin.com analytics.twitter.com t.co;media-src *.cdninstagram.com blob: *.fbcdn.net *.fbsbx.com www.facebook.com *.facebook.com data: https://*.giphy.com;child-src data: blob: 'self' https://*.fbsbx.com *.facebook.com *.fbcdn.net;frame-src *.facebook.com *.fbsbx.com fbsbx.com data: www.instagram.com *.fbcdn.net https://www.googleadservices.com https://googleads.g.doubleclick.net https://www.google.com https://td.doubleclick.net *.google.com *.doubleclick.net https://trustly.one/ https://*.trustly.one/ https://paywithmybank.com/ https://*.paywithmybank.com/;manifest-src data: blob: 'self' https://*.fbsbx.com *.facebook.com *.fbcdn.net;object-src data: blob: 'self' https://*.fbsbx.com *.facebook.com *.fbcdn.net;worker-src blob: *.facebook.com data: 'unsafe-eval';block-all-mixed-content;upgrade-insecure-requests;
document-policy: force-load-at-top
document-policy: include-js-call-stacks-in-crash-reports
permissions-policy: accelerometer=(), attribution-reporting=(), autoplay=(), bluetooth=(), camera=(), ch-device-memory=(), ch-downlink=(), ch-dpr=(), ch-ect=(), ch-rtt=(), ch-save-data=(), ch-ua-arch=(), ch-ua-bitness=(), ch-viewport-height=(), ch-viewport-width=(), ch-width=(), clipboard-read=(), clipboard-write=(), compute-pressure=(), display-capture=(), encrypted-media=(), fullscreen=(self), gamepad=(), geolocation=(), gyroscope=(), hid=(), idle-detection=(), interest-cohort=(), keyboard-map=(), local-fonts=(), magnetometer=(), microphone=(), midi=(), otp-credentials=(), payment=(), picture-in-picture=(), private-state-token-issuance=(), publickey-credentials-get=(), screen-wake-lock=(), serial=(), shared-storage=(), shared-storage-select-url=(), private-state-token-redemption=(), usb=(), unload=(self), window-management=(), xr-spatial-tracking=();report-to="permissions_policy"
cross-origin-resource-policy: cross-origin
cross-origin-embedder-policy-report-only: require-corp;report-to="coep_report"
cross-origin-opener-policy: unsafe-none
pragma: no-cache
cache-control: private, no-cache, no-store, must-revalidate
expires: Sat, 01 Jan 2000 00:00:00 GMT
x-content-type-options: nosniff
x-xss-protection: 0
origin-agent-cluster: ?1
strict-transport-security: max-age=15552000; preload
content-type: text/html; charset="utf-8"
x-fb-debug: 9m7c2F/2yuR8itQPAqMLl1LR/HWcRC+BJ54RxCcK++V2EXrhUsV6+hky/cf984sYMSzCp3T8qQfxX2prtxCBtA==
date: Thu, 31 Jul 2025 09:45:45 GMT
x-fb-connection-quality: UNKNOWN; q=-1, rtt=-1, rtx=0, c=10, mss=1380, tbw=3953, tp=-1, tpl=-1, uplat=793, ullat=0
alt-svc: h3=":443"; ma=86400
Asset Customization Rules - Marketing API - Documentation - Meta for Developers
Asset Customization Rules
Use this solution to define which creative assets you want to display in your ads. At the time of ad creation, you can pick the combination of assets you want to display, based on your asset custom rules. Examples of creative assets are images, videos, text and body of an ad.
We offer three APIs that use asset customization rules:
All ads using asset_feed_spec
must contain at least two target customization rules. If your creative uses asset_feed_spec
and includes less than two rules, you will not be able to create that ad.
Step 1: Create Campaign and Ad Set
You can create a standard ad campaign for Asset Custom Rules, but there are limitations:
API
Supported campaign objectives
Segment Asset Customization
APP_INSTALLS
, BRAND_AWARENESS
, CONVERSIONS
, LINK_CLICKS
, REACH
, VIDEO_VIEWS
.
Placement Asset Customization
APP_INSTALLS
, BRAND_AWARENESS
, CONVERSIONS
, LEAD_GENERATION
, LINK_CLICKS
, REACH
, VIDEO_VIEWS
.
Multi-Language Ads
APP_INSTALLS
, BRAND_AWARENESS
, CONVERSIONS
, LINK_CLICKS
, REACH
, VIDEO_VIEWS
.
For the Ad Set, use the standard ad set endpoint and set is_dynamic_creative
to false
.
To create an ad set in a campaign with optimization_goal
set to conversions
:
curl \
-F 'status=PAUSED'
-F 'name=Sample Ad Set'
-F 'campaign_id=<CAMPAIGN_ID>'
-F 'optimization_goal=OFFSITE_CONVERSIONS'
-F 'is_dynamic_creative=false'
-F 'lifetime_budget=1000'
-F 'promoted_object={"pixel_id": "<PIXEL_ID>", "custom_event_type": "PURCHASE"}'
-F 'billing_event=IMPRESSIONS'
-F 'bid_strategy=LOWEST_COST_WITHOUT_CAP'
-F 'targeting={"geo_locations": {"countries": ["US"]}}'
-F 'start_time=2019-04-02'
-F 'end_time=2019-04-09'
-F 'access_token=<ACCESS_TOKEN>'
https://graph.facebook.com/v23.0
/act_<AD_ACCOUNT_ID>/adsets
If you use asset_feed_spec
with an ad set optimized for APP_INSTALLS
, you should specify link_url
, such as https://www.abc.com
. The link_url
should be the same as object_store_url
in promoted_object
. You should provide only one link_url
parameter in asset_feed_spec
.
Step 2: Provide the ad creative
Provide your creative through asset_feed_spec
. An asset feed is a collection of different creative elements, such as image, titles, bodies, and so on. You can specify multiple creative assets for each asset type.
Create an asset_feed_spec
at /adcreative
. To apply customization options, set asset_customization_rules
inside your asset_feed_spec
.
After setup, verify your asset_feed_spec
:
curl -G
-d "access_token=<ACCESS_TOKEN>"
-d "fields=asset_feed_spec"
https://graph.facebook.com/v23.0
/<AD_CREATIVE_ID>
Step 3: Create your ad
When you create your ad, provide a reference to the creative ID. You can create multiple ads per ad set.
curl
-F 'name=Asset Custom Rule Ad'
-F 'adset_id=<ADSET_ID>'
-F 'access_token=<ACCESS_TOKEN>'
-F 'creative={
"creative_id": <CREATIVE_ID>,
}'
https://graph.facebook.com/v23.0
/act_<AD_ACCOUNT_ID>/ads
After creation: