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

Areav2.xv3.x
Protocol scopeMedia Buy, Signals, CreativeAdds Brand Protocol, Governance, Sponsored Intelligence
Brand identityNo standard mechanismbrand.json + community brand registry
GovernanceNo brand suitability protocolProperty lists, content standards, campaign governance, policy registry, and brand calibration
Sponsored IntelligenceNo conversational brand protocolConsent-first brand sessions in AI assistants
Accounts ProtocolNo formal account modelNamed protocol layer: sync_accounts, list_accounts, report_usage, brand registry-grounded identity
Catalogspromoted_offerings creative assetFirst-class sync_catalogs task with 13 catalog types
Media planningProducts onlyProposals with budget allocations + delivery forecasts
Brand rightsNo licensing protocolget_rights, acquire_rights, update_rights with HMAC-authenticated webhooks
Visual guidelinesNo structured brand visualsvisual_guidelines on brand.json for generative creative systems
Creative workflowsBasic build / preview / sync separationInline preview, multi-format build_creative, library retrieval, quality tiers, and catalog item_limit
Creative librariesMedia Buy-centric creative reads/writeslist_creatives / sync_creatives as Creative Protocol operations plus supports_generation, supports_transformation, and has_creative_library discovery
Creative governanceNo creative evaluation protocolget_creative_features for security scanning, quality, content categorization
Disclosure matchingPosition-only disclosure handlingPosition + persistence-aware disclosure matching (continuous, initial, flexible)
Collections and installmentsNo content programming modelshows on products with distribution IDs, installment lifecycle, break-based inventory
Planning ergonomicsNo time_budget, preferred_delivery_types, exclusivity, or per-package flightstime_budget + incomplete, preferred_delivery_types, exclusivity, optional delivery_measurement, and package-level start_time / end_time
Channel model9 channels20 planning-oriented channels (including sponsored_intelligence)
Capability discoveryAgent card extensionsRuntime get_adcp_capabilities task
Sandbox discoveryMixed capability locationsrequire_operator_auth for auth model, account.sandbox for sandbox support, sandbox in natural account references
Creative assignmentSimple ID arraysWeighted assignments with placement targeting
Geo targetingImplicit US-centricExplicit named systems (global)
Keyword targetingNo keyword supportkeyword_targets with match types and bid prices
OptimizationSingle optimization goalMulti-goal optimization_goals array with metric and event types
Delivery reportingAggregate delivery onlyOpt-in dimension breakdowns (geo, device, audience, placement, keyword)
Signal pricingSimple CPMStructured pricing models (CPM, percent of media, flat fee)
Device targetingNo form-factor targetingdevice_type (desktop, mobile, tablet, ctv, dooh, unknown) distinct from device_platform (OS)
Proximity targetingNo point-based geo targetinggeo_proximity with travel time, radius, and GeoJSON methods
RefinementFree-text with proposal_idTyped change-request array with seller acknowledgment
Error handlingUnstructured errorsrecovery field (transient, correctable, terminal) + 18 standard error codes
AI provenanceNo provenance modelprovenance object with IPTC source types, C2PA references, regulatory disclosures
Creative complianceNo compliance on briefsrequired_disclosures, prohibited_claims, disclosure positions
Agent ergonomicsFull payloads on every callfields projection, opt-in breakdowns, pre-flight capability filtering
Signal lifecycleActivate onlyactivate / deactivate action on activate_signal

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.
Sell sideBuy side
PublisherHouse (corporate entity)
PropertyBrand (advertising identity)
adagents.jsonbrand.json
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:
shoes.novabrands.example.com
  -> fetch /.well-known/brand.json
  -> { "house": "novabrands.example.com" }
  -> fetch novabrands.example.com/.well-known/brand.json
  -> search brands[] for property matching "shoes.novabrands.example.com"
  -> Result: { house: "novabrands.example.com", brand_id: "nova_athletics" }
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:
TaskPurpose
get_rightsDiscover available rights for a brand’s content
acquire_rightsRequest and negotiate rights acquisition
update_rightsModify active rights (extend, restrict, revoke)
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.

Collections and installments

Products can now reference persistent content programs — podcasts, TV series, YouTube channels — via collections, which follows the same publisher-scoped selector pattern as publisher_properties. Collections are declared in the publisher’s adagents.json and products reference them by publisher domain and collection ID. Buyers resolve full collection objects from adagents.json. Collections include distribution identifiers for cross-seller matching, installment 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.

Collections and installments

Full specification including collection schemas, installment 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.
CapabilityEndpointDescription
Brand resolution/api/brands/resolveResolve domain to canonical brand
Property resolution/api/properties/resolveResolve publisher domain to property info
Agent discovery/api/registry/agentsList registered agents with capabilities
Authorization check/api/registry/validate/property-authorizationReal-time authorization validation
Search/api/searchSearch across brands, publishers, and properties
Community brands/api/brands/saveContribute brand data (auth required)
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:
EntityQuestionHow identified
BrandWhose products are advertised?House domain + brand_id via brand.json
AccountWho gets billed?Account referenceaccount_id from list_accounts or natural key
OperatorWho operates on the brand’s behalf?Domain (e.g., acmeagency.example.com)
AgentWhat software places buys?Authenticated session
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. Campaign governance extends this with plan-level policy and budget enforcement via sync_plans, check_governance, report_plan_outcome, and get_plan_audit_logs. Governance agents can operate in audit, advisory, or enforce mode, validate seller-side actions against delegated authority, and resolve standardized policies through the shared policy registry.

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.

SI Chat Protocol

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.
PublishersData providers
Declare propertiesDeclare signals
Use property_ids / property_tagsUse signal_ids / signal_tags
Buyers verify via publisher_domainBuyers verify via data_provider_domain
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.

rc.1 to rc.2 highlights

This page covers the full v2 → v3 shift. If you already adopted 3.0.0-rc.1, these are the most important rc.2 changes to review before upgrading.

Creative workflow and library changes

build_creative now supports inline preview (include_preview), multi-format output (target_format_ids), quality tiers, catalog-driven item_limit, and library retrieval using creative_id with optional concept_id, media_buy_id, package_id, and macro_values. preview_creative also adds quality control. Creative library operations are now explicitly Creative Protocol tasks: list_creatives and sync_creatives live with the rest of the creative lifecycle, and capability discovery adds supports_generation, supports_transformation, and has_creative_library so buyers can route requests intentionally.

Planning, accounts, and sandbox refinements

account_resolution is removed; buyers now use require_operator_auth to determine the auth and account model. Sandbox support moves to account.sandbox, and sandbox can participate in the natural account key for implicit-account flows. Product discovery adds preferred_delivery_types, exclusivity, and time_budget, with incomplete in responses when the seller cannot finish within the requested budget. Packages and product allocations can now carry per-package start_time / end_time, and delivery_measurement becomes optional on products.

Compliance and governance refinements

Creative compliance now includes disclosure persistence semantics in addition to position and duration, allowing formats to declare which persistence modes they can enforce. Campaign governance also lands in rc.2 with sync_plans, check_governance, report_plan_outcome, and get_plan_audit_logs, plus governance_context for canonical plan extraction. sync_governance provides a dedicated task for syncing governance agent endpoints to accounts, replacing the previous approach of embedding governance_agents on sync_accounts and list_accounts requests. For the exhaustive rc.2 change list, see the Release Notes and CHANGELOG.md.

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.
v2 channelv3 channel(s)Notes
displaydisplayUnchanged
videoolv, linear_tv, cinemaSplit by distribution context (ctv was already separate in v2)
audioradio, streaming_audioSplit by distribution (podcast was already separate in v2)
nativeRemovedUse format-level properties instead
socialsocialUnchanged
ctvctvUnchanged
podcastpodcastUnchanged
doohdoohUnchanged
retailretail_mediaRenamed for clarity
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.
v2 fieldv3 fieldNotes
fixed_ratefixed_priceRenamed for clarity (it’s a price, not a rate)
price_guidance.floorfloor_priceMoved to top level as hard constraint
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.
v2 fieldv3 field
creative_ids (string array)creative_assignments (object array with creative_id, weight, placement_ids)

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.
v2 fieldv3 field
geo_metros (string array)geo_metros (system/values objects)
geo_postal_codes (string array)geo_postal_areas (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:
FieldDescription
daypart_targetsTime-of-day and day-of-week targeting windows
age_restrictionAge-gating for restricted content
device_platformOperating system targeting (iOS, Android, Windows, tvOS, etc.)
device_typeDevice form factor targeting (desktop, mobile, tablet, ctv, dooh, unknown)
languageContent language targeting
keyword_targets / negative_keywordsKeyword targeting for search and retail media with match types (broad, phrase, exact) and per-keyword bid prices
device_type_excludeNegative device form factor targeting
geo_proximityPoint-based proximity targeting via travel time isochrones, radius, or GeoJSON geometry
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.
v2 fieldv3 replacement
promoted_offerings (creative asset)catalogs field on creative manifest
promoted_offering (string on media-buy)Removed — use brand + brief
promoted_offering (string on creative-manifest)Removed — use catalogs field

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.
v2/beta fieldv3 rc.1 field
brand_manifest (inline object)brand ({ domain, brand_id })
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.
v2/beta fieldv3 rc.1 field
estimated_exposures (integer)forecast (DeliveryForecast with time periods, metric ranges, methodology)

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.
v2/beta fieldv3 rc.1 field
proposal_id on get_products requestRemoved — use buying_mode: "refine"

Optimization goals redesign

optimization_goal (singular object) is replaced by optimization_goals (array). Each goal is a discriminated union on kind:
v2/beta fieldv3 rc.1 field
optimization_goal (single object)optimization_goals (array)
Implicit single goalpriority field for multi-goal ordering
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.
v2/beta fieldv3 rc.1 field
pricing.cpm (number)pricing_options[] (array of pricing model objects)
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.
v2/beta fieldv3 rc.1 field
deliver_to.destinationsdestinations (top-level)
deliver_to.countriescountries (top-level)

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:
v2/beta fieldv3 rc.1 field
refine.overall (string){ "scope": "request", "ask": "..." } array entry
refine.products[].product_id{ "scope": "product", "id": "..." }
refine.products[].notesask field
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.
v2/beta fieldv3 rc.1 field
assignments (object map)assignments (array of { creative_id, package_id, weight, placement_ids })

Signals account and field consistency

Two consistency changes to signals schemas:
v2/beta fieldv3 rc.1 field
account_id (string) on get_signals and activate_signalaccount (AccountReference object)
deployments on activate_signaldestinations (renamed for consistency with get_signals)

Package catalogs as array

v2/beta fieldv3 rc.1 field
catalog (single Catalog object) on Packagecatalogs (array of Catalog refs)

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>" }.
v2/beta fieldv3 rc.2 field
tone (string or object)tone (object: { voice, attributes, dos, donts })

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).
v2/beta/rc.1 fieldv3 rc.2 field
account_resolution capabilityRemoved — use require_operator_auth

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

RemovedReplacement
adcp-extension.json agent cardget_adcp_capabilities task
list_authorized_properties taskget_adcp_capabilities portfolio section
assets_required in formatsassets array with required boolean
preview_image in formatsformat_card object
creative_ids in packagescreative_assignments array
geo_postal_codesgeo_postal_areas
fixed_rate in pricingfixed_price
price_guidance.floorfloor_price (top-level)
promoted_offerings asset typecatalogs field on creative manifest
promoted_offering on media-buyRemoved — use brand + brief
promoted_offering on creative-manifestcatalogs field
brand_manifest (inline object)brand ref ({ domain, brand_id })
estimated_exposures on Productforecast (DeliveryForecast)
proposal_id on get_products requestSession continuity (context_id / contextId)
refine object with overall/products/proposalsrefine array of typed change-requests
creative_brief on build_creative requestbrief asset type in manifest assets map
supports_brief capabilitysupports_compliance
creative-brief-ref.json schemaDeleted — briefs are now asset types
deployments on activate_signaldestinations
account_id (string) on signals tasksaccount (AccountReference)
report_usage.kind and report_usage.operator_idRemoved
catalog (singular) on Packagecatalogs (array)
account_resolution capabilityrequire_operator_auth determines account model
delete_content_standards taskArchive via update_content_standards instead
get_property_features taskProperty list filters + get_adcp_capabilities for feature discovery
tone as string on brand.jsonObject only: { voice, attributes, dos, donts }
FormatCategory enum / type on formatsFilter by asset_types or format_ids instead

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
  • Read sandbox support from account.sandbox instead of media_buy.features.sandbox
  • Add type: "dooh" inside flat_rate.parameters when DOOH parameters are provided
  • Treat list_creatives and sync_creatives as Creative Protocol operations
  • Remove delete_content_standards calls — archive via update_content_standards
  • Remove get_property_features calls — use property list filters
  • Remove format_types / type filters — use asset_types or format_ids instead
  • 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
  • Support time_budget on get_products and return incomplete when work cannot finish in budget
  • Declare sandbox support in account.sandbox, not media_buy.features.sandbox
  • Support preferred_delivery_types, exclusivity, optional delivery_measurement, and package-level start_time / end_time
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
  • Read require_operator_auth and account.sandbox when choosing account and sandbox flows
  • Handle time_budget / incomplete for bounded-latency product discovery
  • Use creative capability flags (supports_generation, supports_transformation, has_creative_library) to route build vs library workflows
  • Submit plans to governance agents via check_governance when campaign governance is in use
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. The FormatCategory enum and format type field are removed in v3 — filter formats by asset_types or format_ids instead.
  • 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
  • Support include_preview, target_format_ids, quality, and item_limit on build_creative
  • Support library retrieval via creative_id and declare supports_generation, supports_transformation, has_creative_library
  • Implement list_creatives and sync_creatives as Creative Protocol operations
  • Support quality parameter on preview_creative
  • Declare disclosure persistence support via format disclosure_capabilities
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
  • Implement campaign governance tasks (sync_plans, check_governance, report_plan_outcome, get_plan_audit_logs) when offering plan-level governance

Getting help