Skip to main content
Retrieve creative delivery data including variant-level breakdowns with manifests and metrics. This task returns what variants were created from your creatives, what they looked like (via manifests), and how they performed. This is a Creative Protocol task. Call it on any agent that declares "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 both creative.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 populate roas and cost_per_acquisition on individual variant objects — spend cannot be attributed per-variant since it applies to the creative as a whole. These fields are meaningful only on creative.totals. by_event_type entries carry count and value per event type, but not spend-derived rates.
Platform-conditional fields. dooh_metrics is 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 use variant.ext for 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 include locale_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 the ext field on each variant, since engagement types vary by platform:
The 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 with selection_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. The manifest 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

Use preview_creative with request_type: "variant" to see what a specific variant looked like when served:
Since each variant includes its full 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, call get_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 used concept_id during upload, filter by concept to group related creatives.
  • variant_id scope: Variant IDs are unique within an agent and creative, not globally. Two agents may generate variants with the same variant_id value. 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_variants selection: Agents choose which variants to return when max_variants limits 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 large max_variants value.

Building a cross-agent dashboard

When aggregating delivery data from multiple agents into a unified view, follow this sequence:
  1. Collect: Call get_creative_delivery on each agent in parallel, using the same creative_ids filter.
  2. Normalize timezones: Convert each agent’s reporting_period to a common timezone before summing.
  3. Merge by creative_id: Group results by creative_id across agents. Sum totals (impressions, spend, clicks). Do not average derived metrics like ctr — recompute them from the summed components.
  4. Prefix variant_id: Create globally unique variant keys by combining agent_url + variant_id (e.g., https://sales.pinnaclemedia-example.com/var_a1b2c3). This prevents collisions when two agents assign the same variant ID independently.
  5. Group by concept_id: For campaign-level roll-ups, use concept_id to group related creatives across sizes and sellers. Pull the concept-to-creative mapping from list_creatives on each agent.

Capability declaration

Agents that support this task expose get_creative_delivery in their tool surface and declare Creative Protocol support through get_adcp_capabilities:
Buyers discover candidate creative agents through the registry, then confirm the live endpoint’s tool and get_adcp_capabilities surfaces. This applies to any endpoint implementing the Creative Protocol, including a sales agent with creative capabilities.