AdCP authentication guide: public vs authenticated operations, static credential implementation, and credential management for buyer and seller agents.
AdCP uses a tiered authentication model where capability discovery is public, catalog discovery may be public, and protected reads and mutations require authentication.
This operation works without credentials to bootstrap discovery:
get_adcp_capabilities - Discover agent capabilities, portfolio, and supported features
Rationale: Publishers want potential buyers to discover their capabilities before establishing a business relationship.Product and signal discovery are seller-variable. Read media_buy.anonymous_discovery before calling list_products or get_products in discovery mode, and read signals.anonymous_discovery before calling get_signals. true means the call may succeed anonymously; false means credentials are required; absence means unspecified legacy behavior and the caller handles AUTH_MISSING if an anonymous probe is rejected.An anonymous discovery response is authoritative only for that anonymous request. It may contain:
AdCP supports three authentication mechanisms for authenticated operations. Which one an endpoint accepts for an operation is set by its advertised security contract, including request_signing.required_for on get_adcp_capabilities. The canonical rules and the transport migration timeline live in the implementation security reference:
Mechanism
3.0 and 3.1
3.2
4.0
Notes
RFC 9421 request signing
Optional and capability-advertised.
Still optional. When signing is used, every accepted signature on a request with a body covers content-digest.
Permitted; 4.0 still requires signatures on spend-committing operations
Transport-layer identity; recommended when the deployment already terminates mTLS at the edge.
Static Authorization credentials (Bearer or Basic)
Permitted unless the endpoint lists the operation in request_signing.required_for
Same as 3.0/3.1
Not sufficient on its own for spend-committing operations
Shared-secret transport. Bearer is the canonical example; HTTP Basic is also acceptable when sent over TLS and validated on every protected request. See the known limitation.
Mutating-operation floor in 3.x. Throughout 3.x, static Authorization-header credentials over TLS remain acceptable for mutating operations unless the endpoint’s capability declaration lists the operation in request_signing.required_for. Buyers follow the live declaration rather than assuming the protocol version alone determines the mechanism. Operators handling spend commitments should ship RFC 9421 request signing before 4.0, when signing becomes required for spend-committing operations.
Why signed requests matter for financial operations
A bearer token authenticates whoever presents it. Any party that obtains the token (a leaked log line, a compromised proxy, a captured request, a misconfigured relay) can originate spend commitments indistinguishable from the legitimate agent’s, and the seller cannot tell the difference after the fact. For read and discovery operations that risk is bounded; for operations that move money it is not.Signed requests replace possession of a string with proof of possession of a private key:
Proof of possession. The signature proves the caller holds the signing key. The key never travels on the wire, so the theft surface shrinks from every system a token passes through to the signer’s key storage.
Payload integrity. The signature binds @method, @target-uri, @authority, content-type, and content-digest, so tampering with a budget figure, account reference, or target endpoint invalidates the request. TLS protects bytes in transit but not through intermediaries, relays, or logs; the signature protects the transaction end to end.
Replay resistance. The ±60 s timestamp window and nonce prevent a captured request from being resubmitted as a new transaction.
Accountability. Both parties can prove after the fact who originated a transaction and exactly what was requested. That audit anchor is what lowers fraud and dispute cost in financial workflows; with a shared secret, origination is unprovable once the token may have leaked.
This is why AdCP 4.0 requires signing for spend-committing operations, and why 3.x endpoints can opt in early by listing operations in request_signing.required_for. Key discovery, covered components, and the full verifier checklist are defined in the implementation security reference; build on those (or a reference SDK) rather than hand-rolling the cryptography.
Opaque tokens: Server-validated strings mapped to agents
JWT tokens: Self-contained tokens with embedded claims
HTTP Basic credentials are also a static shared-secret mechanism. They MUST be sent in the Authorization header over TLS, and servers MUST validate the credential on every protected request. Basic credentials are not stronger than Bearer tokens; they are accepted as the same conformance class because both carry a pre-provisioned shared secret on the transport.Implementations MUST enforce TLS 1.2+ on all static-credential-authenticated endpoints. See the implementation security reference for transport requirements.The credential MUST be carried in the Authorization request header. Sellers MUST NOT require non-canonical aliases (e.g. x-adcp-auth, which appeared in some early MCP-only deployments) and MUST NOT advertise them as the supported header in agent cards, capability responses, or documentation. A seller MAY accept such an alias as a transitional input while it phases out an existing adopter’s integration, but Authorization: Bearer or Authorization: Basic MUST also be accepted on the same endpoint. Buyer agents and SDKs SHOULD emit Authorization: Bearer unless a seller explicitly provisions Basic credentials; SDK examples and docstrings MUST NOT show alias headers as the canonical form.
RFC 9421 request signing (optional in 3.x; required for spend-committing ops in 4.0)
Signed requests bind @method, @target-uri, @authority, content-type, and content-digest under an Ed25519, ecdsa-p256-sha256, or rsa-pss-sha512 signature with a ±60 s timestamp window and ≥128-bit nonce. The full verifier checklist, key-discovery rules (brand.json → agents[] → jwks_uri), and rotation semantics are defined in the implementation security reference. Capability discovery via get_adcp_capabilities.request_signing (supported, required_for, covers_content_digest) lets clients detect whether a seller verifies or requires signing before sending a mutating call. On an endpoint that advertises a 3.2 release, signatures use the 3.2 profile (RFC 8941 padded Base64 with mandatory content-digest coverage) regardless of the request’s adcp_version; see mixed-version request signing.
Operators terminating mTLS at the edge MAY use the peer certificate as the primary identity mechanism for AdCP operations. When mTLS is used, operators MUST pin identity to the certificate subject / SAN rather than any header field.
AdCP distinguishes between the agent (who is making requests) and the account (who gets billed):
Agent: The authenticated entity making API calls (identified by the token)
Account: The billing relationship determining rates and invoicing
An agent may have access to multiple accounts (e.g., an agency managing several clients). See Accounts and Agents for details on account selection and billing attribution.For schema definitions, see account.json.
AdCP resolves tenant from the authenticated principal, not from request payloads. Seller agents map the authenticated identity (bearer token, Basic credential, mTLS client cert, or RFC 9421 key) to the originating buyer’s account via their own authorization context. Task payloads never carry tenant identity as a substitute for authentication — when a schema requires a globally-unique resource ID (plan_id, rights_id, standards_id, event_source_id, list_id) rather than an account envelope, the seller resolves ID → tenant via the same authorization context. The authenticated principal must hold access to the referenced resource, and the resource itself carries the brand it was provisioned for; envelope identity on those calls would be redundant and, if it disagreed with the authenticated principal, a spoofing vector.Compliance storyboards in the training agent inject envelope identity on these calls as a sandbox routing convention, because the training agent has no authenticated-principal layer of its own — see Storyboard authoring. Production sellers do not require it.
Credentials authenticating the buyer principal MUST arrive on the transport’s authentication channel and MUST NOT be placed in the task payload — top-level, inside context, inside ext, or in any other nested location. The transport channel is:
Static credentials over HTTP — Authorization: Bearer <token> per RFC 6750 §2, or Authorization: Basic <base64(username:password)> when the seller provisions HTTP Basic credentials.
RFC 9421 signed requests — the Signature and Signature-Input headers per RFC 9421 §2. The signature itself is the credential; nothing in the payload authenticates the signer.
MCP and A2A authentication framing — the transport’s authentication descriptor (e.g., MCP’s authInfo, A2A’s authentication.schemes). Discovery of the authentication requirement follows RFC 9728 §3 protected-resource metadata where applicable.
Mutual TLS — the peer certificate, per the mTLS row in the table above.
The rule is transport-agnostic: it applies regardless of which mechanism the seller accepts. There is no AdCP version, capability, or seller policy under which a buyer principal authenticates via a payload field. The same placement rule applies to credentials or caller-supplied trust material a request tries to pass for a downstream evaluator call: those belong on the agent-to-evaluator transport or in account provisioning, not task payloads. A seller that detects a credential- or trust-material key in the payload (e.g., <platform>_access_token, api_key, client_secret, bearer, authorization, jwk, jwks, or jwks_uri at any nesting depth) SHOULD reject the request with CREDENTIAL_IN_ARGS under AdCP 3.1; the requirement upgrades to MUST 90 days after the 3.1 publication date. The code’s recovery classification is terminal — agents MUST NOT auto-retry, since auto-retry re-logs the credential on each attempt and is itself the prompt-injection exfiltration surface this rule closes (see Threats specific to agentic advertising).
The following credential surfaces are not buyer-principal credentials and the rule above does not apply to them:
push_notification_config.authentication.credentials (schema). This is the legacy Bearer / HMAC-SHA256 credential that the seller uses when calling back to the buyer’s webhook endpoint. It authenticates the seller-as-caller against the buyer-as-receiver — orthogonal to the buyer-principal credential that authenticates the inbound AdCP request. The default 9421 webhook profile uses keys discovered via brand.json and crosses no shared secrets; the legacy block is a deprecated compatibility scheme removed in AdCP 4.0.
Onboarding-time secrets exchanged out-of-band — initial token issuance, OAuth dynamic registration responses, dashboard-issued API keys. These travel through the AAO authorization server or the seller’s onboarding flow, not as AdCP task payloads.
The agency / A2A relay topology (brand → relay → seller) authenticates under the relay’s own principal. The relay either preserves the brand agent’s RFC 9421 signature verbatim (pass-through model) or re-signs under its own key (re-signing model) — both options are described in #2324. Neither model permits forwarding the brand’s transport credential as a relay-side payload field. Brand-agent identity, when the relay is the principal of record, MUST be carried in the request body as identity context (e.g., a buyer-side identity assertion verifiable by the seller against adagents.json / authorized_operator[]) — never as a forwarded transport credential. Relays MUST NOT echo or reattach buyer credentials in any args field on outbound seller-bound requests.
The client library handles adding the Authorization: Bearer <token> header to requests.If a seller explicitly provisions HTTP Basic credentials, the same transport rule applies: send Authorization: Basic <base64(username:password)> on every authenticated request over HTTPS.Header alias policy by leg. The two protocol legs differ in what aliases they accept beyond the standard Authorization header:
A2A — Authorization only. For Bearer credentials, send Authorization: Bearer <token> and declare a bearerAuthHTTPAuthSecurityScheme in the seller’s agent card (see the A2A guide — Agent Cards). For Basic credentials, send Authorization: Basic <base64(username:password)> and declare HTTP Basic. The x-adcp-auth custom header is not recognized on the A2A surface.
MCP — Authorization is primary for Bearer and Basic credentials. x-adcp-auth is accepted as a back-compat Bearer alias for integrations predating adcp 4.5.0. New implementations should use the standard header on both legs.
Sellers migrating to adcp 4.5.0. If you previously configured x-adcp-auth as the A2A leg header via the a2a_header_name knob, verify that knob is set to the RFC 6750 default before updating your agent card to declare bearerAuth — buyers that have not yet migrated off the legacy header will otherwise receive HTTP 401.
The recommended approach is to use an MCP client library:
import { Client } from '@modelcontextprotocol/sdk/client/index.js';import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';const transport = new StreamableHTTPClientTransport( new URL('https://test-agent.adcontextprotocol.org/sales/mcp'), { requestInit: { headers: { 'Authorization': 'Bearer YOUR_TOKEN_HERE' } } });const client = new Client({ name: 'my-client', version: '1.0.0' });await client.connect(transport);
from mcp import ClientSessionfrom mcp.client.streamable_http import streamablehttp_clientasync with streamablehttp_client( "https://test-agent.adcontextprotocol.org/sales/mcp", headers={"Authorization": "Bearer YOUR_TOKEN_HERE"}) as (read, write): async with ClientSession(read, write) as session: await session.initialize()
A common mistake is trying to add authentication headers to raw HTTP requests:
# This won't work for MCP endpointsGET /mcp HTTP/1.1Authorization: Bearer YOUR_TOKEN
MCP uses a streaming protocol over HTTP. The authentication must be configured in the MCP client transport layer, which handles the protocol negotiation and message framing.
If you’re getting “authentication required” errors:
Verify you’re using an MCP client library - not making raw HTTP calls
Check the token format - should be passed to the transport configuration
Test with the public test agent - verify your setup works before testing custom agents
Check protocol version - ensure client and server protocol versions are compatible
For OAuth handshake failures and RFC 9421 signing issues, use the CLI auth graders — diagnose-auth probes RFC 9728 + RFC 8414 discovery and ranks hypotheses; grade request-signing runs every signing vector with per-vector diagnostics.
Consider using aggregation platforms (like Scope3) that manage credentials and relationships with multiple sales agents on your behalf. This simplifies:
The mechanisms above govern agent-to-agent auth (buyer ↔ sales agent). Authenticating to AAO-hosted services — the registry write API, the AAO MCP endpoint, the member dashboard — is a separate surface.AAO runs an OAuth 2.1 + OIDC authorization server. Clients discover it via standard well-knowns:
Authorization server metadata (RFC 8414):https://agenticadvertising.org/.well-known/oauth-authorization-server
Protected-resource metadata (RFC 9728):/.well-known/oauth-protected-resource/api (REST API) and /.well-known/oauth-protected-resource/mcp (MCP). Both list https://agenticadvertising.org as the authorization server.
Flow: authorization code with PKCE (S256). User identity is via WorkOS AuthKit; tokens are signed JWTs.
Server-to-server: there is no client_credentials grant. Backend services should use a WorkOS organization API key from the AAO dashboard, not the OAuth /token endpoint.
All AAO endpoints are HTTPS-only; reject any discovery document served over plain HTTP.A user JWT obtained from AAO is not an AdCP credential. Calls to a sales agent still use that agent’s bearer / 9421 / mTLS credentials per the table above. Full reference: AAO registry — Authentication.
If you discover an authorization_endpoint on a sales agent’s RFC 9728 protected-resource metadata (e.g., for an operator-account OAuth flow), pin the discovered authorization_servers issuer against what adagents.json — or out-of-band onboarding — authorized for that seller. Do not blindly trust an AS URL the resource itself returned, otherwise a malicious or compromised seller can route operator credentials to an attacker-controlled endpoint.
For org-scoped usage tracking, replace the public token with your own API key from the AAO dashboard.See Sandbox Mode for testing capabilities including sandbox mode for risk-free development.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/schema.json","name":"AdCP - Ad Context Protocol","description":"AdCP (Ad Context Protocol) is the open standard for agentic advertising. It defines how AI agents buy media, generate creatives, activate audiences, and enforce governance across platforms. Current stable documentation index: https://docs.adcontextprotocol.org/llms-current.md.","colors":{"primary":"#047857","light":"#34D399","dark":"#065F46"},"logo":{"light":"https://mintcdn.com/agenticadvertisingorg/cnoy0Xiq2i_jSWzz/logo/sage.svg?fit=max\u0026auto=format\u0026n=cnoy0Xiq2i_jSWzz\u0026q=85\u0026s=f393829d8ccdabe856cf9c8362e66b96","dark":"https://mintcdn.com/agenticadvertisingorg/cnoy0Xiq2i_jSWzz/logo/sage.svg?fit=max\u0026auto=format\u0026n=cnoy0Xiq2i_jSWzz\u0026q=85\u0026s=f393829d8ccdabe856cf9c8362e66b96","href":"https://agenticadvertising.org"},"favicon":"https://mintcdn.com/agenticadvertisingorg/cnoy0Xiq2i_jSWzz/logo/sage.svg?fit=max\u0026auto=format\u0026n=cnoy0Xiq2i_jSWzz\u0026q=85\u0026s=f393829d8ccdabe856cf9c8362e66b96","api":{},"navbar":{"links":[{"href":"https://adcontextprotocol.org","label":"AdCP Home"},{"href":"https://agenticadvertising.org/members","label":"Members"},{"href":"https://agenticadvertising.org/perspectives","label":"Perspectives"},{"href":"https://agenticadvertising.org","label":"Join"}],"primary":{"type":"github","href":"https://github.com/adcontextprotocol/adcp"}},"footer":{"links":[{"header":"Legal","items":[{"label":"Privacy Policy","href":"https://agenticadvertising.org/api/agreement?type=privacy_policy"},{"label":"Terms of Use","href":"https://agenticadvertising.org/api/agreement?type=terms_of_service"}]},{"header":"Transparency","items":[{"label":"AI Disclosure","href":"/docs/ai-disclosure"},{"label":"Governance Charter","href":"https://github.com/adcontextprotocol/adcp/blob/main/CHARTER.md"},{"label":"Working Group","href":"/docs/community/working-group"}]}]},"seo":{},"banner":{"content":"AdCP 3.3 beta is open: scheduled, human-gated, and offline media in the same buy as programmatic — [see what's new →](/3.3)","dismissible":true},"metadata":{"timestamp":false},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"agenticadvertisingorg","hasAudioNarration":false,"actualSubdomain":"agenticadvertisingorg","customDomains":["docs.adcontextprotocol.org"],"gitSource":{"type":"github","owner":"adcontextprotocol","repo":"adcp","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adc13b6c8fac8fb63b0e787","collectionId":"1ec7d179-1da6-4f95-9d5a-a423a89aeacd","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adc13b6c8fac8fb63b0e787"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{},"buildId":"6adc13b6c8fac8fb63b0e787","clientVersion":"0.0.3964","searchFilterCounts":[{"language":"default","tag":"Protocol","count":716},{"language":"default","tag":"Reference","count":639},{"language":"default","tag":"Registry API","count":405},{"language":"default","tag":"Building with AdCP","count":392},{"language":"default","tag":"Media Buy","count":199},{"language":"default","tag":"Creative","count":182},{"language":"default","tag":"Governance","count":169},{"language":"default","tag":"Concepts","count":136},{"language":"default","tag":"Build by layer","count":125},{"language":"default","tag":"Certification","count":116}]},"assistantConfig":{"enableAskAiButton":true,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"apps/web/src/styles/app.css","content":"@import \"tailwindcss\";@import \"tw-animate-css\";@source \"../\";@source \"../../.ladle\";:root{--radius:0.25rem;--background:var(--color-white);--foreground:var(--color-neutral-950);--card:var(--color-white);--card-foreground:var(--color-neutral-950);--popover:var(--color-white);--popover-foreground:var(--color-neutral-950);--primary:var(--color-blue-600);--primary-foreground:var(--color-white);--secondary:oklch(from var(--color-slate-900) l c h / 6%);--secondary-foreground:var(--color-neutral-900);--muted:var(--color-slate-100);--muted-foreground:var(--color-slate-500);--body-foreground:var(--color-neutral-600);--accent:var(--color-slate-100);--accent-foreground:var(--color-slate-900);--destructive:var(--color-red-600);--destructive-foreground:var(--color-red-700);--destructive-on-color:var(--color-white);--success:var(--color-emerald-600);--success-foreground:var(--color-emerald-700);--warning:var(--color-yellow-400);--warning-foreground:var(--color-yellow-700);--info:var(--color-blue-600);--info-foreground:var(--color-blue-700);--border:var(--color-neutral-200);--input:var(--color-neutral-200);--ring:var(--color-neutral-400);--chart-1:var(--color-orange-500);--chart-2:var(--color-cyan-500);--chart-3:var(--color-blue-700);--chart-4:var(--color-yellow-400);--chart-5:var(--color-amber-500)}@media (prefers-color-scheme:dark){:root{--background:var(--color-slate-950);--foreground:var(--color-slate-50);--card:var(--color-slate-900);--card-foreground:var(--color-slate-50);--popover:var(--color-slate-900);--popover-foreground:var(--color-slate-50);--primary:var(--color-blue-600);--primary-foreground:var(--color-white);--secondary:oklch(1 0 0 / 12%);--secondary-foreground:var(--color-slate-50);--muted:var(--color-slate-800);--muted-foreground:var(--color-slate-400);--body-foreground:var(--color-slate-300);--accent:var(--color-slate-800);--accent-foreground:var(--color-slate-50);--destructive:var(--color-red-400);--destructive-foreground:var(--color-red-400);--destructive-on-color:var(--color-white);--success:var(--color-emerald-400);--success-foreground:var(--color-emerald-300);--warning:var(--color-yellow-400);--warning-foreground:var(--color-yellow-300);--info:var(--color-blue-400);--info-foreground:var(--color-blue-300);--border:oklch(1 0 0 / 10%);--input:oklch(1 0 0 / 15%);--ring:var(--color-slate-500)}}:root[data-theme=dark],:root[data-theme=light]{--primary:var(--color-blue-600);--primary-foreground:var(--color-white);--destructive-on-color:var(--color-white);--warning:var(--color-yellow-400)}:root[data-theme=light]{--background:var(--color-white);--foreground:var(--color-neutral-950);--card:var(--color-white);--card-foreground:var(--color-neutral-950);--popover:var(--color-white);--popover-foreground:var(--color-neutral-950);--secondary:oklch(from var(--color-slate-900) l c h / 6%);--secondary-foreground:var(--color-neutral-900);--muted:var(--color-slate-100);--muted-foreground:var(--color-slate-500);--body-foreground:var(--color-neutral-600);--accent:var(--color-slate-100);--accent-foreground:var(--color-slate-900);--destructive:var(--color-red-600);--destructive-foreground:var(--color-red-700);--success:var(--color-emerald-600);--success-foreground:var(--color-emerald-700);--warning-foreground:var(--color-yellow-700);--info:var(--color-blue-600);--info-foreground:var(--color-blue-700);--border:var(--color-neutral-200);--input:var(--color-neutral-200);--ring:var(--color-neutral-400)}:root[data-theme=dark]{--background:var(--color-slate-950);--foreground:var(--color-slate-50);--card:var(--color-slate-900);--card-foreground:var(--color-slate-50);--popover:var(--color-slate-900);--popover-foreground:var(--color-slate-50);--secondary:oklch(1 0 0 / 12%);--secondary-foreground:var(--color-slate-50);--muted:var(--color-slate-800);--muted-foreground:var(--color-slate-400);--body-foreground:var(--color-slate-300);--accent:var(--color-slate-800);--accent-foreground:var(--color-slate-50);--destructive:var(--color-red-400);--destructive-foreground:var(--color-red-400);--success:var(--color-emerald-400);--success-foreground:var(--color-emerald-300);--warning-foreground:var(--color-yellow-300);--info:var(--color-blue-400);--info-foreground:var(--color-blue-300);--border:oklch(1 0 0 / 10%);--input:oklch(1 0 0 / 15%);--ring:var(--color-slate-500)}@theme{--font-sans:'Inter Variable', 'Inter', -apple-system, BlinkMacSystemFont,\n 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;--font-mono:'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas,\n monospace;--color-blue-50:oklch(0.970 0.012 258);--color-blue-100:oklch(0.928 0.028 260);--color-blue-200:oklch(0.878 0.055 262);--color-blue-300:oklch(0.802 0.100 264);--color-blue-400:oklch(0.700 0.175 266);--color-blue-500:oklch(0.620 0.215 267);--color-blue-600:oklch(0.5358 0.2447 266.97);--color-blue-700:oklch(0.465 0.225 268);--color-blue-800:oklch(0.395 0.190 268);--color-blue-900:oklch(0.330 0.145 268);--color-blue-950:oklch(0.270 0.120 268);--color-blue-1000:oklch(0.2102 0.0975 268.06);--color-slate-1000:oklch(0.069 0.038 265);--color-gray-1000:oklch(0.070 0.026 261);--color-neutral-1000:oklch(0.080 0 0);--color-cyan-1000:oklch(0.242 0.045 230);--color-green-1000:oklch(0.206 0.052 153);--color-emerald-1000:oklch(0.205 0.030 173);--color-red-1000:oklch(0.198 0.074 26);--color-orange-1000:oklch(0.206 0.063 36);--color-amber-1000:oklch(0.219 0.048 46);--color-yellow-1000:oklch(0.226 0.053 54)}@theme inline{--color-background:var(--background);--color-foreground:var(--foreground);--color-card:var(--card);--color-card-foreground:var(--card-foreground);--color-popover:var(--popover);--color-popover-foreground:var(--popover-foreground);--color-primary:var(--primary);--color-primary-foreground:var(--primary-foreground);--color-secondary:var(--secondary);--color-secondary-foreground:var(--secondary-foreground);--color-muted:var(--muted);--color-muted-foreground:var(--muted-foreground);--color-body-foreground:var(--body-foreground);--color-accent:var(--accent);--color-accent-foreground:var(--accent-foreground);--color-destructive:var(--destructive);--color-destructive-foreground:var(--destructive-foreground);--color-destructive-on-color:var(--destructive-on-color);--color-success:var(--success);--color-success-foreground:var(--success-foreground);--color-warning:var(--warning);--color-warning-foreground:var(--warning-foreground);--color-info:var(--info);--color-info-foreground:var(--info-foreground);--color-border:var(--border);--color-input:var(--input);--color-ring:var(--ring);--color-chart-1:var(--chart-1);--color-chart-2:var(--chart-2);--color-chart-3:var(--chart-3);--color-chart-4:var(--chart-4);--color-chart-5:var(--chart-5);--radius-sm:max(0px, calc(var(--radius) - 4px));--radius-md:var(--radius);--radius-lg:calc(var(--radius) + 4px);--radius-xl:calc(var(--radius) + 8px)}@layer base{*,::after,::backdrop,::before,::file-selector-button{border-color:var(--color-border, currentColor)}body{background:var(--color-background);color:var(--color-foreground);font-family:var(--font-sans)}[data-sonner-toast][data-styled=true] [data-description]{color:var(--body-foreground)}}"}],"page":{"pagePath":"dist/docs/3.2.6/building/by-layer/L2/authentication","slug":"/dist/docs/3.2.6/building/by-layer/L2/authentication","pageMetadata":{"title":"Authentication","description":"AdCP authentication guide: public vs authenticated operations, static credential implementation, and credential management for buyer and seller agents.","og:title":"AdCP — Authentication","href":"/dist/docs/3.2.6/building/by-layer/L2/authentication"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"AdCP authentication guide: public vs authenticated operations, static credential implementation, and credential management for buyer and seller agents.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,CodeGroup,Heading,Table,Tip,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!CodeGroup)_missingMdxReference(`CodeGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`AdCP uses a tiered authentication model where capability discovery is public, catalog discovery may be public, and protected reads and mutations require authentication.`}),`\n`,_jsx(Heading,{level:`2`,id:`when-authentication-is-required`,children:`When Authentication is Required`}),`\n`,_jsx(Heading,{level:`3`,id:`public-operations-no-authentication-required`,children:`Public Operations (No Authentication Required)`}),`\n`,_jsx(_components.p,{children:`This operation works without credentials to bootstrap discovery:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`get_adcp_capabilities`})}),` - Discover agent capabilities, portfolio, and supported features`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Rationale`}),`: Publishers want potential buyers to discover their capabilities before establishing a business relationship.`]}),`\n`,_jsxs(_components.p,{children:[`Product and signal discovery are seller-variable. Read `,_jsx(_components.code,{children:`media_buy.anonymous_discovery`}),` before calling `,_jsx(_components.code,{children:`list_products`}),` or `,_jsx(_components.code,{children:`get_products`}),` in discovery mode, and read `,_jsx(_components.code,{children:`signals.anonymous_discovery`}),` before calling `,_jsx(_components.code,{children:`get_signals`}),`. `,_jsx(_components.code,{children:`true`}),` means the call may succeed anonymously; `,_jsx(_components.code,{children:`false`}),` means credentials are required; absence means unspecified legacy behavior and the caller handles `,_jsx(_components.code,{children:`AUTH_MISSING`}),` if an anonymous probe is rejected.`]}),`\n`,_jsx(_components.p,{children:`An anonymous discovery response is authoritative only for that anonymous request. It may contain:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Partial catalog (standard products only)`}),`\n`,_jsx(_components.li,{children:`No pricing information or CPM details`}),`\n`,_jsx(_components.li,{children:`No custom product offerings`}),`\n`,_jsx(_components.li,{children:`Generic format support only`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`authenticated-operations-credentials-required`,children:`Authenticated Operations (Credentials Required)`}),`\n`,_jsx(_components.p,{children:`Every mutation and every read of private or account-scoped state requires valid credentials. Examples include:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`create_media_buy`})}),` - Create advertising campaigns`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`update_media_buy`})}),` - Modify existing campaigns`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`sync_creatives`})}),` - Upload creative assets`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`list_creatives`})}),` - View your creative library`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`get_media_buy_delivery`})}),` - Monitor campaign performance and metrics`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`provide_performance_feedback`})}),` - Submit optimization signals`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Rationale`}),`: These operations involve financial commitments, access to proprietary data, or modifications to active campaigns.`]}),`\n`,_jsx(Heading,{level:`2`,id:`authentication-method`,children:`Authentication Method`}),`\n`,_jsxs(_components.p,{children:[`AdCP supports three authentication mechanisms for authenticated operations. Which one an endpoint accepts for an operation is set by its advertised security contract, including `,_jsx(_components.code,{children:`request_signing.required_for`}),` on `,_jsx(_components.code,{children:`get_adcp_capabilities`}),`. The canonical rules and the `,_jsx(_components.a,{href:`/dist/docs/3.2.6/building/by-layer/L1/security#transport-migration-timeline`,children:`transport migration timeline`}),` live in the implementation security reference:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Mechanism`}),_jsx(_components.th,{children:`3.0 and 3.1`}),_jsx(_components.th,{children:`3.2`}),_jsx(_components.th,{children:`4.0`}),_jsx(_components.th,{children:`Notes`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`RFC 9421 request signing`})}),_jsx(_components.td,{children:`Optional and capability-advertised.`}),_jsxs(_components.td,{children:[`Still optional. When signing is used, every accepted signature on a request with a body covers `,_jsx(_components.code,{children:`content-digest`}),`.`]}),_jsx(_components.td,{children:`Required for spend-committing operations.`}),_jsxs(_components.td,{children:[`Asymmetric, body-bound, replay-resistant. See `,_jsx(_components.a,{href:`/dist/docs/3.2.6/building/by-layer/L1/security#request-signing`,children:`RFC 9421 request signing`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Mutual TLS (mTLS)`})}),_jsx(_components.td,{children:`Permitted for any operation`}),_jsx(_components.td,{children:`Permitted for any operation`}),_jsx(_components.td,{children:`Permitted; 4.0 still requires signatures on spend-committing operations`}),_jsx(_components.td,{children:`Transport-layer identity; recommended when the deployment already terminates mTLS at the edge.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Static Authorization credentials (Bearer or Basic)`})}),_jsxs(_components.td,{children:[`Permitted unless the endpoint lists the operation in `,_jsx(_components.code,{children:`request_signing.required_for`})]}),_jsx(_components.td,{children:`Same as 3.0/3.1`}),_jsx(_components.td,{children:`Not sufficient on its own for spend-committing operations`}),_jsxs(_components.td,{children:[`Shared-secret transport. Bearer is the canonical example; HTTP Basic is also acceptable when sent over TLS and validated on every protected request. See the `,_jsx(_components.a,{href:`/dist/docs/3.2.6/reference/known-limitations#authentication-and-identity`,children:`known limitation`}),`.`]})]})]})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Mutating-operation floor in 3.x.`}),` Throughout 3.x, static Authorization-header credentials over TLS remain acceptable for mutating operations unless the endpoint’s capability declaration lists the operation in `,_jsx(_components.code,{children:`request_signing.required_for`}),`. Buyers follow the live declaration rather than assuming the protocol version alone determines the mechanism. Operators handling spend commitments should ship RFC 9421 request signing before 4.0, when signing becomes required for spend-committing operations.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`why-signed-requests-matter-for-financial-operations`,children:`Why signed requests matter for financial operations`}),`\n`,_jsx(_components.p,{children:`A bearer token authenticates whoever presents it. Any party that obtains the token (a leaked log line, a compromised proxy, a captured request, a misconfigured relay) can originate spend commitments indistinguishable from the legitimate agent’s, and the seller cannot tell the difference after the fact. For read and discovery operations that risk is bounded; for operations that move money it is not.`}),`\n`,_jsx(_components.p,{children:`Signed requests replace possession of a string with proof of possession of a private key:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Proof of possession.`}),` The signature proves the caller holds the signing key. The key never travels on the wire, so the theft surface shrinks from every system a token passes through to the signer’s key storage.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Payload integrity.`}),` The signature binds `,_jsx(_components.code,{children:`@method`}),`, `,_jsx(_components.code,{children:`@target-uri`}),`, `,_jsx(_components.code,{children:`@authority`}),`, `,_jsx(_components.code,{children:`content-type`}),`, and `,_jsx(_components.code,{children:`content-digest`}),`, so tampering with a budget figure, account reference, or target endpoint invalidates the request. TLS protects bytes in transit but not through intermediaries, relays, or logs; the signature protects the transaction end to end.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Replay resistance.`}),` The ±60 s timestamp window and nonce prevent a captured request from being resubmitted as a new transaction.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Accountability.`}),` Both parties can prove after the fact who originated a transaction and exactly what was requested. That audit anchor is what lowers fraud and dispute cost in financial workflows; with a shared secret, origination is unprovable once the token may have leaked.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`This is why AdCP 4.0 requires signing for spend-committing operations, and why 3.x endpoints can opt in early by listing operations in `,_jsx(_components.code,{children:`request_signing.required_for`}),`. Key discovery, covered components, and the full verifier checklist are defined in the `,_jsx(_components.a,{href:`/dist/docs/3.2.6/building/by-layer/L1/security#request-signing`,children:`implementation security reference`}),`; build on those (or a reference SDK) rather than hand-rolling the cryptography.`]}),`\n`,_jsx(Heading,{level:`3`,id:`static-authorization-credentials`,children:`Static Authorization credentials`}),`\n`,_jsx(CodeBlock,{numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Authorization: Bearer \u003ctoken>`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Authorization: Basic \u003cbase64(username:password)>`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`Bearer tokens may be:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Opaque tokens`}),`: Server-validated strings mapped to agents`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`JWT tokens`}),`: Self-contained tokens with embedded claims`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`HTTP Basic credentials are also a static shared-secret mechanism. They MUST be sent in the `,_jsx(_components.code,{children:`Authorization`}),` header over TLS, and servers MUST validate the credential on every protected request. Basic credentials are not stronger than Bearer tokens; they are accepted as the same conformance class because both carry a pre-provisioned shared secret on the transport.`]}),`\n`,_jsxs(_components.p,{children:[`Implementations MUST enforce TLS 1.2+ on all static-credential-authenticated endpoints. See the `,_jsx(_components.a,{href:`/dist/docs/3.2.6/building/by-layer/L1/security`,children:`implementation security reference`}),` for transport requirements.`]}),`\n`,_jsxs(_components.p,{children:[`The credential MUST be carried in the `,_jsx(_components.code,{children:`Authorization`}),` request header. Sellers MUST NOT require non-canonical aliases (e.g. `,_jsx(_components.code,{children:`x-adcp-auth`}),`, which appeared in some early MCP-only deployments) and MUST NOT advertise them as the supported header in agent cards, capability responses, or documentation. A seller MAY accept such an alias as a transitional input while it phases out an existing adopter’s integration, but `,_jsx(_components.code,{children:`Authorization: Bearer`}),` or `,_jsx(_components.code,{children:`Authorization: Basic`}),` MUST also be accepted on the same endpoint. Buyer agents and SDKs SHOULD emit `,_jsx(_components.code,{children:`Authorization: Bearer`}),` unless a seller explicitly provisions Basic credentials; SDK examples and docstrings MUST NOT show alias headers as the canonical form.`]}),`\n`,_jsx(Heading,{level:`3`,id:`rfc-9421-request-signing-optional-in-3-x-required-for-spend-committing-ops-in-4-0`,children:`RFC 9421 request signing (optional in 3.x; required for spend-committing ops in 4.0)`}),`\n`,_jsxs(_components.p,{children:[`Signed requests bind `,_jsx(_components.code,{children:`@method`}),`, `,_jsx(_components.code,{children:`@target-uri`}),`, `,_jsx(_components.code,{children:`@authority`}),`, `,_jsx(_components.code,{children:`content-type`}),`, and `,_jsx(_components.code,{children:`content-digest`}),` under an `,_jsx(_components.code,{children:`Ed25519`}),`, `,_jsx(_components.code,{children:`ecdsa-p256-sha256`}),`, or `,_jsx(_components.code,{children:`rsa-pss-sha512`}),` signature with a ±60 s timestamp window and ≥128-bit nonce. The full verifier checklist, key-discovery rules (`,_jsx(_components.code,{children:`brand.json`}),` → `,_jsx(_components.code,{children:`agents[]`}),` → `,_jsx(_components.code,{children:`jwks_uri`}),`), and rotation semantics are defined in the `,_jsx(_components.a,{href:`/dist/docs/3.2.6/building/by-layer/L1/security#request-signing`,children:`implementation security reference`}),`. Capability discovery via `,_jsx(_components.code,{children:`get_adcp_capabilities.request_signing`}),` (`,_jsx(_components.code,{children:`supported`}),`, `,_jsx(_components.code,{children:`required_for`}),`, `,_jsx(_components.code,{children:`covers_content_digest`}),`) lets clients detect whether a seller verifies or requires signing before sending a mutating call. On an endpoint that advertises a 3.2 release, signatures use the 3.2 profile (RFC 8941 padded Base64 with mandatory `,_jsx(_components.code,{children:`content-digest`}),` coverage) regardless of the request’s `,_jsx(_components.code,{children:`adcp_version`}),`; see `,_jsx(_components.a,{href:`/dist/docs/3.2.6/reference/migration/3-1-to-3-2#mixed-version-request-signing`,children:`mixed-version request signing`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`mtls`,children:`mTLS`}),`\n`,_jsx(_components.p,{children:`Operators terminating mTLS at the edge MAY use the peer certificate as the primary identity mechanism for AdCP operations. When mTLS is used, operators MUST pin identity to the certificate subject / SAN rather than any header field.`}),`\n`,_jsx(Heading,{level:`3`,id:`jwt-token-claims`,children:`JWT Token Claims`}),`\n`,_jsx(_components.p,{children:`When using JWT tokens, include these standard claims:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"sub\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"agent_123\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"exp\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1706745600`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"iat\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1706742000`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Sales agents may require additional claims for authorization.`}),`\n`,_jsx(Heading,{level:`2`,id:`agents-and-accounts`,children:`Agents and Accounts`}),`\n`,_jsxs(_components.p,{children:[`AdCP distinguishes between the `,_jsx(_components.strong,{children:`agent`}),` (who is making requests) and the `,_jsx(_components.strong,{children:`account`}),` (who gets billed):`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Agent`}),`: The authenticated entity making API calls (identified by the token)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Account`}),`: The billing relationship determining rates and invoicing`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`An agent may have access to multiple accounts (e.g., an agency managing several clients). See `,_jsx(_components.a,{href:`/dist/docs/3.2.6/building/by-layer/L2/accounts-and-agents`,children:`Accounts and Agents`}),` for details on account selection and billing attribution.`]}),`\n`,_jsxs(_components.p,{children:[`For schema definitions, see `,_jsx(_components.a,{href:`https://adcontextprotocol.org/schemas/3.2.6/core/account.json`,children:_jsx(_components.code,{children:`account.json`})}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`tenant-resolution`,children:`Tenant resolution`}),`\n`,_jsxs(_components.p,{children:[`AdCP resolves tenant from the authenticated principal, not from request payloads. Seller agents map the authenticated identity (bearer token, Basic credential, mTLS client cert, or RFC 9421 key) to the originating buyer’s account via their own authorization context. Task payloads never carry tenant identity as a substitute for authentication — when a schema requires a globally-unique resource ID (`,_jsx(_components.code,{children:`plan_id`}),`, `,_jsx(_components.code,{children:`rights_id`}),`, `,_jsx(_components.code,{children:`standards_id`}),`, `,_jsx(_components.code,{children:`event_source_id`}),`, `,_jsx(_components.code,{children:`list_id`}),`) rather than an `,_jsx(_components.code,{children:`account`}),` envelope, the seller resolves ID → tenant via the same authorization context. The authenticated principal must hold access to the referenced resource, and the resource itself carries the brand it was provisioned for; envelope identity on those calls would be redundant and, if it disagreed with the authenticated principal, a spoofing vector.`]}),`\n`,_jsxs(_components.p,{children:[`Compliance storyboards in the training agent inject envelope identity on these calls as a sandbox routing convention, because the training agent has no authenticated-principal layer of its own — see `,_jsx(_components.a,{href:`/dist/docs/3.2.6/contributing/storyboard-authoring`,children:`Storyboard authoring`}),`. Production sellers do not require it.`]}),`\n`,_jsx(Heading,{level:`2`,id:`credential-placement`,children:`Credential placement`}),`\n`,_jsxs(_components.p,{children:[`Credentials authenticating the `,_jsx(_components.strong,{children:`buyer principal`}),` MUST arrive on the transport’s authentication channel and MUST NOT be placed in the task payload — top-level, inside `,_jsx(_components.code,{children:`context`}),`, inside `,_jsx(_components.code,{children:`ext`}),`, or in any other nested location. The transport channel is:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Static credentials over HTTP`}),` — `,_jsx(_components.code,{children:`Authorization: Bearer \u003ctoken>`}),` per `,_jsx(_components.a,{href:`https://www.rfc-editor.org/rfc/rfc6750#section-2`,children:`RFC 6750 §2`}),`, or `,_jsx(_components.code,{children:`Authorization: Basic \u003cbase64(username:password)>`}),` when the seller provisions HTTP Basic credentials.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`RFC 9421 signed requests`}),` — the `,_jsx(_components.code,{children:`Signature`}),` and `,_jsx(_components.code,{children:`Signature-Input`}),` headers per `,_jsx(_components.a,{href:`https://www.rfc-editor.org/rfc/rfc9421#section-2`,children:`RFC 9421 §2`}),`. The signature itself is the credential; nothing in the payload authenticates the signer.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`MCP and A2A authentication framing`}),` — the transport’s authentication descriptor (e.g., MCP’s `,_jsx(_components.code,{children:`authInfo`}),`, A2A’s `,_jsx(_components.code,{children:`authentication.schemes`}),`). Discovery of the authentication requirement follows `,_jsx(_components.a,{href:`https://www.rfc-editor.org/rfc/rfc9728#section-3`,children:`RFC 9728 §3`}),` protected-resource metadata where applicable.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Mutual TLS`}),` — the peer certificate, per the mTLS row in the table above.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The rule is transport-agnostic: it applies regardless of which mechanism the seller accepts. There is no AdCP version, capability, or seller policy under which a buyer principal authenticates via a payload field. The same placement rule applies to credentials or caller-supplied trust material a request tries to pass for a downstream evaluator call: those belong on the agent-to-evaluator transport or in account provisioning, not task payloads. A seller that detects a credential- or trust-material key in the payload (e.g., `,_jsx(_components.code,{children:`\u003cplatform>_access_token`}),`, `,_jsx(_components.code,{children:`api_key`}),`, `,_jsx(_components.code,{children:`client_secret`}),`, `,_jsx(_components.code,{children:`bearer`}),`, `,_jsx(_components.code,{children:`authorization`}),`, `,_jsx(_components.code,{children:`jwk`}),`, `,_jsx(_components.code,{children:`jwks`}),`, or `,_jsx(_components.code,{children:`jwks_uri`}),` at any nesting depth) SHOULD reject the request with `,_jsx(_components.a,{href:`/dist/docs/3.2.6/building/by-layer/L3/error-handling#authentication-and-access`,children:_jsx(_components.code,{children:`CREDENTIAL_IN_ARGS`})}),` under AdCP 3.1; the requirement upgrades to MUST 90 days after the 3.1 publication date. The code’s recovery classification is `,_jsx(_components.code,{children:`terminal`}),` — agents MUST NOT auto-retry, since auto-retry re-logs the credential on each attempt and is itself the prompt-injection exfiltration surface this rule closes (see `,_jsx(_components.a,{href:`/dist/docs/3.2.6/building/concepts/security-model#threats-specific-to-agentic-advertising`,children:`Threats specific to agentic advertising`}),`).`]}),`\n`,_jsx(Heading,{level:`3`,id:`carve-outs`,children:`Carve-outs`}),`\n`,_jsxs(_components.p,{children:[`The following credential surfaces are `,_jsx(_components.strong,{children:`not`}),` buyer-principal credentials and the rule above does not apply to them:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`push_notification_config.authentication.credentials`})}),` (`,_jsx(_components.a,{href:`https://adcontextprotocol.org/schemas/3.2.6/core/push-notification-config.json`,children:`schema`}),`). This is the legacy Bearer / HMAC-SHA256 credential that the `,_jsx(_components.strong,{children:`seller`}),` uses when calling `,_jsx(_components.strong,{children:`back`}),` to the buyer’s webhook endpoint. It authenticates the seller-as-caller against the buyer-as-receiver — orthogonal to the buyer-principal credential that authenticates the inbound AdCP request. The default 9421 webhook profile uses keys discovered via `,_jsx(_components.code,{children:`brand.json`}),` and crosses no shared secrets; the legacy block is a deprecated compatibility scheme removed in AdCP 4.0.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Onboarding-time secrets exchanged out-of-band`}),` — initial token issuance, OAuth dynamic registration responses, dashboard-issued API keys. These travel through the AAO authorization server or the seller’s onboarding flow, not as AdCP task payloads.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`relay-agents`,children:`Relay agents`}),`\n`,_jsxs(_components.p,{children:[`The agency / A2A relay topology (brand → relay → seller) authenticates `,_jsx(_components.strong,{children:`under the relay’s own principal`}),`. The relay either preserves the brand agent’s RFC 9421 signature verbatim (pass-through model) or re-signs under its own key (re-signing model) — both options are described in `,_jsx(_components.a,{href:`https://github.com/adcontextprotocol/adcp/issues/2324`,children:`#2324`}),`. Neither model permits forwarding the brand’s transport credential as a relay-side payload field. Brand-agent identity, when the relay is the principal of record, MUST be carried in the request body as identity context (e.g., a buyer-side identity assertion verifiable by the seller against `,_jsx(_components.code,{children:`adagents.json`}),` / `,_jsx(_components.code,{children:`authorized_operator[]`}),`) — never as a forwarded transport credential. Relays MUST NOT echo or reattach buyer credentials in any args field on outbound seller-bound requests.`]}),`\n`,_jsx(Heading,{level:`2`,id:`protocol-configuration`,children:`Protocol Configuration`}),`\n`,_jsxs(_components.p,{children:[`Most MCP and A2A integrations use `,_jsx(_components.code,{children:`Authorization: Bearer \u003ctoken>`}),` (`,_jsx(_components.a,{href:`https://www.rfc-editor.org/rfc/rfc6750#section-2`,children:`RFC 6750 §2`}),`) as the authentication header. Configure your client with:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"auth\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"bearer\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"token\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\u003cyour_token>\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The client library handles adding the `,_jsx(_components.code,{children:`Authorization: Bearer \u003ctoken>`}),` header to requests.`]}),`\n`,_jsxs(_components.p,{children:[`If a seller explicitly provisions HTTP Basic credentials, the same transport rule applies: send `,_jsx(_components.code,{children:`Authorization: Basic \u003cbase64(username:password)>`}),` on every authenticated request over HTTPS.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Header alias policy by leg.`}),` The two protocol legs differ in what aliases they accept beyond the standard `,_jsx(_components.code,{children:`Authorization`}),` header:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`A2A`}),` — `,_jsx(_components.code,{children:`Authorization`}),` only. For Bearer credentials, send `,_jsx(_components.code,{children:`Authorization: Bearer \u003ctoken>`}),` and declare a `,_jsx(_components.code,{children:`bearerAuth`}),` `,_jsx(_components.code,{children:`HTTPAuthSecurityScheme`}),` in the seller’s agent card (see the `,_jsx(_components.a,{href:`/dist/docs/3.2.6/building/by-layer/L0/a2a-guide#agent-cards`,children:`A2A guide — Agent Cards`}),`). For Basic credentials, send `,_jsx(_components.code,{children:`Authorization: Basic \u003cbase64(username:password)>`}),` and declare HTTP Basic. The `,_jsx(_components.code,{children:`x-adcp-auth`}),` custom header is not recognized on the A2A surface.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`MCP`}),` — `,_jsx(_components.code,{children:`Authorization`}),` is primary for Bearer and Basic credentials. `,_jsx(_components.code,{children:`x-adcp-auth`}),` is accepted as a back-compat Bearer alias for integrations predating adcp 4.5.0. New implementations should use the standard header on both legs.`]}),`\n`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Sellers migrating to adcp 4.5.0.`}),` If you previously configured `,_jsx(_components.code,{children:`x-adcp-auth`}),` as the A2A leg header via the `,_jsx(_components.code,{children:`a2a_header_name`}),` knob, verify that knob is set to the RFC 6750 default before updating your agent card to declare `,_jsx(_components.code,{children:`bearerAuth`}),` — buyers that have not yet migrated off the legacy header will otherwise receive HTTP 401.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`mcp-client-configuration`,children:`MCP Client Configuration`}),`\n`,_jsx(_components.p,{children:`When using the MCP protocol, authentication is handled by the transport layer, not by adding HTTP headers manually.`}),`\n`,_jsx(Heading,{level:`3`,id:`using-mcp-client-libraries`,children:`Using MCP Client Libraries`}),`\n`,_jsx(_components.p,{children:`The recommended approach is to use an MCP client library:`}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`TypeScript`,numberOfLines:`16`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`16`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '@modelcontextprotocol/sdk/client/index.js'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`StreamableHTTPClientTransport`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '@modelcontextprotocol/sdk/client/streamableHttp.js'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` transport`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` StreamableHTTPClientTransport`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` URL`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'https://test-agent.adcontextprotocol.org/sales/mcp'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` requestInit:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` headers:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Authorization'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Bearer YOUR_TOKEN_HERE'`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` client`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`name:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'my-client'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`version:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '1.0.0'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`connect`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`transport`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})}),_jsx(CodeBlock,{filename:`Python`,numberOfLines:`9`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mcp `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ClientSession`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mcp.client.streamable_http `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` streamablehttp_client`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` with`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` streamablehttp_client(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://test-agent.adcontextprotocol.org/sales/mcp\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` headers`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Authorization\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Bearer YOUR_TOKEN_HERE\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`as`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (read, write):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` with`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ClientSession(read, write) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`as`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` session:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` session.initialize()`})]}),`\n`]})})})]}),`\n`,_jsx(Heading,{level:`3`,id:`common-mistake-raw-http-headers`,children:`Common Mistake: Raw HTTP Headers`}),`\n`,_jsx(_components.p,{children:`A common mistake is trying to add authentication headers to raw HTTP requests:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`http`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`http`,children:_jsxs(_components.code,{language:`http`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# This won't work for MCP endpoints`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`GET`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` /mcp `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`HTTP`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1.1`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`Authorization`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Bearer YOUR_TOKEN`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`MCP uses a streaming protocol over HTTP. The authentication must be configured in the MCP client transport layer, which handles the protocol negotiation and message framing.`}),`\n`,_jsx(Heading,{level:`3`,id:`troubleshooting-authentication`,children:`Troubleshooting Authentication`}),`\n`,_jsx(_components.p,{children:`If you’re getting “authentication required” errors:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Verify you’re using an MCP client library`}),` - not making raw HTTP calls`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Check the token format`}),` - should be passed to the transport configuration`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Test with the public test agent`}),` - verify your setup works before testing custom agents`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Check protocol version`}),` - ensure client and server protocol versions are compatible`]}),`\n`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`For OAuth handshake failures and RFC 9421 signing issues, use the `,_jsx(_components.a,{href:`/dist/docs/3.2.6/building/verification/grading`,children:`CLI auth graders`}),` — `,_jsx(_components.code,{children:`diagnose-auth`}),` probes RFC 9728 + RFC 8414 discovery and ranks hypotheses; `,_jsx(_components.code,{children:`grade request-signing`}),` runs every signing vector with per-vector diagnostics.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`obtaining-credentials`,children:`Obtaining Credentials`}),`\n`,_jsx(Heading,{level:`3`,id:`account-setup-process`,children:`Account Setup Process`}),`\n`,_jsx(_components.p,{children:`To access authenticated operations, you must establish an account with each sales agent:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Identify Sales Agents`}),`: Discover sales agents via publisher `,_jsx(_components.code,{children:`adagents.json`}),` files`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Contact Sales Team`}),`: Reach out to the agent’s sales or partnerships team`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Complete Onboarding`}),`: Provide business information, sign agreements, configure billing`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Receive Credentials`}),`: Get API keys or OAuth client credentials`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Note`}),`: Each sales agent manages their own accounts independently. You need separate credentials for each agent you work with.`]}),`\n`,_jsx(Heading,{level:`3`,id:`dynamic-registration-optional`,children:`Dynamic Registration (Optional)`}),`\n`,_jsx(_components.p,{children:`Some sales agents support OAuth 2.0 dynamic client registration:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`http`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`http`,children:_jsxs(_components.code,{language:`http`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`POST`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` /oauth/register`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`Content-Type`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` application/json`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"client_name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Your Company Name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"redirect_uris\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://yourapp.com/callback\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"grant_types\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"authorization_code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"refresh_token\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"scope\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"adcp:products adcp:media_buys adcp:creatives\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Check the sales agent’s documentation or `,_jsx(_components.code,{children:`adagents.json`}),` for dynamic registration support.`]}),`\n`,_jsx(Heading,{level:`3`,id:`aggregation-platforms`,children:`Aggregation Platforms`}),`\n`,_jsx(_components.p,{children:`Consider using aggregation platforms (like Scope3) that manage credentials and relationships with multiple sales agents on your behalf. This simplifies:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Credential management`}),`\n`,_jsx(_components.li,{children:`Financial relationships`}),`\n`,_jsx(_components.li,{children:`Legal agreements`}),`\n`,_jsx(_components.li,{children:`Compliance monitoring`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`authenticating-to-aao-platform-services`,children:`Authenticating to AAO Platform Services`}),`\n`,_jsxs(_components.p,{children:[`The mechanisms above govern `,_jsx(_components.strong,{children:`agent-to-agent`}),` auth (buyer ↔ sales agent). Authenticating to `,_jsx(_components.strong,{children:`AAO-hosted services`}),` — the registry write API, the AAO MCP endpoint, the member dashboard — is a separate surface.`]}),`\n`,_jsx(_components.p,{children:`AAO runs an OAuth 2.1 + OIDC authorization server. Clients discover it via standard well-knowns:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Authorization server metadata (RFC 8414):`}),` `,_jsx(_components.code,{children:`https://agenticadvertising.org/.well-known/oauth-authorization-server`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Protected-resource metadata (RFC 9728):`}),` `,_jsx(_components.code,{children:`/.well-known/oauth-protected-resource/api`}),` (REST API) and `,_jsx(_components.code,{children:`/.well-known/oauth-protected-resource/mcp`}),` (MCP). Both list `,_jsx(_components.code,{children:`https://agenticadvertising.org`}),` as the authorization server.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Flow:`}),` authorization code with PKCE (S256). User identity is via WorkOS AuthKit; tokens are signed JWTs.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Dynamic client registration (RFC 7591):`}),` `,_jsx(_components.code,{children:`POST /register`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Server-to-server:`}),` there is no `,_jsx(_components.code,{children:`client_credentials`}),` grant. Backend services should use a WorkOS organization API key from the `,_jsx(_components.a,{href:`https://agenticadvertising.org/dashboard/api-keys`,children:`AAO dashboard`}),`, not the OAuth `,_jsx(_components.code,{children:`/token`}),` endpoint.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`All AAO endpoints are HTTPS-only; reject any discovery document served over plain HTTP.`}),`\n`,_jsxs(_components.p,{children:[`A user JWT obtained from AAO is `,_jsx(_components.strong,{children:`not`}),` an AdCP credential. Calls to a sales agent still use that agent’s bearer / 9421 / mTLS credentials per the table above. Full reference: `,_jsx(_components.a,{href:`/dist/docs/3.2.6/registry#authentication`,children:`AAO registry — Authentication`}),`.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`If you discover an `,_jsx(_components.code,{children:`authorization_endpoint`}),` on a sales agent’s RFC 9728 protected-resource metadata`]}),` (e.g., for an operator-account OAuth flow), pin the discovered `,_jsx(_components.code,{children:`authorization_servers`}),` issuer against what `,_jsx(_components.code,{children:`adagents.json`}),` — or out-of-band onboarding — authorized for that seller. Do not blindly trust an AS URL the resource itself returned, otherwise a malicious or compromised seller can route operator credentials to an attacker-controlled endpoint.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`error-responses`,children:`Error Responses`}),`\n`,_jsx(Heading,{level:`3`,id:`unauthenticated-request-to-protected-operation`,children:`Unauthenticated Request to Protected Operation`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"AUTH_REQUIRED\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Authentication required for this operation\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`invalid-or-expired-credentials`,children:`Invalid or Expired Credentials`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"AUTH_INVALID\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Invalid or expired credentials\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`insufficient-permissions`,children:`Insufficient Permissions`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"INSUFFICIENT_PERMISSIONS\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Agent does not have required permissions for this operation\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`best-practices`,children:`Best Practices`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Secure Storage`}),`: Store credentials securely (environment variables, secret managers)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Rotation`}),`: Implement credential rotation policies`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Scope Limitation`}),`: Request minimum required permissions`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Token Refresh`}),`: Implement automatic token refresh for JWT tokens`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Error Handling`}),`: Handle authentication errors gracefully with retry logic`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`testing-authentication`,children:`Testing Authentication`}),`\n`,_jsx(_components.p,{children:`The public test agent accepts a shared token — no signup required:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` ADCP_AUTH_TOKEN`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"1v8tAhASaUYYp4odoQ1PnMpdqNaMiTrCRqYo9OJp6IQ\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` AGENT_URL`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://test-agent.adcontextprotocol.org/sales/mcp\"`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Configure your client with this token:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"agent_uri\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://test-agent.adcontextprotocol.org/sales/mcp\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"protocol\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"mcp\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"auth\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"bearer\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"token\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"1v8tAhASaUYYp4odoQ1PnMpdqNaMiTrCRqYo9OJp6IQ\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`For org-scoped usage tracking, replace the public token with your own API key from the `,_jsx(_components.a,{href:`https://agenticadvertising.org/dashboard/api-keys`,children:`AAO dashboard`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/dist/docs/3.2.6/media-buy/advanced-topics/sandbox`,children:`Sandbox Mode`}),` for testing capabilities including sandbox mode for risk-free development.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Authentication","description":"AdCP authentication guide: public vs authenticated operations, static credential implementation, and credential management for buyer and seller agents.","og:title":"AdCP — Authentication","href":"/dist/docs/3.2.6/building/by-layer/L2/authentication"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"When Authentication is Required","slug":"when-authentication-is-required","depth":2,"children":[{"title":"Public Operations (No Authentication Required)","slug":"public-operations-no-authentication-required","depth":3,"children":[]},{"title":"Authenticated Operations (Credentials Required)","slug":"authenticated-operations-credentials-required","depth":3,"children":[]}]},{"title":"Authentication Method","slug":"authentication-method","depth":2,"children":[{"title":"Why signed requests matter for financial operations","slug":"why-signed-requests-matter-for-financial-operations","depth":3,"children":[]},{"title":"Static Authorization credentials","slug":"static-authorization-credentials","depth":3,"children":[]},{"title":"RFC 9421 request signing (optional in 3.x; required for spend-committing ops in 4.0)","slug":"rfc-9421-request-signing-optional-in-3-x-required-for-spend-committing-ops-in-4-0","depth":3,"children":[]},{"title":"mTLS","slug":"mtls","depth":3,"children":[]},{"title":"JWT Token Claims","slug":"jwt-token-claims","depth":3,"children":[]}]},{"title":"Agents and Accounts","slug":"agents-and-accounts","depth":2,"children":[]},{"title":"Tenant resolution","slug":"tenant-resolution","depth":2,"children":[]},{"title":"Credential placement","slug":"credential-placement","depth":2,"children":[{"title":"Carve-outs","slug":"carve-outs","depth":3,"children":[]},{"title":"Relay agents","slug":"relay-agents","depth":3,"children":[]}]},{"title":"Protocol Configuration","slug":"protocol-configuration","depth":2,"children":[]},{"title":"MCP Client Configuration","slug":"mcp-client-configuration","depth":2,"children":[{"title":"Using MCP Client Libraries","slug":"using-mcp-client-libraries","depth":3,"children":[]},{"title":"Common Mistake: Raw HTTP Headers","slug":"common-mistake-raw-http-headers","depth":3,"children":[]},{"title":"Troubleshooting Authentication","slug":"troubleshooting-authentication","depth":3,"children":[]}]},{"title":"Obtaining Credentials","slug":"obtaining-credentials","depth":2,"children":[{"title":"Account Setup Process","slug":"account-setup-process","depth":3,"children":[]},{"title":"Dynamic Registration (Optional)","slug":"dynamic-registration-optional","depth":3,"children":[]},{"title":"Aggregation Platforms","slug":"aggregation-platforms","depth":3,"children":[]}]},{"title":"Authenticating to AAO Platform Services","slug":"authenticating-to-aao-platform-services","depth":2,"children":[]},{"title":"Error Responses","slug":"error-responses","depth":2,"children":[{"title":"Unauthenticated Request to Protected Operation","slug":"unauthenticated-request-to-protected-operation","depth":3,"children":[]},{"title":"Invalid or Expired Credentials","slug":"invalid-or-expired-credentials","depth":3,"children":[]},{"title":"Insufficient Permissions","slug":"insufficient-permissions","depth":3,"children":[]}]},{"title":"Best Practices","slug":"best-practices","depth":2,"children":[]},{"title":"Testing Authentication","slug":"testing-authentication","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/agenticadvertisingorg/1a1b50531e8add0f/dist/compliance/storyboard-runner-options.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.0.23/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.1.14/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.0.24/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.0/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.2/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.3/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.1.17/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.1.18/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.0.26/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.1.19/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.1.15/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.1.16/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.4/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.0.25/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.1/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.5/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.6/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.7/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.8/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.9/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/docs/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/3d9934cdcf6b6ce6/workers/artifact-cdn/src/index.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.10/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.1.20/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-beta.11/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-rc.0/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-rc.1/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.1.21/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-rc.2/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-rc.6/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.1.24/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-rc.3/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-rc.4/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.0-rc.7/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.1/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.2/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.3/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.1.27/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.0.27/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.0.28/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.3.0-beta.0/slack-invite-recovery.js","/_mintlify/custom/agenticadvertisingorg/bd3bc019124ed96c/dist/docs/3.2.6/slack-invite-recovery.js"],"subdomain":"agenticadvertisingorg","siteName":"AdCP - Ad Context Protocol","title":"AdCP — Authentication","navMaps":{"firstHrefInVersion":{"3.2":{"href":"/dist/docs/3.2.6/building/by-layer/L2/authentication","matchLevel":0},"3.3-beta":{"href":"/dist/docs/3.3.0-beta.0/building/by-layer/L2/authentication","matchLevel":1},"3.1":{"href":"/dist/docs/3.1.27/building/by-layer/L2/authentication","matchLevel":1},"3.0":{"href":"/dist/docs/3.0.28/building/by-layer/L2/authentication","matchLevel":1},"2.5 (archived)":{"href":"/dist/docs/2.5.3/intro","matchLevel":3}},"firstHrefInLanguage":{}},"lastModified":"2026-10-24T03:07:17.034Z","originalFileLocation":"dist/docs/3.2.6/building/by-layer/L2/authentication.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"AdCP authentication guide: public vs authenticated operations, static credential implementation, and credential management for buyer and seller agents.\">\u003cmeta data-mint-head name=\"application-name\" content=\"AdCP - Ad Context Protocol\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/agenticadvertisingorg/JomSeQ4JKmdJww4Y/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/agenticadvertisingorg/JomSeQ4JKmdJww4Y/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/agenticadvertisingorg/JomSeQ4JKmdJww4Y/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/agenticadvertisingorg/JomSeQ4JKmdJww4Y/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/agenticadvertisingorg/JomSeQ4JKmdJww4Y/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/agenticadvertisingorg/JomSeQ4JKmdJww4Y/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/agenticadvertisingorg/JomSeQ4JKmdJww4Y/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/agenticadvertisingorg/JomSeQ4JKmdJww4Y/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/agenticadvertisingorg/JomSeQ4JKmdJww4Y/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"AdCP — Authentication\">\u003cmeta data-mint-head property=\"og:description\" content=\"AdCP authentication guide: public vs authenticated operations, static credential implementation, and credential management for buyer and seller agents.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"AdCP - Ad Context Protocol\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/building/by-layer/L2/authentication\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://agenticadvertisingorg.mintlify.app/_mintlify/api/og/v2?division=L2+%E2%80%94+Auth+%26+registry\u0026amp;title=Authentication\u0026amp;description=AdCP+authentication+guide%3A+public+vs+authenticated+operations%2C+static+credential+implementation%2C+and+credential+management+for+buyer+and+seller+agents.\u0026amp;theme=be64ae0b59577dd8c09f9173\u0026amp;signature=df6115809160231a1bc661ffbcb1c6b61266c1d31d552e38e5890082db71d2eb\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"AdCP — Authentication\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"AdCP authentication guide: public vs authenticated operations, static credential implementation, and credential management for buyer and seller agents.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://agenticadvertisingorg.mintlify.app/_mintlify/api/og/v2?division=L2+%E2%80%94+Auth+%26+registry\u0026amp;title=Authentication\u0026amp;description=AdCP+authentication+guide%3A+public+vs+authenticated+operations%2C+static+credential+implementation%2C+and+credential+management+for+buyer+and+seller+agents.\u0026amp;theme=be64ae0b59577dd8c09f9173\u0026amp;signature=df6115809160231a1bc661ffbcb1c6b61266c1d31d552e38e5890082db71d2eb\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/agenticadvertisingorg/JomSeQ4JKmdJww4Y/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"AdCP - Ad Context Protocol\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#047857\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/building/by-layer/L2/authentication\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/dist/docs/3.2.6/building/by-layer/L2/authentication.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.adcontextprotocol.org/#organization\",\"name\":\"AdCP - Ad Context Protocol\",\"url\":\"https://docs.adcontextprotocol.org\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/agenticadvertisingorg/cnoy0Xiq2i_jSWzz/logo/sage.svg?fit=max\u0026auto=format\u0026n=cnoy0Xiq2i_jSWzz\u0026q=85\u0026s=f393829d8ccdabe856cf9c8362e66b96\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.adcontextprotocol.org#website\",\"name\":\"AdCP - Ad Context Protocol\",\"url\":\"https://docs.adcontextprotocol.org\",\"publisher\":{\"@id\":\"https://docs.adcontextprotocol.org/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/building/by-layer/L2/authentication#webpage\",\"url\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/building/by-layer/L2/authentication\",\"name\":\"Authentication\",\"description\":\"AdCP authentication guide: public vs authenticated operations, static credential implementation, and credential management for buyer and seller agents.\",\"dateModified\":\"2026-10-24T03:07:17.034Z\",\"isPartOf\":{\"@id\":\"https://docs.adcontextprotocol.org#website\"},\"breadcrumb\":{\"@id\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/building/by-layer/L2/authentication#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/building/by-layer/L2/authentication#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Building with AdCP\",\"item\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/building/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Build by layer\",\"item\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/building/by-layer/L4/index\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"L2 — Auth \u0026 registry\",\"item\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/building/by-layer/L2/index\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Authentication\",\"item\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/building/by-layer/L2/authentication\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/building/by-layer/L2/authentication#article\",\"headline\":\"Authentication\",\"name\":\"Authentication\",\"description\":\"AdCP authentication guide: public vs authenticated operations, static credential implementation, and credential management for buyer and seller agents.\",\"url\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/building/by-layer/L2/authentication\",\"mainEntityOfPage\":{\"@id\":\"https://docs.adcontextprotocol.org/dist/docs/3.2.6/building/by-layer/L2/authentication#webpage\"},\"dateModified\":\"2026-10-24T03:07:17.034Z\",\"publisher\":{\"@id\":\"https://docs.adcontextprotocol.org/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.adcontextprotocol.org#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"AdCP - Ad Context Protocol\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"AdCP - Ad Context Protocol","nav":{"global":null,"versions":[{"version":"3.2","default":true,"tag":"Latest","groups":[{"group":"Getting Started","pages":[{"title":"Introduction to AdCP","sidebarTitle":"Introduction","href":"/dist/docs/3.2.6/intro"},{"title":"Quickstart","href":"/dist/docs/3.2.6/quickstart"}]},{"group":"Building with AdCP","expanded":false,"pages":[{"title":"Building with AdCP","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/building/index"},{"title":"Schemas \u0026 SDKs","sidebarTitle":"Schemas \u0026 SDKs","href":"/dist/docs/3.2.6/building/schemas-and-sdks"},{"group":"Release notes \u0026 migration","expanded":false,"pages":[{"title":"AdCP 3.0","href":"/dist/docs/3.2.6/reference/whats-new-in-v3"},{"title":"What's New in AdCP 3.1","href":"/dist/docs/3.2.6/reference/whats-new-in-3-1"},{"title":"What's new in AdCP 3.2","sidebarTitle":"What's new in 3.2","href":"/dist/docs/3.2.6/reference/whats-new-in-3-2"},{"title":"AdCP 3.2 prerelease history","sidebarTitle":"3.2 prerelease history","href":"/dist/docs/3.2.6/reference/3-2-beta"},{"group":"3.3 preview","pages":[{"title":"What's new in AdCP 3.3","sidebarTitle":"What's new in 3.3","href":"/dist/docs/3.2.6/reference/whats-new-in-3-3"},{"title":"AdCP 3.3 beta program","sidebarTitle":"3.3 beta program","href":"/dist/docs/3.2.6/reference/3-3-beta"},{"title":"Migrating from 3.2 to 3.3","sidebarTitle":"3.2 to 3.3","href":"/dist/docs/3.2.6/reference/migration/3-2-to-3-3"}]},{"title":"v3 readiness checklist","sidebarTitle":"Readiness checklist","href":"/dist/docs/3.2.6/reference/migration/v3-readiness"},{"title":"Migration guides","sidebarTitle":"Migration guides","href":"/dist/docs/3.2.6/reference/migration/index"},{"title":"Migrating from 3.0 to 3.1","sidebarTitle":"3.0 to 3.1","href":"/dist/docs/3.2.6/reference/migration/3-0-to-3-1"},{"title":"Migrating from 3.1 to 3.2","sidebarTitle":"3.1 to 3.2","href":"/dist/docs/3.2.6/reference/migration/3-1-to-3-2"},{"title":"Reliable Reporting consumer-status loop","href":"/dist/docs/3.2.6/reference/migration/reliable-reporting-status-loop"},{"title":"Prerelease upgrade notes","sidebarTitle":"Prerelease upgrades","href":"/dist/docs/3.2.6/reference/migration/prerelease-upgrades"},{"title":"Migrating channels","href":"/dist/docs/3.2.6/reference/migration/channels"},{"title":"Migrating pricing","href":"/dist/docs/3.2.6/reference/migration/pricing"},{"title":"Migrating geo targeting","href":"/dist/docs/3.2.6/reference/migration/geo-targeting"},{"title":"Migrating creatives","href":"/dist/docs/3.2.6/reference/migration/creatives"},{"title":"Migrating to creative transformers (3.1)","href":"/dist/docs/3.2.6/reference/migration/creative-transformers"},{"title":"Migrating catalogs","href":"/dist/docs/3.2.6/reference/migration/catalogs"},{"title":"Migrating optimization goals","href":"/dist/docs/3.2.6/reference/migration/optimization-goals"},{"title":"Migrating brand identity","href":"/dist/docs/3.2.6/reference/migration/brand-identity"},{"title":"Migrating signals","href":"/dist/docs/3.2.6/reference/migration/signals"},{"title":"Migrating audiences","href":"/dist/docs/3.2.6/reference/migration/audiences"},{"title":"Migrating attribution windows","href":"/dist/docs/3.2.6/reference/migration/attribution"},{"title":"Migrating to `media_buy_status` (3.1 → 3.2)","href":"/dist/docs/3.2.6/reference/migration/media-buy-status"},{"title":"Targeting-aware product discovery","href":"/dist/docs/3.2.6/reference/migration/targeting-aware-discovery"},{"title":"Migrating secured asset access (3.2)","href":"/dist/docs/3.2.6/reference/migration/asset-access"},{"title":"Cross-role governance enforcement","href":"/dist/docs/3.2.6/reference/migration/cross-role-governance-enforcement"}]},{"title":"Protocol architecture","sidebarTitle":"Architecture","href":"/dist/docs/3.2.6/protocol/architecture"},{"title":"How AdCP is designed","sidebarTitle":"Design principles","href":"/dist/docs/3.2.6/protocol/design-principles"},{"title":"Language and localization","sidebarTitle":"Language and localization","href":"/dist/docs/3.2.6/protocol/language-and-localization"},{"title":"Capabilities explorer","sidebarTitle":"Capabilities explorer","href":"/dist/docs/3.2.6/protocol/capabilities-explorer"},{"title":"Specification Guidelines","href":"/dist/docs/3.2.6/spec-guidelines"},{"title":"Required tasks by protocol","sidebarTitle":"Required tasks","href":"/dist/docs/3.2.6/protocol/required-tasks"},{"title":"Calling an AdCP agent","sidebarTitle":"Calling an agent","href":"/dist/docs/3.2.6/protocol/calling-an-agent"},{"title":"Format References","href":"/dist/docs/3.2.6/protocol/format-references"},{"title":"Snapshot and log","href":"/dist/docs/3.2.6/protocol/snapshot-and-log"},{"group":"Concepts","expanded":false,"pages":[{"title":"Why AdCP","href":"/dist/docs/3.2.6/building/concepts/index"},{"title":"Protocol Comparison","href":"/dist/docs/3.2.6/building/concepts/protocol-comparison"},{"title":"AdCP and OpenRTB","sidebarTitle":"AdCP vs OpenRTB","href":"/dist/docs/3.2.6/building/concepts/adcp-vs-openrtb"},{"title":"How AI agents communicate ad specs across platforms","sidebarTitle":"How agents communicate","href":"/dist/docs/3.2.6/building/concepts/how-agents-communicate"},{"title":"Security Model","sidebarTitle":"Security Model","href":"/dist/docs/3.2.6/building/concepts/security-model"},{"title":"AI advertising standards landscape","sidebarTitle":"Industry landscape","href":"/dist/docs/3.2.6/building/concepts/industry-landscape"},{"title":"Managing Response Size","sidebarTitle":"Managing Response Size","href":"/dist/docs/3.2.6/building/concepts/managing-response-size"}]},{"group":"Build by layer","pages":[{"group":"L4 — Business logic","pages":[{"title":"L4 — Business logic","sidebarTitle":"L4 — Business logic","href":"/dist/docs/3.2.6/building/by-layer/L4/index"},{"title":"Choose your SDK","sidebarTitle":"Choose your SDK","href":"/dist/docs/3.2.6/building/by-layer/L4/choose-your-sdk"},{"title":"Build an Agent","sidebarTitle":"Build an Agent","href":"/dist/docs/3.2.6/building/by-layer/L4/build-an-agent"},{"title":"Build a caller","sidebarTitle":"Build a caller","href":"/dist/docs/3.2.6/building/by-layer/L4/build-a-caller"},{"title":"Migrate from a hand-rolled agent","sidebarTitle":"Migrate from hand-rolled","href":"/dist/docs/3.2.6/building/by-layer/L4/migrate-from-hand-rolled"}]},{"group":"L3 — Protocol semantics","expanded":false,"pages":[{"title":"L3 — Protocol semantics","sidebarTitle":"L3 — Protocol semantics","href":"/dist/docs/3.2.6/building/by-layer/L3/index"},{"title":"Task Lifecycle","href":"/dist/docs/3.2.6/building/by-layer/L3/task-lifecycle"},{"title":"Async Operations","href":"/dist/docs/3.2.6/building/by-layer/L3/async-operations"},{"title":"Async identity and convergence","href":"/dist/docs/3.2.6/building/by-layer/L3/async-identity-and-convergence"},{"title":"Push Notifications","href":"/dist/docs/3.2.6/building/by-layer/L3/webhooks"},{"title":"Error Handling","href":"/dist/docs/3.2.6/building/by-layer/L3/error-handling"},{"title":"Compliance test controller","href":"/dist/docs/3.2.6/building/by-layer/L3/comply-test-controller"}]},{"group":"L2 — Auth \u0026 registry","expanded":false,"pages":[{"title":"L2 — Auth \u0026 registry","sidebarTitle":"L2 — Auth \u0026 registry","description":"Auth-and-registry layer of the AdCP stack. Turns a verified identity into a scoped principal — which buyer, which brand, which advertiser account, which sandbox-vs-live tier.","href":"/dist/docs/3.2.6/building/by-layer/L2/index"},{"title":"Authentication","href":"/dist/docs/3.2.6/building/by-layer/L2/authentication"},{"title":"Account state","description":"AdCP account state model: how accounts hold catalogs, creatives, audiences, event sources, and campaigns. Sync tasks, upsert semantics, and async approval workflows.","href":"/dist/docs/3.2.6/building/by-layer/L2/account-state"},{"title":"Accounts and agents","href":"/dist/docs/3.2.6/building/by-layer/L2/accounts-and-agents"},{"title":"Context \u0026 Sessions","href":"/dist/docs/3.2.6/building/by-layer/L2/context-sessions"}]},{"group":"L1 — Identity \u0026 signing","expanded":false,"pages":[{"title":"L1 — Identity \u0026 signing","sidebarTitle":"L1 — Identity \u0026 signing","href":"/dist/docs/3.2.6/building/by-layer/L1/index"},{"title":"Security","href":"/dist/docs/3.2.6/building/by-layer/L1/security"},{"title":"Request Signing Guide","href":"/dist/docs/3.2.6/building/by-layer/L1/request-signing"},{"title":"Webhook Verifier Tuning Guide","sidebarTitle":"Webhook Verifier Tuning","href":"/dist/docs/3.2.6/building/by-layer/L1/webhook-verifier-tuning"}]},{"group":"L0 — Wire \u0026 transport","expanded":false,"pages":[{"title":"L0 — Wire \u0026 transport","sidebarTitle":"L0 — Wire \u0026 transport","href":"/dist/docs/3.2.6/building/by-layer/L0/index"},{"title":"Schemas","sidebarTitle":"Schemas","href":"/dist/docs/3.2.6/building/by-layer/L0/schemas"},{"title":"MCP Guide","href":"/dist/docs/3.2.6/building/by-layer/L0/mcp-guide"},{"title":"A2A Guide","href":"/dist/docs/3.2.6/building/by-layer/L0/a2a-guide"},{"title":"AdCP A2A Profile Extension v3","sidebarTitle":"A2A profile extension","href":"/dist/docs/3.2.6/building/by-layer/L0/a2a-profile-extension"},{"title":"A2A Response Format","href":"/dist/docs/3.2.6/building/by-layer/L0/a2a-response-format"},{"title":"get_adcp_capabilities","href":"/dist/docs/3.2.6/protocol/get_adcp_capabilities"},{"title":"sync_agent_notification_configs","href":"/dist/docs/3.2.6/protocol/sync_agent_notification_configs"},{"title":"sync_principal","href":"/dist/docs/3.2.6/protocol/sync_principal"},{"title":"get_principal","href":"/dist/docs/3.2.6/protocol/get_principal"},{"title":"MCP Response Extraction","href":"/dist/docs/3.2.6/building/by-layer/L0/mcp-response-extraction"},{"title":"A2A Response Extraction","href":"/dist/docs/3.2.6/building/by-layer/L0/a2a-response-extraction"}]}]},{"group":"Cross-cutting","expanded":false,"pages":[{"title":"The AdCP stack","sidebarTitle":"SDK stack reference","href":"/dist/docs/3.2.6/building/cross-cutting/sdk-stack"},{"title":"Version Adaptation","sidebarTitle":"Version Adaptation","href":"/dist/docs/3.2.6/building/cross-cutting/version-adaptation"},{"title":"Known spec ambiguities","href":"/dist/docs/3.2.6/building/cross-cutting/known-ambiguities"}]},{"group":"Verification \u0026 trust","expanded":false,"pages":[{"title":"Conformance Specification","sidebarTitle":"Conformance Specification","href":"/dist/docs/3.2.6/building/verification/conformance"},{"title":"Compliance Catalog","sidebarTitle":"Compliance Catalog","href":"/dist/docs/3.2.6/building/verification/compliance-catalog"},{"title":"Storyboards vs. scenarios — which is which","sidebarTitle":"Storyboards vs. Scenarios","href":"/dist/docs/3.2.6/building/verification/storyboards-vs-scenarios"},{"title":"How grading works","sidebarTitle":"How grading works","href":"/dist/docs/3.2.6/building/verification/how-grading-works"},{"title":"Validate your agent using storyboards","sidebarTitle":"Validate Your Agent","href":"/dist/docs/3.2.6/building/verification/validate-your-agent"},{"title":"Validate adapter agents with mock upstream fixtures","sidebarTitle":"Mock Upstream Fixtures","href":"/dist/docs/3.2.6/building/verification/validate-with-mock-fixtures"},{"title":"Pair-program with Addie (Socket Mode)","sidebarTitle":"Pair with Addie","href":"/dist/docs/3.2.6/building/verification/addie-socket-mode"},{"title":"Auth Graders","sidebarTitle":"Auth Graders","href":"/dist/docs/3.2.6/building/verification/grading"},{"title":"Get Test-Ready","sidebarTitle":"Get Test-Ready","href":"/dist/docs/3.2.6/building/verification/get-test-ready"},{"title":"AAO Verified","sidebarTitle":"AAO Verified","href":"/dist/docs/3.2.6/building/verification/aao-verified"}]},{"group":"Operating","expanded":false,"pages":[{"title":"Operating an Agent","sidebarTitle":"Operating an Agent","href":"/dist/docs/3.2.6/building/operating/operating-an-agent"},{"title":"Orchestrator Design","href":"/dist/docs/3.2.6/building/operating/orchestrator-design"},{"title":"Transport Error Mapping","href":"/dist/docs/3.2.6/building/operating/transport-errors"},{"title":"Making your inventory available to AI agents","sidebarTitle":"Seller integration","href":"/dist/docs/3.2.6/building/operating/seller-integration"},{"title":"Storyboard troubleshooting","href":"/dist/docs/3.2.6/building/operating/storyboard-troubleshooting"},{"title":"Support recovery runbooks","sidebarTitle":"Support recovery","href":"/dist/docs/3.2.6/building/operating/support-recovery-runbooks"}]},{"group":"Accounts","expanded":false,"pages":[{"title":"Accounts Protocol","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/accounts/overview"},{"title":"Set up your buyer agent with a seller","sidebarTitle":"Buyer agent setup","href":"/dist/docs/3.2.6/accounts/principal-registration-walkthrough"},{"title":"Provision a seller-mediated account","sidebarTitle":"Provision an account","href":"/dist/docs/3.2.6/accounts/provisioning-walkthrough"},{"title":"sync_accounts","href":"/dist/docs/3.2.6/accounts/tasks/sync_accounts"},{"title":"list_accounts","href":"/dist/docs/3.2.6/accounts/tasks/list_accounts"},{"title":"report_usage","href":"/dist/docs/3.2.6/accounts/tasks/report_usage"},{"title":"sync_governance","href":"/dist/docs/3.2.6/accounts/tasks/sync_governance"},{"title":"get_account_financials","href":"/dist/docs/3.2.6/accounts/tasks/get_account_financials"},{"title":"list_account_changes","href":"/dist/docs/3.2.6/accounts/tasks/list_account_changes"}]}]},{"group":"Protocol","expanded":false,"pages":[{"group":"Media Buy","expanded":false,"pages":[{"title":"Media buy protocol","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/media-buy/index"},{"title":"Commerce Media","href":"/dist/docs/3.2.6/media-buy/commerce-media"},{"group":"Concepts","pages":[{"title":"Product discovery and planning","sidebarTitle":"Discovery and planning","href":"/dist/docs/3.2.6/media-buy/product-discovery/index"},{"title":"Brief expectations","href":"/dist/docs/3.2.6/media-buy/product-discovery/brief-expectations"},{"title":"Example campaign discovery requests","href":"/dist/docs/3.2.6/media-buy/product-discovery/example-briefs"},{"title":"Media Products","href":"/dist/docs/3.2.6/media-buy/product-discovery/media-products"},{"title":"Collections and installments","href":"/dist/docs/3.2.6/media-buy/product-discovery/collections-and-installments"},{"title":"Proposal negotiation","href":"/dist/docs/3.2.6/media-buy/product-discovery/proposal-negotiation"},{"title":"MediaBuy lifecycle","href":"/dist/docs/3.2.6/media-buy/media-buys/index"},{"title":"Media Buy Lifecycle Flow","href":"/dist/docs/3.2.6/media-buy/media-buys/lifecycle"},{"title":"Indicators and Warnings","href":"/dist/docs/3.2.6/media-buy/media-buys/indicators"},{"title":"Optimization \u0026 Reporting","href":"/dist/docs/3.2.6/media-buy/media-buys/optimization-reporting"},{"title":"Policy compliance","href":"/dist/docs/3.2.6/media-buy/media-buys/policy-compliance"},{"title":"Creative Lifecycle","href":"/dist/docs/3.2.6/media-buy/creatives/index"},{"title":"Conversion Tracking \u0026 Optimization Goals","href":"/dist/docs/3.2.6/media-buy/conversion-tracking/index"},{"title":"Pricing Models","href":"/dist/docs/3.2.6/media-buy/advanced-topics/pricing-models"},{"title":"Targeting","href":"/dist/docs/3.2.6/media-buy/advanced-topics/targeting"},{"title":"Accountability","sidebarTitle":"Accountability","href":"/dist/docs/3.2.6/media-buy/advanced-topics/accountability"},{"title":"Billing Authority","sidebarTitle":"Billing Authority","href":"/dist/docs/3.2.6/media-buy/advanced-topics/billing-authority"},{"group":"3.x compatibility","expanded":false,"pages":[{"title":"Refinement","href":"/dist/docs/3.2.6/media-buy/product-discovery/refinement"}]}]},{"group":"Building","pages":[{"title":"Capability Discovery","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/media-buy/capability-discovery/index"},{"title":"Implementing Standard Format Support","href":"/dist/docs/3.2.6/media-buy/capability-discovery/implementing-standard-formats"},{"title":"Reliable Reporting: implementing reporting.core","href":"/dist/docs/3.2.6/media-buy/reporting-core-implementation-guide"},{"title":"Agentic eXecution Engine (AXE)","href":"/dist/docs/3.2.6/media-buy/advanced-topics/agentic-execution-engine"},{"title":"Accounts \u0026 Security","href":"/dist/docs/3.2.6/media-buy/advanced-topics/accounts-and-security"},{"title":"Sandbox mode","href":"/dist/docs/3.2.6/media-buy/advanced-topics/sandbox"}]},{"group":"Reference","expanded":false,"pages":[{"title":"Media Buy Specification","sidebarTitle":"Specification","href":"/dist/docs/3.2.6/media-buy/specification"},{"title":"Task Reference","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/media-buy/task-reference/index"},{"title":"list_products","href":"/dist/docs/3.2.6/media-buy/task-reference/list_products"},{"title":"request_proposals","href":"/dist/docs/3.2.6/media-buy/task-reference/request_proposals"},{"title":"refine_proposals","href":"/dist/docs/3.2.6/media-buy/task-reference/refine_proposals"},{"title":"decline_proposals","href":"/dist/docs/3.2.6/media-buy/task-reference/decline_proposals"},{"title":"buy_products","href":"/dist/docs/3.2.6/media-buy/task-reference/buy_products"},{"title":"accept_proposal","href":"/dist/docs/3.2.6/media-buy/task-reference/accept_proposal"},{"title":"control_media_buy","href":"/dist/docs/3.2.6/media-buy/task-reference/control_media_buy"},{"title":"sync_catalogs","href":"/dist/docs/3.2.6/media-buy/task-reference/sync_catalogs"},{"title":"get_media_buys","href":"/dist/docs/3.2.6/media-buy/task-reference/get_media_buys"},{"title":"get_media_buy_delivery","href":"/dist/docs/3.2.6/media-buy/task-reference/get_media_buy_delivery"},{"title":"get_reporting_status","href":"/dist/docs/3.2.6/media-buy/task-reference/get_reporting_status"},{"title":"sync_reporting_status","href":"/dist/docs/3.2.6/media-buy/task-reference/sync_reporting_status"},{"title":"sync_reporting_receipts","href":"/dist/docs/3.2.6/media-buy/task-reference/sync_reporting_receipts"},{"title":"provide_performance_feedback","href":"/dist/docs/3.2.6/media-buy/task-reference/provide_performance_feedback"},{"title":"sync_event_sources","href":"/dist/docs/3.2.6/media-buy/task-reference/sync_event_sources"},{"title":"log_event","href":"/dist/docs/3.2.6/media-buy/task-reference/log_event"},{"title":"sync_audiences","href":"/dist/docs/3.2.6/media-buy/task-reference/sync_audiences"},{"group":"3.x compatibility","expanded":false,"pages":[{"title":"get_products","href":"/dist/docs/3.2.6/media-buy/task-reference/get_products"},{"title":"create_media_buy","href":"/dist/docs/3.2.6/media-buy/task-reference/create_media_buy"},{"title":"update_media_buy","href":"/dist/docs/3.2.6/media-buy/task-reference/update_media_buy"}]}]}]},{"group":"Creative","expanded":false,"pages":[{"title":"Creative protocol","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/creative/index"},{"group":"Concepts","pages":[{"title":"Key concepts","href":"/dist/docs/3.2.6/creative/key-concepts"},{"title":"AI creative for campaign teams","href":"/dist/docs/3.2.6/creative/ai-creative-overview"},{"title":"Generative Creative","href":"/dist/docs/3.2.6/creative/generative-creative"},{"title":"Creative libraries and concepts","href":"/dist/docs/3.2.6/creative/creative-libraries"},{"title":"Catalogs","href":"/dist/docs/3.2.6/creative/catalogs"},{"title":"Catalog item schemas","href":"/dist/docs/3.2.6/creative/catalog-schemas"}]},{"group":"Building Creative Agents","pages":[{"title":"Implementing Creative Agents","href":"/dist/docs/3.2.6/creative/implementing-creative-agents"},{"title":"Creative Capabilities on Sales Agents","href":"/dist/docs/3.2.6/creative/sales-agent-creative-capabilities"},{"title":"Multi-Agent Creative Orchestration","href":"/dist/docs/3.2.6/creative/multi-agent-orchestration"},{"title":"Creative Manifests","href":"/dist/docs/3.2.6/creative/creative-manifests"},{"title":"Private assets","href":"/dist/docs/3.2.6/creative/private-assets"},{"title":"Buyer-attached inputs to build_creative","sidebarTitle":"Buyer-attached inputs","href":"/dist/docs/3.2.6/creative/buyer-attached-inputs"}]},{"group":"Formats and Assets","pages":[{"title":"Canonical Formats","href":"/dist/docs/3.2.6/creative/canonical-formats"},{"title":"Migration to Canonical Formats","href":"/dist/docs/3.2.6/creative/canonical-formats-migration"},{"title":"Creative Formats","href":"/dist/docs/3.2.6/creative/formats"},{"title":"Asset Types","href":"/dist/docs/3.2.6/creative/asset-types"},{"title":"Creative representation sets","href":"/dist/docs/3.2.6/creative/representation-sets"},{"title":"Published Post Reference Creatives","href":"/dist/docs/3.2.6/creative/published-post-reference-creatives"},{"title":"Sponsored Placement adapter contracts","href":"/dist/docs/3.2.6/creative/sponsored-placement-adapter-contracts"},{"title":"Migrating Template Format IDs","href":"/dist/docs/3.2.6/creative/template-format-ids"},{"title":"Universal Macros","href":"/dist/docs/3.2.6/creative/universal-macros"},{"title":"Tracker execution contracts","href":"/dist/docs/3.2.6/creative/tracker-execution-contracts"}]},{"group":"Channel Guides","pages":[{"title":"Video Ads","href":"/dist/docs/3.2.6/creative/channels/video"},{"title":"Connected TV","href":"/dist/docs/3.2.6/creative/channels/ctv"},{"title":"CTV Experience Profiles","href":"/dist/docs/3.2.6/creative/ctv-experiences"},{"title":"Broadcast Creative","href":"/dist/docs/3.2.6/creative/channels/broadcast"},{"title":"Display Ads","href":"/dist/docs/3.2.6/creative/channels/display"},{"title":"Audio Ads","href":"/dist/docs/3.2.6/creative/channels/audio"},{"title":"Radio creative","href":"/dist/docs/3.2.6/creative/channels/radio"},{"title":"Digital Out-of-Home","href":"/dist/docs/3.2.6/creative/channels/dooh"},{"title":"Out-of-Home (Static)","href":"/dist/docs/3.2.6/creative/channels/ooh"},{"title":"Print Creative","href":"/dist/docs/3.2.6/creative/channels/print"},{"title":"Carousel Ads","href":"/dist/docs/3.2.6/creative/channels/carousels"},{"title":"Social and Native Ads","href":"/dist/docs/3.2.6/creative/channels/social-native"}]},{"group":"Compliance","pages":[{"title":"Accessibility","href":"/dist/docs/3.2.6/creative/accessibility"},{"title":"AI provenance and disclosure","sidebarTitle":"Provenance","href":"/dist/docs/3.2.6/creative/provenance"}]},{"group":"Reference","expanded":false,"pages":[{"title":"Creative Specification","sidebarTitle":"Specification","href":"/dist/docs/3.2.6/creative/specification"},{"title":"build_creative","href":"/dist/docs/3.2.6/creative/task-reference/build_creative"},{"title":"preview_creative","href":"/dist/docs/3.2.6/creative/task-reference/preview_creative"},{"title":"preview_creative (Advanced)","href":"/dist/docs/3.2.6/creative/task-reference/preview_creative-advanced"},{"title":"list_creative_formats (deprecated)","href":"/dist/docs/3.2.6/creative/task-reference/list_creative_formats"},{"title":"list_transformers","href":"/dist/docs/3.2.6/creative/task-reference/list_transformers"},{"title":"list_creatives","href":"/dist/docs/3.2.6/creative/task-reference/list_creatives"},{"title":"sync_creatives","href":"/dist/docs/3.2.6/creative/task-reference/sync_creatives"},{"title":"get_creative_delivery","href":"/dist/docs/3.2.6/creative/task-reference/get_creative_delivery"}]}]},{"group":"Governance","expanded":false,"pages":[{"title":"Governance protocol","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/governance/overview"},{"title":"RFC process","href":"/dist/docs/3.2.6/governance/rfc-process"},{"title":"Embedded human judgment","sidebarTitle":"Embedded human judgment","href":"/dist/docs/3.2.6/governance/embedded-human-judgment"},{"title":"Sell-side governance boundaries","sidebarTitle":"Sell-side boundaries","href":"/dist/docs/3.2.6/governance/sell-side-governance"},{"title":"Policy Registry","sidebarTitle":"Policy Registry","href":"/dist/docs/3.2.6/governance/policy-registry"},{"title":"Policy Registry: Sync and versioning","sidebarTitle":"Sync and versioning","href":"/dist/docs/3.2.6/governance/policy-registry-sync"},{"title":"Policy Attribution","sidebarTitle":"Policy Attribution","href":"/dist/docs/3.2.6/governance/policy-attribution"},{"title":"Annex III \u0026 Article 22 obligations","sidebarTitle":"Annex III \u0026 Art 22","href":"/dist/docs/3.2.6/governance/annex-iii-obligations"},{"title":"Working group charter","sidebarTitle":"Working group charter","href":"/dist/docs/3.2.6/governance/working-group-charter"},{"group":"Property Governance","pages":[{"title":"Property Governance","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/governance/property/index"},{"title":"adagents.json Tech Spec","href":"/dist/docs/3.2.6/governance/property/adagents"},{"title":"Managed Network Deployment","href":"/dist/docs/3.2.6/governance/property/managed-networks"},{"title":"Understanding Authorization","href":"/dist/docs/3.2.6/governance/property/authorized-properties"},{"title":"Property Governance Specification","sidebarTitle":"Specification","href":"/dist/docs/3.2.6/governance/property/specification"},{"group":"Tasks","pages":[{"title":"Property Governance Tasks","sidebarTitle":"Task Reference","href":"/dist/docs/3.2.6/governance/property/tasks/index"},{"title":"Property List Management","href":"/dist/docs/3.2.6/governance/property/tasks/property_lists"},{"title":"validate_property_delivery","href":"/dist/docs/3.2.6/governance/property/tasks/validate_property_delivery"}]}]},{"group":"Collection Governance","pages":[{"title":"Collection Governance","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/governance/collection/index"},{"title":"Collection List Management","href":"/dist/docs/3.2.6/governance/collection/tasks/collection_lists"}]},{"group":"Content Standards","pages":[{"title":"Content Standards","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/governance/content-standards/index"},{"title":"Content Artifacts","sidebarTitle":"Artifacts","href":"/dist/docs/3.2.6/governance/content-standards/artifacts"},{"title":"Content Standards Implementation","sidebarTitle":"Implementation Guide","href":"/dist/docs/3.2.6/governance/content-standards/implementation-guide"},{"group":"Tasks","pages":[{"title":"list_content_standards","href":"/dist/docs/3.2.6/governance/content-standards/tasks/list_content_standards"},{"title":"get_content_standards","href":"/dist/docs/3.2.6/governance/content-standards/tasks/get_content_standards"},{"title":"create_content_standards","href":"/dist/docs/3.2.6/governance/content-standards/tasks/create_content_standards"},{"title":"update_content_standards","href":"/dist/docs/3.2.6/governance/content-standards/tasks/update_content_standards"},{"title":"calibrate_content","href":"/dist/docs/3.2.6/governance/content-standards/tasks/calibrate_content"},{"title":"get_media_buy_artifacts","href":"/dist/docs/3.2.6/governance/content-standards/tasks/get_media_buy_artifacts"},{"title":"validate_content_delivery","href":"/dist/docs/3.2.6/governance/content-standards/tasks/validate_content_delivery"}]}]},{"group":"Creative Governance","pages":[{"title":"Creative Governance","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/governance/creative/index"},{"title":"get_creative_features","href":"/dist/docs/3.2.6/governance/creative/get_creative_features"},{"title":"Provenance verification","sidebarTitle":"Provenance verification","href":"/dist/docs/3.2.6/governance/creative/provenance-verification"},{"title":"Policy-backed creative rejections","sidebarTitle":"Policy-backed rejections","href":"/dist/docs/3.2.6/governance/creative/policy-backed-rejections"}]},{"group":"Campaign Governance","pages":[{"title":"Campaign Governance","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/governance/campaign/index"},{"title":"Buyer and Seller Responsibilities","sidebarTitle":"Responsibilities","href":"/dist/docs/3.2.6/governance/campaign/responsibilities"},{"title":"Safety Model","sidebarTitle":"Safety Model","href":"/dist/docs/3.2.6/governance/campaign/safety-model"},{"title":"Specification","sidebarTitle":"Specification","href":"/dist/docs/3.2.6/governance/campaign/specification"},{"title":"Audit trail: internal vs shareable views","sidebarTitle":"Audit trail","href":"/dist/docs/3.2.6/governance/campaign/audit-trail"},{"group":"Tasks","pages":[{"title":"Task reference","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/governance/campaign/tasks/index"},{"title":"sync_plans","href":"/dist/docs/3.2.6/governance/campaign/tasks/sync_plans"},{"title":"report_plan_outcome","href":"/dist/docs/3.2.6/governance/campaign/tasks/report_plan_outcome"},{"title":"report_plan_adjustment","href":"/dist/docs/3.2.6/governance/campaign/tasks/report_plan_adjustment"},{"title":"check_governance","href":"/dist/docs/3.2.6/governance/campaign/tasks/check_governance"},{"title":"get_plan_audit_logs","href":"/dist/docs/3.2.6/governance/campaign/tasks/get_plan_audit_logs"}]}]}]},{"group":"Sponsored Intelligence","expanded":false,"pages":[{"title":"Sponsored Intelligence","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/sponsored-intelligence/overview"},{"title":"Monetizing AI surfaces","sidebarTitle":"Monetizing AI","href":"/dist/docs/3.2.6/sponsored-intelligence/monetizing-ai"},{"group":"Concepts","pages":[{"title":"Product spectrum","sidebarTitle":"Product spectrum","href":"/dist/docs/3.2.6/sponsored-intelligence/product-spectrum"},{"title":"Ad networks","sidebarTitle":"Ad networks","href":"/dist/docs/3.2.6/sponsored-intelligence/networks"},{"title":"End-to-end workflow","sidebarTitle":"Workflow","href":"/dist/docs/3.2.6/sponsored-intelligence/workflow"},{"title":"Measurement","sidebarTitle":"Measurement","href":"/dist/docs/3.2.6/sponsored-intelligence/measurement"}]},{"group":"SI Chat Protocol","pages":[{"title":"SI Chat Protocol","sidebarTitle":"SI Chat Protocol","href":"/dist/docs/3.2.6/sponsored-intelligence/si-chat-protocol"},{"title":"Implementing SI Agents","href":"/dist/docs/3.2.6/sponsored-intelligence/implementing-si-agents"},{"title":"Implementing SI Hosts","href":"/dist/docs/3.2.6/sponsored-intelligence/implementing-si-hosts"}]},{"group":"Reference","expanded":false,"pages":[{"title":"Sponsored Intelligence Specification","sidebarTitle":"Specification","href":"/dist/docs/3.2.6/sponsored-intelligence/specification"},{"title":"Sponsored Intelligence Tasks","sidebarTitle":"Task Reference","href":"/dist/docs/3.2.6/sponsored-intelligence/tasks/index"},{"title":"si_get_offering","href":"/dist/docs/3.2.6/sponsored-intelligence/tasks/si_get_offering"},{"title":"si_initiate_session","href":"/dist/docs/3.2.6/sponsored-intelligence/tasks/si_initiate_session"},{"title":"si_send_message","href":"/dist/docs/3.2.6/sponsored-intelligence/tasks/si_send_message"},{"title":"si_terminate_session","href":"/dist/docs/3.2.6/sponsored-intelligence/tasks/si_terminate_session"}]}]},{"group":"Brand","expanded":false,"pages":[{"title":"Brand protocol","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/brand-protocol/index"},{"title":"Brand protocol","sidebarTitle":"Key concepts","href":"/dist/docs/3.2.6/brand-protocol/key-concepts"},{"title":"Rights licensing walkthrough","sidebarTitle":"Rights licensing","href":"/dist/docs/3.2.6/brand-protocol/walkthrough-rights-licensing"},{"title":"For advertisers","href":"/dist/docs/3.2.6/brand-protocol/for-advertisers"},{"title":"For talent and rights holders","href":"/dist/docs/3.2.6/brand-protocol/for-rights-holders"},{"title":"Seller setup","sidebarTitle":"For sellers","href":"/dist/docs/3.2.6/brand-protocol/seller-setup"},{"title":"brand.json Specification","href":"/dist/docs/3.2.6/brand-protocol/brand-json"},{"title":"Building a brand agent","href":"/dist/docs/3.2.6/brand-protocol/building-a-brand-agent"},{"title":"UI guidance for rejected claims","href":"/dist/docs/3.2.6/brand-protocol/ui-guidance"},{"group":"Tasks","pages":[{"title":"search_brands","href":"/dist/docs/3.2.6/brand-protocol/tasks/search_brands"},{"title":"get_brand_identity","href":"/dist/docs/3.2.6/brand-protocol/tasks/get_brand_identity"},{"title":"verify_brand_claim","href":"/dist/docs/3.2.6/brand-protocol/tasks/verify_brand_claim"},{"title":"verify_brand_claims","href":"/dist/docs/3.2.6/brand-protocol/tasks/verify_brand_claims"},{"title":"get_rights","href":"/dist/docs/3.2.6/brand-protocol/tasks/get_rights"},{"title":"acquire_rights","href":"/dist/docs/3.2.6/brand-protocol/tasks/acquire_rights"},{"title":"update_rights","href":"/dist/docs/3.2.6/brand-protocol/tasks/update_rights"}]}]},{"group":"Signals","expanded":false,"pages":[{"title":"Signals protocol","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/signals/overview"},{"title":"Key concepts","href":"/dist/docs/3.2.6/signals/key-concepts"},{"title":"Signals ecosystem","href":"/dist/docs/3.2.6/signals/ecosystem"},{"title":"Data Provider Guide","sidebarTitle":"Data Providers","href":"/dist/docs/3.2.6/signals/data-providers"},{"group":"Reference","expanded":false,"pages":[{"title":"Signals Specification","sidebarTitle":"Specification","href":"/dist/docs/3.2.6/signals/specification"},{"title":"get_signals","href":"/dist/docs/3.2.6/signals/tasks/get_signals"},{"title":"activate_signal","href":"/dist/docs/3.2.6/signals/tasks/activate_signal"}]}]},{"group":"Trusted Match","expanded":false,"pages":[{"title":"Trusted Match Protocol","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/trusted-match/index"},{"title":"How demand reaches AI assistants","sidebarTitle":"AI mediation","href":"/dist/docs/3.2.6/trusted-match/ai-mediation"},{"title":"TMP for Buyer Agents","sidebarTitle":"Buyer Guide","href":"/dist/docs/3.2.6/trusted-match/buyer-guide"},{"title":"The Execution Gap","href":"/dist/docs/3.2.6/trusted-match/execution-gap"},{"title":"Context Match and Identity Match","href":"/dist/docs/3.2.6/trusted-match/context-and-identity"},{"title":"TMP Specification","href":"/dist/docs/3.2.6/trusted-match/specification"},{"title":"The TMP Router","href":"/dist/docs/3.2.6/trusted-match/router-architecture"},{"title":"Identity Match Frequency-Cap Data Flow","sidebarTitle":"Frequency-Cap Data Flow","href":"/dist/docs/3.2.6/trusted-match/identity-match-implementation"},{"title":"Impression Tracker Implementation Reference","sidebarTitle":"Impression Tracker Reference","href":"/dist/docs/3.2.6/trusted-match/impression-tracker-implementation"},{"title":"Privacy Architecture","href":"/dist/docs/3.2.6/trusted-match/privacy-architecture"},{"title":"Data Protection Roles","href":"/dist/docs/3.2.6/trusted-match/data-protection-roles"},{"title":"Migrating from AXE to TMP","sidebarTitle":"AXE Migration","href":"/dist/docs/3.2.6/trusted-match/migration-from-axe"},{"group":"Surface Guides","pages":[{"title":"TMP for Web Publishers","href":"/dist/docs/3.2.6/trusted-match/surfaces/web"},{"title":"TMP for CTV","href":"/dist/docs/3.2.6/trusted-match/surfaces/ctv"},{"title":"TMP for Mobile Apps","href":"/dist/docs/3.2.6/trusted-match/surfaces/mobile"},{"title":"TMP for Retail Media","href":"/dist/docs/3.2.6/trusted-match/surfaces/retail-media"},{"title":"TMP for AI Assistants","href":"/dist/docs/3.2.6/trusted-match/surfaces/ai-assistants"}]}]}]},{"group":"Using AAO","pages":[{"title":"Connect Addie to your AI client","href":"/dist/docs/3.2.6/aao/connect-addie"},{"title":"AAO for Members","href":"/dist/docs/3.2.6/aao/users"},{"title":"AAO for Org Admins","href":"/dist/docs/3.2.6/aao/org-admins"},{"title":"Addie Tool Reference","href":"/dist/docs/3.2.6/aao/addie-tools"},{"title":"AAO Directory API — Agent ↔ Publisher Inverse Lookup","href":"/dist/docs/3.2.6/aao/directory-api"}]},{"group":"FAQ","pages":[{"title":"Frequently asked questions","sidebarTitle":"FAQ","href":"/dist/docs/3.2.6/faq"}]},{"group":"Trust \u0026 Security","expanded":false,"pages":[{"title":"Trust \u0026 Security","sidebarTitle":"Trust \u0026 Security","href":"/dist/docs/3.2.6/trust"},{"title":"Seller verification","sidebarTitle":"Seller verification","href":"/dist/docs/3.2.6/verification/overview"},{"title":"AI Disclosure","href":"/dist/docs/3.2.6/ai-disclosure"},{"title":"Privacy Considerations","sidebarTitle":"Privacy Considerations","href":"/dist/docs/3.2.6/reference/privacy-considerations"},{"title":"Protocol Boundaries and Known Limitations","sidebarTitle":"Boundaries \u0026 Limitations","href":"/dist/docs/3.2.6/reference/known-limitations"}]},{"group":"Reference","expanded":false,"pages":[{"group":"Registry API","pages":[{"title":"Registry API","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/registry/index"},{"title":"Registering an agent","sidebarTitle":"Registering an agent","href":"/dist/docs/3.2.6/registry/registering-an-agent"},{"title":"Maintaining your agent","sidebarTitle":"Maintaining your agent","href":"/dist/docs/3.2.6/registry/maintaining-your-agent"},{"group":"Search","pages":[{"title":"API discovery","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api","href":"/dist/docs/3.2.6/registry/api-reference/search/api-discovery"},{"title":"Search","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/search","href":"/dist/docs/3.2.6/registry/api-reference/search/search"},{"title":"Manifest reference lookup","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/manifest-refs/lookup","href":"/dist/docs/3.2.6/registry/api-reference/search/manifest-reference-lookup"}]},{"group":"Brand Resolution","pages":[{"title":"Resolve brand","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/brands/resolve","href":"/dist/docs/3.2.6/registry/api-reference/brand-resolution/resolve-brand"},{"title":"Bulk resolve brands","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/brands/resolve/bulk","href":"/dist/docs/3.2.6/registry/api-reference/brand-resolution/bulk-resolve-brands"},{"title":"Get brand.json","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/brands/brand-json","href":"/dist/docs/3.2.6/registry/api-reference/brand-resolution/get-brandjson"},{"title":"Save brand","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/brands/save","href":"/dist/docs/3.2.6/registry/api-reference/brand-resolution/save-brand"},{"title":"List brands","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/brands/registry","href":"/dist/docs/3.2.6/registry/api-reference/brand-resolution/list-brands"},{"title":"Brand activity history","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/brands/history","href":"/dist/docs/3.2.6/registry/api-reference/brand-resolution/brand-activity-history"},{"title":"Enrich brand","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/brands/enrich","href":"/dist/docs/3.2.6/registry/api-reference/brand-resolution/enrich-brand"},{"title":"Find brands by name","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/brands/find","href":"/dist/docs/3.2.6/registry/api-reference/brand-resolution/find-brands-by-name"},{"title":"Set up a hosted brand.json","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/brands/setup-my-brand","href":"/dist/docs/3.2.6/registry/api-reference/brand-resolution/set-up-a-hosted-brandjson"}]},{"group":"Property Resolution","pages":[{"title":"Property activity history","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/properties/history","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/property-activity-history"},{"title":"Resolve property","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/properties/resolve","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/resolve-property"},{"title":"Bulk resolve properties","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/properties/resolve/bulk","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/bulk-resolve-properties"},{"title":"List properties","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/properties/registry","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/list-properties"},{"title":"Validate adagents.json","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/properties/validate","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/validate-adagentsjson"},{"title":"Save property","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/properties/save","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/save-property"},{"title":"Claim a domain for bind-on-verify","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/properties/hosted/{domain}/claim","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/claim-a-domain-for-bind-on-verify"},{"title":"Verify AAO-hosted publisher origin","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/properties/hosted/{domain}/verify-origin","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/verify-aao-hosted-publisher-origin"},{"title":"Check property list","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/properties/check","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/check-property-list"},{"title":"Get property check report","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/properties/check/{reportId}","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/get-property-check-report"},{"title":"Bulk property identifier check","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/properties/check/bulk","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/bulk-property-identifier-check"},{"title":"Get bulk check report","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/properties/check/bulk/{reportId}","href":"/dist/docs/3.2.6/registry/api-reference/property-resolution/get-bulk-check-report"}]},{"group":"Agent Discovery","pages":[{"title":"List agents","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents","href":"/dist/docs/3.2.6/registry/api-reference/agent-discovery/list-agents"},{"title":"List publishers","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/publishers","href":"/dist/docs/3.2.6/registry/api-reference/agent-discovery/list-publishers"},{"title":"Registry statistics","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/stats","href":"/dist/docs/3.2.6/registry/api-reference/agent-discovery/registry-statistics"},{"title":"Search agent inventory profiles","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/search","href":"/dist/docs/3.2.6/registry/api-reference/agent-discovery/search-agent-inventory-profiles"},{"title":"Request domain re-crawl","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/crawl-request","href":"/dist/docs/3.2.6/registry/api-reference/agent-discovery/request-domain-re-crawl"},{"title":"Get publisher crawl request status","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/crawl-request/{crawlRequestId}","href":"/dist/docs/3.2.6/registry/api-reference/agent-discovery/get-publisher-crawl-request-status"},{"title":"Request manager fan-out re-validation","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/manager-revalidation-request","href":"/dist/docs/3.2.6/registry/api-reference/agent-discovery/request-manager-fan-out-re-validation"}]},{"group":"Authorization Lookups","pages":[{"title":"Domain lookup (deprecated)","deprecated":true,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/lookup/domain/{domain}","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/domain-lookup-deprecated"},{"title":"Property identifier lookup","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/lookup/property","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/property-identifier-lookup"},{"title":"Agent domain lookup","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/lookup/agent/{agentUrl}/domains","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/agent-domain-lookup"},{"title":"AAO directory inverse-lookup","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/v1/agents/{encodedUrl}/publishers","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/aao-directory-inverse-lookup"},{"title":"AAO directory inverse-lookup","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /v1/agents/{encodedUrl}/publishers","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/aao-directory-inverse-lookup-1"},{"title":"Operator lookup","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/operator","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/operator-lookup"},{"title":"Publisher lookup","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/publisher","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/publisher-lookup"},{"title":"Revalidate publisher adagents.json","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/publisher/{domain}/adagents/revalidate","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/revalidate-publisher-adagentsjson"},{"title":"Per-agent authorization rollup","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/publisher/authorization","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/per-agent-authorization-rollup"},{"title":"Validate product property coverage","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/validate/product-authorization","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/validate-product-property-coverage"},{"title":"Verify an owner-sold supply path","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/verify/supply-path","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/verify-an-owner-sold-supply-path"},{"title":"Expand product identifiers","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/expand/product-identifiers","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/expand-product-identifiers"},{"title":"Property authorization check","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/validate/property-authorization","href":"/dist/docs/3.2.6/registry/api-reference/authorization-lookups/property-authorization-check"}]},{"group":"Brand Discovery","pages":[{"title":"Force a synchronous brand.json crawl","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/brand/{domain}/force-crawl","href":"/dist/docs/3.2.6/registry/api-reference/brand-discovery/force-a-synchronous-brandjson-crawl"},{"title":"Request brand.json re-crawl","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/brand-crawl-request","href":"/dist/docs/3.2.6/registry/api-reference/brand-discovery/request-brandjson-re-crawl"}]},{"group":"Validation Tools","pages":[{"title":"Validate adagents.json","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/adagents/validate","href":"/dist/docs/3.2.6/registry/api-reference/validation-tools/validate-adagentsjson"},{"title":"Generate adagents.json","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/adagents/create","href":"/dist/docs/3.2.6/registry/api-reference/validation-tools/generate-adagentsjson"}]},{"group":"Community Mirrors","pages":[{"title":"List community mirror proposals","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/mirror-proposals","href":"/dist/docs/3.2.6/registry/api-reference/community-mirrors/list-community-mirror-proposals"},{"title":"Get community mirror proposal","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/mirror-proposals/{id}","href":"/dist/docs/3.2.6/registry/api-reference/community-mirrors/get-community-mirror-proposal"},{"title":"Approve community mirror proposal","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/mirror-proposals/{id}/approve","href":"/dist/docs/3.2.6/registry/api-reference/community-mirrors/approve-community-mirror-proposal"},{"title":"Reject community mirror proposal","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/mirror-proposals/{id}/reject","href":"/dist/docs/3.2.6/registry/api-reference/community-mirrors/reject-community-mirror-proposal"},{"title":"List community mirrors","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/mirrors","href":"/dist/docs/3.2.6/registry/api-reference/community-mirrors/list-community-mirrors"},{"title":"Get community mirror","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/mirrors/{platform}","href":"/dist/docs/3.2.6/registry/api-reference/community-mirrors/get-community-mirror"},{"title":"Publish or propose community mirror","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml put /api/registry/mirrors/{platform}","href":"/dist/docs/3.2.6/registry/api-reference/community-mirrors/publish-or-propose-community-mirror"},{"title":"Delete community mirror","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml delete /api/registry/mirrors/{platform}","href":"/dist/docs/3.2.6/registry/api-reference/community-mirrors/delete-community-mirror"}]},{"group":"Agent Probing","pages":[{"title":"Discover agent","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/public/discover-agent","href":"/dist/docs/3.2.6/registry/api-reference/agent-probing/discover-agent"},{"title":"Get creative-agent format capabilities","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/public/agent-formats","href":"/dist/docs/3.2.6/registry/api-reference/agent-probing/get-creative-agent-format-capabilities"},{"title":"Get agent publisher properties","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/public/agent-publishers","href":"/dist/docs/3.2.6/registry/api-reference/agent-probing/get-agent-publisher-properties"},{"title":"Get agent products","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/public/agent-products","href":"/dist/docs/3.2.6/registry/api-reference/agent-probing/get-agent-products"},{"title":"Validate publisher","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/public/validate-publisher","href":"/dist/docs/3.2.6/registry/api-reference/agent-probing/validate-publisher"}]},{"group":"Policy Registry","pages":[{"title":"List policies","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/policies/registry","href":"/dist/docs/3.2.6/registry/api-reference/policy-registry/list-policies"},{"title":"Resolve policy","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/policies/resolve","href":"/dist/docs/3.2.6/registry/api-reference/policy-registry/resolve-policy"},{"title":"Bulk resolve policies","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/policies/resolve/bulk","href":"/dist/docs/3.2.6/registry/api-reference/policy-registry/bulk-resolve-policies"},{"title":"Policy revision history","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/policies/history","href":"/dist/docs/3.2.6/registry/api-reference/policy-registry/policy-revision-history"},{"title":"Save policy","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/policies/save","href":"/dist/docs/3.2.6/registry/api-reference/policy-registry/save-policy"}]},{"group":"Change Feed","pages":[{"title":"Registry change feed","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/feed","href":"/dist/docs/3.2.6/registry/api-reference/change-feed/registry-change-feed"},{"title":"Registry change feed stream","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/feed/stream","href":"/dist/docs/3.2.6/registry/api-reference/change-feed/registry-change-feed-stream"},{"title":"Per-agent authorization pull","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/authorizations","href":"/dist/docs/3.2.6/registry/api-reference/change-feed/per-agent-authorization-pull"},{"title":"Bootstrap snapshot for inline verifiers","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/authorizations/snapshot","href":"/dist/docs/3.2.6/registry/api-reference/change-feed/bootstrap-snapshot-for-inline-verifiers"}]},{"group":"Agent Compliance","pages":[{"title":"Get agent compliance detail","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/compliance","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-agent-compliance-detail"},{"title":"Select an exact badge grading profile","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml put /api/registry/agents/{encodedUrl}/grading-profile","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/select-an-exact-badge-grading-profile"},{"title":"AAO public key set","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/.well-known/jwks.json","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/aao-public-key-set"},{"title":"Get agent AgenticAdvertising.org Verified status","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/verification","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-agent-agenticadvertisingorg-verified-status"},{"title":"Get agent verification badge SVG","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/badge/{role}.svg","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-agent-verification-badge-svg"},{"title":"Get embeddable badge code","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/badge/{role}/embed","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-embeddable-badge-code"},{"title":"Get version-pinned agent verification badge SVG","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/badge/{role}/{version}.svg","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-version-pinned-agent-verification-badge-svg"},{"title":"Get version-pinned embeddable badge code","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/badge/{role}/{version}/embed","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-version-pinned-embeddable-badge-code"},{"title":"Get agent storyboard status","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/storyboard-status","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-agent-storyboard-status"},{"title":"Bulk storyboard status","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/agents/storyboard-status","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/bulk-storyboard-status"},{"title":"Get agent compliance history","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/compliance/history","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-agent-compliance-history"},{"title":"Update agent lifecycle stage","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml put /api/registry/agents/{encodedUrl}/lifecycle","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/update-agent-lifecycle-stage"},{"title":"Update compliance opt-out","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml put /api/registry/agents/{encodedUrl}/compliance/opt-out","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/update-compliance-opt-out"},{"title":"Get monitoring settings","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/monitoring/settings","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-monitoring-settings"},{"title":"Pause or resume monitoring","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml put /api/registry/agents/{encodedUrl}/monitoring/pause","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/pause-or-resume-monitoring"},{"title":"Update monitoring interval","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml put /api/registry/agents/{encodedUrl}/monitoring/interval","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/update-monitoring-interval"},{"title":"Requeue agent for compliance heartbeat","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/agents/{encodedUrl}/monitoring/requeue","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/requeue-agent-for-compliance-heartbeat"},{"title":"Get per-step diagnostics for a compliance run","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/compliance/diagnostics","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-per-step-diagnostics-for-a-compliance-run"},{"title":"Get outbound request log","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/monitoring/requests","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-outbound-request-log"},{"title":"Refresh agent snapshot","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/agents/{encodedUrl}/refresh","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/refresh-agent-snapshot"},{"title":"Get agent refresh status","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/refreshes/{operationId}","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-agent-refresh-status"},{"title":"Get agent auth status","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/auth-status","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-agent-auth-status"},{"title":"Connect agent credentials","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml put /api/registry/agents/{encodedUrl}/connect","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/connect-agent-credentials"},{"title":"Save OAuth 2.0 client-credentials for an agent","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml put /api/registry/agents/{encodedUrl}/oauth-client-credentials","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/save-oauth-20-client-credentials-for-an-agent"},{"title":"Dry-run the saved OAuth 2.0 client-credentials config","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/agents/{encodedUrl}/oauth-client-credentials/test","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/dry-run-the-saved-oauth-20-client-credentials-config"},{"title":"Get applicable storyboards for agent","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/applicable-storyboards","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-applicable-storyboards-for-agent"},{"title":"List storyboards","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/storyboards","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/list-storyboards"},{"title":"Get storyboard detail","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/storyboards/{id}","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-storyboard-detail"},{"title":"Run a single storyboard step","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/agents/{encodedUrl}/storyboard/{storyboardId}/step/{stepId}","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/run-a-single-storyboard-step"},{"title":"Get first step preview","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/storyboards/{storyboardId}/first-step","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/get-first-step-preview"},{"title":"Run full storyboard evaluation","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/agents/{encodedUrl}/storyboard/{storyboardId}/run","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/run-full-storyboard-evaluation"},{"title":"Compare storyboard against reference agent","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/agents/{encodedUrl}/storyboard/{storyboardId}/compare","href":"/dist/docs/3.2.6/registry/api-reference/agent-compliance/compare-storyboard-against-reference-agent"}]},{"group":"Member Agents","pages":[{"title":"List my registered agents","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/me/agents","href":"/dist/docs/3.2.6/registry/api-reference/member-agents/list-my-registered-agents"},{"title":"Register an agent","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/me/agents","href":"/dist/docs/3.2.6/registry/api-reference/member-agents/register-an-agent"},{"title":"Remove an agent","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml delete /api/me/agents/{url}","href":"/dist/docs/3.2.6/registry/api-reference/member-agents/remove-an-agent"},{"title":"Update an agent","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml patch /api/me/agents/{url}","href":"/dist/docs/3.2.6/registry/api-reference/member-agents/update-an-agent"}]},{"group":"Onboarding","pages":[{"title":"Create or adopt my organization","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/organizations","href":"/dist/docs/3.2.6/registry/api-reference/onboarding/create-or-adopt-my-organization"}]},{"group":"Property Catalog","pages":[{"title":"Resolve identifiers to property_rids (and contribute them)","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/resolve","href":"/dist/docs/3.2.6/registry/api-reference/property-catalog/resolve-identifiers-to-property_rids-and-contribute-them"},{"title":"Dispute a catalog fact","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml post /api/registry/catalog/disputes","href":"/dist/docs/3.2.6/registry/api-reference/property-catalog/dispute-a-catalog-fact"},{"title":"Get a catalog dispute","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/catalog/disputes/{id}","href":"/dist/docs/3.2.6/registry/api-reference/property-catalog/get-a-catalog-dispute"},{"title":"Browse the property catalog","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/catalog","href":"/dist/docs/3.2.6/registry/api-reference/property-catalog/browse-the-property-catalog"},{"title":"Sync catalog changes since a watermark","deprecated":null,"version":null,"openapi":"https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.6/static/openapi/registry.yaml get /api/registry/catalog/sync","href":"/dist/docs/3.2.6/registry/api-reference/property-catalog/sync-catalog-changes-since-a-watermark"}]}]},{"title":"GMSF Reference","href":"/dist/docs/3.2.6/reference/gmsf-reference"},{"title":"Media Channel Taxonomy","href":"/dist/docs/3.2.6/reference/media-channel-taxonomy"},{"title":"Measurement Taxonomy","sidebarTitle":"Measurement Taxonomy","href":"/dist/docs/3.2.6/measurement/taxonomy"},{"title":"Roadmap","href":"/dist/docs/3.2.6/reference/roadmap"},{"title":"Versions \u0026 Compatibility","sidebarTitle":"Versions","href":"/dist/docs/3.2.6/reference/versions"},{"title":"Versioning \u0026 Governance","href":"/dist/docs/3.2.6/reference/versioning"},{"title":"Specification lifecycle","sidebarTitle":"Specification lifecycle","href":"/dist/docs/3.2.6/reference/specification-lifecycle"},{"title":"URL Canonicalization","href":"/dist/docs/3.2.6/reference/url-canonicalization"},{"title":"Verifying protocol tarballs","href":"/dist/docs/3.2.6/reference/verifying-protocol-tarballs"},{"title":"Reference Test Vectors","sidebarTitle":"Reference test vectors","href":"/dist/docs/3.2.6/reference/test-vectors/index"},{"title":"Experimental Status","sidebarTitle":"Experimental status","href":"/dist/docs/3.2.6/reference/experimental-status"},{"title":"Schema Extensions","sidebarTitle":"Schema Extensions","href":"/dist/docs/3.2.6/reference/schema-extensions"},{"title":"v2 sunset","sidebarTitle":"v2 sunset","href":"/dist/docs/3.2.6/reference/v2-sunset"},{"title":"Release Notes","href":"/dist/docs/3.2.6/reference/release-notes"},{"title":"Changelog","href":"/dist/docs/3.2.6/reference/changelog"},{"title":"Implementor FAQ","href":"/dist/docs/3.2.6/reference/implementor-faq"},{"title":"Glossary","href":"/dist/docs/3.2.6/reference/glossary"},{"title":"Working Group","href":"/dist/docs/3.2.6/community/working-group"},{"title":"Joining the Community Slack","href":"/dist/docs/3.2.6/community/joining-slack"}]},{"group":"Certification","expanded":false,"pages":[{"title":"AdCP certification program","sidebarTitle":"Overview","href":"/dist/docs/3.2.6/learning/overview"},{"title":"Instructional design framework","sidebarTitle":"How we teach","href":"/dist/docs/3.2.6/learning/instructional-design"},{"title":"Failure-mode competency scope","sidebarTitle":"Failure modes","href":"/dist/docs/3.2.6/learning/failure-mode-scope"},{"group":"Basics (free)","pages":[{"title":"A1: Why AdCP","sidebarTitle":"A1: Why AdCP","href":"/dist/docs/3.2.6/learning/foundations/a1-agentic-advertising"},{"title":"A2: Your first media buy","sidebarTitle":"A2: Your first media buy","href":"/dist/docs/3.2.6/learning/foundations/a2-protocol-architecture"},{"title":"A2B: Testing your first agent call","sidebarTitle":"A2B: Testing your first agent call","href":"/dist/docs/3.2.6/learning/foundations/a2b-testing-your-first-agent"},{"title":"A3: The AdCP landscape","sidebarTitle":"A3: The AdCP landscape","href":"/dist/docs/3.2.6/learning/foundations/a3-ecosystem-governance"}]},{"group":"For decision-makers","pages":[{"title":"Decision-Makers track","sidebarTitle":"Decision-makers","href":"/dist/docs/3.2.6/learning/decision-makers/overview"},{"title":"L1: Agentic advertising and the reversed data flow","sidebarTitle":"L1: Agentic advertising","href":"/dist/docs/3.2.6/learning/decision-makers/l1-agentic-advertising"},{"title":"L2: Your data, brand, and governance as the control surface","sidebarTitle":"L2: Data, brand, governance","href":"/dist/docs/3.2.6/learning/decision-makers/l2-data-brand-governance"},{"title":"L3: Deciding and leading","sidebarTitle":"L3: Deciding and leading","href":"/dist/docs/3.2.6/learning/decision-makers/l3-deciding-and-leading"},{"title":"How to explain agentic advertising","sidebarTitle":"Explaining it to others","href":"/dist/docs/3.2.6/learning/decision-makers/explaining-agentic-advertising"}]},{"group":"Role tracks","pages":[{"title":"Publisher / seller track","sidebarTitle":"Publisher track","href":"/dist/docs/3.2.6/learning/tracks/publisher"},{"title":"Buyer / brand track","sidebarTitle":"Buyer track","href":"/dist/docs/3.2.6/learning/tracks/buyer"},{"title":"Platform / intermediary track","sidebarTitle":"Platform track","href":"/dist/docs/3.2.6/learning/tracks/platform"}]},{"group":"Specialist modules","pages":[{"title":"S1: Media buy mastery","sidebarTitle":"S1: Media buy","href":"/dist/docs/3.2.6/learning/specialist/media-buy"},{"title":"S2: Creative mastery","sidebarTitle":"S2: Creative","href":"/dist/docs/3.2.6/learning/specialist/creative"},{"title":"S3: Signals and audiences","sidebarTitle":"S3: Signals","href":"/dist/docs/3.2.6/learning/specialist/signals"},{"title":"S4: Governance","sidebarTitle":"S4: Governance","href":"/dist/docs/3.2.6/learning/specialist/governance"},{"title":"S5: Sponsored Intelligence","sidebarTitle":"S5: Sponsored Intelligence","href":"/dist/docs/3.2.6/learning/specialist/sponsored-intelligence"},{"title":"S6: Security","sidebarTitle":"S6: Security","href":"/dist/docs/3.2.6/learning/specialist/security"},{"title":"S7: Brand identity and verification","sidebarTitle":"S7: Brand identity","href":"/dist/docs/3.2.6/learning/specialist/brand"}]},{"group":"Supplements","expanded":false,"pages":[{"title":"Buyer briefs and discovery request shape","sidebarTitle":"Buyer briefs","href":"/dist/docs/3.2.6/learning/supplements/buyer-briefs-and-get-products"},{"title":"Governance protocol by role","sidebarTitle":"Governance by role","href":"/dist/docs/3.2.6/learning/supplements/governance-protocol-by-role"},{"title":"Creative agent workflows","sidebarTitle":"Creative workflows","href":"/dist/docs/3.2.6/learning/supplements/creative-agent-workflows"},{"title":"Lab: reconcile a shared account","sidebarTitle":"Shared-account changes","href":"/dist/docs/3.2.6/learning/shared-account-change-feed"}]},{"group":"Policies","expanded":false,"pages":[{"title":"Nondiscrimination policy","sidebarTitle":"Nondiscrimination","href":"/dist/docs/3.2.6/learning/policies/nondiscrimination"},{"title":"Learner records and privacy","sidebarTitle":"Learner records","href":"/dist/docs/3.2.6/learning/policies/learner-records"},{"title":"Recertification and protocol-change updates","sidebarTitle":"Recertification","href":"/dist/docs/3.2.6/learning/policies/recertification"},{"title":"Complaints and grievances","sidebarTitle":"Complaints","href":"/dist/docs/3.2.6/learning/policies/complaints"},{"title":"Conflict of interest","sidebarTitle":"Conflict of interest","href":"/dist/docs/3.2.6/learning/policies/conflict-of-interest"},{"title":"Intellectual property","sidebarTitle":"Intellectual property","href":"/dist/docs/3.2.6/learning/policies/intellectual-property"},{"title":"Personnel qualifications","sidebarTitle":"Personnel qualifications","href":"/dist/docs/3.2.6/learning/policies/personnel-qualifications"},{"title":"Refund and cancellation","sidebarTitle":"Refund","href":"/dist/docs/3.2.6/learning/policies/refund"}]}]}]},{"version":"3.3-beta","tag":"Latest","pages":[{"title":"3.3-beta","href":"/dist/docs/3.3.0-beta.0/building/by-layer/L2/authentication"}]},{"version":"3.1","pages":[{"title":"3.1","href":"/dist/docs/3.1.27/building/by-layer/L2/authentication"}]},{"version":"3.0","pages":[{"title":"3.0","href":"/dist/docs/3.0.28/building/by-layer/L2/authentication"}]},{"version":"2.5 (archived)","pages":[{"title":"2.5 (archived)","href":"/dist/docs/2.5.3/intro"}]}]},"title":"AdCP — Authentication","buildId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","deploymentId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","dynamics":["10e4515597"],"chunks":["BannerMarkdown-DblVYOPe.js","dist-BnkC_6oA.js","lib--scc4DXi.js","lib-B8HbPgcC.js","clsx-CCOYKgaU.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js"]}