Skip to main content
AdCP 3.0 expands the protocol beyond media buying into brand identity, governance, media planning, and conversational brand experiences.

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:
Use cases: creative generation (resolve domain to brand identity), brand verification (check 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 — via show_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 via create_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

Migrating from v2? Accounts are entirely new in v3 — there is no v2 equivalent to migrate from. Start with Accounts and Agents for the setup guide.
Formal billing relationships between buyers and sellers via sync_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 with sync_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.
Agent cards and adcp-extension.json are no longer needed. Buyers discover sellers through adagents.json and call get_adcp_capabilities at runtime. If your v2 integration reads capability data from agent card extensions, switch to get_adcp_capabilities.

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 to get_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.

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 via adagents.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.
All code that reads or writes channel values must be updated.
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 an assets array with required boolean instead of assets_required. See the creatives deep dive.

Catalogs replace promoted_offerings

The promoted_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

Inline brand_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.) with cost_per or threshold_rate targets
  • event — Conversion tracking with event_sources array and optional value_field/value_factor

Optimization goals deep dive

Goal kinds, reach optimization, multi-goal priority, product capabilities, and migration steps.

Signals pricing restructure

The legacy pricing: { 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 nested deliver_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

Brand tone 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).
AdCP does not define its own consent framework. Privacy signals (TCF 2.0, GPP, US Privacy String) should be passed via the brief’s ext 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

These breaking changes affect anyone reading or writing AdCP data:
  • Update channel enum values to new taxonomy
  • Rename fixed_rate -> fixed_price in pricing options
  • Move price_guidance.floor -> floor_price (pricing details)
  • Replace creative_ids with creative_assignments
  • Add system specification to metro/postal targeting
  • Rename geo_postal_codes -> geo_postal_areas
  • Handle new geo_metros_exclude and geo_postal_areas_exclude fields
  • Update format parsing to use assets array
  • Replace preview_image reads with format_card rendering
  • Replace list_authorized_properties calls with get_adcp_capabilities portfolio
  • Remove promoted_offerings from creative manifest assets and replace with catalogs field
  • Remove promoted_offering string from media buy and creative manifest objects
  • Update optimization_goal to optimization_goals (array of discriminated union)
  • Handle external_id as required field on AudienceMember
  • Replace brand_manifest with brand ref ({ domain, brand_id }) in all task calls
  • Replace estimated_exposures reads with forecast (DeliveryForecast) on products
  • Remove proposal_id from get_products requests — use session continuity for refinement
  • Update refine from object to typed array with scope discriminator
  • Handle recovery field on errors for retry/correction logic
  • Update catalog to catalogs (array) on packages
  • Update signals account_id to account (AccountReference)
  • Rename signals deployments to destinations
  • Pass buying_mode (now required) on get_products
  • Move creative_brief to brief asset type in manifest assets map
  • Handle report_usage without kind and operator_id fields
  • Update SyncCreativesRequest.assignments from object map to typed array
  • Migrate brand tone from string to object format ({ voice, attributes, dos, donts })
  • Remove account_resolution reads — use require_operator_auth instead
  • Remove delete_content_standards calls — archive via update_content_standards
  • Remove get_property_features calls — use property list filters
  • Validate all requests/responses against v3 schemas
Update all data structures to v3 format (channels, pricing, geo targeting), then implement new capabilities:
  • Implement get_adcp_capabilities task (including account capabilities)
  • Remove adcp-extension.json from agent card
  • Implement sync_accounts for account provisioning
  • Return proposals with delivery forecasts from get_products when applicable
  • Support property list filtering in get_products if integrating with governance agents
  • Handle catalogs synced via sync_catalogs with approval workflow
  • Declare metric_optimization capabilities on products
  • Declare reporting capabilities in get_adcp_capabilities for dimension breakdowns
  • Support reporting_dimensions parameter on get_media_buy_delivery
  • Return refinement_applied array when processing refine requests
  • Implement rejected status and rejection_reason on media buys
  • Support fields projection parameter on get_products
  • Declare supported_pricing_models in get_adcp_capabilities
Update all requests and response handling to v3 format, then integrate new capabilities:
  • Resolve brands via brand.json before placing buys
  • Call sync_accounts to establish billing relationships
  • Update to call get_adcp_capabilities for 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_catalogs before submitting creatives
  • Add conversion_events to catalogs for attribution tracking
  • Update optimization_goal to optimization_goals array in create_media_buy
  • Pass pricing_option_id when activating signals with pricing options
  • Use reporting_dimensions for dimension breakdowns in delivery reporting
  • Handle refinement_applied response for typed refinement feedback
  • Use recovery field on errors for automated retry/correction
  • Use fields projection on get_products for efficient discovery
  • Handle rejected status on media buys
  • Use action: "deactivate" on activate_signal for campaign cleanup
  • Integrate get_rights / acquire_rights for licensed content campaigns
  • Handle visual_guidelines from brand.json for creative generation
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_capabilities returns major_versions: [3]
  • Return structured signal_id objects in get_signals responses
  • Include value_type field in signal responses
  • Support signal_ids parameter in get_signals requests for ID-based lookup
  • Update from legacy pricing to structured pricing_options array
  • Handle top-level destinations/countries instead of nested deliver_to
  • Add idempotency_key support to report_usage
  • Support action: "deactivate" on activate_signal
  • Include categories and range metadata in signal entries
  • Update account_id to account (AccountReference)
  • Rename deployments to destinations
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_tags for grouping and efficient authorization
  • Authorize signals agents using signal_ids or signal_tags authorization types
  • Validate catalog using AdAgents.json Builder
Support new asset discovery and integrate brand identity. Format type field (video, display, audio) is IAB creative classification, not media channels.
  • Support assets array with required boolean (replaces assets_required)
  • Replace preview_image with format_card rendering
  • Resolve brand identity via brand.json for on-brand creative generation
  • Support catalog field on creative manifests (replaces promoted_offerings asset)
  • Declare catalog_requirements on formats that render catalog items
  • Update schema references from v2 to v3
  • Support provenance object on creative manifests and assets
  • Support brief and catalog as asset types in the assets map
  • Handle compliance.required_disclosures on creative briefs
  • Check format supported_disclosure_positions compatibility
  • Declare supports_compliance in capabilities (replaces supports_brief)
  • Handle visual_guidelines from brand.json for on-brand asset generation
Establish buy-side identity. See brand.json specification.
  • Host /.well-known/brand.json on your domain
  • Declare brand portfolio, properties, and authorized operators
  • Optionally provide brand data (logos, colors, fonts, tone) inline in brand.json or via brand agent
  • Add visual_guidelines to brand.json for generative creative systems
  • Implement get_rights / acquire_rights / update_rights if licensing content
  • Register in the community brand registry if not hosting brand.json
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_capabilities with governance in supported_protocols
  • Implement provenance_required enforcement on creative policy
  • Support verification results from AI detection services
  • Implement get_creative_features for creative evaluation
  • Declare creative_features in get_adcp_capabilities

Getting help