Optionalcontext?: Omit<Omit<{}, "bank">, "authentication"> & { authentication?: unknown }Optionalgovernance_context?: stringOptionalnotification_type?: "scheduled" | "final" | "delayed" | "adjusted" | "window_update"Type of webhook notification (only present in webhook deliveries): scheduled = regular periodic update, final = campaign completed, delayed = data not yet available, adjusted = resending period with corrected data (same window), window_update = resending period with a wider measurement window (e.g., C3 superseding live, C7 superseding C3)
Optionalpartial_data?: booleanIndicates if any media buys in this webhook have missing/delayed data (only present in webhook deliveries)
Optionalunavailable_count?: numberNumber of media buys with reporting_delayed or failed status (only present in webhook deliveries when partial_data is true)
Optionalsequence_number?: numberSequential notification number (only present in webhook deliveries, starts at 1)
Optionalnext_expected_at?: stringISO 8601 timestamp for next expected notification (only present in webhook deliveries when notification_type is not 'final')
Half-open date range for the report: start is inclusive and end is exclusive. All periods use UTC timezone.
ISO 8601 start timestamp in UTC (e.g., 2024-02-05T00:00:00Z)
Exclusive ISO 8601 end timestamp in UTC (e.g., 2024-02-06T00:00:00Z for a report covering 2024-02-05)
Optionalcurrency?: stringISO 4217 currency code
Optionalattribution_window?: {Optionalpost_click?: {Post-click attribution window. Conversions occurring within this duration after a click are attributed to the ad.
Number of time units. Must be 1 when unit is 'campaign'.
Time unit. 'seconds' for sub-minute precision. 'campaign' spans the full campaign flight.
Optionalpost_view?: {Post-view attribution window. Conversions occurring within this duration after an ad impression (without click) are attributed to the ad.
Number of time units. Must be 1 when unit is 'campaign'.
Time unit. 'seconds' for sub-minute precision. 'campaign' spans the full campaign flight.
Optionalmodel?: AttributionModelOptionalaggregated_totals?: {Combined metrics across all returned media buys. Only included in API responses (get_media_buy_delivery), not in webhook notifications.
Total impressions delivered across all media buys
Total amount spent across all media buys
Optionalclicks?: numberTotal clicks across all media buys (if applicable)
Optionalcompleted_views?: numberTotal audio/video completions across all media buys (if applicable)
Optionalviews?: numberTotal views across all media buys (if applicable)
Optionalconversions?: numberTotal conversions across all media buys (if applicable)
Optionalconversion_value?: numberTotal conversion value across all media buys (if applicable)
Optionalcommissionable_value?: numberTotal settled conversion value eligible for revenue-share commission across all media buys (if applicable)
Optionalroas?: numberAggregate return on ad spend across all media buys (total conversion_value / total spend)
Optionalnew_to_brand_rate?: numberFraction of total conversions across all media buys from first-time brand buyers (weighted by conversion volume, not a simple average of per-buy rates)
Optionalcost_per_acquisition?: numberAggregate cost per conversion across all media buys (total spend / total conversions)
Optionalcompletion_rate?: number | nullAggregate completion rate across all media buys (weighted by impressions, not a simple average of per-buy rates). Null indicates the metric is not applicable to the aggregated buys (e.g. all non-video inventory).
Optionalreach?: numberDeduplicated reach across all media buys (if the seller can deduplicate across buys; otherwise sum of per-buy reach). Only present when all media buys share the same reach_unit. Omitted when reach units are heterogeneous — use per-buy reach values instead.
Optionalreach_unit?: ReachUnitUnit of measurement for reach. Only present when all aggregated media buys use the same reach_unit.
Optionalfrequency?: numberAverage frequency per reach unit across all media buys (impressions / reach when cross-buy deduplication is available). Only present when reach is present.
Number of media buys included in the response
Optionalmetric_aggregates?: (Cross-buy delivery aggregates partitioned by qualifier. Row-symmetric with package.committed_metrics and by_package[].missing_metrics — same atomic unit (scope, metric_id, qualifier) — so reconciliation collapses to a row-level join on the tuple. Granularity rule: one row per (metric_id, full-qualifier-set), reported at the finest available granularity; buyers re-aggregate up if they want a coarser view. Used only for metrics with non-empty qualifier sets — unqualified metrics (impressions, spend, media_buy_count, etc.) remain at the top of aggregated_totals. Mutual exclusion MUST: for any metric_id appearing in metric_aggregates, the corresponding top-level scalar in aggregated_totals MUST be omitted (not zeroed) — avoids duplicate sources of truth. The qualifier vocabulary on this delivery surface is closed today (additionalProperties: false, same content as committed_metrics.qualifier) but is expected to diverge from contract qualifier in future minors as transparency disclosures buyers don't commit to ship delivery-only (e.g., tracker_firing pending #3832 resolution). Each row carries a value plus inlined per-metric component fields (e.g., measurable_impressions and viewable_impressions for viewable_rate; spend and conversions for cost_per_acquisition). Per-buy totals keeps its flat shape — each buy is single-qualifier by definition; only the aggregate spans qualifiers. Qualifier-set drift across reports: when a campaign gains a new qualifier mid-flight (e.g., adds tracker_firing partitioning in week 2), prior periods' rows remain valid at their original granularity; buyers SHOULD NOT retroactively repartition.
Array of delivery data for media buys. When used in webhook notifications, may contain multiple media buys aggregated by publisher. When used in get_media_buy_delivery API responses, typically contains requested media buys.
Optionalerrors?: {Task-specific errors and warnings (e.g., missing delivery data, reporting platform issues)
Optionalsandbox?: booleanWhen true, this response contains simulated data from sandbox mode.
Optionalext?: Omit<Omit<{ [key: string]: unknown }, "bank">, "authentication"> & {Optionalsummary: string
Opaque authorization context issued only by an approved check_governance decision. Buyers attach it to governed requests across protocol roles (media buys, rights acquisitions, signal activations, creative services); receiving services persist it and forward it on subsequent execution and lifecycle checks. The context is the authoritative plan binding at service boundaries, so a service MUST NOT require a separate plan_id.
Governance agents MUST emit a compact JWS per the AdCP JWS profile. Verifiers validate standard authorization claims such as signature, issuer, audience, expiry, and replay protection, but intermediaries MUST NOT interpret embedded governance state for business logic. A conditions or denied verdict never carries an authorization context.
This is the primary correlation key for audit and reporting across the governance lifecycle.