Documentation Index
Fetch the complete documentation index at: https://docs.adcontextprotocol.org/llms.txt
Use this file to discover all available pages before exploring further.
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
| Area | rc.3 | 3.0 | What to do |
|---|---|---|---|
idempotency_key on mutating requests | Optional | Required on every mutating request (schema ^[A-Za-z0-9_.:-]{16,255}$; UUID v4 for Verified). Sellers declare adcp.idempotency = { supported: true/false } on capabilities. | Generate fresh key per logical operation. Persist keys across agent instances. Declare adcp.idempotency on get_adcp_capabilities (sellers). When supported: true, handle IDEMPOTENCY_CONFLICT and IDEMPOTENCY_EXPIRED; conformance probes require a mutated-payload replay to return CONFLICT. When supported: false, use natural-key checks instead of blind retries. See Security Β§ Idempotency. |
| Webhook signing | HMAC-SHA256 with push_notification_config.authentication (required) | RFC 9421 profile (baseline-required for sellers); HMAC fallback available through 3.x via authentication.credentials | Publish the webhook-signing JWK in your JWKS at jwks_uri (referenced from brand.json agents[]). Set adcp_use: "webhook-signing" on the JWK itself (NOT as a field on the agents[] entry), and keep kid unique across purposes within the JWKS. Drop push_notification_config.authentication from new configs; buyers opt into legacy HMAC via authentication.credentials. Receivers verify against the senderβs JWKS. The entire authentication object (HMAC + Bearer) is removed in 4.0. |
idempotency_key on webhook payloads | Not standardized (fragile (task_id, status, timestamp) tuple dedup) | Required β sender-generated UUID v4 on every payload | Sellers: generate a cryptographically-random UUID v4 per event. Receivers: dedupe on idempotency_key with 24h minimum TTL, sender-scoped cache. Schemas affected: mcp-webhook-payload, collection-list-changed-webhook, property-list-changed-webhook, artifact-webhook-payload, revocation-notification. |
revocation-notification.notification_id | Field name on rights revocation payload | Renamed to idempotency_key | Find-and-replace in your rights-revocation receivers. |
MediaBuy.pending_approval status | Present | Removed β approvals are explicit approval tasks | Remove pending_approval from media-buy state filters. Consume approval tasks from the task surface. |
| Budget autonomy | budget.authority_level enum (agent_full | agent_limited | human_required) | Removed. Split into budget.reallocation_threshold (number) + plan.human_review_required (boolean) | Rewrite: agent_full β reallocation_unlimited: true; agent_limited β reallocation_threshold: <positive>; human_required β human_review_required: true. Regulated verticals (fair housing, lending, employment, pharmaceutical) enforce human_review_required: true via schema if/then. |
inventory-lists specialism | Present | Renamed to property-lists; collection-lists split out as separate specialism | Update specialism claims. Agents that governed collection lists should now claim both property-lists and collection-lists. |
| Compliance path taxonomy | /compliance/{v}/domains/ | /compliance/{v}/protocols/ | Update any internal references to compliance paths. Runner and catalog use protocols/ exclusively. |
governance_context carrier | Opaque string | Signed JWS | Switch to JWS format. Verify signature via governance agent JWKS (resolved via sync_governance). Bind to sub, aud, phase, exp. |
| Media buy status | pending_activation | Removed β replaced by pending_creatives and pending_start | Replace pending_activation in status filters, comparisons, and state machine logic. Schema: enums/media-buy-status.json. See details below. |
| Capabilities model | Redundant boolean gates (features.content_standards, brand.identity, trusted_match.supported, etc.) | Removed β object presence is the signal | Remove boolean capability checks. Test for object presence instead. Schema: protocol/get-adcp-capabilities-response.json. See capabilities migration below. |
reporting_capabilities | Optional on products | Required on every product | Ensure all products returned from get_products include reporting_capabilities. Schema: core/product.json. |
account on update_media_buy | Optional | Required | Pass account on all update_media_buy calls, matching create_media_buy behavior. Schema: media-buy/update-media-buy-request.json. |
preview_creative schema | oneOf union | Flat object with request_type discriminant | Update request builders to use the flat schema with request_type field. Schema: creative/preview-creative-request.json. See preview_creative migration below. |
signal_id on get_signals response | Optional on signal items | Required | Ensure all signal items in get_signals responses include signal_id. Schema: signals/get-signals-response.json. |
GOVERNANCE_DENIED error | Not in error code enum | Added as correctable error | Handle GOVERNANCE_DENIED in error handling logic. Schema: enums/error-code.json. |
| Governance lifecycle | media_buy_id as lifecycle correlator | Removed β governance_context is sole lifecycle correlator | Replace media_buy_id in governance schemas with governance_context. Handle purchase_type field on check_governance and report_plan_outcome. Schema: governance/check-governance-request.json. See governance migration below. |
| Geo capability fields | supported_geo_levels, supported_metro_systems, supported_postal_systems (from #2143) | Removed β use typed objects (geo_countries, geo_regions, geo_metros, geo_postal_areas) | If you adopted the flat array shape from #2143, revert to typed geo objects with additionalProperties: false. Schema: protocol/get-adcp-capabilities-response.json. |
comply_test_controller schema | oneOf union | Flat object with scenario discriminant and if/then validation | Update request builders to use the flat schema with scenario field instead of oneOf variants. |
| Compliance testing surface | An interim rc.4 build accepted "compliance_testing" as a supported_protocols value | Removed before GA. Compliance testing is declared via a top-level compliance_testing: { scenarios: [...] } capability block, not via supported_protocols. | Remove "compliance_testing" from supported_protocols if present. Agents implementing comply_test_controller add a top-level compliance_testing: { scenarios: [...] } block instead. |
| Specialism IDs | broadcast-platform, social-platform, property-governance, collection-governance | Renamed/merged: sales-broadcast-tv, sales-social, inventory-lists (merges property + collection governance) | Update specialism claims in get_adcp_capabilities.specialisms. See Compliance Catalog. |
audience-sync parent protocol | Under governance | Moved to media-buy | If claiming audience-sync, add media_buy to supported_protocols. |
| Sponsored Intelligence scope | sponsored_intelligence as a specialism | Promoted to full protocol in supported_protocols | Move from specialisms to supported_protocols. |
Media buy status migration
pending_activation was a single state covering two distinct conditions. It has been split:
| Condition | rc.3 status | 3.0 status |
|---|---|---|
| Buy approved, no creatives assigned | pending_activation | pending_creatives |
| Buy ready to serve, waiting for flight date | pending_activation | pending_start |
| Buy is serving | active | active (unchanged) |
- 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:| Removed field | What to do instead |
|---|---|
media_buy.reporting | Use product-level reporting_capabilities (now required) |
features.content_standards | Check for content_standards object presence |
features.audience_targeting | Check for audience_targeting object presence |
features.conversion_tracking | Check for conversion_tracking object presence |
content_standards_detail | Renamed to content_standards |
brand.identity | Implied by brand protocol support |
trusted_match.supported | Check for trusted_match object presence |
targeting.device_platform / targeting.device_type | Implied by media_buy protocol support |
targeting.audience_include / targeting.audience_exclude | Implied by audience_targeting presence |
preview_creative schema flattening
Thepreview_creative request is flattened from a oneOf union to a single object with a request_type discriminant. Three modes:
request_type | Required field | Purpose |
|---|---|---|
single | creative_manifest | Preview one creative |
batch | requests (array, 1-50 items) | Preview multiple creatives |
variant | variant_id | Replay a post-flight variant |
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 webhook-signing JWK in their JWKS at
jwks_uriwithadcp_use: "webhook-signing"on the JWK, and keepkidunique across purposes in the JWKS. 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/implementation/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
| Area | rc.1 | rc.2 | What to do |
|---|---|---|---|
| Account auth model | account_resolution capability | Removed β require_operator_auth now determines account model | Update capability parsing and auth/account branching logic |
| Creative library task boundary | list_creatives / sync_creatives documented under Media Buy | Creative library operations live in the Creative Protocol | Route library reads/writes through Creative Protocol assumptions, even when a sales agent implements both protocols |
| Sandbox capability discovery | media_buy.features.sandbox | account.sandbox | Read sandbox support from the account capability block |
| DOOH flat rate parameters | flat_rate.parameters without discriminator | flat_rate.parameters.type: "dooh" required when parameters are present | Add the discriminator in request builders and validators |
| Deprecated governance task docs | delete_content_standards, get_property_features documented | Removed | Use update_content_standards, property lists, and get_adcp_capabilities instead |
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 implicit 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