OptionalmediaWhat the seller will actually deliver
Optionalmedia_buy_id?: stringSeller-assigned media buy identifier. Optional on a purchase-phase prepare/check because the service may not assign the identifier until commit; required on modification and delivery lifecycle checks.
Optionalproposal_id?: stringProposal snapshot being executed or currently governing the MediaBuy.
Optionalproposal_terms_digest?: stringDigest of the proposal commercial_terms. The governance agent compares it to the digest bound during the intent check.
Optionalgeo?: { countries?: string[]; regions?: string[] }Geographic targeting the seller will apply.
Optionalcountries?: string[]ISO 3166-1 alpha-2 country codes where ads will deliver.
Optionalregions?: string[]ISO 3166-2 subdivision codes where ads will deliver.
Optionalchannels?: MediaChannel[]Channels the seller will deliver on.
Optionalstart_time?: stringActual flight start the seller will use.
Optionalend_time?: stringActual flight end the seller will use.
Optionalfrequency_cap?: {Optionalsuppress?: DurationCooldown period between consecutive exposures to the same entity. Prevents back-to-back ad delivery (e.g. {"interval": 60, "unit": "minutes"} for a 1-hour cooldown). Preferred over suppress_minutes.
Optionalsuppress_minutes?: numberOptionalmax_impressions?: numberMaximum number of impressions per entity per window. For duration windows, implementations typically use a rolling window; 'campaign' applies a fixed cap across the full flight.
Optionalper?: ReachUnitEntity granularity for impression counting. Required when max_impressions is set.
Optionalwindow?: DurationTime window for the max_impressions cap (e.g. {"interval": 7, "unit": "days"} or {"interval": 1, "unit": "campaign"} for the full flight). Required when max_impressions is set.
Optionalaudience_summary?: stringHuman-readable summary of the audience the seller will target.
Optionalaudience_targeting?: [AudienceSelector, ...AudienceSelector[]]Structured audience targeting the seller will activate. Each entry is either a signal reference or a descriptive criterion. When present, governance agents MUST use this for bias/fairness validation and SHOULD ignore audience_summary for validation purposes. The audience_summary field is a human-readable rendering of this array, not an independent declaration.
Optionaltotal_budget?: numberTotal budget the seller will deliver against.
Optionaldaily_budget_cap?: numberHard aggregate daily spend ceiling the seller will enforce. Governance checks compare it with the authorized execution controls; it does not allocate spend to packages.
Optionalbudget_cap_timezone?: stringIANA timezone defining the calendar-day boundary for every daily cap on the planned media buy.
Optionalcurrency?: stringISO 4217 currency code for the budget. Governance execution checks require it whenever total_budget is present and require it to match the intent-authorized currency.
Optionalbudget_allocation?: BudgetAllocationSeller-accepted cross-package allocation authority and goals. Presence with seller_optimized mode means automatic within-buy reallocations are part of the committed delivery, not separate modification actions.
Optionalpacing?: PacingOptionalbidding?: {Seller-interpreted media-buy bidding policy used for governance and delivery transparency. Goal-bound controls follow budget-allocation scope semantics and monetary fields use the planned delivery currency. Package-authored overrides, including explicit automatic overrides, remain on packages rather than being copied into this aggregate field.
Optionalautomatic?: trueExplicitly use seller/provider automatic bidding at this authored scope. At package scope this is a complete override of a media-buy policy, not inheritance. It MUST be the only field in the block and MUST be preserved on readback.
Optionalbid_amount?: numberManual auction bid denominated in the media-buy currency and expressed per the selected pricing option's auction unit. For example, a CPM option interprets the amount per thousand impressions. This is the amount submitted to the auction, not a promise that the clearing price equals it. Requires an auction-priced pricing option whose currency equals the media-buy currency.
Optionalmax_bid?: numberHard per-auction ceiling denominated in the media-buy currency and expressed per the selected pricing option's auction unit. This is the only canonical hard auction ceiling and MUST NOT be translated into an average outcome-cost control. Requires an auction-priced pricing option whose currency equals the media-buy currency. May stand alone or supplement cost_per/roas only when the relevant scope capability advertises that combination.
Optionalcost_per?: { amount: number; strength: "cap" | "target" }Average cost control per result of the scope-bound primary optimization goal. At seller-optimized media-buy scope it binds to budget_allocation.optimization_goals; at package scope it binds to that package's optimization_goals; at fixed media-buy scope it binds independently to each inheriting package and is valid only when their primary-goal result units are compatible. Metric goals are compatible only when metric and every result-defining qualifier match; vendor_metric goals only when vendor and metric_id match; event goals only when the event_type/custom_event_name set and resolved attribution_window match. Primary is the earliest array entry among goals tied for the lowest explicit numeric priority; unprioritized goals follow explicitly prioritized goals; when all priorities are absent, the first entry is primary.
Average cost amount per scope-bound primary-goal result, denominated in the media-buy currency.
cap optimizes for an average at or below the amount and accepts underdelivery when necessary; target optimizes around the amount while balancing volume and spend. Neither is a per-result or per-auction guarantee.
Optionalroas?: { value: number; strength: "target" | "floor" }Dimensionless return-on-ad-spend control bound to the same scope-specific primary goal rules as cost_per. The bound goal must be value-bearing; a fixed media-buy default requires a value-bearing primary goal on every inheriting package. Every referenced value-bearing event source MUST declare value_currencies containing the media-buy currency. The seller validates this at buy creation; each buy consumes only exact-currency records, while other declared currencies remain available to other buys. Sellers MUST NOT perform currency conversion.
Return per unit of ad spend; 4 means 4 units of value per 1 unit spent.
floor prefers underdelivery to knowingly optimizing below the requested return; target optimizes around the requested return. Neither guarantees realized return.
Optionalenforced_policies?: string[]Registry policy IDs the seller will enforce for this delivery.
Optionalext?: ExtensionObjectOptionalphaseLifecycle phase of the check
OptionaldeliveryDelivery metrics for delivery-phase checks
Optionalstatement_id?: stringStable seller-issued identifier for this immutable delivery statement.
Optionalstatement_digest?: stringSHA-256 digest of RFC 8785 JCS over {seller_reference, delivery_metrics}, excluding statement_digest itself. The authenticated submission binds the seller to this digest.
Optionalsequence?: numberMonotonically increasing sequence for this governed action. A statement ID or sequence cannot be reused with different content.
Optionalissued_at?: stringWhen the seller issued the canonical statement.
Start and end timestamps for the reporting window.
Optionalspend?: numberTotal spend during the reporting period.
Optionalcumulative_spend?: numberTotal spend since the governed action started.
Optionalcurrency?: stringCurrency of spend fields; must match the plan and planned delivery.
Optionalimpressions?: numberImpressions delivered during the reporting period.
Optionalcumulative_impressions?: numberTotal impressions since the governed action started.
Optionalgeo_distribution?: { [k: string]: number | undefined }Actual geographic distribution. Keys are ISO 3166-1 alpha-2 codes, values are percentages.
Optionalchannel_distribution?: { [k: string]: number | undefined }Actual channel distribution. Keys are channel enum values, values are percentages.
Optionalpacing?: "ahead" | "on_track" | "behind"Whether delivery is ahead of, on track with, or behind the planned pace.
Optionalaudience_distribution?: {Actual audience composition during the reporting period. Enables mid-flight drift detection when actual delivery skews from planned audience targeting.
Population baseline used for index calculation. 'census': national census or equivalent population data. 'platform': the seller's active user base. 'custom': a custom baseline defined by the seller (describe in baseline_description).
Optionalbaseline_description?: stringDescription of the baseline when baseline is 'custom' (e.g., 'US adults 18+ with broadband access').
Audience index values for the current reporting period. Keys are seller-defined dimension:value strings (e.g., 'age:25-34', 'gender:female', 'income:high'). The protocol does not mandate a taxonomy — dimensions and value labels vary by seller. Values are index relative to the declared baseline (1.0 = at parity, >1.0 = over-indexed, <1.0 = under-indexed).
Optionalcumulative_indices?: { [k: string]: number | undefined }Cumulative audience index values since the governed action started. Same key format as indices (dimension:value). Use for detecting sustained bias drift that may not appear in a single reporting period.
OptionalmodificationSummary of changes for modification-phase checks
Opaque governance context from the buyer's protocol envelope.
OptionalexecutionRequired authoritative positive delta for modification checks.
AdCP 3.2 context-addressed execution request.