- AdCP discovery - Does this agent support AdCP? Which versions?
- Protocol support - Which protocols (media_buy, signals, governance, sponsored_intelligence, creative, brand)?
- Auth model - Does this seller trust the agent directly, or must each operator authenticate independently?
- Detailed capabilities - Features, execution integrations, geo targeting, portfolio
/schemas/3.0.19/protocol/get-adcp-capabilities-request.json
Response Schema: /schemas/3.0.19/protocol/get-adcp-capabilities-response.json
Tool-Based Discovery
AdCP uses native MCP/A2A tool discovery. The presence ofget_adcp_capabilities in an agent’s tool list indicates AdCP support.
- Uses standard MCP/A2A mechanisms (no custom extensions)
- Always returns current capabilities (not stale metadata)
- Single source of truth for all capability information
adcp-extension.json) has been removed in v3. Use tool-based discovery instead.
:::
Version Negotiation
Sellers declare which major versions they support viaadcp.major_versions in the response. Buyers declare which version they’re using via adcp_major_version on the request.
adcp_major_version is an optional field on every AdCP request schema. Buyers SHOULD include it on all requests when interacting with a multi-version seller.
Seller behavior:
- If
adcp_major_versionis provided and supported → respond using that version’s schemas - If
adcp_major_versionis provided but unsupported → returnVERSION_UNSUPPORTED(buyer should call withoutadcp_major_versionto discover supported versions) - If
adcp_major_versionis omitted → assume the highest supported version
Request Parameters
Response Structure
adcp
Core AdCP protocol information:idempotency
Declares whether this seller honorsidempotency_key replay protection on mutating requests. Mirrors the request_signing.supported pattern — a single positive declaration, decoupled from the window detail. Clients MUST NOT assume a default; a seller without this block is non-compliant and should be treated as unsafe for retry-sensitive operations.
idempotency.supported: true is a trust-bearing claim that enables buyers to safely retry spend-committing operations. A compromised or buggy seller could advertise true while silently ignoring keys, causing buyer double-spend on retry. Buyers and conformance runners SHOULD probe the declaration with a deliberate payload-mutation replay: send two requests with the same idempotency_key but different canonical payloads — a conformant seller MUST return IDEMPOTENCY_CONFLICT on the second. Sellers declaring supported: true MUST pass this probe as part of the baseline compliance storyboard before the declaration is considered verified.
supported_protocols
AdCP protocols this agent supports. This is the single capability axis — each value both (a) declares which tools the agent implements and (b) commits the agent to pass the baseline compliance storyboard at/compliance/{version}/protocols/{protocol}/. The runner maps JSON snake_case → URL kebab-case (media_buy → /compliance/.../protocols/media-buy/).
media_buy, creative, signals, governance, brand, sponsored_intelligence.
See the Compliance Catalog for every protocol’s scope. Support for the compliance test controller is declared via the separate compliance_testing capability block (below), not as a protocol value.
specialisms
Optional specialization claims. Each entry corresponds to a narrow storyboard at/compliance/{version}/specialisms/{id}/. Every specialism rolls up to one protocol in supported_protocols — claiming sales-guaranteed requires media_buy. The runner rejects a specialism whose parent protocol is missing.
account
Account and authentication capabilities. All sellers should declare this section — buyers read it before callingsync_accounts, list_accounts, or any authenticated task. Even simple publishers need account management to handle billing relationships and sandbox testing.
Auth models
Implicit accounts (require_operator_auth: false) — The seller trusts the agent’s identity claims. The agent authenticates once with its own bearer token, then calls sync_accounts to declare which brands and operators it represents. The seller provisions accounts based on the agent’s claims, optionally verifying operators against brand.json. All subsequent calls use the agent’s single credential and pass natural keys (brand + operator).
Explicit accounts (require_operator_auth: true) — Each operator must authenticate with the seller directly. The agent obtains a credential per operator — via OAuth using authorization_endpoint, or out-of-band — opens a per-operator session, and discovers accounts via list_accounts. The buyer passes seller-assigned account_id values on all subsequent requests.
For sandbox, the path follows the account model: explicit accounts (require_operator_auth: true) discover pre-existing test accounts via list_accounts; implicit accounts declare sandbox via sync_accounts with sandbox: true.
See Accounts and Agents for full workflows and seller patterns for common combinations of auth model and billing support.
media_buy
Media-buy protocol capabilities. Only present ifmedia_buy is in supported_protocols. Sellers declaring media_buy should also include account (with supported_billing) and media_buy.portfolio — buyers need both to establish billing and understand inventory coverage. Compliance testing validates their presence.
:::note 3.0 breaking changes
The following fields have been removed from the capabilities response:
media_buy.reporting— Reporting is implied bymedia_buy. Use product-levelreporting_capabilitiesinstead.features.content_standards— Replaced bymedia_buy.content_standardsobject. Presence of the object indicates support.features.audience_targeting— Replaced bymedia_buy.audience_targetingobject. Presence of the object indicates support.features.conversion_tracking— Replaced bymedia_buy.conversion_trackingobject. Presence of the object indicates support.execution.targeting.device_platform,device_type— Implied bymedia_buysupport.execution.targeting.audience_include,audience_exclude— Implied byaudience_targetingobject presence.execution.trusted_match.supported— Object presence indicates support.brand.identity— Implied bybrandinsupported_protocols.get_brand_identityis always available. :::
reporting_delivery_methods
Declares which push-based delivery methods are available across the seller’s product portfolio. Polling viaget_media_buy_delivery is a required task for all media_buy sellers regardless of this field.
When absent, only polling is available. Cadence and metrics are declared per product in
reporting_capabilities.
When offline is declared, also include offline_delivery_protocols to declare which cloud storage protocols are supported (s3, gcs, azure_blob). Buyers express a protocol preference via preferred_reporting_protocol in sync_accounts; the seller provisions the account’s reporting_bucket using a supported protocol.
For offline delivery, the seller provisions a per-account bucket and grants the buyer read access out-of-band. The bucket location (including file_retention_days) appears on the account object returned by sync_accounts as reporting_bucket. See Offline File Delivery for details.
features
Optional media-buy features. If declared true, seller MUST honor requests using that feature.content_standards
Content standards implementation details. Presence of this object indicates the seller supports content_standards configuration including sampling rates and category filtering. Gives buyers pre-buy visibility into local evaluation and artifact delivery capabilities.
Example:
supports_local_evaluation is false, the failures_only filter on get_media_buy_artifacts will return an empty result set — all verdicts will be unevaluated.
execution
Technical execution capabilities:axe_integrations
axe_integrations is an array of Agentic Ad Exchange (AXE) endpoint URLs that this seller can execute through. AXE is the real-time execution layer for AdCP campaigns — it connects buyer agents to programmatic inventory via standardized exchanges.
When a seller declares AXE URLs in their capabilities, buyers can:
- Route impression-level execution through the declared exchange
- Use the exchange’s targeting, optimization, and measurement capabilities
- Execute alongside the seller’s direct-sold inventory
get_adcp_capabilities and filter products to AXE-enabled sellers using required_axe_integrations on get_products.
creative_specs
targeting
Device platform and device type targeting are implied by
media_buy support. Audience include/exclude targeting is implied by the presence of the audience_targeting capabilities object.
Sellers that support a geographic targeting level SHOULD support both inclusion and exclusion at that level. For example, geo_metros.nielsen_dma: true SHOULD mean the seller supports both geo_metros and geo_metros_exclude with Nielsen DMA codes. If a seller only supports one direction (e.g., inclusion but not exclusion), it MUST return a validation error for unsupported fields rather than silently ignoring them. See Targeting Overlays for exclusion semantics.
geo_proximity specifies which proximity targeting methods are supported:
geo_metros specifies which metro classification systems are supported:
geo_postal_areas specifies which postal code systems are supported:
audience_targeting
Audience targeting capabilities. Presence of this object indicates the seller supports audience targeting, includingsync_audiences and audience_include/audience_exclude in targeting overlays. Describes what identifier types the seller accepts for audience matching, size constraints, and expected matching latency.
conversion_tracking
Seller-level conversion tracking capabilities. Declares what the seller supports forkind: "event" optimization goals.
portfolio
Inventory portfolio information:signals
Signals protocol capabilities. Only present ifsignals is in supported_protocols. Reserved for future use.
creative
Creative protocol capabilities. Only present ifcreative is in supported_protocols.
governance
Governance protocol capabilities. Only present ifgovernance is in supported_protocols. Governance agents declare capabilities across four domains: property evaluation, creative evaluation, content standards verification, and policy registry integration.
property_features
Array of property features this governance agent can evaluate. See Property Governance.creative_features
Array of creative features this governance agent can evaluate. Same field schema asproperty_features. See Creative Governance.
Creative governance agents evaluate creatives for security, content categorization, and regulatory compliance. Buyers filter creatives by feature requirements — for example, blocking creatives flagged for auto_redirect or requiring registry:eu_ai_act_article_50 compliance.
content_standards
Content standards verification capabilities. See Content Standards.policy_registry
Policy registry integration capabilities. See Policy Registry.
Example governance agent response:
compliance_testing
Compliance testing capabilities. The presence of this block declares that the agent supports deterministic testing viacomply_test_controller. Omit the block if the agent does not support compliance testing.
Production deployments MUST NOT include this block. comply_test_controller is sandbox-only at the deployment level; advertising the capability on a production endpoint is non-conformant even if dispatch is gated. See Compliance test controller § Sandbox gating.
Storyboard runners check for the
compliance_testing block before running deterministic testing steps. If the agent does not include the block, controller-dependent storyboard steps cannot be validated.
Agents that implement comply_test_controller SHOULD include the compliance_testing capability block and list supported scenarios. Agents that only support a subset of scenarios (e.g., media buy status but not SI sessions) declare only those scenarios — the runner skips unsupported ones.
:::note
Compliance testing is sandbox-only at the deployment level — production deployments MUST NOT advertise this block or expose comply_test_controller on any surface. FORBIDDEN is returned only when an in-sandbox caller passes params that reference a non-sandbox account; live-mode probes for the tool by name receive the transport’s standard unknown-tool error. See Sandbox gating.
:::
webhook_signing
Declares a seller’s webhook-signing posture. Any seller whose capability surface advertises mutating-webhook emission — including but not limited tomedia_buy.reporting_delivery_methods containing webhook or media_buy.content_standards.supports_webhook_delivery: true — MUST include this block with supported: true. A seller that emits no webhooks at all MAY omit the block entirely; the absence of both mutating-webhook emission in other capabilities and this block is an unambiguous “does not emit webhooks” posture. Buyers read the block at onboarding to determine which algorithms to expect per the AdCP webhook-signing profile. Buyers integrating with a seller that advertises mutating-webhook emission while advertising supported: false or omitting this block MUST fail onboarding with a user-actionable error; silent integration with a non-signing-but-webhook-emitting seller is unsafe for any mutating-webhook use case.
Example:
request_signing (inbound) and the two blocks cover the two signing directions between buyer and seller. Buyers SHOULD validate both at onboarding; a seller that signs one direction but not the other has a lopsided security posture that operators need to notice explicitly.
extensions_supported
Array of extension namespaces this agent supports. Buyers can expect meaningful data inext.{namespace} fields on responses from this agent.
Extension schemas are published in the AdCP extension registry. When an agent declares support for an extension, buyers know to look for and process
ext.{namespace} data in responses.
Example:
experimental_features
Array of experimental AdCP surfaces this agent implements. A surface is experimental when its schema carriesx-status: experimental — it is part of the core protocol but not yet frozen and may break between 3.x releases with 6 weeks’ notice. Sellers that implement any experimental surface MUST list its feature id here.
Buyers should inspect
experimental_features before relying on an experimental surface. A seller that does not list a surface is asserting it does not implement it — there is no “silently experimental” mode.
Example:
- Responses may include
ext.iab_tcfwith IAB TCF consent data - Responses may include
ext.iab_gppwith IAB GPP (Global Privacy Platform) signals - Responses may include
ext.acmecorpwith vendor-specific data from Acme Corp
The Capability Contract
If a capability is declared, the seller MUST honor it.media_buy.execution.targeting.geo_postal_areas.us_zip: true→ Buyer can send US ZIP codes, seller MUST honor themmedia_buy.execution.targeting.geo_metros.nielsen_dma: true→ Buyer can send DMA codes, seller MUST honor themmedia_buy.content_standardsobject present → Seller MUST apply content standards when providedmedia_buy.audience_targetingobject present → Seller MUST supportsync_audiencesand audience targeting overlaysmedia_buy.conversion_trackingobject present → Seller MUST supportsync_event_sourcesandlog_event- AXE URL in
media_buy.execution.axe_integrations→ Seller can execute through that exchange (legacy — new integrations use TMP)
false or omit it.
Common Scenarios
Basic Capability Discovery
Check multi-protocol support
Filter sellers by capability
Use Capabilities to Build Targeting
Capabilities tell you what you CAN specify in create_media_buy targeting. Userequired_geo_targeting to filter products to sellers that support specific geo targeting levels and systems:
- Digital inventory: Use
countries+required_geo_targeting(capability), apply fine-grained targeting increate_media_buy - Local inventory: Use
metros/regions(coverage) to find products with coverage in your target markets
Local Inventory Example (Radio, DOOH)
For locally-bound inventory, products ARE geographically specific. A radio station in NYC DMA only covers NYC.Response Example
- AdCP versions: Version 1
- Protocols: Media buy only
- Auth model: Agent-trusted (
require_operator_auth: false) — authenticate once, declare brands viasync_accounts - Billing: Operator or agent billing; default is operator
- Country targeting: Available (ISO 3166-1 alpha-2:
US,GB, etc.) - Region targeting: Available (ISO 3166-2:
US-NY,GB-SCT, etc.) - Metro targeting: Nielsen DMA only (US market)
- Postal targeting: US ZIP, UK outward codes, Canadian FSA
- Audience targeting: Accepts hashed email, hashed phone, UID2, and RampID; minimum matched audience size of 500; matching latency 1–24 hours
- Conversion tracking: Accepts purchase, lead, add_to_cart, view_content events from website/app; no multi-source dedup
- Extensions: Vendor-specific data in
ext.acmecorp
Multi-protocol agent
An agent can implement multiple protocols from a single endpoint. This is common for sellers that manage both media buying and creative generation — the buyer calls all tasks on the same URL.- Media Buy Protocol: Product discovery, media buying, delivery reporting
- Creative Protocol: Creative library management, AI-powered creative generation, variant-level delivery analytics via
get_creative_delivery - Shared account: A single account established via
sync_accountsapplies to both protocols
supported_protocols includes "creative", the buyer can call Creative Protocol tasks (list_creative_formats, sync_creatives, get_creative_delivery, etc.) on this agent. See Creative capabilities on sales agents.
Geo Standards Reference
Migration from list_authorized_properties (v2)
Thelist_authorized_properties task was removed in v3. If migrating from v2:
New fields:
adcp.major_versions- Version compatibilitysupported_protocols- Which domain protocols are supportedmedia_buy.features- Optional feature supportmedia_buy.execution.axe_integrations- Ad exchange supportmedia_buy.execution.creative_specs- VAST/MRAID versionsmedia_buy.execution.targeting- Geo targeting granularity
Error Handling
Best Practices
1. Cache Capabilities Capabilities rarely change. Cache results and uselast_updated for staleness detection.
2. Check Protocol Support First
Before accessing protocol-specific fields, verify the protocol is in supported_protocols.
3. Check Before Requesting
Don’t send postal areas for a system the seller doesn’t support. Don’t request features the seller doesn’t support.
4. Fail Fast on Incompatibility
If a seller doesn’t support required capabilities, skip them early rather than discovering failures later.
5. Read the Auth Model Before Proceeding
Check account.require_operator_auth immediately after discovery. Agent-trusted and operator-scoped flows diverge significantly: the former uses a single credential for all brands and operators, the latter requires per-operator credentials and sessions.
6. Use Protocol Version for Routing
Route requests to appropriate API versions based on adcp.major_versions.
Next Steps
After discovering capabilities:- Set up accounts: Follow the auth model from
account.require_operator_auth— see Accounts and Agents - Filter products: Use
get_productswith capability-aware filters - Validate properties: Fetch publisher
adagents.jsonfiles for property definitions - Create buys: Use
create_media_buywith supported features
Learn More
- Accounts and Agents - Auth models, account setup, billing
- adagents.json Specification - Publisher authorization files
- Product Filters - Capability-aware filtering
- Content Standards - Brand safety configuration