list_products is the side-effect-free entry point to the compact product lifecycle. Each invocation completes synchronously, while account-level wholesale feed webhooks keep long-lived buyer mirrors current without polling. It returns products only—never proposals. Buyers can purchase listed products through buy_products or pass returned product_id values to request_proposals for seller planning.
Request schema: /schemas/3.0.23/media-buy/list-products-request.json
brand is an identity-only key. Sellers resolve its canonical manifest from the domain; callers do not send logos, colors, or governance overrides in this request. Catalog ingestion belongs to sync_catalogs; discovery accepts only a compact catalog selection under criteria.catalog.
offer_filters select commercial offers. targeting_overlay instead constrains the inventory or impressions that may deliver, so every returned price and forecast must account for the effective overlay. required_overlay_support asks for targeting dimensions the buyer can select independently on packages later; it does not request one product per metro or guarantee availability for every future value.
When a product can honor the overlay exactly, it does not echo the request. A product that proposes a different executable overlay returns sparse targeting_resolution.modifications; selecting that configured product accepts those disclosed changes.
Response
Every response has an explicitoutcome:
A product page can include continuation and cache state:
if_feed_version. Include if_pricing_version only when if_feed_version is also present:
products:
Wholesale feed webhooks
Buyers maintaining a wholesale product mirror registerproduct.* and wholesale_feed.bulk_change subscribers through sync_accounts.accounts[].notification_configs[]. Registration is account-level and durable; push_notification_config on an individual list_products request does not create that subscription.
The normal mirror flow is:
- Call
list_productsto bootstrap the mirror and storefeed_versionpluscache_scope. - Register the durable account subscriber through
sync_accounts. - Apply the webhook’s
canonical_productorcanonical_pricing_optionsreplacement payload directly. - On a gap, call
list_productswith the mirror’s last successfully appliedfeed_version. On an uncertain or bulk-change repair, omit the conditional token and replace the mirror from a complete read.