Migrating catalogs
AdCP 3.0 removes thepromoted_offerings creative asset type and the promoted_offering string field from media buys and creative manifests. Catalogs are now first-class protocol objects with their own sync task, format-level requirements, and conversion event alignment.
What changed
| v2 field | v3 field | Change type |
|---|---|---|
promoted_offerings (creative asset type) | catalog assets in creative manifest assets | Replaced |
promoted_offering (string on media-buy) | Removed | Removed |
promoted_offering (string on creative-manifest) | catalog assets in assets | Replaced |
| No catalog sync | sync_catalogs task | New |
| No format catalog requirements | catalog asset type on Format assets | New |
| No catalog-event linking | conversion_events on Catalog | New |
Creative manifests
What changed
In v2, catalog data was embedded insidecreative_manifest.assets as a promoted_offerings object that bundled brand identity, inline offerings, and SI agent URL together.
In v3, brand identity is a first-class parameter on tasks (build_creative, sync_creatives), and catalogs are included as catalog asset types in the manifest’s assets.
Before (v2)
After (v3)
- Brand identity comes from the
brandparameter on the task, not embedded in creative assets - Catalogs are
catalogasset types in theassetsmap, keyed by a role name (e.g.,product_catalog) - Catalog references synced data by
catalog_idinstead of inlining items (though inline items are still supported for simple cases)
Media buys
What changed
Thepromoted_offering string field is removed from media buy objects. What’s being promoted is now expressed through the brief on get_products/create_media_buy and through catalog references on creatives.
Before (v2)
After (v3)
promoted_offering for reporting or display purposes, that context now comes from:
- The
brieffield onget_productsandcreate_media_buy - The
brandparameter on tasks - Catalog assets in creative manifest
assets
Syncing catalogs (new in v3)
Thesync_catalogs task lets buyers push catalog data to sellers before submitting creatives. This replaces the pattern of embedding product data inside creative assets.
Key features:
- Bulk sync with per-catalog results
- Async approval workflow (working, input-required, submitted)
- Item-level review with approve/reject per catalog item
- Discovery mode — omit the catalogs field to see existing synced catalogs
- Validation modes — strict, lenient, or dry_run
Workflow
- Discover what catalogs a format needs via
catalogasset types in the format’sassets - Sync those catalogs using
sync_catalogs - Wait for approval if the seller requires review
- Submit creatives that reference the synced
catalog_id
Catalogs documentation
Complete reference including all 13 catalog types, sync workflow, and item-level review.
Format catalog requirements (new in v3)
Formats declare catalog needs ascatalog asset types in their assets array:
asset_type: "catalog" with a requirements object containing:
| Field | Type | Description |
|---|---|---|
catalog_type | string | Required. The catalog type (e.g., product, store, job) |
min_items | integer | Minimum items the catalog must contain |
max_items | integer | Maximum items the format can render |
required_fields | string[] | Fields that must be present on every item |
feed_formats | string[] | Accepted feed formats (e.g., google_merchant_center, linkedin_jobs) |
promoted_offerings in their assets — the requirement is now explicit and discoverable.
Creative agent migration
Creative agents that read format definitions to determine catalog requirements need to change how they discover and fulfill catalog slots. Before (v2) — checking a dedicatedcatalog_requirements field:
assets array and filtering by asset_type:
asset_id from the format definition:
asset_id (e.g., product_catalog) from the format’s assets array becomes the key in the manifest’s assets object.
Conversion event alignment (new in v3)
Catalogs declare which event types represent conversions for their items:log_event is sent with content_ids matching catalog items, the platform knows which events to attribute.
The content_id_type field declares what identifier type content_ids values represent. For vertical catalogs, this matches the item’s canonical ID field (job_id, hotel_id, etc.). For product catalogs, it distinguishes between sku and gtin for cross-retailer matching. Omit when using a custom identifier scheme.
| Catalog type | Typical conversion events |
|---|---|
product | purchase, add_to_cart |
hotel | purchase (booking) |
flight | purchase (booking) |
job | submit_application |
vehicle | lead, schedule |
real_estate | lead, schedule |
education | submit_application, complete_registration |
destination | purchase (booking) |
Conversion events
Full documentation on catalog-event alignment.
product_selectors replaced by catalog on get_products
Theproduct_selectors field on get_products has been replaced by catalog. The PromotedProducts schema has been removed.
Before
After
Field mapping
Old (product_selectors) | New (catalog) |
|---|---|
manifest_gtins | gtins |
manifest_skus | ids |
manifest_tags | tags |
manifest_category | category |
manifest_query | query |
Response changes
product_selectors_appliedis nowcatalog_appliedcatalog_match.matched_skusis nowcatalog_match.matched_ids
New fields on Product
catalog_types— Array of catalog types this product supports (e.g.,["product"],["job", "offering"])catalog_match.matched_ids— Generic item ID matches (replacesmatched_skus)catalog_match.matched_count— Count of matched items
Catalog on packages
Packages now accept acatalog field for catalog-driven campaigns. One budget envelope promotes an entire catalog, with the platform optimizing delivery across items.
Store catchment targeting
targeting_overlay now supports store_catchments — referencing synced store catalogs for proximity targeting.
Per-catalog-item delivery
get_media_buy_delivery now includes by_catalog_item breakdowns within packages for catalog-driven campaigns.
Migration steps
Remove promoted_offerings from creative assets
Remove
promoted_offerings objects from creative_manifest.assets. Brand identity is now provided via the brand task parameter.Add catalog assets to creative manifests
For creatives that render catalog items (product carousels, store locators, etc.), add catalog assets to the manifest’s
assets map. Each catalog asset is a catalog object with type and catalog_id (e.g., { "type": "product", "catalog_id": "winter-products" }).Remove promoted_offering from media buys
Remove the
promoted_offering string from create_media_buy requests. Use the brief field to describe what’s being promoted.Discover catalog requirements
Call
list_creative_formats and check for catalog asset types in each format’s assets to understand what catalog types and fields are needed.Sync catalogs before submitting creatives
Use the
sync_catalogs task to push catalog data to sellers. Handle async approval if the seller requires review.Add conversion events and content ID type for attribution
Include
conversion_events on catalogs to link catalog items to your conversion tracking setup. Add content_id_type to declare what identifier type (e.g., sku, gtin, job_id) the event’s content_ids should be matched against.Related: Channels | Pricing | Geo targeting | Creatives | Attribution | AdCP 3.0 overview