What’s new in AdCP 3.2
AdCP 3.2 is generally available (published 2026-09-30). The release artifact is
3.2.1 and the wire pin is adcp_version: "3.2". The number 3.2.0 was never released (why). 3.1 stays supported for integrations pinned to "3.1", and nothing forces you to migrate.Try the proposal lifecycle
Ask Addie to walk you through discovery, negotiation, the hold, and acceptance, with a confirmation step at each gate. No membership or setup needed.
Build it
@adcp/sdk@14.0.0 and Python adcp==8.0.0 ship alongside 3.2.1 and embed it.Adopt it
Add the compact tools one at a time while your 3.1 traffic keeps working.
Why 3.2 matters
3.1 made agents safe to operate. 3.2 lets them run real media with the full power of the platforms they buy on, and prove what ran.- Platform power. Social and other self-optimizing platforms can take one shared budget, optimize it natively against the buyer’s cost controls, and plan to an outcome before the buy.
- Reliable Reporting. The reporting pipeline is part of the protocol, so a missing report shows up as missing (experimental).
- Data collaboration. Products declare how your audience data can reach them, including clean rooms and dataset shares (experimental).
- Compact lifecycle. One small tool per step of a buy, with MCP schemas 71–94% smaller: fewer tokens and less to implement.
- Trust you can check. AI-generated content is declared, do-not-run lists are honored, measurement says who measured it, and rights grants carry verifiable attestations (experimental).
Adopting 3.2 has a short list of requirements, and the stable-surface exceptions to 3.x compatibility are recorded in one place: 3.2 exceptions to 3.x compatibility. The two with the widest impact are
media_buy_status on create and update success, and RFC 8941 encoding for request signatures.
The 3.2 feature set
- Compact commercial lifecycle.
list_products,request_proposals,refine_proposals,decline_proposals,buy_products,accept_proposal, andcontrol_media_buy. - Targeting that survives execution. One model from discovery to readback, including age and demographic bases, named places, subdivisions, browser families, property exclusions, exact
null-clear semantics, and daypart time zones. - Frequency management. A MediaBuy-level cap counted across every package, structured product cap constraints, and a post-purchase cap-update action.
- Budgets, bidding, and pricing. Seller-optimized shared budgets with separately declared package controls, a
biddingblock, hard daily caps, atomic total-budget changes, revenue-share pricing, creative rotation, and a shared MediaBuyname. - Planning. Ask which dates are available, or which budget reaches a target outcome.
- Reliable Reporting 1.0 (experimental). Reporting obligations, immutable revisions, health, managed delivery, reconciled receipts, and a buyer-to-seller consumption-status loop.
- Delivery reporting and measurement. Metric narrowing, sortable and paginated breakdowns, delivery by format, time-based views, a
viewable_rategoal, first-party measurement disclosure, and dates on the seller’s reporting timezone. - Accounts and principals. Operator reconciliation, account time zones and currency, change notifications, an experimental account change feed, and an experimental authenticated-principal layer.
- Seller specialisms and channels.
sales-dooh(stable),sales-exchange,sales-retail-media, andsales-streaming-tv(preview). DOOH, OOH, radio, audio VAST, CTV experiences, and programmed channels. - Creative. Canonical formats as the default path, revision and served-variant identity, representation sets, tracker execution contracts, VAST 4.3 and validation, localization, and pixel density.
- Trust and runtime. Required
error.recovery, body-bound signing, a published signing-error vocabulary, non-authoritative MCP sessions, durable idempotency ledgers, and portable attestations. - Conformance. Preview buyer and orchestrator specialisms, a buyer-orchestrator certification track, owner-selectable Legacy and Strict Spec grading, and 3.2 request-signing vectors.
3.1 to 3.2 by the numbers
Seven of the new tools are the compact lifecycle. The rest are principal, reporting, account change-feed, notification-configuration, and governance-adjustment tasks.
The corpus grew, but each operation got lighter. The compact tools stop pulling every legacy mode, inline creative, and provenance branch into each call. Comparing the 3.1 bundled request and response schemas with the 3.2 MCP
2026-07-28 media-buy pairs:
These are schema artifact sizes, not request-body sizes or latency. The model-context profile presents input-only schemas; response schemas stay available to SDKs and validators.
Headline features
A media buy you can audit: the compact lifecycle
Each tool marks one business boundary:
Proposals carry typed
commercial_terms and an RFC 8785 terms_digest. That gives buyers one recovery rule: use control_media_buy inside the accepted terms, and request a new snapshot for anything that changes them. Sellers advertise the subset they serve in media_buy.lifecycle_tools. When that field is absent, use the 3.x facades (get_products, create_media_buy, update_media_buy), which stay available throughout 3.x.
The contract ends at acceptance. accept_proposal does not standardize invoicing, payment rails, FX, makegoods, or disputes. The 3.3 commercial-completion workstream covers what comes after. See Proposal negotiation.
Targeting and frequency that survive execution
- Discovery. Buyers put known values in
targeting_overlayand userequired_overlay_supportfor values they will choose later. Sellers price and forecast against the effective targeting and disclose material interpretation intargeting_resolution. Package readback echoes the exact committed targeting, includingplacement_selectionandcollection_selection. - New dimensions. Basis-aware age and portable demographic predicates, named places (
geo_places), country-aware ISO subdivisions, browser families, device-platform exclusion,property_list_exclude, and BCP 47 language ranges. Daypart runs on inventory-local time or one named IANA zone. - Clearing a dimension. On request-only inputs, omitting a dimension inherits or preserves it, a value replaces it, and
nullclears it. - Frequency. A root
frequency_capon the MediaBuy counts once across every package. Sellers advertise it throughmedia_buy.aggregate_frequency_capping, and products opt in throughmedia_buy_support. Products with limited package caps declare them inoverlay_support.frequency_cap_support. Theupdate_media_buy_frequency_capaction changes or clears the root cap after purchase. - No persistent identifier, no cap. A product that declares no persistent identifier (
Product.identity.persistent_identifier, experimental featuremedia_buy.product_identity) must reject capped purchases instead of accepting them without enforcement.
Budgets, bidding, pricing, and planning
- Shared budgets, honestly declared. A seller can optimize one shared
total_budgetacross packages under the buyer’s goals.media_buy.features.seller_optimized_budgetcovers only that core contract plus media-buy-level pacing. Package budget caps, minimum-spend targets, and package pacing are separate capabilities (seller_optimized_package_budgets,seller_optimized_min_spend_targets,seller_optimized_package_pacing). A seller that lacks one rejects that control withUNSUPPORTED_FEATUREinstead of dropping it. Core sellers must accept omitted orevenpacing and may rejectasaporfront_loaded, and must not coerce them toeven. - Say which allocation you mean. Omitting
budget_allocationstill means fixed package budgets, but buyer agents should send{"mode": "fixed"}or aseller_optimizedblock explicitly, and ask the principal when the instruction is ambiguous. - Caps and bidding.
daily_budget_capis always hard, and onebudget_cap_timezonedefines the day. Total-budget changes are atomic. Abiddingblock separates the objective from automatic bidding, manual bids, ceilings, and ROAS controls. - Pricing and controls.
revenue_sharepricing applies acommission_rateto settledcommissionable_value. Package creative rotation can be weighted, even, sequential, or random. A shared MediaBuynamegives both sides one trafficking label. Structured warnings and durable indicators flag risks that need buyer attention. - Declines. Sellers can say why a request was declined with a coarse
decline_reason, without exposing private thresholds. - Planning.
offer_filters.availability_horizonanswers “which dates can I run?”criteria.outcome_targetanswers “what budget reaches 10,000 clicks?”, or, with an optionalcost_per, “what can I get at 3 or less per click on a 5,000 budget?”; the seller answers with a cost control never below the ask. Both are capability-gated, and availability answers are snapshots, never holds. - Products that say what they need before you buy (experimental). Products can declare
execution_requirements: the event source, catalog (includingapp), or downstream connection a package needs beforecreate_media_buysucceeds. The declaration is the same for every account, and an unmet requirement is rejected withVALIDATION_ERRORpointing at the binding. Sellers opt in withmedia_buy.execution_requirementsinexperimental_features; per-account readiness is planned for 3.3.
Reliable Reporting 1.0: missing data becomes visible
For every reporting period a seller owes, the buyer can see whether it is waiting, healthy, delayed, or needs action; whether an official revision exists; and whether that revision is correct even when it has zero rows. A missing obligation can’t drop out of the seller’s own denominator.
The buyer closes the loop with
sync_reporting_status, reporting what it received, missed, could not read, or disputes as a content_mismatch. The buyer owes a status by expected_at + automated_recovery_window_seconds, and a missed status never changes seller health. A seller restatement gets a re-read grace window before it escalates.
Reliable Reporting is experimental, discovered through media_buy.reporting_delivery with reliable_reporting_version: "1.0". sync_reporting_status is opt-in in 3.2 and becomes required Core in the next eligible minor, no earlier than October 24, 2026. See Implementing Reliable Reporting Core and the status-loop migration.
Delivery reporting and measurement buyers can act on
- Ask for what you need.
requested_metricsnarrows aget_media_buy_deliveryresponse. Breakdowns become negotiable (limit,sort_by,sort_direction), echo the sort they applied, disclose truncation, and page with cursors. - New cuts.
by_formatreports delivery per canonicalformat_kind.time_based_viewsseparates play-time from in-view counting. Leaf metrics such asquartile_100andviewable_ratecan be committed and sorted. - Optimize for viewability.
viewable_rateis a metric optimization goal. It requires a viewabilitystandard(mrcorgroupm) and accepts an optional measurementvendor. Theviewsgoal means content views as defined in delivery metrics (the CPV-billable quantity), not viewable impressions. - Dates on the seller’s clock. Delivery dates and
daily_breakdown[].dateare calendar dates in the products’reporting_capabilities.timezone, andreporting_period.timezoneechoes the zone applied. A dated or windowed (time_granularity) request that spans more than one reporting timezone is rejected withVALIDATION_ERROR. - Know who measured it.
vendor_relationship(first_party,affiliated, orthird_party) discloses seller-owned measurement.measurable_playsgives DOOH, cinema, and place-based channels a real denominator. - Report at the right grain. Demographic and spot-level (as-run) delivery, delivery by property, collection, and placement, and currency at media-buy or package grain. The response-wide
aggregated_totalsis deprecated.
Seller specialisms and channels
Underneath the specialisms:
- DOOH. Structured slot, loop, resolution, and motion attributes, with duration-weighted share of voice.
- Static OOH (experimental). Posting periods, modeled impressions, and proof of posting.
- Audio. The
audio_vastcanonical format,nielsen_audiodemographic notation, and loudness constraints. - CTV. Experience profiles for menu, pause, screensaver, overlay, squeezeback, and in-scene ads, built on existing canonical formats.
- Programmed channels. FAST, virtual linear, and syndicated audio streams become first-class
kind: "channel"collections with verified owner-sold carriage.
Accounts, principals, and change visibility
- Operator changes.
sync_accountscan rekey an account’s operator identity with revision checks. Former keys returnACCOUNT_MOVEDinstead of creating duplicates. - Account settings. Sellers declare account time zones and currency modes.
- Cache invalidation.
capabilities.changedandaccount.status_changedtell caches when to refresh. - Account change feed (experimental).
list_account_changesis an optional, capability-gated feed of material changes to a shared account, including changes made outside your own calls. It ships as experimental featureaccount.change_feedwhile RFC #6810 is open. - Authenticated principals (experimental).
sync_principalandget_principalhold a caller’s standing relationship with a seller: caller-level webhooks with a one-call kill switch, reusable reporting destinations, and declarations of which async versions, signing algorithms, and experimental features the caller can consume. Principal configuration never grants advertiser-account authority.
Creative: one traceable path from brief to replay
Canonical formats are the authoring and discovery path. Creative agents advertisecreative.supported_formats[].capability_id and operations, and products expose the formats they accept in format_options[]. For a generative campaign, one identity chain runs from brief to format selection, build, pre-flight preview, assignment, live delivery, and post-flight replay:
- Revision identity. Buyer-authored, immutable revision identity follows a creative through sync, review, library readback, and delivery attribution.
- Served-variant identity. Makes post-flight preview replay unambiguous.
- Representation sets and paired redirects. Say exactly what gets delivered.
- Tracker execution contracts. Tell buyers, before spend, which pixel, VAST, and DAAST trackers will fire.
- VAST. VAST 4.3, three validation levels (
structural,document,wrapper), and three VAST error codes catch unplayable tags before serve time.
quality_used, structured accessibility rejection detail, synthetic-depiction provenance, and buyer-pushed catalog item suppression. list_creative_formats remains only for compatibility; exact plural format_ids fields are deprecated for removal in 4.0.
Trust and runtime hardening
- Errors. Every 3.2 error carries
error.recovery, andretry_afteris an integer. Classification comes before retry: a delay never makes acorrectableorterminalerror retryable. 28 new standard codes and versioned error-recovery vectors let SDKs pin behavior. - Request integrity. Request signing stays optional in 3.x. A 3.2 signing endpoint covers
content-digeston every body and encodes values as RFC 8941sf-binary. A published signing-error vocabulary lets SDKs classify failures without guessing, and 3.2 request-signing vectors let acovers_content_digest: "required"verifier grade checklist steps 2–12. Signing becomes required for spend-committing operations in 4.0. - Sessions and replay. Verifiers derive identity and authorization from each request, never from
Mcp-Session-Id. Idempotency ledgers outlive the resources they create, andCOMMITTED_RESOURCE_PURGEDreports writes committed before their resource was purged. - Evidence. Portable, reference-first attestations back audience evidence, rights grants, and runtime signal quality. OAuth discovery consistency is graded. Product and signal agents can declare
anonymous_discovery. - Transports. Compact MCP
2026-07-28schemas, a 128 KiB MCP interoperability target, the A2A 1.0 profile extension, and cross-transport async identity rules.
Conformance that grades both sides of the trade
- Buyer and orchestrator agents get their own preview specialisms:
buyer-discovery,buyer-activation,buyer-negotiation,buyer-monitoring,buyer-recovery, andorchestrator-multi-agent. Together they form a buyer-orchestrator compliance track with three certification levels. Preview specialisms can be claimed, and the runner reports apreviewresult instead of a verified pass or fail. - Capability-scoped grading. Storyboards resolve against what an agent actually advertises, and fixture gaps grade as not applicable instead of failing.
- Grading profiles. Verified-agent owners can choose Legacy or Strict Spec grading.
- Badges. 3.2 badges are issued once hosted grading moves to the
3.2.1compliance bundle, graded against3.2.1with a"3.2"advertisement and response echo; prerelease runs are diagnostic only. See AAO Verified. - Reference agent. The public training agent answers
"3.2"and moves to the3.2.1bundle with@adcp/sdk@14.0.0.
Experimental surfaces in 3.2
Experimental surfaces in 3.2 include campaign governance (governance.campaign), Trusted Match (trusted_match.core), audience activation (media_buy.audience_activation), product identity (media_buy.product_identity), execution requirements (media_buy.execution_requirements), Reliable Reporting (media_buy.reporting_delivery), principals (protocol.principal), the account change feed (account.change_feed), measurement (measurement.core, measurement.gateway), the static OOH delivery block, and the seller_rendered_stateful_display and coordinated_placements canonical formats. The full registry is in experimental status.
To use them, inspect experimental_features and pin an exact release. 3.2 carries announced breaking changes for two of them:
- Governance. Task-scoped enforcement, intent-only conditions, and new required delivery-observation fields. See the cross-role governance migration.
- Trusted Match. Publisher authentication, provider-attributed key-values, and
macrosrenamed tocreative_data.
What to change when you adopt 3.2
SDKs. TypeScript
@adcp/sdk@14.0.0 (npm latest) and Python adcp==8.0.0 ship alongside 3.2.1 and embed it. Go and Java support for final 3.2 is planned as a follow-up. Both 3.2 SDK lines still call and serve 3.0 and 3.1 peers.
Start here
- Follow Migrating from 3.1 to 3.2.
- Pick an SDK in Choose your SDK.
- Run your agent against the
3.2.1compliance bundle. See Validate your agent. - Use the Release Notes for the full record, or the 3.2 prerelease history if you pinned a beta or RC.