Prerelease upgrade notes
If you adopted a prerelease version, review the relevant section below before upgrading. If you are migrating from v2, see the main migration guide.rc.3 → 3.0
Breaking for rc.3 adopters
Media buy status migration
pending_activation was a single state covering two distinct conditions. It has been split:
What to change:
- Status filters — Replace
pending_activationwith bothpending_creativesandpending_startinstatus_filterarrays onget_media_buysandget_media_buy_delivery. - Status comparisons — Any
if (status === 'pending_activation')needs to branch on which condition you’re checking. If you want “not yet serving,” check for bothpending_creativesandpending_start. If you want “ready but waiting for flight date,” check onlypending_start. - State machine transitions —
rejectedis now valid from bothpending_creativesandpending_start(previously only frompending_activation).pending_creatives→pending_starthappens when creatives are assigned viasync_creatives. - Legacy alias —
pendingcontinues to be accepted as an alias forpending_startin delivery response status filters.
Capabilities model simplification
PR #2143 removed redundant boolean capability fields. Object presence now signals support — if you have the object, you have the capability. Removed fields and replacements:
Before (rc.3):
preview_creative schema flattening
Thepreview_creative request is flattened from a oneOf union to a single object with a request_type discriminant. Three modes:
Before (rc.3):
schemas/creative/preview-creative-request.json
Governance lifecycle migration
media_buy_id is removed from governance schemas. governance_context is an opaque string that serves as the sole lifecycle correlator across sync_plans, check_governance, report_plan_outcome, and get_plan_audit_logs.
Before (rc.3):
schemas/governance/check-governance-request.json
context and ext fields
All request and response schemas across governance, collection, property, sponsored-intelligence, and content-standards protocols now include optionalcontext and ext fields for application metadata and protocol extensions.
Additive changes in 3.0
- RFC 9421 request signing profile (optional in 3.0, mandatory under AdCP Verified) — Ed25519 HTTP Message Signatures with canonicalized covered-component list. Published test vectors at
static/compliance/source/test-vectors/request-signing/. sf-binary encoding and URL canonicalization pinned for bit-identical canonical inputs. 15-step verification checklist withkeyidcap-before-crypto. - Webhook signing unified on RFC 9421 — Baseline-required for sellers emitting webhooks. Sellers publish a signing JWK in their JWKS at
jwks_uri; new signers useadcp_use: "request-signing"for webhook delivery, while deprecatedwebhook-signingkeys remain accepted during the compatibility window. Use a distinctkidif you want webhook-only key material. 14-step webhook verifier checklist in the Security guide. HMAC-SHA256 remains a legacy fallback through 3.x (the entireauthenticationobject is removed in 4.0). - Required
idempotency_keyon every webhook payload — Sender-generated UUID v4 across all five webhook payload schemas. Replaces fragile(task_id, status, timestamp)dedup.revocation-notification.notification_idrenamed toidempotency_keyfor protocol-wide consistency. check_governanceon every spend-commit — Governance invocation is required at commit, not just at plan approval. Closes the loophole where partial spends could skip governance.- Experimental status mechanism —
status: experimentalmarker for fields and tasks in production use but not yet under full stability guarantees.custompricing-model escape hatch on signals. submittedbranch oncreate_media_buy— Seller has accepted the payload for processing but has not yet confirmed the order. Distinct frompending_creativesandpending_start.- Time semantics +
activate_signalidempotency — Unifies time-field semantics across the protocol.activate_signaladded to the required-idempotency table. - Known limitations + privacy-considerations reference pages — New
/docs/reference/known-limitationsand/docs/reference/privacy-considerations. Platform-agnostic lint prevents vendor-specific language from creeping into the spec. - Signed JWS
governance_context— Governance decisions are now cryptographically verifiable. Sellers resolve the governance agent’s JWKS viasync_governanceand verifysub/aud/phase/expbefore honoring the decision. - Universal security storyboard — Every agent runs
/compliance/{version}/universal/security.yaml(unauth rejection, API key, OAuth/RFC 9728, audience binding). Agents declaring signing also run thesigned_requestsharness. - Cross-instance state persistence — Architecture spec requires persistent state (tasks, media buys, plans, signed artifacts, idempotency keys) across horizontally-scaled instances.
- Security implementation guide — New
docs/building/by-layer/L1/security.mdxdocuments threat model, three-principal model (brand / operator / agent), and verification paths. Retires ambiguous “principal” terminology. - GDPR Art 22 / EU AI Act Annex III as schema invariants — New registry policy
eu_ai_act_annex_iii.requires_human_reviewon policies and categories. Schema-level enforcement ofhuman_review_required: truefor regulated verticals. - Operating an Agent guide — New doc for publishers without engineering teams — three paths: partner, self-host, build.
- Release cadence policy — Named cadence: patch monthly, minor quarterly, major annual if needed. v2 EOL August 1, 2026.
- CHARTER.md — Formal governance charter published.
- Collection lists — Program-level brand safety using distribution identifiers (IMDb, Gracenote, EIDR) for cross-publisher matching. New targeting overlay fields (
collection_list,collection_list_exclude). New genre taxonomy enum. - Broadcast TV support — Ad-ID identifiers, broadcast spot formats (:15, :30, :60), Agency Estimate Number, measurement windows (Live, C3, C7), delivery data completeness (
is_final,measurement_window). - Offline reporting delivery —
reporting_delivery_methodson capabilities,reporting_bucketon accounts,supports_offline_deliveryon productreporting_capabilities. Avro and ORC added as file format options. - TMPX exposure tracking — Country-partitioned identity and macro connectivity for the Trusted Match Protocol execution layer.
- TMP provider registration —
provider-registration.jsonschema,GET /healthendpoint, dual discovery models (static config and dynamic API), per-provider latency budget semantics. - TMP multi-identity Identity Match —
identity-match-requestreplaces singleuser_token+uid_typewith anidentitiesarray (minItems 1, maxItems 3). Router filters per provider and re-signs with RFC 8785 JCS canonicalization; cache key addsconsent_hash. Addsrampid_derivedto theuid-typeenum. Breaking relative to prior pre-release TMP drafts only; TMP remains pre-release in 3.0 and stabilizes in 3.1.0. - GOVERNANCE_DENIED error — New correctable error code for governance-rejected operations.
- context/ext fields — Optional
contextandexton all request/response schemas across governance, collection, property, SI, and content-standards protocols. - Compliance testing capability — Agents include a
compliance_testing: { scenarios: [...] }block inget_adcp_capabilitiesdeclaring whichcomply_test_controllerscenarios they support. The block’s presence is the signal — compliance testing is NOT asupported_protocolsvalue. Storyboard runners use the block to determine whether deterministic testing steps can be validated. - Specialisms + compliance catalog — Storyboards ship in the protocol at
/compliance/{version}/(universal + protocols + specialisms + test-kits). Newspecialismsfield onget_adcp_capabilitieswith 19 values across 6 protocols. Per-version protocol tarball at/protocol/{version}.tgz. See the Compliance Catalog. - Structured measurement terms —
measurement_termson products and media buys for billing vendor, IVT threshold, and viewability floor negotiation.cancellation_policyon guaranteed products.viewability-standardenum.TERMS_REJECTEDerror code. - Unified vendor pricing —
pricing_options[]onlist_creatives,build_creative,get_creative_features, andproperty-list. Sharedvendor-pricing-option.jsonschema. - Per-request version declaration —
adcp_major_versionon all v3 request schemas.VERSION_UNSUPPORTEDerror code. Multi-version sellers supporting v2 clients must detect v2 payloads by structural cues, not by this field (v2 schemas do not have it). - Broadcast forecast schema —
measurement_source,packages, andguaranteed_impressionsonDeliveryForecast. Newforecast-range-unitandforecastable-metricenums. - Broadcast station identifiers —
station_idandfacility_ididentifier types.linear_tvproperty type. - Brand schema extensions — Generic
agentsarray onbrand.json. Visual tokens (border_radius,elevation,spacing, extended color roles). Structured font definitions. - Per-item error schema —
sync_creatives,sync_catalogs, andsync_event_sourcesresponse errors now useerror.jsonref. - Property relationship field —
relationshipon brand.json property definitions (owned,direct,delegated,ad_network) for bilateral verification withadagents.jsondelegation types. salesagent type restored —salesrestored tobrand-agent-typeenum. Sales agents (SSPs, publishers) are distinct from buying agents (DSPs, buyer platforms).- Required tasks reference — New reference page consolidating required, conditional, and optional tasks across all AdCP protocols by agent role.
- Storyboard validation fixes — 20+ validation bugs fixed across 11 storyboard files: corrected field paths (
creatives[0].action,media_buy_deliveries,renders[0].preview_url), added missingvalue:tofield_valuechecks, addedvalueproperty to storyboard validation schema.
rc.1 → rc.2
Potentially breaking for rc.1 adopters
Additive changes in rc.2
- Creative generation and preview —
build_creativeaddsinclude_preview,preview_inputs,preview_quality,preview_output_format,quality,item_limit, and multi-formattarget_format_ids. Buyers can now preview inline, choose draft vs production generation, and request multiple output formats in one call. - Creative library retrieval —
build_creativealso supports library retrieval usingcreative_id, optionalconcept_id,media_buy_id,package_id, andmacro_values, so ad servers and creative platforms can resolve stored creatives into delivery-ready manifests. - Creative capability discovery — Creative agents can declare
supports_generation,supports_transformation, andhas_creative_library.list_creativesnow uses library-oriented fields likeinclude_snapshot,has_served, anditems. - Product discovery and planning —
get_productsaddsexclusivity,preferred_delivery_types, andtime_budget, withincompletein the response. Products may omitdelivery_measurement, and packages can now carry per-packagestart_time/end_time. - Compliance and governance — Creative disclosures add persistence semantics, and campaign governance introduces
sync_plans,check_governance,report_plan_outcome, andget_plan_audit_logs. - Accounts and sandbox ergonomics —
sync_accountsaddspayment_terms, and sandbox now participates in the natural account key for buyer-declared account references.
Need help?
- Community: Slack — best for quick questions from other implementers
- Issues: GitHub Issues — for bugs, spec questions, or migration edge cases
- Full v2 → v3 migration: Migration guide