supported_protocols and specialisms in get_adcp_capabilities. Each declaration maps to a compliance bundle at /compliance/{version}/ that the storyboard runner executes to verify the claim.
supported_protocols is not exhaustive. The accounts surface (sync_accounts, list_accounts, sync_governance) is a foundation implicit in every media_buy, creative, and signals agent and is intentionally not a supported_protocols value. See Accounts tasks for the full account surface./compliance/{version}/index.json.
Universal storyboards
Every agent runs every storyboard in/compliance/{version}/universal/ regardless of which protocols or specialisms it claims. A few are capability-gated — they only run when the agent advertises the relevant capability — but the storyboard is still universal in scope: any agent claiming the capability is graded by it. Failing a universal storyboard fails overall compliance.
Capability-gated rows (
deterministic-testing, signed-requests) are skipped only when the agent advertises the capability as false; they cannot be claimed and partially implemented. Declaring supported: true and failing the storyboard is non-conformant — declare false rather than ship a partial implementation. The billing-gate-dispatch and comply-controller-mode-gate rows are precondition-gated rather than ordinary capability-gated rows: each phase grades not_applicable when its precondition is not met. Sellers wanting full coverage of the per-agent billing gate SHOULD ship a test kit with commercial_relationship: passthrough_only declared so the per-agent phases run.
Protocols
Top-level agent capability claims. An agent claims a protocol by listing it insupported_protocols and must pass the protocol’s baseline storyboard plus every universal storyboard.
supported_protocols uses snake_case; compliance paths and specialism IDs use kebab-case. See Naming conventions below for the full mapping.
Support for the compliance test controller is declared via the
capabilities.compliance_testing block on get_adcp_capabilities, not via supported_protocols. Compliance testing is an RPC surface for the test harness, not a functional protocol.Specialisms
Specific capability claims. Each specialism lives under exactly one protocol. An agent claiming a specialism must pass the specialism’s storyboard in addition to the parent protocol’s baseline — e.g. claimingsales-guaranteed requires media_buy in supported_protocols.
Specialisms carry a status:
stable— fully specified storyboard. Compliance runner executes every phase;AAO Verifiedmeans the agent demonstrably passed.preview— ID and scope are reserved; the storyboard is a placeholder while the underlying protocol surface stabilizes. Agents may claim these; the runner emits a result of{ status: "preview", passed: null, reason: "storyboard not yet defined" }instead of a verified pass/fail. AAO badges render preview specialisms with a distinct indicator.deprecated— retained for backward compatibility but scheduled for removal in a future major. Runner emits{ status: "deprecated", passed: <boolean>, reason: "..." }— still executes the storyboard if one exists, but warns the claim should be migrated.
/compliance/{version}/index.json.
Specialisms are grouped below by parent protocol.
What changed in 3.0.
sponsored_intelligence was promoted from a specialism to a full protocol (declare it in supported_protocols, not specialisms). audience-sync moved from governance to media-buy to match its tool family. broadcast-platform was renamed to sales-broadcast-tv and social-platform to sales-social. property-governance and collection-governance split into sibling property-lists and collection-lists specialisms.media-buy
Coming in 3.1.
sales-streaming-tv (CTV / streaming), sales-exchange (programmatic SSP / exchange), and sales-retail-media (retail media network) are scheduled for 3.1. Sellers in those categories should claim sales-guaranteed or sales-non-guaranteed at 3.0 GA.audience-sync moved from the governance protocol to media-buy to match its tool family. If your agent claims audience-sync but only declares governance in supported_protocols, add media_buy to supported_protocols — the runner now expects the media-buy baseline to run alongside the audience-sync storyboard.creative
signals
governance
Experimental in 3.1. Measurement metric-catalog discovery is available through the experimental
measurement capability block and measurement.core experimental feature. A stable measurement-verification specialism and baseline storyboard are deferred until the measurement task surface is frozen.brand
Choosing a sales specialism
Thesales-* specialisms are not mutually exclusive — a hybrid platform with both a guaranteed direct desk and an auction floor should claim both sales-guaranteed and sales-non-guaranteed. Follow the steps below to resolve your claim.
1
Is your inventory channel-specific?
Three specialisms apply to specific delivery channels and have their own storyboards. If you only sell one of these channel types, claim only the matching specialism. If you also sell general display or video inventory outside these channels, continue to Step 2.
2
What purchase model do you support?
3
Set media_buy.supports_proposals (sales-guaranteed only)
media_buy.supports_proposals is a boolean in the media_buy capabilities block of your get_adcp_capabilities response. It gates whether the proposal_finalize compliance scenario runs. It is a conformance declaration, not the buyer’s per-proposal routing signal: buyers decide whether a returned proposal can be bought from proposal_status.creative
signals
governance
Experimental in 3.1. Measurement metric-catalog discovery is available through the experimental
measurement capability block and measurement.core experimental feature. A stable measurement-verification specialism and baseline storyboard are deferred until the measurement task surface is frozen.brand
sponsored-intelligence
Cross-resource invariants
In addition to per-step validations, specialisms declare cross-step and cross-resource invariants the runner observes across the full storyboard run. These catch state inconsistencies that no single response shape would surface.
Invariants are declared in the specialism YAML’s
invariants: array and documented inline with the rule they enforce. See media-buy lifecycle § Compliance for the full impairment.coherence contract.
How to claim
Declare your protocols and specialisms inget_adcp_capabilities:
- Runs every storyboard in
/compliance/{version}/universal/ - For each protocol in
supported_protocols, runs the baseline at/compliance/{version}/protocols/{protocol}/(snake_case → kebab-case) - Runs each claimed specialism’s storyboard at
/compliance/{version}/specialisms/{id}/ - For
previewspecialisms, emits a warning instead of a pass/fail verdict — AAO Verified badges render preview specialisms with a distinct indicator
stable storyboard fails, your agent is not compliant for that claim. See Validate Your Agent for how to run the suite locally. For a detailed walkthrough of how the runner resolves specialism manifests into graded scenarios — including how capability flags like media_buy.supports_proposals gate individual scenarios — see How grading works.
Naming conventions
Four casings coexist in the taxonomy. Which one applies depends on where the identifier is read:
The kebab↔snake swap between wire specialism IDs and storyboard categories is mechanical identity — hyphens become underscores, nothing more. Variant scenarios within a specialism use
{category}/{variant} path form.
The case split is deliberate:
supported_protocols is a pre-existing 3.0 field already shipped to production agents, while specialism IDs are new and URL-first (each is a directory name under /compliance/.../specialisms/{id}/). The runner handles the mapping transparently.
Specialism ↔ tool family mapping
The protocol an agent claims does not always match the tool family name a specialism uses:audience-synclives under themedia-buyprotocol becausesync_audiencesis a media-buy tool.property-lists(specialism ID, kebab-case) maps to theproperty_listtool family (create_property_list,validate_property_delivery) and storyboard categoryproperty_lists.sales-broadcast-tvdeclareschannels: ['linear_tv']— “Broadcast TV” is the prose name;linear_tvis the wire value.
/compliance/{version}/index.json surfaces each specialism’s required_tools so agents can discover the tool families without reading the full storyboard YAML.
Wire enum vs prose
Wire enum values are alwayssnake_case (non_guaranteed, pmax_platform, ctv). Prose renders the same concept with hyphens or spaces (“non-guaranteed auction inventory”, “Connected TV”). When populating a payload, always use the wire form — hyphenated or spaced spellings are editorial only and will fail schema validation.
signal_type values
The signal_type enum in signal responses has three values:
marketplace— the signal agent is reselling segments published by a third-party data provider (Experian, Peer39, etc.). Buyers can verify authorization via the provider’s/.well-known/adagents.json.owned— the signal agent exposes its own first-party segments derived from directly owned data (retailer purchase data, publisher behavioral data, telco location data).custom— the signal source builds the segment on demand from models, composites, or buyer-supplied inputs. Use this when noadagents.jsonauthorization chain applies — the segment is source-native, not attributable to a standing upstream provider.
Source of truth
The machine index is published alongside schemas:
The build pipeline verifies the specialism filesystem ↔ enum parity and that every specialism’s parent protocol exists in the compliance tree. Drift fails the build.
The catalog on this page is maintained by hand to give human context. The authoritative enumeration is always
/compliance/{version}/index.json.