Migrating creatives
AdCP 3.0 makes three breaking changes to creative handling: theFormatCategory enum and format type field are removed, weighted creative assignments replace simple ID arrays, and a unified assets array replaces assets_required for format discovery.
Format category removal
What changed
| v2 field | v3 field | Change type |
|---|---|---|
type on format objects (FormatCategory enum) | Removed | Deleted |
format_types filter on list_creative_formats / get_products | Removed | Deleted |
Why
TheFormatCategory enum (video, display, audio, native, social, custom) was a coarse classifier that didn’t map well to multi-asset formats. A “video” format might also require display companion banners and text overlays. The enum forced implementors to pick one category for inherently multi-modal formats, which led to inconsistent filtering and discovery gaps.
Migration
Replaceformat_types filters with asset_types (what the format needs) or format_ids (exact match):
v2:
asset_types returns any format that includes at least one asset of that type — so a video format with companion banners appears in both ["video"] and ["image"] results.
Creative assignments
What changed
| v2 field | v3 field | Change type |
|---|---|---|
creative_ids (string array) | creative_assignments (object array) | Replaced |
Simple migration (equal weights)
v2:weight for equal distribution:
create_media_buy package:
weight is omitted on all assignments, impressions are distributed equally.
Weighted assignments
Control what percentage of impressions each creative receives:Placement targeting
Assign specific creatives to specific placements within a product:placement_ids is omitted, the creative runs on all placements in the package. placement_ids references placement_id values from the product’s placements array.
sync_creatives does not support placement_ids. Use create_media_buy or update_media_buy for placement-level targeting.Creative assignment schema
Each assignment object:| Field | Type | Required | Description |
|---|---|---|---|
creative_id | string | Yes | References a creative from list_creatives or sync_creatives |
weight | number (0-100) | No | Delivery weight. Omit for equal distribution. |
placement_ids | string[] | No | Target specific placements. Omit to run everywhere. |
Asset discovery
What changed
| v2 field | v3 field | Change type |
|---|---|---|
assets_required (string array) | assets (object array) | Replaced |
preview_image | format_card | Replaced |
Format assets
v2 — only listed required asset IDs:required boolean:
What the assets array provides
- Full discovery — see ALL assets a format supports, not just required ones
- Type information — each asset declares its
asset_type(image, video, text, url, etc.) - Requirements — inline constraints (dimensions, length, MIME types)
- Optional assets — trackers, companion banners, and other optional elements are now visible
- Repeatable groups — carousel and multi-item formats use
item_type: "repeatable_group"
Asset item types
Each entry in theassets array has an item_type discriminator:
Individual assets (item_type: "individual"):
item_type: "repeatable_group") for carousels and multi-item formats:
Format cards (replacing preview_image)
v2’spreview_image URL is replaced by format_card, which uses the creative rendering system:
Migration steps
Format category
Remove format_types filters
Remove
format_types from list_creative_formats and get_products requests.Replace with asset_types
Use
asset_types to filter formats by what assets they accept (e.g., ["video"], ["image"]).Or use format_ids
Use
format_ids for exact format matching when you know the specific formats you need.Creative assignments
Asset discovery
Check required boolean
Check
required boolean on each asset instead of assuming all listed assets are required.Creative
Full creative documentation: formats, asset types, manifests, and creative agents.
Related: Channels | Pricing | Geo targeting | Catalogs | Attribution | AdCP 3.0 overview