# Brand activity history Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/brand-resolution/brand-activity-history https://agenticadvertising.org/openapi/registry.yaml get /api/brands/history Returns the edit history for a brand in the registry, newest first. Only brands with community or enriched edits have history; brand.json-sourced brands are authoritative and do not generate revisions. # Bulk resolve brands Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/brand-resolution/bulk-resolve-brands https://agenticadvertising.org/openapi/registry.yaml post /api/brands/resolve/bulk Resolve up to 25 domains to their canonical brand identities in a single request. Unresolvable domains map to `null`. **Rate limits:** 20 requests and 100 unique domain resolutions per minute per IP address. Request bodies are capped at 16 KB. # Enrich brand Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/brand-resolution/enrich-brand https://agenticadvertising.org/openapi/registry.yaml get /api/brands/enrich Enrich brand data using Brandfetch. Returns logo, colors, and company information. Authenticated callers may also receive ephemeral Brand Context API identity/positioning/voice data. # Find brands by name Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/brand-resolution/find-brands-by-name https://agenticadvertising.org/openapi/registry.yaml get /api/brands/find Search for brands by name or domain. Returns matching results with basic identity info. # Get brand.json Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/brand-resolution/get-brandjson https://agenticadvertising.org/openapi/registry.yaml get /api/brands/brand-json Fetch the raw brand.json file for a bare DNS hostname. **Rate limit:** 60 requests per minute per IP address. # List brands Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/brand-resolution/list-brands https://agenticadvertising.org/openapi/registry.yaml get /api/brands/registry List all brands in the registry with optional search, pagination, and source filter. # Resolve brand Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/brand-resolution/resolve-brand https://agenticadvertising.org/openapi/registry.yaml get /api/brands/resolve Resolve a domain to its canonical brand identity. Follows brand.json redirects and returns the resolved brand with its house, architecture type, and optional manifest. The domain must be a bare DNS hostname. A domain is authoritative for its own identity, so `source` tells you who published the record and `relationship_trust` tells you whether a brand-to-house relationship was confirmed by both sides. Only `mutual` and `inline` are reciprocated; treat everything else as a claim. Record selection is deterministic: `hosted` > `brand_json` > `community` > `enriched`. `source` reports provenance only and must not be used as a substitute for `relationship_trust`. The v3 hierarchy is one level deep. There is no ordered-chain endpoint: third-party verifiers use the reciprocated `house_domain` edge returned here. `claimed_house_domain` is unilateral and never extends trust. **Rate limit:** 60 requests per minute per IP address. # Save brand Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/brand-resolution/save-brand https://agenticadvertising.org/openapi/registry.yaml post /api/brands/save Save or update a brand in the registry. Requires authentication. For existing brands, creates a revision-tracked edit. For new brands, creates the brand directly. Cannot edit authoritative brands managed via brand.json. # Set up a hosted brand.json Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/brand-resolution/set-up-a-hosted-brandjson https://agenticadvertising.org/openapi/registry.yaml post /api/brands/setup-my-brand Create or update a hosted brand.json for a domain owned by the authenticated user's organization. Returns the hosted URL and a pointer snippet for DNS setup. # Bulk resolve properties Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/property-resolution/bulk-resolve-properties https://agenticadvertising.org/openapi/registry.yaml post /api/properties/resolve/bulk Resolve up to 100 publisher domains at once. **Rate limit:** 20 requests per minute per IP address. # List properties Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/property-resolution/list-properties https://agenticadvertising.org/openapi/registry.yaml get /api/properties/registry List all properties in the registry with optional search, pagination. # Property activity history Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/property-resolution/property-activity-history https://agenticadvertising.org/openapi/registry.yaml get /api/properties/history Returns the edit history for a property in the registry, newest first. # Resolve property Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/property-resolution/resolve-property https://agenticadvertising.org/openapi/registry.yaml get /api/properties/resolve Resolve a publisher domain to its property information. Checks hosted properties, discovered properties, then live adagents.json validation. # API discovery Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/search/api-discovery https://agenticadvertising.org/openapi/registry.yaml get /api Returns links to the main API entry points and documentation. # Manifest reference lookup Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/search/manifest-reference-lookup https://agenticadvertising.org/openapi/registry.yaml get /api/manifest-refs/lookup Find the best manifest reference (brand.json URL or agent) for a domain. # Search Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/search/search https://agenticadvertising.org/openapi/registry.yaml get /api/search Search across brands, publishers, and properties. Returns up to 5 results per category. # AAO public key set Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/aao-public-key-set https://agenticadvertising.org/openapi/registry.yaml get /api/.well-known/jwks.json Returns the JSON Web Key Set (JWKS) containing AAO's public verification keys. Use these to verify AAO Verified badge tokens without calling AAO's API. # Bulk storyboard status Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/bulk-storyboard-status https://agenticadvertising.org/openapi/registry.yaml post /api/registry/agents/storyboard-status Returns per-storyboard test results for multiple agents in a single request. **Members only** — requires authentication and an active membership. Static admin API key callers may read this for support/debugging. Maximum 100 agent URLs per request. # Compare storyboard against reference agent Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/compare-storyboard-against-reference-agent https://agenticadvertising.org/openapi/registry.yaml post /api/registry/agents/{encodedUrl}/storyboard/{storyboardId}/compare Run a storyboard against both the target agent and the public reference agent, returning side-by-side results. Requires authentication and ownership. # Connect agent credentials Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/connect-agent-credentials https://agenticadvertising.org/openapi/registry.yaml put /api/registry/agents/{encodedUrl}/connect Store authentication credentials for an agent. Requires authentication and ownership. # Dry-run the saved OAuth 2.0 client-credentials config Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/dry-run-the-saved-oauth-20-client-credentials-config https://agenticadvertising.org/openapi/registry.yaml post /api/registry/agents/{encodedUrl}/oauth-client-credentials/test Exchange the saved client_credentials at the token endpoint and discard the resulting access token. Returns success + latency on a 2xx exchange, or the SDK's `ClientCredentialsExchangeError` kind (`oauth`, `malformed`, `network`) on failure so operators get same-second feedback instead of waiting for the next compliance heartbeat. Requires authentication and ownership. Requires credentials to already be saved via `PUT /oauth-client-credentials`. # Get agent AgenticAdvertising.org Verified status Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/get-agent-agenticadvertisingorg-verified-status https://agenticadvertising.org/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/verification Returns AgenticAdvertising.org Verified badge status for a single agent. Registry visibility controls discovery, not verification, so earned badges remain publicly verifiable for private agents. Compliance opt-out immediately suppresses all badges and returns the same unverified shape as an unknown or never-verified agent. # Get agent auth status Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/get-agent-auth-status https://agenticadvertising.org/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/auth-status Returns whether an agent has stored authentication credentials and OAuth token status. Requires authentication. # Get agent compliance detail Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/get-agent-compliance-detail https://agenticadvertising.org/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/compliance Returns detailed compliance status for a single agent, including track-level results, storyboard counts, and timestamps. If the agent has opted out of compliance monitoring, returns a minimal response with `status: opted_out`. # Get agent compliance history Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/get-agent-compliance-history https://agenticadvertising.org/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/compliance/history Returns a list of compliance test runs for an agent, ordered most recent first. If the agent has opted out, returns an empty list. # Get agent storyboard status Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/get-agent-storyboard-status https://agenticadvertising.org/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/storyboard-status Returns per-storyboard test results for an agent. Includes title, category, track, pass/fail status, and step counts. **Members only** — requires authentication and an active membership. Static admin API key callers may read this for support/debugging. # Get agent verification badge SVG Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/get-agent-verification-badge-svg https://agenticadvertising.org/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/badge/{role}.svg Returns an SVG badge image for the specified agent and role. Shows the role-specific AgenticAdvertising.org Verified mark (teal) when verified, or 'Not Verified' (grey) when not. Responses use ETags but must be revalidated before reuse so opt-out revocation is reflected immediately. Registry visibility does not affect verification. # Get applicable storyboards for agent Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/get-applicable-storyboards-for-agent https://agenticadvertising.org/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/applicable-storyboards Probe the agent's get_adcp_capabilities and resolve its declared supported_protocols and specialisms to the compliance bundles that will run. Requires authentication and ownership. # Get embeddable badge code Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/get-embeddable-badge-code https://agenticadvertising.org/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/badge/{role}/embed Returns HTML and Markdown embed snippets for displaying an AgenticAdvertising.org Verified badge on websites, social profiles, and documentation. Private registry visibility does not suppress verification. Compliance opt-out returns `verified: false` without revealing why the badge is ineligible. # Get first step preview Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/get-first-step-preview https://agenticadvertising.org/openapi/registry.yaml get /api/storyboards/{storyboardId}/first-step Returns a preview of the first step of a storyboard. No agent call needed. # Get monitoring settings Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/get-monitoring-settings https://agenticadvertising.org/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/monitoring/settings Returns the monitoring configuration for an agent. Requires authentication and ownership. # Get outbound request log Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/get-outbound-request-log https://agenticadvertising.org/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/monitoring/requests Returns the outbound request log for an agent (compliance checks, health probes, etc.). Requires authentication and ownership, or the static admin API key for support/debugging. # Get per-step diagnostics for a compliance run Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/get-per-step-diagnostics-for-a-compliance-run https://agenticadvertising.org/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/compliance/diagnostics Returns the exact request and response payloads the runner captured for failing storyboard steps on a single compliance run. Lets agent owners diff what the runner sent against their own probes without re-running the storyboard. Owner-only, with static admin API key access for support/debugging — payloads echo seller-side account/brand identifiers and may carry sensitive descriptive fields. If `run_id` is omitted, resolves to the latest run for the agent. # Get storyboard detail Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/get-storyboard-detail https://agenticadvertising.org/openapi/registry.yaml get /api/storyboards/{id} Returns a single storyboard with its full phase and step structure, plus its test kit if available. # Get version-pinned agent verification badge SVG Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/get-version-pinned-agent-verification-badge-svg https://agenticadvertising.org/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/badge/{role}/{version}.svg Returns an SVG badge image scoped to a specific AdCP release (MAJOR.MINOR, e.g. '3.0'). Buyers who want to call out 'verified for 3.0' embed this instead of the legacy `/badge/{role}.svg` (which auto-upgrades to the highest active version). Renders 'Not Verified' when the agent never earned a badge at this version or opted out of compliance monitoring. Registry visibility does not affect verification. # Get version-pinned embeddable badge code Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/get-version-pinned-embeddable-badge-code https://agenticadvertising.org/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/badge/{role}/{version}/embed Returns HTML and Markdown embed snippets that point at the version-pinned SVG. Alt text includes the version (e.g. 'AgenticAdvertising.org Verified Media Buy Agent 3.0'). Buyers who want to freeze on a specific AdCP release embed these instead of the legacy `/badge/{role}/embed`. Compliance opt-out returns `verified: false`; registry visibility does not affect verification. # List storyboards Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/list-storyboards https://agenticadvertising.org/openapi/registry.yaml get /api/storyboards Returns the catalog of compliance storyboards. Optionally filter by category. # Pause or resume monitoring Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/pause-or-resume-monitoring https://agenticadvertising.org/openapi/registry.yaml put /api/registry/agents/{encodedUrl}/monitoring/pause Pause or resume automated compliance monitoring for an agent. Requires authentication and ownership. # Refresh agent snapshot Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/refresh-agent-snapshot https://agenticadvertising.org/openapi/registry.yaml post /api/registry/agents/{encodedUrl}/refresh Re-probe the agent and update its registry health (online, tools_count, response_time_ms), capability snapshot (inferred type, discovered tools), and compliance verdict (storyboard pass/fail counts). Use after fixing your agent so the registry shows fresh data without waiting for the periodic heartbeat (~1h). **Compliance re-run:** when the caller owns the agent or is an AAO admin and the capability probe succeeds, the full storyboard suite can run for several minutes on capability-rich agents with a fresh test session, and `agent_storyboard_status` is updated. Owner-triggered runs use `triggered_by: 'owner_test'`; admin-triggered support runs use `triggered_by: 'manual'`. Badge fan-out reissues verification badges off the new run. If the compliance call fails (timeout, OAuth wall, internal error), the capability/health portion still returns successfully — `compliance.ran` is `false` with an `error` string. **Auth:** owner of the agent, AAO admin, or static `ADMIN_API_KEY`. **Rate limits:** 60 seconds per agent URL, 30 requests per user per hour. # Requeue agent for compliance heartbeat Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/requeue-agent-for-compliance-heartbeat https://agenticadvertising.org/openapi/registry.yaml post /api/registry/agents/{encodedUrl}/monitoring/requeue Clears the agent's last_checked_at timestamp so it is picked up on the next heartbeat cycle (within ~1 hour). This is queued-async; it does not run the compliance suite synchronously or change the current verdict until the heartbeat completes. Requires authentication and ownership. # Run a single storyboard step Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/run-a-single-storyboard-step https://agenticadvertising.org/openapi/registry.yaml post /api/registry/agents/{encodedUrl}/storyboard/{storyboardId}/step/{stepId} Execute a single storyboard step against an agent. Requires authentication and ownership. # Run full storyboard evaluation Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/run-full-storyboard-evaluation https://agenticadvertising.org/openapi/registry.yaml post /api/registry/agents/{encodedUrl}/storyboard/{storyboardId}/run Execute all steps of a storyboard against an agent and record the compliance result. Requires authentication and ownership. # Save OAuth 2.0 client-credentials for an agent Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/save-oauth-20-client-credentials-for-an-agent https://agenticadvertising.org/openapi/registry.yaml put /api/registry/agents/{encodedUrl}/oauth-client-credentials Store a machine-to-machine OAuth 2.0 client-credentials configuration (RFC 6749 §4.4) for this agent. The SDK exchanges at the token endpoint before every call and refreshes on 401. `client_secret` may be a `$ENV:VAR_NAME` reference — the SDK resolves at exchange time, the server stores it as written (encrypted uniformly). Requires authentication and ownership. # Update agent lifecycle stage Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/update-agent-lifecycle-stage https://agenticadvertising.org/openapi/registry.yaml put /api/registry/agents/{encodedUrl}/lifecycle Set the lifecycle stage for an agent. Requires authentication and ownership of the agent. # Update compliance opt-out Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/update-compliance-opt-out https://agenticadvertising.org/openapi/registry.yaml put /api/registry/agents/{encodedUrl}/compliance/opt-out Opt an agent in or out of public compliance reporting. Opting out immediately revokes every active badge version. Re-enabling monitoring keeps badges suppressed until a fresh passing full-suite run earns them again; partial storyboard reruns cannot restore verification first. Requires authentication and ownership of the agent. # Update monitoring interval Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-compliance/update-monitoring-interval https://agenticadvertising.org/openapi/registry.yaml put /api/registry/agents/{encodedUrl}/monitoring/interval Set the check interval for automated compliance monitoring (6–168 hours). Requires authentication and ownership. # Get publisher crawl request status Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-discovery/get-publisher-crawl-request-status https://agenticadvertising.org/openapi/registry.yaml get /api/registry/crawl-request/{crawlRequestId} Return the durable lifecycle for a publisher recrawl. Requesters may read their own requests; registry administrators may read any request. # List agents Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-discovery/list-agents https://agenticadvertising.org/openapi/registry.yaml get /api/registry/agents List all agents in the registry. Optionally enrich with health checks, capabilities, and property summaries via query parameters. Measurement-vendor filters (`metric_id`, `accreditation`, `q`) imply `type=measurement`. Canonical creative-capability filters (`format_kind`, `publisher_domain`, `format_option_id`, `capability_id`, `creative_operation`) match any endpoint exposing that creative surface, including mixed sales/creative agents; add an explicit `type` only to narrow by primary registry classification. # List publishers Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-discovery/list-publishers https://agenticadvertising.org/openapi/registry.yaml get /api/registry/publishers List all registered publishers. # Registry statistics Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-discovery/registry-statistics https://agenticadvertising.org/openapi/registry.yaml get /api/registry/stats Get aggregate statistics about the registry. # Request domain re-crawl Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-discovery/request-domain-re-crawl https://agenticadvertising.org/openapi/registry.yaml post /api/registry/crawl-request Persist a durable re-crawl request for a publisher domain after updating adagents.json. Returns 202 only after the request is committed to the queue. Use the returned `crawl_request_id` with the status endpoint to observe completion. **Rate limits:** 5 minutes per domain, 30 requests per user per hour. # Request manager fan-out re-validation Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-discovery/request-manager-fan-out-re-validation https://agenticadvertising.org/openapi/registry.yaml post /api/registry/manager-revalidation-request Trigger re-validation of every publisher delegating to a manager domain via ads.txt `MANAGERDOMAIN`. Use after rotating the manager's `adagents.json` so the change propagates to delegating publishers without waiting for the next routine crawl cycle. Work is queued and drained at a bounded rate (≈50 publishers per 5-minute tick). Returns 202 immediately with the number of publishers enqueued. **Rate limits:** 5 minutes per manager domain, 30 requests per user per hour (shared with other crawl-request endpoints). # Search agent inventory profiles Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-discovery/search-agent-inventory-profiles https://agenticadvertising.org/openapi/registry.yaml get /api/registry/agents/search Search agents by inventory profile — channels, markets, content categories, property types, and more. Filters use AND across dimensions and OR within a dimension. Results are ranked by relevance score. # Discover agent Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-probing/discover-agent https://agenticadvertising.org/openapi/registry.yaml get /api/public/discover-agent Probe an agent URL to discover its name, type, supported protocols, and basic statistics. # Get agent products Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-probing/get-agent-products https://agenticadvertising.org/openapi/registry.yaml get /api/public/agent-products Fetch products from a sales agent. # Get agent publisher properties Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-probing/get-agent-publisher-properties https://agenticadvertising.org/openapi/registry.yaml get /api/public/agent-publishers Fetch public list_authorized_properties data from a sales agent. # Get creative-agent format capabilities Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-probing/get-creative-agent-format-capabilities https://agenticadvertising.org/openapi/registry.yaml get /api/public/agent-formats Fetch get_adcp_capabilities creative.supported_formats[] from a creative agent, falling back to the deprecated list_creative_formats catalog for 3.1-compatible agents. # Validate publisher Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/agent-probing/validate-publisher https://agenticadvertising.org/openapi/registry.yaml get /api/public/validate-publisher Validate a publisher domain's adagents.json and return summary statistics. # AAO directory inverse-lookup Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/authorization-lookups/aao-directory-inverse-lookup https://agenticadvertising.org/openapi/registry.yaml get /api/v1/agents/{encodedUrl}/publishers Given a percent-encoded `agent_url`, returns the publishers whose adagents.json authorizes that agent, with provenance (`discovery_method`, `manager_domain`), per-publisher property counts (`properties_authorized`, `properties_total`, scoped to this publisher only — never network-wide), signing-key pin status, and lifecycle state (`authorized` / `revoked`). Spec: [docs/aao/directory-api.mdx](/docs/aao/directory-api) (adcp#4823). This endpoint is the spec-compliant richer-shape replacement for the legacy `/api/registry/lookup/agent/{agentUrl}/domains`, which returns domain strings only. # AAO directory inverse-lookup Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/authorization-lookups/aao-directory-inverse-lookup-1 https://agenticadvertising.org/openapi/registry.yaml get /v1/agents/{encodedUrl}/publishers Given a percent-encoded `agent_url`, returns the publishers whose adagents.json authorizes that agent, with provenance (`discovery_method`, `manager_domain`), per-publisher property counts (`properties_authorized`, `properties_total`, scoped to this publisher only — never network-wide), signing-key pin status, and lifecycle state (`authorized` / `revoked`). Spec: [docs/aao/directory-api.mdx](/docs/aao/directory-api) (adcp#4823). This endpoint is the spec-compliant richer-shape replacement for the legacy `/api/registry/lookup/agent/{agentUrl}/domains`, which returns domain strings only. # Agent domain lookup Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/authorization-lookups/agent-domain-lookup https://agenticadvertising.org/openapi/registry.yaml get /api/registry/lookup/agent/{agentUrl}/domains Get all publisher domains associated with an agent. # Domain lookup (deprecated) Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/authorization-lookups/domain-lookup-deprecated https://agenticadvertising.org/openapi/registry.yaml get /api/registry/lookup/domain/{domain} **Deprecated.** Use `/api/registry/publisher?domain=X` for richer data including hosting state, per-agent rollup, and brand.json fallback. This endpoint will be removed in a future release. # Expand product identifiers Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/authorization-lookups/expand-product-identifiers https://agenticadvertising.org/openapi/registry.yaml post /api/registry/expand/product-identifiers Expand publisher_properties selectors into concrete property identifiers for caching. # Operator lookup Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/authorization-lookups/operator-lookup https://agenticadvertising.org/openapi/registry.yaml get /api/registry/operator Given a domain, returns the agents this entity operates and which publishers trust them. **Response shape is auth-aware.** Anonymous callers see only `public` agents. Authenticated callers on an AAO membership tier with API access also see `members_only` agents. Profile owners (callers whose org owns the queried domain) additionally see `private` agents. This is the primary mechanism by which AAO membership unlocks deeper registry visibility. **`scope` bucket filter.** Callers can opt INTO a single visibility bucket (or the full union) regardless of what their auth would otherwise unlock — useful for picker UIs that want exactly one slice (e.g. anonymous-equivalent, members-only catalog, owner's private drafts). `scope` only narrows; it never escalates (e.g. `scope=member` on an explorer or anonymous caller silently returns public only). **Member level visibility.** When the profile owner has set their member card to public (`is_public=true`), the `member` object additionally carries `is_founding_member` (boolean) plus `membership_tier` (raw enum) and `membership_tier_label` (e.g. `Professional`, `Partner`, `Leader`) when the org has a resolvable tier. Founding Member is orthogonal to tier — founding orgs typically display both. For private profiles these fields are absent. # Per-agent authorization rollup Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/authorization-lookups/per-agent-authorization-rollup https://agenticadvertising.org/openapi/registry.yaml get /api/registry/publisher/authorization Returns whether a given agent is authorized for a publisher domain and how many of the publisher's properties it can sell. When the agent has property-level authorization rows, the count is the intersection with the publisher's property set; when it only has a publisher-wide row, the count equals the total. Returns 404 when the agent has no authorization (publisher-wide or property-level) for the domain. # Property authorization check Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/authorization-lookups/property-authorization-check https://agenticadvertising.org/openapi/registry.yaml get /api/registry/validate/property-authorization Quick check if a property identifier is authorized for an agent. Optimized for real-time ad request validation. # Property identifier lookup Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/authorization-lookups/property-identifier-lookup https://agenticadvertising.org/openapi/registry.yaml get /api/registry/lookup/property Find agents that hold a specific property identifier. # Publisher lookup Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/authorization-lookups/publisher-lookup https://agenticadvertising.org/openapi/registry.yaml get /api/registry/publisher Given a domain, returns the inventory this entity publishes and which agents it authorizes. **This endpoint is unauthenticated and returns the same response shape for every caller.** Compare to `/api/registry/operator`, where AAO membership tier and profile ownership unlock additional agent visibility (`members_only`, `private`). AAO membership does not change the `/publisher` response today. **Property source precedence:** publisher-attested adagents.json properties win first. When no publisher-attested adagents properties exist for the domain, brand.json properties supplement and override lower-trust rows, followed by approved community catalogs, then crawler-discovered rows. Each property carries a `source` field (`adagents_json` / `brand_json` / `community` / `discovered`). **Per-agent rollup:** each entry in `authorized_agents` may carry `properties_authorized` + `properties_total` + `publisher_wide`. The rollup is suppressed (fields absent) when (a) properties are entirely brand.json-hydrated — no adagents.json claim has been made — or (b) the publisher has more than 50 authorized agents (above-cap entries are returned without rollup; `rollup_truncated` is set with `{ cap, total_agents }`). Use `/api/registry/publisher/authorization?domain=X&agent=Y` for the per-agent count when the index rollup is absent. # Revalidate publisher adagents.json Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/authorization-lookups/revalidate-publisher-adagentsjson https://agenticadvertising.org/openapi/registry.yaml post /api/registry/publisher/{domain}/adagents/revalidate Admin-only endpoint for support/operator tooling to synchronously fetch a publisher's live `/.well-known/adagents.json`, run the registry validator, persist the refreshed verdict and fetch metadata, and return the validation result. `force=true` is accepted for operator tooling; the current validator always fetches the live origin. **Rate limits:** 5 minutes per domain, 30 requests per user per hour. # Validate product authorization Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/authorization-lookups/validate-product-authorization https://agenticadvertising.org/openapi/registry.yaml post /api/registry/validate/product-authorization Check whether an agent is authorized to sell a product based on its publisher_properties. # Force a synchronous brand.json crawl Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/brand-discovery/force-a-synchronous-brandjson-crawl https://agenticadvertising.org/openapi/registry.yaml post /api/registry/brand/{domain}/force-crawl Admin-only support endpoint that fetches a domain's live `/.well-known/brand.json`, persists valid origin evidence, and returns the before/after state. A verified owner remains labeled `source: hosted` because that field describes identity provenance; `new_source_type: brand_json` and `promoted: true` confirm that live origin evidence was adopted. **Rate limits:** 5 minutes per domain, 30 requests per user per hour. # Request brand.json re-crawl Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/brand-discovery/request-brandjson-re-crawl https://agenticadvertising.org/openapi/registry.yaml post /api/registry/brand-crawl-request Trigger an immediate re-crawl of a domain's brand.json. The crawl runs asynchronously — returns 202 immediately. **Rate limits:** 5 minutes per domain, 30 requests per user per hour (shared with adagents.json crawl requests). # Bootstrap snapshot for inline verifiers Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/change-feed/bootstrap-snapshot-for-inline-verifiers https://agenticadvertising.org/openapi/registry.yaml get /api/registry/authorizations/snapshot Streams the full effective authorization set as gzipped NDJSON (one JSON object per line). Consumers persist `X-Sync-Cursor` and tail `/api/registry/feed?entity_type=authorization&cursor=` for deltas. **ETag** is the hash of the X-Sync-Cursor — clients can `If-None-Match` to skip a re-pull when nothing has changed. **evidence** defaults to `adagents_json` only; long-run wire size ~150 MB gzipped. # Per-agent authorization pull Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/change-feed/per-agent-authorization-pull https://agenticadvertising.org/openapi/registry.yaml get /api/registry/authorizations Default endpoint for verification consumers (DSPs, sales houses, agencies). Returns the rows where the requested agent appears as `agent_url` — typically ≤ a few hundred. Pair with `/api/registry/feed?entity_type=authorization` to tail subsequent changes via the `X-Sync-Cursor` header. **evidence** defaults to `adagents_json` only. `agent_claim` is opt-in (`?evidence=adagents_json,agent_claim`) to prevent buy-side trust misuse — see specs/registry-authorization-model.md. # Registry change feed Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/change-feed/registry-change-feed https://agenticadvertising.org/openapi/registry.yaml get /api/registry/feed Poll a cursor-based feed of registry changes. Events are ordered by UUID v7 event_id for monotonic cursor progression. The feed retains events for 90 days. The `freshness` object reports when the response was generated, the newest matching event currently visible to the feed, and the resulting feed lag. `publisher.adagents_changed` covers semantic changes in every top-level catalog field, including formats-only and placements-only revisions; new 3.2 events identify them in `payload.changed_fields`. Type filtering supports glob patterns: `property.*` matches `property.created`, `property.updated`, etc. # Registry change feed stream Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/change-feed/registry-change-feed-stream https://agenticadvertising.org/openapi/registry.yaml get /api/registry/feed/stream Subscribe to registry feed pages over Server-Sent Events. This is a push-friendly transport for the same cursor contract as `/api/registry/feed`: clients still persist `cursor`, apply only feed events, and recover from `cursor_expired` by re-bootstrapping. The stream emits `feed` events containing a full feed page, `heartbeat` events while caught up, and `error` before closing when the cursor expires or the server cannot query the feed. # Approve community mirror proposal Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/community-mirrors/approve-community-mirror-proposal https://agenticadvertising.org/openapi/registry.yaml post /api/registry/mirror-proposals/{id}/approve Approve and atomically publish a pending proposal. Requires a registry moderator or AgenticAdvertising.org administrator. # Delete community mirror Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/community-mirrors/delete-community-mirror https://agenticadvertising.org/openapi/registry.yaml delete /api/registry/mirrors/{platform} Delete a persisted community mirror and retire derived publisher-domain catalog rows. Requires a registry moderator or AgenticAdvertising.org admin. Without `force=true`, the service refuses to delete a mirror that has not first published a `superseded_by` migration URL. # Get community mirror Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/community-mirrors/get-community-mirror https://agenticadvertising.org/openapi/registry.yaml get /api/registry/mirrors/{platform} Fetch one persisted community mirror by platform. A present mirror returns the platform metadata plus the stored catalog-only `adagents_json` document; absent mirrors return 404. # Get community mirror proposal Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/community-mirrors/get-community-mirror-proposal https://agenticadvertising.org/openapi/registry.yaml get /api/registry/mirror-proposals/{id} Fetch a proposal owned by the caller. Registry moderators and AgenticAdvertising.org administrators may fetch any proposal. # List community mirror proposals Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/community-mirrors/list-community-mirror-proposals https://agenticadvertising.org/openapi/registry.yaml get /api/registry/mirror-proposals List the caller's own community-mirror proposals. Registry moderators and AgenticAdvertising.org administrators see the review queue and may filter by status; their default is `pending`. # List community mirrors Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/community-mirrors/list-community-mirrors https://agenticadvertising.org/openapi/registry.yaml get /api/registry/mirrors List persisted catalog-only adagents.json community mirrors. The list projection includes presence and freshness metadata but omits the full `adagents_json` body; fetch a platform-specific mirror for the full document. # Publish or propose community mirror Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/community-mirrors/publish-or-propose-community-mirror https://agenticadvertising.org/openapi/registry.yaml put /api/registry/mirrors/{platform} Submit a catalog-only adagents.json community mirror. Registry moderators and AgenticAdvertising.org administrators publish immediately; other authenticated organization callers create or refresh a pending proposal and receive HTTP 202. Contributor proposals are limited to 1 MiB and 2,000 catalog items. The service validates the assembled document against adagents.json, forces `authorized_agents: []`, and regenerates `$schema` and `last_updated`. # Reject community mirror proposal Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/community-mirrors/reject-community-mirror-proposal https://agenticadvertising.org/openapi/registry.yaml post /api/registry/mirror-proposals/{id}/reject Reject a pending proposal with reviewer notes. Requires a registry moderator or AgenticAdvertising.org administrator. # List my registered agents Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/member-agents/list-my-registered-agents https://agenticadvertising.org/openapi/registry.yaml get /api/me/agents List the agents registered on the caller's organization member profile. Returns the same `agents[]` array stored on the profile, in the order members registered them. # Register an agent Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/member-agents/register-an-agent https://agenticadvertising.org/openapi/registry.yaml post /api/me/agents Register an agent on the caller's organization member profile. Idempotent on `url`: re-posting the same `url` updates the entry in place rather than creating a duplicate. New entries return `201`; updates return `200`. **True one-call storefront experience.** A third-party app holding only a user's OAuth token can `POST /api/me/agents` once and have the entire bootstrap chain materialize: - If the caller has zero org memberships, the server auto-creates an organization (corporate or personal workspace based on the user's email domain) and the response includes `org_auto_created: true`. - If the caller's org has no member profile, the server auto-creates a private profile (display name = organization name, `is_public: false`) and the response includes `profile_auto_created: true`. Both auto-bootstraps are best-effort fallbacks. To customize org name / company_type / revenue_tier, or to control profile slug / brand identity / tagline, call `POST /api/organizations` and `POST /api/me/member-profile` explicitly before registering the agent. Tier transitions never happen via this path — go through the billing flow. `type` is required and declared by the caller — the server does not infer it. Server-side smuggle protection still cross-checks the declared type against the agent's capability snapshot when one exists; if the snapshot contradicts the declaration without classifying it, the stored value is `unknown` and the dashboard surfaces the conflict for the owner to resolve. `visibility: "public"` requires a paid AAO tier (Professional, Builder, Member, or Leader) and a verified primary domain on the organization (set via the Linked Domains UI). Non-API-tier callers (Explorer or no tier) who request `public` will have the entry stored as `members_only` instead, and the response will include a `visibility_downgraded` warning describing the coercion. # Remove an agent Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/member-agents/remove-an-agent https://agenticadvertising.org/openapi/registry.yaml delete /api/me/agents/{url} Remove one registered agent identified by its `url`. A currently-`public` agent is reflected in the published `brand.json` manifest. To prevent the registry catalog and `brand.json` from silently disagreeing, this endpoint returns `409 unpublish_first` when the agent is `public` — `PATCH /api/me/agents/{url}` with `visibility: "private"` first (or call `DELETE /api/me/member-profile/agents/{index}/publish` to reconcile the manifest), then re-issue the DELETE. # Update an agent Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/member-agents/update-an-agent https://agenticadvertising.org/openapi/registry.yaml patch /api/me/agents/{url} Update one registered agent identified by its `url`. The `url` field itself cannot be changed via PATCH — supplying a `url` in the body that differs from the path returns `400 url_immutable`; re-register at the new URL and DELETE the old entry to migrate. All other fields accept partial updates. # Create or adopt my organization Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/onboarding/create-or-adopt-my-organization https://agenticadvertising.org/openapi/registry.yaml post /api/organizations Bootstrap the caller's organization explicitly. Use this when the caller wants to control the organization name, `company_type`, `revenue_tier`, or `is_personal` flag before any agents are registered. **Most storefront-style integrations don't need this call** — `POST /api/me/agents` will auto-create an org for a fresh OAuth user (corporate or personal workspace based on the email domain) and surface `org_auto_created: true` in the response. Reach for `POST /api/organizations` only when the auto-derived defaults aren't acceptable. Three outcomes depending on the caller's state: - **Fresh create** (most common): a new WorkOS organization is created, the caller is added as `owner`, the corporate domain is recorded as email-verified, and ToS / privacy-policy acceptance is logged from the request context. Returns `{ success: true, organization: { id, name } }`. - **Prospect adoption**: an organization with the caller's email domain already exists as a `prospect` (the registry pre-recorded it from a brand crawl but no human had claimed it yet). The caller is promoted to `owner` of the existing record instead of forking a duplicate. Returns `{ id, name, adopted: true }`. - **Already-active conflict**: the org exists and is already claimed by another paying member or a previously joined user. Returns `409` with the existing org id so the caller can switch to a join-request flow (`POST /api/organizations/:orgId/join-requests`) instead of trying to register a duplicate. Tier transitions happen via the billing flow only — there is no `membership_tier` field on this endpoint. After org creation, send the user to `POST /api/checkout-session` (or the `/dashboard/membership` page) to start a subscription; the Stripe webhook is the sole writer of `organizations.membership_tier`. Rate-limited per user: `15` failed attempts per hour; successful calls do not count against the limit so a legitimate registration is never penalized by earlier validation errors. # Bulk resolve policies Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/policy-registry/bulk-resolve-policies https://agenticadvertising.org/openapi/registry.yaml post /api/policies/resolve/bulk Resolve up to 100 policies by ID in a single request. Returns a map of policy_id to Policy (or null if not found). **Rate limit:** 20 requests per minute per IP address. # List policies Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/policy-registry/list-policies https://agenticadvertising.org/openapi/registry.yaml get /api/policies/registry Browse and search the governance policy registry. Returns approved policies with optional filtering by category, enforcement level, jurisdiction, policy category, and governance domain. # Policy revision history Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/policy-registry/policy-revision-history https://agenticadvertising.org/openapi/registry.yaml get /api/policies/history Retrieve the edit history for a policy. Each revision records who made the change, a summary, and whether it was a rollback. # Resolve policy Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/policy-registry/resolve-policy https://agenticadvertising.org/openapi/registry.yaml get /api/policies/resolve Resolve a single policy by ID. Optionally pin to a specific version — returns null if the version does not match. # Save policy Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/policy-registry/save-policy https://agenticadvertising.org/openapi/registry.yaml post /api/policies/save Create or update a community-contributed policy. Requires authentication. Registry-sourced and pending-review policies cannot be edited (returns 409). Updates automatically create a revision record. # Browse the property catalog Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/property-catalog/browse-the-property-catalog https://agenticadvertising.org/openapi/registry.yaml get /api/registry/catalog Browse the property fact-graph with filters. Cursor-paginated (opaque `cursor` → `next_cursor`). Each entry carries the property's identifiers. `property_rid` is a non-authoritative join/match handle, never an authorization credential. # Dispute a catalog fact Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/property-catalog/dispute-a-catalog-fact https://agenticadvertising.org/openapi/registry.yaml post /api/registry/catalog/disputes Challenge or correct a catalog claim — the community disavow/challenge verb. Adding links is hard; suspending suspicious ones is easy: a disputed medium/weak link is suspended immediately (`action_taken: 'link_suspended'`); stronger claims queue for review. Poll status with getCatalogDispute. # Get a catalog dispute Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/property-catalog/get-a-catalog-dispute https://agenticadvertising.org/openapi/registry.yaml get /api/registry/catalog/disputes/{id} Fetch the current state of a filed dispute by id. # Resolve identifiers to property_rids (and contribute them) Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/property-catalog/resolve-identifiers-to-property_rids-and-contribute-them https://agenticadvertising.org/openapi/registry.yaml post /api/registry/resolve The primary fact-contribution path. Takes identifiers plus a provenance envelope and returns stable `property_rid`s. In `resolve` mode (default) it auto-creates missing catalog entries and logs demand activity — so resolving your own identifier list IS the contribution. `property_rid` is a non-authoritative join/match handle, never an authorization credential. Re-resolving is idempotent on the identifier→rid mapping but additive on the activity log. # Sync catalog changes since a watermark Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/property-catalog/sync-catalog-changes-since-a-watermark https://agenticadvertising.org/openapi/registry.yaml get /api/registry/catalog/sync Delta sync for local mirrors: returns catalog entries created/updated since `since` (a prior `server_timestamp`), capped at 10,000 per page. Pagination is by the returned `server_timestamp` watermark, distinct from browseCatalog's opaque cursor. # Bulk property identifier check Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/property-resolution/bulk-property-identifier-check https://agenticadvertising.org/openapi/registry.yaml post /api/properties/check/bulk Check up to 10,000 property identifiers (domains, app bundle IDs, CTV store URLs) against the registry catalog. Returns a verdict for each identifier and a summary. # Check property list Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/property-resolution/check-property-list https://agenticadvertising.org/openapi/registry.yaml post /api/properties/check Check a list of publisher domains against the AAO registry. Normalizes domains (strips www/m prefixes), removes duplicates, flags known ad tech infrastructure, and identifies domains not yet in the registry. Returns four buckets: - **remove**: duplicates or known blocked domains (ad servers, CDNs, trackers, intermediaries) - **modify**: domains that were normalized (e.g. www.example.com → example.com) - **assess**: unknown domains not in registry, not blocked - **ok**: domains found in registry with no changes needed Results are stored for 7 days and retrievable via the `report_id`. # Claim a domain for bind-on-verify Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/property-resolution/claim-a-domain-for-bind-on-verify https://agenticadvertising.org/openapi/registry.yaml post /api/properties/hosted/{domain}/claim Issue a pending domain claim for the caller's organization and return a claim-specific `authoritative_location` URL (`…/adagents.json?adcp_claim=`). The caller places that single pointer at their own origin `/.well-known/adagents.json`; a subsequent verify-origin reads the token and binds the domain to the caller's org. The token is the per-account artifact that proves WHICH account owns the domain — a plain domain-keyed pointer proves only that the origin endorses AAO hosting, not who the owner is. The community write surface stays open; this does not gate writes — it establishes ownership on successful verification. Refused with 409 only when the domain is already verified and locked to a different owner. # Get bulk check report Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/property-resolution/get-bulk-check-report https://agenticadvertising.org/openapi/registry.yaml get /api/properties/check/bulk/{reportId} Retrieve a previously generated bulk property check report by ID. # Get property check report Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/property-resolution/get-property-check-report https://agenticadvertising.org/openapi/registry.yaml get /api/properties/check/{reportId} Retrieve a previously stored property check report by ID. Reports expire after 7 days. # Save property Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/property-resolution/save-property https://agenticadvertising.org/openapi/registry.yaml post /api/properties/save Save or update a hosted property in the registry. Requires authentication. For existing properties, creates a revision-tracked edit. For new properties, creates the property directly. Cannot edit authoritative properties managed via adagents.json. This is an identity-only write surface: the stored document always carries `authorized_agents: []`. Sales authorization lives solely in the publisher's own origin `adagents.json`; the community registry cannot mint or carry it. Any `authorized_agents` sent in the request body is ignored. # Validate adagents.json Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/property-resolution/validate-adagentsjson https://agenticadvertising.org/openapi/registry.yaml get /api/properties/validate Validate a domain's adagents.json file and return the validation result. # Verify AAO-hosted publisher origin Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/property-resolution/verify-aao-hosted-publisher-origin https://agenticadvertising.org/openapi/registry.yaml post /api/properties/hosted/{domain}/verify-origin Trigger origin verification for an AAO-hosted publisher: fetches the publisher's own `/.well-known/adagents.json` and checks for an `authoritative_location` field pointing at the AAO-hosted URL. On success, promotes `agent_publisher_authorizations` rows from `source='aao_hosted'` to `source='adagents_json'` for the manifest's authorized agents — buyers reading the registry then see them as origin-attested. Bind-on-verify: when the pointer carries an `adcp_claim` token (see the claim endpoint), a successful verification binds the domain to that claim's organization and returns `bound_org_id`. Binding is driven by which token the origin pointer carries, never by who triggers verification, so any authenticated caller may trigger it and a squatter cannot bind a domain they don't control. An existing verified owner is never overwritten. Failure classification: - `not_found`: publisher origin returned 404 (permanent — demotes if previously verified). - `invalid_json` / `no_authoritative_location` / `authoritative_location_mismatch`: publisher origin returned a parseable response that doesn't satisfy the spec stub pattern (permanent — demotes). - `unresolvable`: DNS NXDOMAIN, private IP, or non-http scheme (permanent — demotes). - `transient`: 5xx / 429 / 3xx / network timeout (leaves persisted state alone, stamps `origin_last_checked_at`). # Generate adagents.json Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/validation-tools/generate-adagentsjson https://agenticadvertising.org/openapi/registry.yaml post /api/adagents/create Generate a valid adagents.json file from authorized agents and/or catalog content. `authorized_agents` may be empty for a catalog-only community mirror that publishes formats/properties/placements for a platform that has not adopted AdCP. # Validate adagents.json Source: https://docs.adcontextprotocol.org/docs/registry/api-reference/validation-tools/validate-adagentsjson https://agenticadvertising.org/openapi/registry.yaml post /api/adagents/validate Validate a domain's adagents.json file and optionally validate referenced agent cards.