Standards & Protocols Reference

AdCP / Advertising Context Protocol.

A practical guide to the open protocol layer for agentic advertising workflows: discovery, planning, buying, creative, signals, governance, accounts, and measurement.

AdCP gives advertising agents a shared task and schema layer. It helps buyers, sellers, platforms, data providers, and creative systems communicate through standardized advertising actions rather than bespoke dashboard workflows and one-off integrations.

AdCP Protocol Stack — agents on top, a governed task layer at the centre, transport, discovery and execution surfaces below. PROTOCOL STACK AdCP Protocol Stack Buyer, seller and operator agents — the actors that initiate and fulfil tasks across the stack. ACTORS Buyer · seller · operator agents The AdCP task layer — the one standard surface where work is named, run and governed. This is the heart of the stack. TASK LAYER AdCP — the task layer Media Buy — an AdCP task family exposed through the same discoverable, governed interface. Media Buy Creative — an AdCP task family exposed through the same discoverable, governed interface. Creative Signals — an AdCP task family exposed through the same discoverable, governed interface. Signals Accounts — an AdCP task family exposed through the same discoverable, governed interface. Accounts Brand — an AdCP task family exposed through the same discoverable, governed interface. Brand Governance — an AdCP task family exposed through the same discoverable, governed interface. Governance Sponsored Intelligence — an AdCP task family exposed through the same discoverable, governed interface. Sponsored Intelligence Transport — AdCP rides existing agent protocols (MCP and A2A) rather than inventing a new wire format. TRANSPORT MCP · A2A Discovery and identity — adagents.json, brand.json and a registry let agents find and trust each other before any task runs. DISCOVERY & IDENTITY adagents.json · brand.json · registry Execution surfaces — the systems AdCP tasks actually drive: publisher, SSP, DSP, creative system, data provider and measurement. EXECUTION SURFACES publisher · SSP · DSP · creative system · data provider · measurement Governance rail — the controls that hold across every layer: approval, idempotency, signatures, audit and human judgment. GOVERNANCE approvalidempotencysignaturesaudithuman judgment AdCP is the task layer — discoverable, executable, governable, auditable.
AdCP sits over MCP / A2A transport: a task layer above execution surfaces, with a governance rail.

AdCP is not a replacement for OpenRTB, clean rooms, or human judgment. It is a protocol layer for making advertising work discoverable, executable, governable, and auditable by agents.

Standard readiness (validate before build)
  • AdCP 3.1 GA · v3.1.13 · Aug 2026
  • AdCP 3.0 prior line · wire-compatible
  • v2 deprecated Aug 1, 2026
  • Sponsored Intelligence experimental

Fast read

What it is
An open agentic advertising protocol that defines domain-specific tasks and schemas for advertising agents.
What it does
Helps agents discover inventory, set up accounts, buy media, manage creative, activate signals, apply governance, and report results through standardized calls.
What it is not
Not a media exchange, identity graph, DSP, SSP, clean room, or replacement for OpenRTB.
Why it matters
Agentic workflows need repeatable, machine-readable actions. Without a shared protocol, every agent has to learn every platform separately.
Current state
AdCP 3.1 is the current general-availability line; the latest tagged release is v3.1.8 (GitHub, July 28, 2026 — wire-negotiation pin stays "3.1"). It is additive over 3.0 — a 3.0 integration keeps working with no code change. v3.1.3 was withdrawn days after shipping (see the version-watch section below); official docs still point implementers to v3.1.2. Validate implementation details against current official docs.
Best next step
Understand the domains, then decide which workflow your company should expose or consume first.
Definition

What AdCP is.

AdCP is a shared advertising task layer for AI agents. It defines what agents can ask for, what systems should return, and how actions move through the advertising workflow.

LayerJobExample
TransportCarries messagesMCP / A2A
AdCPDefines advertising tasks and schemasget_products, create_media_buy, get_signals, activate_signal
Execution systemPerforms the actionpublisher, SSP, DSP, creative system, data provider
GovernanceControls authority and auditapprovals, signatures, idempotency, audit logs
Existing ad standardsPower underlying objects and transactionsOpenRTB, AdCOM, OpenDirect, Deals API
Rationale

Why AdCP exists.

  • Fragmented workflows

    Media buying, creative, data activation, accounts, and reporting still live across disconnected systems and dashboards.

  • Agents need actions, not screens

    An agent cannot scale by clicking through every platform UI. It needs task-level interfaces.

  • Common schemas reduce ambiguity

    Natural-language briefs need to resolve into structured, auditable requests.

  • Human oversight needs architecture

    Agentic buying requires approvals, limits, audit logs, and accountability built into the flow.

  • Platform participation needs standards

    Publishers, data providers, creative systems, and ad platforms need a shared way to expose what agents are allowed to do.

Version watch

What’s new in AdCP 3.1.

AdCP 3.1 is now the current general-availability line (latest tag v3.1.8; official docs point implementers to v3.1.2), additive over 3.0. Separate what shipped from the obligations adoption brings and what to watch next.

GA · v3.1.13 — additive over 3.0

Confirmed — AdCP 3.1 (GA · v3.1.13)

  • AdCP 3.1 is the current general-availability line — GA at GitHub tag v3.1.0 (June 18, 2026), patched through v3.1.2 (June 30 – July 8, 2026; protocol-only fixes and spec clarifications). v3.1.3 (July 13) was withdrawn days later — official notice: it added a stable protocol schema field in a patch release, violating the 3.1.x versioning contract, plus a publisher-domain filter bug accepting a plural selector shape the schema rejects; official docs still point implementers to v3.1.2 as the confirmed target. Further patches followed at v3.1.4 (July 19) through v3.1.8 (July 28, the latest tag); v3.1.6–v3.1.8’s GitHub release bodies are version-only and the official release-notes page stops before them — per-patch detail lives only in the repo changelog. The wire-negotiation pin is the string "3.1"; SDKs normalize "3.1.x" → "3.1". v2 is fully deprecated on August 1, 2026 (UTC).
  • Additive over 3.0 at the wire level: no required field was removed and no shape broke, so a 3.0-conformant integration keeps working with no code change.
  • A production-hardening release: release-precision version negotiation (supported_versions[]), distributed and cryptographically signed brand trust (self-published brand.json + signed verify_brand_claim), canonical creative formats plus a transformers catalog, and vendor-attested measurement goals.
  • Operational guarantees: idempotency_key now required on every task request; dependency-impact / media-buy health signals, buyer-side webhook observability, and reporting finality + reach-window semantics.
  • Feature detail is sourced from the official "What’s New in 3.1" and 3.0→3.1 migration docs plus the SDK notes — the GitHub release records only the version and date.

Obligations when you claim 3.1

  • Advertise supported_versions in get_adcp_capabilities and echo the served version at the envelope root; transports must tolerate unknown envelope-root fields.
  • Brand agents implementing verify_brand_claim(s) must return a signed (JWS) response.
  • Move creative metadata to canonical format_kind + list_transformers, and pass the 3.1 compliance storyboard bundle to earn the 3.1 badge.
  • Schema tightening can surface as errors: trademarks[].status is now a typed enum and trademarks[].countries must be ISO 3166-1 alpha-2 (former free-text values fail); cache_scope is schema-required on get_products / get_signals.
  • Authentication hardens: RFC 9421 request signing — recommended in 3.0 — becomes REQUIRED for mutating and financial operations in 3.1+, with static bearer/Basic credentials prohibited there (still permitted for read/discovery). Until you land on 3.1, bearer-over-TLS remains the effective floor for spend operations — the spec says to ship 9421 ahead of the cutover.
  • The Go SDK (adcp-go) has breaking type changes — plan the upgrade; it is not a drop-in.

Watch next (3.2 / 4.0)

  • Scheduled removals: legacy top-level media-buy status → media_buy_status (slated for 3.2); a 4.0 deprecation set (Format.pricing_options, legacy SignalId / flat signal targeting, inline brands[], data_provider_signals).
  • Flagged experimental in 3.1, not yet stable: the measurement-vendor catalog (measurement.core) and the responsive_creative / sponsored_placement / agent_placement format kinds.
  • A proposed pre-GA rename of body-level status discriminators (e.g. check_governance) was discussed (#4897) but is unconfirmed in the final tag — validate before relying on it.
  • AdCP Verified independent auditing, signals-protocol maturity, registry adoption, SDKs, and reference implementations.

Migrating 3.0 → 3.1 — the checklist

A 3.0 integration keeps working untouched — 3.1 is additive at the wire. “Migrating” means claiming 3.1, and each step below is a real obligation (per the 3.0→3.1 migration guide), not optional polish. Backward compatibility is “mostly”: 3.0 clients are not broken, but adoption plus the Go SDK upgrade impose real changes — plan it.

  • Advertise versions — Return supported_versions[] from get_adcp_capabilities and echo the served version at the envelope root; make transports tolerate unknown envelope-root fields (this replaces prior reject-on-unknown validation).
  • Sign brand verification — If you implement verify_brand_claim(s), return a signed (JWS) response bound to the task, resolved tenant, agent URL, and freshness window.
  • Adopt canonical creative — Move creative metadata to the canonical format_kind set and discover build units through the new list_transformers catalog; format-attached pricing moves to the transformer.
  • Fix typed fields — trademarks[].status must be a typed enum and trademarks[].countries ISO 3166-1 alpha-2 — former free-text values now error; add the now-required cache_scope on get_products and get_signals.
  • Require idempotency — Send idempotency_key on every task request (sellers may reject missing keys); treat IDEMPOTENCY_IN_FLIGHT as transient rather than minting a fresh key.
  • Upgrade the SDK, then certify — The Go SDK (adcp-go) has breaking type changes — re-decode against the new shapes; it is not a drop-in. Then pass the 3.1 compliance storyboard bundle to earn the 3.1 badge.
From the implementer seat

Contributions to the protocol.

This page is written from inside the work: No Fluff Advisory builds and operates a live AdCP signals agent (listed in the AAO registry) with all-pass conformance runs across the AdCP 3.0 and 3.1.0 GA suites, and co-leads the Signals & Measurement working group. For the live state of the registry itself — every registered agent, its actual tool catalog, and real request/response captures — see the AdCP Ecosystem Tracker. For the buy side of the same protocol run end to end — discovery, audience targeting, brief, media buy, creatives, the human gate, delivery reporting — with every call copy-pasteable against a live seller agent, see the AdCP Buyer’s Guide.

Merged into the protocol & tooling

  • last_updated on signal-definition — schema field for verifiable signal-record freshness (#5248PR #5249, in the 3.1.0 line since rc.7).
  • Root-cause diagnostics for the conformance runner — a schema-invalid get_adcp_capabilities response used to surface as N unrelated track failures with nothing linking them; reported it (#6254) and wrote the protocol-side contract, which now defines the capabilities_response_schema_invalid notice and an RFC 6901 capability_pointer field so one cause is reported once, ahead of the results it explains (PR #6256, merged August 8, 2026).
  • Runtime signal-quality attestations — our RFC for verifier-signed signal-quality evidence on check_governance (#5418) landed in the protocol's 3.2 line: runtime_attestations[] consuming the shared attestation primitive (#4529), scoped to signal activation with GDPR/CCPA deactivation exempt, with response-side evaluations and binding digests (PR #6218, merged August 6, 2026).
  • Compliance-grader fix — all-pass single-protocol runs rendered “Degraded” by a rollup regression; root-caused to the introducing commit, filed (#5429, triaged P0) and fixed (PR #5444, merged).
  • RFC 9421 webhook-signing default — the inventory (#4270) and draft PRs (#4273/#4275, closed in favor of the maintainer implementation) that drove the 3.0.9 realignment away from the deprecated HMAC framing.

Conformance suite, hardened

  • Signals-only agents now skip non-applicable media-buy gating and gained dedicated error-handling / schema-validation storyboards (#2916, #3350, #4009 — fixed in the 3.1.0 suite; earlier #2535, #3999, #4065).
  • Shaped in review — the signal-definition epistemic / provenance layer (#5017, maintainer-authored): contributed the implementer wire-size data (88 KB for 5 signals vs the 64 KB probe ceiling) that drove the progressive-disclosure design, plus field-level schema review.
  • Wholesale cache-scope isolation — found that conditional-fetch tokens pass the suite even when a global token leaks across cache_scope layers; filed (#5739, triaged ready-to-implement for 3.2.0) and implemented the fix — scope-isolation storyboards for signals and products, the schema MUST-NOTs, and the reference-agent correction (PR #5748, merged August 3, 2026).
  • Grader reliability — evaluate_agent_quality returning identical scores across four runs including a force_refresh pass; filed with live wire evidence (#6206, maintainer-triaged same day: the silently-dropped force_refresh parameter confirmed as a real grader bug; the score-staleness root cause resolved agent-side, follow-up scoping in #6233).
  • Registry & docs reliability — registry UI rendering empty product/format sections for anonymous viewers despite working public endpoints (#6229, fixed and closed; a duplicate filing's triage surfaced a third break in publisher discovery, carried across on close and fixed in the same change) and the dashboard's aao-verified doc links returning 404 (#6231, fixed and closed).
  • Storyboard-runner account resolution — advertising list_accounts silently switches the runner into discovery mode, which then hard-fails as “ambiguous” on any multi-tenant roster instead of falling back to the natural-key path that exists a few lines above (#6242, triaged P0 and fixed — schema-default account routing and agency-operated brand matching shipped in @adcp/sdk 13.0.0-rc.11 via adcp-client#2488, with runner guidance in #6289; two implementers hit it independently), and the amplification pattern behind it — one schema-invalid capabilities response surfacing as N unrelated track failures (#6254).
  • 3.1.11 harness regression — the dynamic creative-asset directive shipped without its expansion step ordered ahead of the runner's own outbound validation, so conformant sellers were graded down on requests their agents never received (#6267, fixed; the affected track returned to a full pass on the first post-deploy regrade). Filed alongside the contract gap behind it — unbuildable asset slots were charged to the agent, and the storyboard contract contradicted itself on whether to fail the step or skip it — which resolved in the seller's favour: runner-owned coverage gaps now grade not-applicable rather than counting as failures, with the fixture set widened and slot-content guessing prohibited (#6269, fixed). Registry card rendering a stale tool count fixed alongside (#6268).
  • Compliance reporting that hides its own verdict — the badge is gated on storyboard-level results, but the API returned the summary count with an empty breakdown (#6291) and a track could display every scenario passing while the verdict that actually gates the badge disagreed (#6292) — both fixed and shipped together. Found while diagnosing why a live agent sat at 132/138 scenarios and no badge. Once the breakdown shipped it showed the card reporting a declared specialism as failing while the underlying record read untested with zero steps attempted and zero failures (#6302) — a storyboard that had never run once being displayed as one that ran and failed.
  • A badge panel that names the wrong blocker — the AAO Verified panel tells a seller to “fix the failing storyboards in this card” over a record reading 13 passing, 4 partial, 18 untested, and zero failing: every non-passing state renders as “failing” (#6363, triaged ready-to-implement as a classification bug, with per-state hint keys prescribed for the fix).
  • Registry-migration QA — five filings in one morning — probing the agenticadvertising.org migration surfaced: verified media-buy agents rendering “Not Verified” badges (#6376 — our hyphen/underscore hypothesis was superseded in triage by the real cause, a migration that bulk-revoked every 3.1 badge pending GA); an unstructured badge-role error and an OpenAPI description still advertising roles that don’t exist, sales included (#6377, corrected mid-flight — the 400 does carry a body; our first probe read only the status code); the 200-plus-grey embed contract for unverified agents (#6378, resolved documented-intentional, with the onerror embed pattern to be deprecated in favour of the gate-on-verification pattern this site already ships); the hosted grader still running a superseded spec line hours after release — the operational sibling of #6321 (#6379); and the CLI producing silent mixed-line runs, kit from 3.1.13 while storyboards resolve from bundled 3.1.11 with no consistency check (#6380, reproduced as a two-run diff that cost a full grading pass). A sixth followed the same afternoon when a requeue ran the 3.0.18 cache against this 3.1-only agent and flipped the public card to failing before any scenario executed: sellers migrating 3.0 → 3.1 have no self-serve way to update the compliance target, with the proposed fix of resolving it from advertised supported_versions on every health check (#6383). The badge trio closed the same day via PR #6387.
  • SDK test-fixture bug — the @adcp/sdk scenario suite's sync_creatives fixture fails the SDK's own request validation (adcp-client#2443, maintainer-confirmed with a corrected fix and regression-test ask; blast radius scoped to the local scenario suite in #6233).
  • Conformance steps no seller can pass — three findings from taking one live agent from 147 to 240 passing steps. The storyboards mark validations severity: advisory and the spec says an advisory failure does not fail the step, but the runner implements none of that contract, so every validation on the stale-cache step is advisory and the step is unpassable by construction (#6320, triaged P0); a second instance of the same skip-graded-as-failure pattern turns up in the idempotency rate-limit step, which is doubly unreachable because its test kit is sandbox-scoped while the graded URL is production (#6344). And a seller who declares supported_billing: ['operator'] is asked for an error code that means the opposite of what is true — BILLING_NOT_PERMITTED_FOR_AGENT implies the mode exists and this agent may not use it, where the honest answer is that the mode is not offered at all (#6343) — the same shape as the specialism gap below.
  • Grades sellers cannot reproduce — the hosted grader ran compliance cache 3.1.12 while no published SDK carried it: latest shipped 3.1.5, the release candidate 3.1.11, and a step that passed locally failed on the grader with no way to see the storyboard that failed it (#6321, triaged P0, root-caused to the version resolver). Found alongside a registry state machine that locks honest sellers out of grading entirely: a completed run rewrites the requested compliance target to whatever it just ran, so an agent that narrows its advertised supported_versions to the one version it actually supports then fails pre-flight against the older cache and is graded on nothing at all. Narrowing was the honest move and it took the public card from degraded to failing.
  • A storyboard that fails the path the spec prescribes — a seller with no task layer is told by the spec to allocate the media buy id at commit and return synchronous success with confirmed_at: null, then the async storyboard grades that seller on a submitted-task envelope it was never meant to emit (#6345). Triage first assumed omitting the controller scenario made the storyboard grade not-applicable; a live reproduction showed the force step grades not-applicable while the dependent step runs anyway and fails. Fixed: the storyboard now gates on the forcing scenario's advertisement and skips before any phase executes (PR #6368, merged), with the skip-misclassification the review surfaced corrected downstream in the SDK (adcp-client#2511).
  • One filing withdrawn — an argument that the audit-observation contract forced sellers to relay a verifier's verdict they never obtained (#6322). The premise was wrong: the schema already separates the two, carrying what a submission claimed in one field and what a verifier observed in others, and the only permitted code says CLAIMED. Retracted with the correct reading (#6323) and the feature built the honest way instead — recording the claim, attributing the observation to this agent, and leaving every verdict field empty.

Open proposals

  • Geo cell interoperability — conversion (#6013) and cell-grain delivery reporting (#6014) companions to the geo_cells RFC (#5969), with Nathan Woodman.
  • Radio & static-OOH parity — the scoping issue (#6138, with Chris Williams) closed once its gaps had concrete implementations; the work now sits in two working-group ballot packets: radio delivery-currency — measurement_source on delivery rows + nielsen_audio notation (#6139) and static-OOH measurement shape / proof-of-posting (#6140, implementation in PR #6241), with taxonomy graduation criteria split out to #6261. Reporting cadence shipped along the way (PR #6240, merged); radio as-run rides the linear by_spot log via a channel-neutral naming ask on #5682.
  • A seller shape the taxonomy has no slot for — the specialisms treat guaranteed-vs-non-guaranteed as a proxy for human-approval-vs-auction, so a publisher-direct seller running fixed-price, non-guaranteed inventory behind a human approval gate matches neither: sales-non-guaranteed assumes bidding and states that buys need no human approval, while sales-guaranteed describes the human gate but assumes IO-signed reserved inventory and proposal flows (#6303, filed with our own live agent as the reproduction after withdrawing a claim we couldn't honestly certify). The certification contradiction found alongside it is already fixed: the docs stated that grading neither requires nor uses comply_test_controller, while specialism certification requires seed_* scenarios only that controller can execute — confirmed and scoped to the storyboards it actually covers, since the exemption holds for universal and protocol runs but not for specialisms that seed state (#6301, fixed).
  • Eligibility you can read off the APIverified is a bare boolean computed from badge rows, so a seller cannot tell “declare specialisms” from “fix storyboards” from “membership tier” (#6374, split from #6363 at maintainer invitation and triaged ready-to-implement within the hour — closes the API half of #3525): proposes a per-role eligibility block with machine-readable blocker codes, filed with our agent as the reproduction — zero failing storyboards, verified: false, and the actual first-guard blocker (no declared specialisms, the #6303 taxonomy gap) surfaced by no public field.
  • revoke_activation revocation primitive (#4203) · Measurement Feedback Signal (#4296).
  • RFC 9421 migration coordination (#4205) · JWKS adoption baseline (#4206).

Contribution statuses validated August 11, 2026 against the public AdCP repository; open proposals are point-in-time and may merge, change, or close. Maintainer-authored work is credited as review influence, not authorship.

Domains

Protocol domains.

AdCP organizes work into domain-specific tasks and schemas. Task names below are drawn from current official documentation.

  • Media Buy

    Inventory discovery, campaign creation, delivery reporting.

    get_products · create_media_buy · get_media_buy_delivery

  • Creative

    Creative format discovery, building, preview, distribution.

    build_creative · preview_creative · list_creative_formats

  • Signals

    Audience and contextual data discovery and activation.

    get_signals · activate_signal

  • Accounts

    Commercial identity, billing, and usage reporting.

    list_accounts · sync_accounts · report_usage

  • Governance

    Brand suitability, approval, policy, audit, content standards.

    create_content_standards · calibrate_content

  • Brand

    Machine-readable brand identity and authorized agents via brand.json.

    brand.json discovery

  • Sponsored Intelligence

    Conversational brand experiences on AI platforms.

    Experimental surface in AdCP 3.0

  • Curation

    Media inventory curation.

    Listed "coming soon" — not a current domain

AdCP Protocol Domains — one hub, seven domains, one shared schema. AdCP PROTOCOL DOMAINS Media Buy — discover inventory, transact, and report on delivery through one schema. Media Buy discover · buy · report Creative — assemble and preview ad creative against the same shared schema. Creative build · preview Signals — discover audience and context signals and activate them on a buy. Signals discover · activate Accounts — billing, usage, and entitlements for every party on the protocol. Accounts billing · usage Governance — approval workflows and an auditable trace across every domain. Governance approve · audit Brand — a brand.json declares brand identity and guardrails the protocol can read. Brand brand.json Sponsored Intelligence — an experimental domain, not yet a stable part of the schema. Sponsored Intelligence experimental exp. AdCP — the single protocol every domain shares; one schema runs across all of them. PROTOCOL AdCP One protocol, many domains — the same schema across every step.
AdCP at the center; each domain connects to a workflow surface.
Workflow

From brief to governed execution.

  1. Discover authorized agents — adagents.json, brand.json, registry
  2. Set up account context — commercial identity, billing, advertiser / operator relationship
  3. Discover inventory and products — natural-language brief into structured product responses
  4. Build or sync creative — formats, assets, brand identity, approvals
  5. Add signals — audiences, suppression, contextual signals, signal activation
  6. Check governance — budget, brand safety, targeting rules, approvals
  7. Execute, report, and audit — media buy, delivery, events, audit logs
From brief to governed execution — seven steps, brief in, audited execution out. BRIEF → GOVERNED EXECUTION Discover agents — read adagents.json and the registry to find which agents can act for this brand. 01 Discover agents adagents.json · registry Account context — resolve identity and billing so the brief runs against the right account. 02 Account context identity · billing Discover products — turn the natural-language brief into a structured product schema. 03 Discover products brief → schema Build / sync creative — assemble formats and route them through approvals. 04 Build / sync creative formats · approvals Add signals — attach audiences and activation signals to the campaign. 05 Add signals audiences · activation Check governance — verify budget, brand safety, and approvals before anything spends. 06 Check governance budget · brand safety Execute, report, audit — run delivery, emit events, and keep an auditable log of every action. 07 Execute, report, audit delivery · events · logs Natural-language brief in, governed + audited execution out.
Brief → discovery → accounts → products → creative → signals → governance → buy / report / audit.

Discovery starts from two machine-readable files — a publisher's adagents.json (who may sell its inventory) and a brand's brand.json (who may act for the brand, and how):

adagents.json illustrative
{
  "publisher": "example-publisher.com",
  "authorized_agents": [
    {
      "url": "https://sales-agent.example-ssp.com",
      "role": "seller",
      "properties": ["news", "sports"]
    }
  ],
  "signing_keys": [
    { "kid": "2026-key-1", "alg": "Ed25519" }
  ]
}
brand.json illustrative
{
  "brand": "example-brand.com",
  "display_name": "Example Brand",
  "authorized_agents": [
    { "url": "https://agent.example-buyer.com", "role": "buyer" }
  ],
  "identity": {
    "logos": ["/brand/logo.svg"],
    "colors": ["#1a1a1a", "var(--accent)"],
    "tone": "confident, plain-spoken"
  },
  "policy": { "restricted_categories": ["gambling", "politics"] }
}
Signals

Signals: where AdCP meets signal containerization.

The signals layer is where AdCP becomes especially important for agentic advertising. Agents need to discover signals, understand what they mean, check provenance and policy, activate them, and monitor status. That is the same operating problem behind signal containerization — turning audience logic into a governed, executable object.

  • Discover

    What signals exist and what do they mean?

  • Inspect

    Where did the signal come from, how fresh is it, and what policy applies?

  • Activate

    Where can the signal run: seller, platform, identity path, contextual path, or measurement layer?

  • Monitor

    What is the activation status and what outcome did it improve?

Signals: a governed object — discover, inspect, activate, monitor. SIGNAL LIFECYCLE Discover — find which signals exist and what each one actually means before you reach for it. 01 Discover what signals exist what they mean Inspect — interrogate provenance, freshness, and policy so you trust the object before activating it. 02 Inspect provenance · freshness policy Activate — put the signal to work across an identity path, a contextual path, and measurement. 03 Activate identity path · contextual path · measurement Monitor — watch live status and the realised outcome, then feed it back into discovery. 04 Monitor status outcome the same operating problem as signal containerization Discover, inspect, activate, monitor — signals as executable objects.
Discover, inspect, activate, monitor — signals as executable objects.

An agent discovers signals with a natural-language brief, then activates the chosen signal to a destination — a single get_signals call rather than a taxonomy lookup:

get_signals (MCP tool call) illustrative
{
  "tool": "get_signals",
  "arguments": {
    "brief": "in-market for premium CTV, US households, privacy-safe",
    "deliver_to": { "platform": "dsp", "account": "acct_123" },
    "max_results": 10
  }
}

One open question now sits under this layer. The vectors agents exchange today are text-family embeddings — they encode the words that describe an audience or a brief, and text models famously lose numbers, geography, and time. A second family, spatiotemporal embeddings, encodes the place and hour themselves. A text space and a place-time space do not share a geometry: similarity across the two is undefined until someone defines it — a signals-standards question, exactly the kind of definition a signals working group exists to produce, not an integration ticket.

Trust

Governance is the trust layer.

Agentic advertising only works if actions are accountable. A protocol needs to know who called a tool, what authority they had, what was approved, what conditions applied, and what actually ran.

  • Human-in-the-loop approvals (a three-party separation of duties)
  • Idempotency keys on every mutating request
  • Request signing (RFC 9421 HTTP Message Signatures)
  • Correlated audit logs
  • Governance checks and signed governance tokens
  • Brand-safety and content-standard enforcement
  • Budget thresholds and authority / role boundaries

The principle

Human judgment is embedded in the system design, not bolted on afterward — the human stays the locus of accountability.

Complementarity

Where AdCP fits with IAB Tech Lab standards.

AdCP is best understood as an agentic management and workflow layer. IAB Tech Lab's AAMP work extends existing standards with agentic foundations, protocols, and trust infrastructure; ARTF focuses on containerized real-time execution; Agentic Audiences on embedding-based signal exchange. These layers can be complementary with clear boundaries — the full repository-level comparison, verified against both codebases, is in AdCP vs AAMP: The Retrofit and the Greenfield. See also the IAB Agentic Standards guide. The protocol's sell side already has a shipping open-source implementation — Prebid.org took stewardship of AdCP's sell-side reference code in January 2026, dissected in The Prebid Sales Agent — and landing inside the publisher execution layer documented in Prebid & Header Bidding Infrastructure.

InitiativeRoleBest question
AdCPAgent task / workflow languageWhat should the agent ask or do?
AAMPIAB Tech Lab umbrella for agentic advertising standardsHow do agentic foundations, protocols, and trust fit into existing standards?
ARTFContainerized real-time execution frameworkHow can service agents run inside host infrastructure with low latency and controlled mutation?
Agentic AudiencesEmbedding-based signal exchangeHow do agents exchange identity, contextual, and reinforcement signals?
OpenRTB / AdCOM / Deals API / OpenDirectExisting transaction and object standardsWhat underlying objects and transaction models should agentic systems reference?
Complementary layers — AdCP's workflow layer and IAB Tech Lab's standards/runtime layer compose into one interoperable stack. COMPLEMENTARITY MAP AdCP — the agent task and workflow layer: what an agent does (discover, buy, creative, signals, govern, report), independent of any single runtime. AdCP Agent task & workflow discover buy creative signals govern report IAB Tech Lab — the standards and runtime layer: the umbrella (AAMP), the runtime (ARTF), the signal exchange (Agentic Audiences) and the open foundations agents run on. IAB TECH LAB Standards & runtime AAMP umbrella ARTF runtime Agentic Audiences signal exchange FOUNDATIONS OpenRTB · AdCOM Deals API · OpenDirect Agentic advertising interoperability — the shared outcome both layers serve: tasks expressed once run across open standards and runtimes. SHARED OUTCOME Agentic advertising interoperability Not a winner-takes-all — a workflow layer and a standards / runtime layer.
A workflow layer and a standards / runtime layer, meeting at agentic advertising interoperability.
Implementation

Implementation lens by company type.

Pick your company type to see what to expose or consume — and the AdCP domains it touches first.

Select your company type
What to expose

Authorized agents, inventory products, packages, account setup, governance, reporting.

  • adagents.json
  • Media Buy
  • Accounts
  • Governance
What to consume

Partner discovery, product discovery, creative formats, media buy, governance, reporting.

  • brand.json
  • Media Buy
  • Creative
  • Signals
What to expose

Signal catalog, provenance, activation paths, pricing, policy, status.

  • Signals
  • Accounts
  • Governance
What to support

Seller agents, deals, signals, governance, a real-time execution bridge, reporting.

  • Media Buy
  • Signals
  • Governance
  • registry
What to support

Buyer agents, media buys, creative, signal activation, governance, measurement.

  • Media Buy
  • Creative
  • Signals
  • Governance
What to expose

Formats, asset generation, preview, brand identity, approval workflow.

  • Creative
  • Brand
  • Governance
What to expose

Delivery, event logging, attribution, audit, lift, governed outputs.

  • Media Buy
  • Accounts
  • Governance
No Fluff POV

A protocol defines the task. It does not replace judgment.

The industry should avoid treating AdCP as a magic layer that makes agents safe by default. The protocol can define the task. It cannot replace commercial judgment, governance design, data rights, measurement discipline, or operating ownership.

  • Start with one workflow, not every workflow.
  • Expose the safest useful task first.
  • Design governance before spend movement.
  • Treat signals as governed objects, not just segment IDs.
  • Build audit and status from day one.
  • Connect protocol work to business outcomes, not demos.
Stack fit

Where this fits in the full standards stack.

The layer map

AdCP defines the agent workflow layer. It still needs transaction rails, privacy constraints, measurement trust, and evidence discipline around it.

Next step

Building around AdCP or agentic advertising standards?

Use the playbooks to map the workflow, governance, signal model, implementation path, and commercial productization before building against the spec.