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). - Property-list webhook signing defined — Property-list change deliveries use RFC 9421
Signature,Signature-Input, andContent-Digestheaders. The published 3.1 schema required a body-levelsignaturewithout defining an algorithm, signed bytes, or key discovery; 3.2 senders set that deprecated field to the compatibility markerrfc9421, while receivers accept any string from an older 3.x sender and ignore it for authentication. Keeping the marker required and unconstrained avoids a 3.x schema break; it is removed in 4.0. Collection-list webhook schema and behavior remain unchanged pending separately versioned work. - 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