At a glance
New capabilities
Brand Protocol
Buy-side identity through/.well-known/brand.json. Just as publishers use adagents.json to declare properties and authorized agents, brands use brand.json to declare their identity, brand hierarchy, and authorized operators.
Four variants: House Portfolio (full brand hierarchy inline), Brand Agent (dynamic via MCP), House Redirect (sub-brand to house domain), and Authoritative Location (hosted URL).
Given any domain, the protocol resolves to a canonical brand:
authorized_operators), reporting roll-up (group campaigns by house).
Brand Protocol
Full specification including brand.json variants, resolution flow, and brand identity.
Brand rights lifecycle
Three tasks for licensing and usage rights between brands and content owners:
Rights include generation credentials (API keys or tokens for accessing licensed content), creative approval webhooks (HMAC-SHA256 authenticated callbacks when creatives are submitted for review), and revocation notifications. The protocol distinguishes actionable rejections (fix and resubmit) from final rejections (do not retry).
Structured
visual_guidelines on brand.json complement rights by giving generative creative systems structured rules for on-brand asset production: photography style, graphic elements, composition, motion, logo placement, colorways, type scale, and restrictions.
Brand rights
Task reference for rights discovery, acquisition, and management.
Shows and episodes
Products can now reference persistent content programs — podcasts, TV series, YouTube channels — viashow_ids. get_products responses include a top-level shows array with distribution identifiers for cross-seller matching, episode lifecycle states (scheduled, tentative, live, postponed, cancelled, aired, published), break-based ad inventory configuration, talent linking to brand.json, and international content rating systems.
Shows support relationships (spinoff, companion, sequel, prequel, crossover) and derivative content (clips, highlights, recaps) for comprehensive content modeling.
Shows and episodes
Full specification including show schemas, episode lifecycle, and break-based inventory.
Registry API
The AgenticAdvertising.org registry provides a public REST API for resolving brands and properties, discovering agents, and validating authorization. Most endpoints require no authentication.
The registry complements the protocol: resolve entities via the REST API, then transact via MCP/A2A tasks.
Registry API
Complete endpoint reference with authentication and rate limits.
Proposals and delivery forecasts
Publishers can return proposals alongside products — structured media plans with percentage-based budget allocations that buyers can execute directly viacreate_media_buy. Proposals encode publisher expertise, replacing ad-hoc product lists with actionable buying strategies. They can be refined through session continuity — subsequent get_products calls within the same session carry conversation history.
Delivery forecasts attach to proposals and allocations. Each forecast contains budget points with metric ranges (low/mid/high), showing how delivery scales with spend. Three forecast methods: estimate (rough approximation), modeled (predictive models), guaranteed (contractually committed). Forecasts can predict delivery metrics (impressions, reach, GRPs) and outcomes (purchases, leads, app installs). TV and radio forecasts use demographic_system and demographic for GRP-based planning.
Proposals and forecasting
Complete documentation including budget curves, CTV, retail media, and broadcast audio examples.
Accounts
Formal billing relationships between buyers and sellers viasync_accounts.
Four entities:
Two billing models:
operator (operator or brand buying direct is invoiced) and agent (agent consolidates billing). Two trust models: agent-trusted (default, agent declares brands/operators) and operator-scoped (seller requires operator-level credentials).
Workflow: get_adcp_capabilities -> sync_accounts -> get_products with account -> create_media_buy with account.
Accounts Protocol
Accounts Protocol overview: identity verification, billing models, and settlement.
Catalogs
First-class catalog lifecycle withsync_catalogs. Thirteen catalog types: structural (offering, product, inventory, store, promotion) and industry-vertical (hotel, flight, job, vehicle, real_estate, education, destination, app). Vertical types have canonical item schemas drawn from Google Ads, Meta, LinkedIn, and Microsoft feed specs.
Formats declare what catalogs they need via catalog_requirements. Creatives reference synced catalogs by catalog_id instead of embedding items in assets. Catalogs declare conversion_events and content_id_type for attribution alignment.
Catalogs
Complete documentation including catalog types, sync workflow, format requirements, and conversion events.
Capability discovery
get_adcp_capabilities replaces both adcp-extension.json and the MCP agent card with runtime capability discovery. It returns supported protocols, account billing models, portfolio information, targeting systems, and governance features — all schema-validated.
get_adcp_capabilities
Full task reference with request/response schemas.
Governance Protocol
Brand suitability and inventory curation. Governance agents manage property lists (curated sets of properties for targeting or exclusion) and content standards (brand suitability policies with per-category block/allow rules). Buyers pass property lists toget_products for filtered inventory discovery, and use calibrate_content for collaborative alignment between brand and governance agent. Governance agents can enforce provenance_required on creative policy and support third-party AI content verification via the verification array on provenance claims.
Governance Protocol
Full specification including property lists, content standards, and calibration.
Sponsored Intelligence Protocol
Conversational brand experiences in AI assistants. SI defines how AI assistants invoke brand agents for rich engagement (text, voice, UI components) without breaking the conversational flow. Sessions follow a consent-first model: user expresses interest, grants consent, then the brand agent engages conversationally with optional transaction handoff.Sponsored Intelligence
Full specification including session lifecycle, implementing agents, and implementing hosts.
Signal catalogs for data providers
Data providers can publish signal catalogs viaadagents.json, following the same pattern as publishers declaring properties.
Signals now have explicit
value_type (binary, categorical, numeric) with typed targeting, and structured signal_id objects that reference the data provider’s catalog.
Data provider guide
Complete implementation guide for publishing signal catalogs.
Breaking changes
Media channel taxonomy
v2’s 9 channels are replaced by 20 planning-oriented channels. Five channels carried over unchanged (display, social, ctv, podcast, dooh). The remaining four are split, removed, or renamed.
New channels in v3 (no v2 equivalent):
search, linear_tv, radio, streaming_audio, ooh, print, cinema, email, gaming, retail_media, influencer, affiliate, product_placement, sponsored_intelligence.
The
gaming channel covers intrinsic in-game ads, rewarded video, and playable ads. Rewarded video in gaming apps could also be classified as olv — use gaming when the inventory comes from a gaming budget.Channels deep dive
Complete mapping guide with examples for each v2 channel, multi-channel products, and capability discovery.
Pricing option field renames
v3 separates hard constraints (publisher-enforced prices) from soft hints (historical percentiles).fixed_rate becomes fixed_price, and price_guidance.floor moves to top-level floor_price.
These fields map to standard deal types:
fixed_price corresponds to Programmatic Guaranteed (PG) and Preferred Deals, while floor_price corresponds to Private Marketplace (PMP) auctions. Open auction inventory omits both fields.
Pricing deep dive
Fixed-price vs auction examples, price guidance schema, flat-rate pricing, minimum spend, and transition period handling.
Creative assignments with weighting
creative_ids string arrays are replaced by creative_assignments objects that support delivery weighting and placement targeting.
Creatives deep dive
Weighted assignments, placement targeting, asset discovery with the unified
assets array, repeatable groups, and format cards.Geo targeting with named systems
Metro and postal targeting now require explicit system specification, supporting global markets. Values are grouped by system using{ "system": "...", "values": [...] } objects.
v3 also adds
geo_metros_exclude and geo_postal_areas_exclude for negative targeting (e.g., target the US except the New York DMA).
Geo targeting deep dive
Metro and postal system reference tables, exclusion targeting, capability discovery, and a full targeting example.
Other targeting changes
v3 adds several targeting fields beyond geo:
These fields are optional additions — they don’t replace any v2 fields.
Unified asset discovery
Formats now use anassets array with required boolean instead of assets_required. See the creatives deep dive.
Catalogs replace promoted_offerings
Thepromoted_offerings creative asset type and promoted_offering string field are removed. Catalogs are now first-class protocol objects with their own sync lifecycle (sync_catalogs), format-level requirements (catalog_requirements), and conversion event alignment.
Catalogs deep dive
Before/after examples, sync_catalogs workflow, catalog_requirements discovery, and migration checklist.
Brand identity unification
Inlinebrand_manifest objects are replaced by brand references (BrandRef). Task schemas reference brands by { domain, brand_id } instead of passing manifests inline. Brand data is resolved from brand.json or the registry at execution time.
Affects:
get_products, create_media_buy, build_creative, and property list schemas.
Brand identity deep dive
BrandRef schema, resolution flow, before/after examples, and migration steps.
Product delivery forecasts
estimated_exposures is replaced by a structured forecast field using the DeliveryForecast type.
Proposal refinement via buying mode
proposal_id is removed from the get_products request. Refinement now uses buying_mode: "refine" with a typed refine array of change-requests (see typed refinement). Session continuity (context_id in MCP, contextId in A2A) carries conversation history across calls.
Proposal execution via create_media_buy with proposal_id is unchanged.
Optimization goals redesign
optimization_goal (singular object) is replaced by optimization_goals (array). Each goal is a discriminated union on kind:
Two goal kinds:
metric— Seller-native delivery metrics (clicks, views, reach, engagements, etc.) withcost_perorthreshold_ratetargetsevent— Conversion tracking withevent_sourcesarray and optionalvalue_field/value_factor
Optimization goals deep dive
Goal kinds, reach optimization, multi-goal priority, product capabilities, and migration steps.
Signals pricing restructure
The legacypricing: { cpm } object on signals is replaced by a structured pricing_options array with three pricing models.
Three models:
cpm, percent_of_media (with optional max_cpm), flat_fee.
Signals deep dive
Pricing models, deliver_to flattening, usage reporting, and migration steps.
Signals deliver_to flattening
The nesteddeliver_to object in get_signals request is replaced with two top-level fields.
AudienceMember external_id required
external_id is promoted from a uid-type enum value to a required top-level field on AudienceMember. Every member must have a buyer-assigned stable identifier plus at least one matchable identifier.
Audiences deep dive
Before/after examples, uid-type changes, sync_audiences usage, and migration steps.
Typed refinement with seller acknowledgment
refine is redesigned from a nested object with overall/products/proposals to a flat typed array. Each entry is discriminated by scope:
Sellers respond with
refinement_applied — a positionally-matched array where each entry reports status (applied, partial, unable) and optional notes.
Refinement deep dive
Change-request types, seller acknowledgment, and before/after examples.
Creative assignments restructured
SyncCreativesRequest.assignments changed from a { creative_id: package_id[] } map to a typed array with explicit fields.
Signals account and field consistency
Two consistency changes to signals schemas:Package catalogs as array
Brand tone structured format
Brandtone is now an object type only — string format is removed. Structured tone includes voice, attributes, dos, and donts fields. Existing string values should migrate to { "voice": "<previous-string>" }.
Account resolution removed
account_resolution capability field is removed. require_operator_auth now determines both the auth model and account reference style: true means explicit accounts (discover via list_accounts, pass account_id), false means implicit accounts (declare via sync_accounts, pass natural key).
Privacy and consent
AdCP does not define its own consent framework. Privacy signals (TCF 2.0, GPP, US Privacy String) should be passed via the brief’sext field or through transport-level headers. Sellers that require consent signals should declare this in get_adcp_capabilities using the extension mechanism.
Removed in v3
Migration checklists
All implementations
All implementations
These breaking changes affect anyone reading or writing AdCP data:
- Update channel enum values to new taxonomy
- Rename
fixed_rate->fixed_pricein pricing options - Move
price_guidance.floor->floor_price(pricing details) - Replace
creative_idswithcreative_assignments - Add system specification to metro/postal targeting
- Rename
geo_postal_codes->geo_postal_areas - Handle new
geo_metros_excludeandgeo_postal_areas_excludefields - Update format parsing to use
assetsarray - Replace
preview_imagereads withformat_cardrendering - Replace
list_authorized_propertiescalls withget_adcp_capabilitiesportfolio - Remove
promoted_offeringsfrom creative manifest assets and replace withcatalogsfield - Remove
promoted_offeringstring from media buy and creative manifest objects - Update
optimization_goaltooptimization_goals(array of discriminated union) - Handle
external_idas required field on AudienceMember - Replace
brand_manifestwithbrandref ({ domain, brand_id }) in all task calls - Replace
estimated_exposuresreads withforecast(DeliveryForecast) on products - Remove
proposal_idfromget_productsrequests — use session continuity for refinement - Update
refinefrom object to typed array withscopediscriminator - Handle
recoveryfield on errors for retry/correction logic - Update
catalogtocatalogs(array) on packages - Update signals
account_idtoaccount(AccountReference) - Rename signals
deploymentstodestinations - Pass
buying_mode(now required) onget_products - Move
creative_brieftobriefasset type in manifestassetsmap - Handle
report_usagewithoutkindandoperator_idfields - Update
SyncCreativesRequest.assignmentsfrom object map to typed array - Migrate brand
tonefrom string to object format ({ voice, attributes, dos, donts }) - Remove
account_resolutionreads — userequire_operator_authinstead - Remove
delete_content_standardscalls — archive viaupdate_content_standards - Remove
get_property_featurescalls — use property list filters - Validate all requests/responses against v3 schemas
Seller agents (publishers, SSPs, networks)
Seller agents (publishers, SSPs, networks)
Update all data structures to v3 format (channels, pricing, geo targeting), then implement new capabilities:
- Implement
get_adcp_capabilitiestask (includingaccountcapabilities) - Remove
adcp-extension.jsonfrom agent card - Implement
sync_accountsfor account provisioning - Return proposals with delivery forecasts from
get_productswhen applicable - Support property list filtering in
get_productsif integrating with governance agents - Handle catalogs synced via
sync_catalogswith approval workflow - Declare
metric_optimizationcapabilities on products - Declare
reportingcapabilities inget_adcp_capabilitiesfor dimension breakdowns - Support
reporting_dimensionsparameter onget_media_buy_delivery - Return
refinement_appliedarray when processingrefinerequests - Implement
rejectedstatus andrejection_reasonon media buys - Support
fieldsprojection parameter onget_products - Declare
supported_pricing_modelsinget_adcp_capabilities
Buyer agents and orchestrators (DSPs, agencies, brands)
Buyer agents and orchestrators (DSPs, agencies, brands)
Update all requests and response handling to v3 format, then integrate new capabilities:
- Resolve brands via
brand.jsonbefore placing buys - Call
sync_accountsto establish billing relationships - Update to call
get_adcp_capabilitiesfor runtime discovery - Evaluate proposals and delivery forecasts when returned by sellers
- Use the Registry API for brand/property resolution and agent discovery
- Pass property lists to filter inventory when working with governance agents
- Invoke SI sessions when connecting users with brand agents
- Sync catalogs via
sync_catalogsbefore submitting creatives - Add
conversion_eventsto catalogs for attribution tracking - Update
optimization_goaltooptimization_goalsarray increate_media_buy - Pass
pricing_option_idwhen activating signals with pricing options - Use
reporting_dimensionsfor dimension breakdowns in delivery reporting - Handle
refinement_appliedresponse for typed refinement feedback - Use
recoveryfield on errors for automated retry/correction - Use
fieldsprojection onget_productsfor efficient discovery - Handle
rejectedstatus on media buys - Use
action: "deactivate"onactivate_signalfor campaign cleanup - Integrate
get_rights/acquire_rightsfor licensed content campaigns - Handle
visual_guidelinesfrombrand.jsonfor creative generation
Signals agents (data providers, measurement vendors)
Signals agents (data providers, measurement vendors)
Update schema references from v2 to v3. Signals Protocol doesn’t use media channels in its core model.
- Update schema references from v2 to v3
- Ensure
get_adcp_capabilitiesreturnsmajor_versions: [3] - Return structured
signal_idobjects inget_signalsresponses - Include
value_typefield in signal responses - Support
signal_idsparameter inget_signalsrequests for ID-based lookup - Update from legacy
pricingto structuredpricing_optionsarray - Handle top-level
destinations/countriesinstead of nesteddeliver_to - Add
idempotency_keysupport toreport_usage - Support
action: "deactivate"onactivate_signal - Include
categoriesandrangemetadata in signal entries - Update
account_idtoaccount(AccountReference) - Rename
deploymentstodestinations
Data providers (new in v3)
Data providers (new in v3)
Publish signal catalogs via
adagents.json. See Data Provider Guide.- Create signal catalog in
/.well-known/adagents.json - Define signals with
id,name,value_type, and optional metadata - Add
signal_tagsfor grouping and efficient authorization - Authorize signals agents using
signal_idsorsignal_tagsauthorization types - Validate catalog using AdAgents.json Builder
Creative agents (creative management, DCO providers)
Creative agents (creative management, DCO providers)
Support new asset discovery and integrate brand identity. Format
type field (video, display, audio) is IAB creative classification, not media channels.- Support
assetsarray withrequiredboolean (replacesassets_required) - Replace
preview_imagewithformat_cardrendering - Resolve brand identity via
brand.jsonfor on-brand creative generation - Support
catalogfield on creative manifests (replacespromoted_offeringsasset) - Declare
catalog_requirementson formats that render catalog items - Update schema references from v2 to v3
- Support
provenanceobject on creative manifests and assets - Support
briefandcatalogas asset types in theassetsmap - Handle
compliance.required_disclosureson creative briefs - Check format
supported_disclosure_positionscompatibility - Declare
supports_compliancein capabilities (replacessupports_brief) - Handle
visual_guidelinesfrombrand.jsonfor on-brand asset generation
Brands (new in v3)
Brands (new in v3)
Establish buy-side identity. See brand.json specification.
- Host
/.well-known/brand.jsonon your domain - Declare brand portfolio, properties, and authorized operators
- Optionally provide brand data (logos, colors, fonts, tone) inline in
brand.jsonor via brand agent - Add
visual_guidelinestobrand.jsonfor generative creative systems - Implement
get_rights/acquire_rights/update_rightsif licensing content - Register in the community brand registry if not hosting
brand.json
Governance agents (new in v3)
Governance agents (new in v3)
Implement brand suitability capabilities. See Governance Protocol.
- Implement property list tasks (
create_property_list,get_property_list, etc.) - Implement content standards tasks (
create_content_standards,calibrate_content, etc.) - Implement
get_adcp_capabilitieswithgovernanceinsupported_protocols - Implement
provenance_requiredenforcement on creative policy - Support
verificationresults from AI detection services - Implement
get_creative_featuresfor creative evaluation - Declare
creative_featuresinget_adcp_capabilities
Sponsored Intelligence agents (new in v3)
Sponsored Intelligence agents (new in v3)
Implement conversational brand experiences. See Sponsored Intelligence.
- Implement SI session tasks (
si_initiate_session,si_send_message,si_terminate_session) - Implement
get_adcp_capabilitieswithsponsored_intelligenceinsupported_protocols
Getting help
- Community: Slack
- Issues: GitHub Issues
- Support: support@adcontextprotocol.org