Create an ad creative with the dynamic_creative flag set to true; in the asset_feed_spec, provide multiple images or videos, headlines, bodies, descriptions, and call-to-action objects as separate asset arrays.
Each asset type (image, headline, body) can contain multiple variants; Meta's system will automatically test combinations and serve the highest-performing variant to each viewer.
Reference the creative in an ad object where the ad set's optimization_goal and billing_event are compatible with dynamic creative; dynamic creative works with most objectives but verify compatibility for your specific objective before building.
Set the creative's degrees_of_freedom_spec to specify which asset types are allowed to be varied; this prevents Meta from mixing assets in unintended combinations.
After the ad goes live, query the ad's creative asset combinations performance via the Insights API using the asset_feed_card_id breakdown to see which specific combinations are driving results.
Regularly refresh creative assets (add new variants, retire underperformers) using the creative update endpoint; dynamic creative fatigue can set in as the algorithm converges on a narrow set of winners.
Known gotchas
Dynamic creative ads cannot be edited after they go live in most cases; to change the asset pool, you must create a new creative and a new ad — plan your initial asset set carefully before publishing.
The asset_feed_spec imposes limits on the number of variants per type; check the current documentation for per-asset-type caps, as exceeding them silently truncates the asset list rather than returning an error.
Dynamic creative reporting at the individual asset level uses the asset_feed_card_id breakdown in Insights, which requires explicit inclusion in your report fields; the standard ad-level report does not show which combinations performed best.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp