"creative" in supported_protocols and exposes the get_creative_delivery tool — whether that’s a dedicated creative service or a sales agent implementing the Creative Protocol.
Request Schema: /schemas/3.2.0-beta.0/creative/get-creative-delivery-request.json
Response Schema: /schemas/3.2.0-beta.0/creative/get-creative-delivery-response.json
Request Parameters
At least one scoping filter (media_buy_ids or creative_ids) is required.
* At least one of
media_buy_ids or creative_ids must be provided.
Response
Creative Object
Delivery metrics fields
Fields available on bothcreative.totals and each variant entry. Commonly-used subset — see the delivery-metrics schema for the full list including incrementality, brand lift, and broadcast metrics.
Spend-derived metrics. Sellers should not populateroasandcost_per_acquisitionon individualvariantobjects — spend cannot be attributed per-variant since it applies to the creative as a whole. These fields are meaningful only oncreative.totals.by_event_typeentries carrycountandvalueper event type, but not spend-derived rates.
Platform-conditional fields.dooh_metricsis present only for DOOH campaigns. Engagement fields (engagements,follows,saves,profile_visits,engagement_rate) are platform-specific; not all sellers emit them on standardized fields — some usevariant.extfor engagement data instead.
Variant Object
Each variant represents a specific execution: a fixed creative (Tier 1), an asset combination the platform selected (Tier 2), or a generated variant (Tier 3). For catalog-driven packages, each catalog item rendered as a distinct ad execution is a variant — the variant’s manifest includes the catalog reference with the specific item rendered.creative_id and variant_id are separate namespaces. The canonical build-to-delivery join is build_creative.variants[].build_variant_id → promoted creative_id → delivery creative_id. variant_id remains the platform’s served execution variant id.
Localized delivery attribution
For a localized creative, every returned execution MUST includelocale_variant_id and that value MUST exist in the creative’s authoritative
list_creatives.localization.variants[] set. This identifies the assets that
actually served after strict RFC 4647 Lookup, an explicit locale fallback, or
the default action and is required for every such path. When the selected
product format carries locale_policy, this value MUST also identify a variant
eligible under its accepted language ranges; buyer fallbacks and defaults never
bypass that seller constraint. variant_id remains the seller execution identity;
locale_variant_id is the buyer’s stable locale identity.
Derived metrics like ctr, completion_rate, roas, and cost_per_click are platform-calculated and may not equal naive division of their component fields due to rounding, attribution windows, or filtered impressions.
Tier Behavior
Tier 1: Standard Creatives
One creative maps 1:1 to one variant. The variant metrics match the creative totals.Platform engagement metrics
Social and feed-native platforms include engagement data in theext field on each variant, since engagement types vary by platform:
ext field is not standardized across platforms — each platform defines its own engagement schema. Buyers aggregating across social platforms should map platform-specific fields to a common model.
Tier 2: Asset Group Optimization
Buyer provides multiple asset alternatives using a format withselection_mode: "optimize". Platform tests combinations and returns the manifest for each variant showing which assets were selected.
Tier 3: Generative Creative
Platform generates variants from brand manifest and input contexts. Themanifest contains the generated assets — which may differ entirely from what the buyer submitted.
When the publisher uses AdCP content standards, generation_context can include an artifact reference linking the variant to the specific content (article, video, etc.) that triggered generation. Platforms can also use ext for vendor-specific context structures.
Previewing Variants
Usepreview_creative with request_type: "variant" to see what a specific variant looked like when served:
manifest, you can also pass the manifest directly to preview_creative as a standard single request to re-render it.
Relationship to delivery reporting
Use
media_buy_id + creative_id as join keys to correlate data across both responses.
When a sales agent implements both protocols, both tasks are available on the same agent URL. See Creative capabilities on sales agents for the full pattern.
Cross-agent aggregation
When running campaigns across multiple sellers, callget_creative_delivery on each agent separately and correlate results:
- Join key: Use
creative_id(buyer-assigned) to correlate the same creative across agents. If you usedconcept_idduring upload, filter by concept to group related creatives. variant_idscope: Variant IDs are unique within an agent and creative, not globally. Two agents may generate variants with the samevariant_idvalue. Prefix with the agent URL when building aggregated dashboards.- Timezone handling: Each agent may report in its own timezone via
reporting_period.timezone. Normalize to a common timezone before aggregating metrics. max_variantsselection: Agents choose which variants to return whenmax_variantslimits the result set. Most agents prioritize by impression volume (most-served first). For representative sampling, make multiple calls with different time ranges rather than relying on a single largemax_variantsvalue.
Building a cross-agent dashboard
When aggregating delivery data from multiple agents into a unified view, follow this sequence:-
Collect: Call
get_creative_deliveryon each agent in parallel, using the samecreative_idsfilter. -
Normalize timezones: Convert each agent’s
reporting_periodto a common timezone before summing. -
Merge by
creative_id: Group results bycreative_idacross agents. Sumtotals(impressions, spend, clicks). Do not average derived metrics likectr— recompute them from the summed components. -
Prefix
variant_id: Create globally unique variant keys by combiningagent_url + variant_id(e.g.,https://sales.pinnaclemedia-example.com/var_a1b2c3). This prevents collisions when two agents assign the same variant ID independently. -
Group by
concept_id: For campaign-level roll-ups, useconcept_idto group related creatives across sizes and sellers. Pull the concept-to-creative mapping fromlist_creativeson each agent.
Capability declaration
Agents that support this task exposeget_creative_delivery in their tool surface and declare Creative Protocol support through get_adcp_capabilities:
get_adcp_capabilities surfaces. This applies to any endpoint implementing the Creative Protocol, including a sales agent with creative capabilities.