@adcp/sdk 13.0.0-rc.11 → 13.0.0-rc.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/lib/index.d.mts +1 -1
  2. package/dist/lib/index.d.ts +1 -1
  3. package/dist/lib/index.d.ts.map +1 -1
  4. package/dist/lib/index.js +4 -0
  5. package/dist/lib/index.js.map +1 -1
  6. package/dist/lib/index.mjs +4 -0
  7. package/dist/lib/index.mjs.map +1 -1
  8. package/dist/lib/registry/types.generated.d.mts +48 -1
  9. package/dist/lib/registry/types.generated.d.ts +48 -1
  10. package/dist/lib/registry/types.generated.d.ts.map +1 -1
  11. package/dist/lib/registry/types.generated.js.map +1 -1
  12. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  13. package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
  14. package/dist/lib/testing/compliance/comply.js +8 -2
  15. package/dist/lib/testing/compliance/comply.js.map +1 -1
  16. package/dist/lib/testing/compliance/comply.mjs +8 -2
  17. package/dist/lib/testing/compliance/comply.mjs.map +1 -1
  18. package/dist/lib/testing/compliance/spec-conformance.d.ts.map +1 -1
  19. package/dist/lib/testing/compliance/spec-conformance.js +2 -0
  20. package/dist/lib/testing/compliance/spec-conformance.js.map +1 -1
  21. package/dist/lib/testing/compliance/spec-conformance.mjs +2 -0
  22. package/dist/lib/testing/compliance/spec-conformance.mjs.map +1 -1
  23. package/dist/lib/testing/compliance/summary.d.mts +2 -0
  24. package/dist/lib/testing/compliance/summary.d.ts +2 -0
  25. package/dist/lib/testing/compliance/summary.d.ts.map +1 -1
  26. package/dist/lib/testing/compliance/summary.js +3 -2
  27. package/dist/lib/testing/compliance/summary.js.map +1 -1
  28. package/dist/lib/testing/compliance/summary.mjs +3 -2
  29. package/dist/lib/testing/compliance/summary.mjs.map +1 -1
  30. package/dist/lib/testing/compliance/types.d.mts +4 -0
  31. package/dist/lib/testing/compliance/types.d.ts +4 -0
  32. package/dist/lib/testing/compliance/types.d.ts.map +1 -1
  33. package/dist/lib/testing/compliance/types.js.map +1 -1
  34. package/dist/lib/testing/storyboard/junit.js +49 -32
  35. package/dist/lib/testing/storyboard/junit.js.map +1 -1
  36. package/dist/lib/testing/storyboard/junit.mjs +49 -32
  37. package/dist/lib/testing/storyboard/junit.mjs.map +1 -1
  38. package/dist/lib/testing/storyboard/loader.d.ts.map +1 -1
  39. package/dist/lib/testing/storyboard/loader.js +26 -0
  40. package/dist/lib/testing/storyboard/loader.js.map +1 -1
  41. package/dist/lib/testing/storyboard/loader.mjs +26 -0
  42. package/dist/lib/testing/storyboard/loader.mjs.map +1 -1
  43. package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
  44. package/dist/lib/testing/storyboard/runner.js +66 -15
  45. package/dist/lib/testing/storyboard/runner.js.map +1 -1
  46. package/dist/lib/testing/storyboard/runner.mjs +70 -16
  47. package/dist/lib/testing/storyboard/runner.mjs.map +1 -1
  48. package/dist/lib/testing/storyboard/types.d.mts +26 -1
  49. package/dist/lib/testing/storyboard/types.d.ts +26 -1
  50. package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
  51. package/dist/lib/testing/storyboard/types.js.map +1 -1
  52. package/dist/lib/testing/storyboard/types.mjs.map +1 -1
  53. package/dist/lib/testing/storyboard/validations.d.mts +11 -0
  54. package/dist/lib/testing/storyboard/validations.d.ts +11 -0
  55. package/dist/lib/testing/storyboard/validations.d.ts.map +1 -1
  56. package/dist/lib/testing/storyboard/validations.js +30 -13
  57. package/dist/lib/testing/storyboard/validations.js.map +1 -1
  58. package/dist/lib/testing/storyboard/validations.mjs +27 -13
  59. package/dist/lib/testing/storyboard/validations.mjs.map +1 -1
  60. package/dist/lib/v2/projection/augment-response.d.mts +45 -0
  61. package/dist/lib/v2/projection/augment-response.d.ts +45 -0
  62. package/dist/lib/v2/projection/augment-response.d.ts.map +1 -1
  63. package/dist/lib/v2/projection/augment-response.js +54 -0
  64. package/dist/lib/v2/projection/augment-response.js.map +1 -1
  65. package/dist/lib/v2/projection/augment-response.mjs +52 -0
  66. package/dist/lib/v2/projection/augment-response.mjs.map +1 -1
  67. package/dist/lib/v2/projection/index.d.mts +6 -1
  68. package/dist/lib/v2/projection/index.d.ts +6 -1
  69. package/dist/lib/v2/projection/index.d.ts.map +1 -1
  70. package/dist/lib/v2/projection/index.js +4 -0
  71. package/dist/lib/v2/projection/index.js.map +1 -1
  72. package/dist/lib/v2/projection/index.mjs +4 -0
  73. package/dist/lib/v2/projection/index.mjs.map +1 -1
  74. package/dist/lib/version.d.mts +3 -3
  75. package/dist/lib/version.d.ts +3 -3
  76. package/dist/lib/version.js +3 -3
  77. package/dist/lib/version.js.map +1 -1
  78. package/dist/lib/version.mjs +3 -3
  79. package/dist/lib/version.mjs.map +1 -1
  80. package/docs/migration-12-to-13.md +28 -0
  81. package/package.json +3 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/registry/types.generated.ts"],"sourcesContent":["// Generated AdCP Registry types from OpenAPI spec\n// Generated at: 2026-08-08T20:00:36.892Z\n// Source: https://agenticadvertising.org/openapi/registry.yaml\n//\n// Do not edit this file manually. Run: npm run generate-registry-types\n\nexport interface paths {\n \"/api\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * API discovery\n * @description Returns links to the main API entry points and documentation.\n */\n get: operations[\"apiDiscovery\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/brands/resolve\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Resolve brand\n * @description 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.\n *\n * 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.\n * Record selection is deterministic: `hosted` > `brand_json` > `community` > `enriched`. `source` reports provenance only and must not be used as a substitute for `relationship_trust`.\n * 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.\n *\n * **Rate limit:** 60 requests per minute per IP address.\n */\n get: operations[\"resolveBrand\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/brands/resolve/bulk\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Bulk resolve brands\n * @description Resolve up to 25 domains to their canonical brand identities in a single request. Unresolvable domains map to `null`.\n *\n * **Rate limits:** 20 requests and 100 unique domain resolutions per minute per IP address. Request bodies are capped at 16 KB.\n */\n post: operations[\"resolveBrandsBulk\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/brands/brand-json\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get brand.json\n * @description Fetch the raw brand.json file for a bare DNS hostname.\n *\n * **Rate limit:** 60 requests per minute per IP address.\n */\n get: operations[\"getBrandJson\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/brands/save\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Save brand\n * @description 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.\n */\n post: operations[\"saveBrand\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/brands/registry\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * List brands\n * @description List all brands in the registry with optional search, pagination, and source filter.\n */\n get: operations[\"listBrands\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/brands/history\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Brand activity history\n * @description 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.\n */\n get: operations[\"getBrandHistory\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/brands/enrich\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Enrich brand\n * @description Enrich brand data using Brandfetch. Returns logo, colors, and company information. Authenticated callers may also receive ephemeral Brand Context API identity/positioning/voice data.\n */\n get: operations[\"enrichBrand\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/history\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Property activity history\n * @description Returns the edit history for a property in the registry, newest first.\n */\n get: operations[\"getPropertyHistory\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/resolve\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Resolve property\n * @description Resolve a publisher domain to its property information. Checks hosted properties, discovered properties, then live adagents.json validation.\n */\n get: operations[\"resolveProperty\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/resolve/bulk\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Bulk resolve properties\n * @description Resolve up to 100 publisher domains at once.\n *\n * **Rate limit:** 20 requests per minute per IP address.\n */\n post: operations[\"resolvePropertiesBulk\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/registry\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * List properties\n * @description List all properties in the registry with optional search, pagination.\n */\n get: operations[\"listProperties\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/validate\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Validate adagents.json\n * @description Validate a domain's adagents.json file and return the validation result.\n */\n get: operations[\"validateProperty\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/save\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Save property\n * @description 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.\n *\n * 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.\n */\n post: operations[\"saveProperty\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/hosted/{domain}/claim\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Claim a domain for bind-on-verify\n * @description Issue a pending domain claim for the caller's organization and return a claim-specific `authoritative_location` URL (`…/adagents.json?adcp_claim=<token>`). 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.\n *\n * 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.\n */\n post: operations[\"claimHostedPropertyDomain\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/hosted/{domain}/verify-origin\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Verify AAO-hosted publisher origin\n * @description 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.\n *\n * 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.\n *\n * Failure classification:\n * - `not_found`: publisher origin returned 404 (permanent — demotes if previously verified).\n * - `invalid_json` / `no_authoritative_location` / `authoritative_location_mismatch`: publisher origin returned a parseable response that doesn't satisfy the spec stub pattern (permanent — demotes).\n * - `unresolvable`: DNS NXDOMAIN, private IP, or non-http scheme (permanent — demotes).\n * - `transient`: 5xx / 429 / 3xx / network timeout (leaves persisted state alone, stamps `origin_last_checked_at`).\n */\n post: operations[\"verifyHostedPropertyOrigin\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/check\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Check property list\n * @description 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.\n *\n * Returns four buckets:\n * - **remove**: duplicates or known blocked domains (ad servers, CDNs, trackers, intermediaries)\n * - **modify**: domains that were normalized (e.g. www.example.com → example.com)\n * - **assess**: unknown domains not in registry, not blocked\n * - **ok**: domains found in registry with no changes needed\n *\n * Results are stored for 7 days and retrievable via the `report_id`.\n */\n post: operations[\"checkPropertyList\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/check/{reportId}\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get property check report\n * @description Retrieve a previously stored property check report by ID. Reports expire after 7 days.\n */\n get: operations[\"getPropertyCheckReport\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * List agents\n * @description 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.\n */\n get: operations[\"listAgents\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/publishers\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * List publishers\n * @description List all registered publishers.\n */\n get: operations[\"listPublishers\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/stats\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Registry statistics\n * @description Get aggregate statistics about the registry.\n */\n get: operations[\"getRegistryStats\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/lookup/domain/{domain}\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Domain lookup (deprecated)\n * @deprecated\n * @description **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.\n */\n get: operations[\"lookupDomain\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/lookup/property\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Property identifier lookup\n * @description Find agents that hold a specific property identifier.\n */\n get: operations[\"lookupProperty\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/lookup/agent/{agentUrl}/domains\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Agent domain lookup\n * @description Get all publisher domains associated with an agent.\n */\n get: operations[\"getAgentDomains\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/v1/agents/{encodedUrl}/publishers\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * AAO directory inverse-lookup\n * @description 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`).\n *\n * 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.\n */\n get: operations[\"getPublishersForAgentLegacyApiPrefix\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/v1/agents/{encodedUrl}/publishers\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * AAO directory inverse-lookup\n * @description 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`).\n *\n * 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.\n */\n get: operations[\"getPublishersForAgent\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/operator\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Operator lookup\n * @description Given a domain, returns the agents this entity operates and which publishers trust them.\n *\n * **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.\n *\n * **`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).\n *\n * **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.\n */\n get: operations[\"lookupOperator\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/publisher\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Publisher lookup\n * @description Given a domain, returns the inventory this entity publishes and which agents it authorizes.\n *\n * **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.\n *\n * **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`).\n *\n * **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.\n */\n get: operations[\"lookupPublisher\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/publisher/{domain}/adagents/revalidate\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Revalidate publisher adagents.json\n * @description 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.\n *\n * **Rate limits:** 5 minutes per domain, 30 requests per user per hour.\n */\n post: operations[\"revalidatePublisherAdagents\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/brand/{domain}/force-crawl\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Force a synchronous brand.json crawl\n * @description 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.\n *\n * **Rate limits:** 5 minutes per domain, 30 requests per user per hour.\n */\n post: operations[\"forceBrandCrawl\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/publisher/authorization\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Per-agent authorization rollup\n * @description 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.\n */\n get: operations[\"lookupPublisherAgentAuthorization\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/validate/product-authorization\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Validate product authorization\n * @description Check whether an agent is authorized to sell a product based on its publisher_properties.\n */\n post: operations[\"validateProductAuthorization\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/expand/product-identifiers\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Expand product identifiers\n * @description Expand publisher_properties selectors into concrete property identifiers for caching.\n */\n post: operations[\"expandProductIdentifiers\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/validate/property-authorization\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Property authorization check\n * @description Quick check if a property identifier is authorized for an agent. Optimized for real-time ad request validation.\n */\n get: operations[\"validatePropertyAuthorization\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/adagents/validate\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Validate adagents.json\n * @description Validate a domain's adagents.json file and optionally validate referenced agent cards.\n */\n post: operations[\"validateAdagents\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/adagents/create\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Generate adagents.json\n * @description 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.\n */\n post: operations[\"createAdagents\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/mirror-proposals\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * List community mirror proposals\n * @description 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`.\n */\n get: operations[\"listCommunityMirrorProposals\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/mirror-proposals/{id}\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get community mirror proposal\n * @description Fetch a proposal owned by the caller. Registry moderators and AgenticAdvertising.org administrators may fetch any proposal.\n */\n get: operations[\"getCommunityMirrorProposal\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/mirror-proposals/{id}/approve\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Approve community mirror proposal\n * @description Approve and atomically publish a pending proposal. Requires a registry moderator or AgenticAdvertising.org administrator.\n */\n post: operations[\"approveCommunityMirrorProposal\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/mirror-proposals/{id}/reject\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Reject community mirror proposal\n * @description Reject a pending proposal with reviewer notes. Requires a registry moderator or AgenticAdvertising.org administrator.\n */\n post: operations[\"rejectCommunityMirrorProposal\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/mirrors\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * List community mirrors\n * @description 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.\n */\n get: operations[\"listCommunityMirrors\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/mirrors/{platform}\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get community mirror\n * @description 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.\n */\n get: operations[\"getCommunityMirror\"];\n /**\n * Publish or propose community mirror\n * @description 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`.\n */\n put: operations[\"publishCommunityMirror\"];\n post?: never;\n /**\n * Delete community mirror\n * @description 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.\n */\n delete: operations[\"deleteCommunityMirror\"];\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/search\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Search\n * @description Search across brands, publishers, and properties. Returns up to 5 results per category.\n */\n get: operations[\"search\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/manifest-refs/lookup\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Manifest reference lookup\n * @description Find the best manifest reference (brand.json URL or agent) for a domain.\n */\n get: operations[\"lookupManifestRef\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/public/discover-agent\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Discover agent\n * @description Probe an agent URL to discover its name, type, supported protocols, and basic statistics.\n */\n get: operations[\"discoverAgent\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/public/agent-formats\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get creative-agent format capabilities\n * @description 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.\n */\n get: operations[\"getAgentFormats\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/public/agent-publishers\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get agent publisher properties\n * @description Fetch public list_authorized_properties data from a sales agent.\n */\n get: operations[\"getAgentPublishers\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/public/agent-products\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get agent products\n * @description Fetch products from a sales agent.\n */\n get: operations[\"getAgentProducts\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/public/validate-publisher\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Validate publisher\n * @description Validate a publisher domain's adagents.json and return summary statistics.\n */\n get: operations[\"validatePublisher\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/policies/registry\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * List policies\n * @description Browse and search the governance policy registry. Returns approved policies with optional filtering by category, enforcement level, jurisdiction, policy category, and governance domain.\n */\n get: operations[\"listPolicies\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/policies/resolve\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Resolve policy\n * @description Resolve a single policy by ID. Optionally pin to a specific version — returns null if the version does not match.\n */\n get: operations[\"resolvePolicy\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/policies/resolve/bulk\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Bulk resolve policies\n * @description Resolve up to 100 policies by ID in a single request. Returns a map of policy_id to Policy (or null if not found).\n *\n * **Rate limit:** 20 requests per minute per IP address.\n */\n post: operations[\"resolvePoliciesBulk\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/policies/history\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Policy revision history\n * @description Retrieve the edit history for a policy. Each revision records who made the change, a summary, and whether it was a rollback.\n */\n get: operations[\"getPolicyHistory\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/policies/save\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Save policy\n * @description 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.\n */\n post: operations[\"savePolicy\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/feed\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Registry change feed\n * @description 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`.\n *\n * Type filtering supports glob patterns: `property.*` matches `property.created`, `property.updated`, etc.\n */\n get: operations[\"getRegistryFeed\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/feed/stream\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Registry change feed stream\n * @description 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.\n */\n get: operations[\"streamRegistryFeed\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/authorizations\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Per-agent authorization pull\n * @description 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.\n *\n * **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.\n */\n get: operations[\"getAgentAuthorizations\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/authorizations/snapshot\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Bootstrap snapshot for inline verifiers\n * @description 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=<value>` for deltas.\n *\n * **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.\n */\n get: operations[\"getAgentAuthorizationsSnapshot\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/search\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Search agent inventory profiles\n * @description 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.\n */\n get: operations[\"searchAgentProfiles\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/crawl-request\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Request domain re-crawl\n * @description Trigger an immediate re-crawl of a publisher domain after updating adagents.json. The crawl runs asynchronously — returns 202 immediately.\n *\n * **Rate limits:** 5 minutes per domain, 30 requests per user per hour.\n */\n post: operations[\"requestCrawl\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/manager-revalidation-request\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Request manager fan-out re-validation\n * @description 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.\n *\n * **Rate limits:** 5 minutes per manager domain, 30 requests per user per hour (shared with other crawl-request endpoints).\n */\n post: operations[\"requestManagerRevalidation\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/brand-crawl-request\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Request brand.json re-crawl\n * @description Trigger an immediate re-crawl of a domain's brand.json. The crawl runs asynchronously — returns 202 immediately.\n *\n * **Rate limits:** 5 minutes per domain, 30 requests per user per hour (shared with adagents.json crawl requests).\n */\n post: operations[\"requestBrandCrawl\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/compliance\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get agent compliance detail\n * @description Returns detailed compliance status for a single agent, including track-level results, storyboard counts, and timestamps.\n *\n * If the agent has opted out of compliance monitoring, returns a minimal response with `status: opted_out`.\n */\n get: operations[\"getAgentCompliance\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/.well-known/jwks.json\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * AAO public key set\n * @description 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.\n */\n get: operations[\"getJwks\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/verification\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get agent AAO Verified status\n * @description Returns AAO Verified badge status for a single agent. Public and cacheable. Includes role badges, verified storyboards, and a link to the agent's registry listing.\n */\n get: operations[\"getAgentVerification\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/badge/{role}.svg\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get agent verification badge SVG\n * @description Returns an SVG badge image for the specified agent and role. Shows 'AAO Verified | Sales Agent' (teal) when verified, or 'AAO Verified | Not Verified' (grey) when not. Cacheable, suitable for embedding in websites.\n */\n get: operations[\"getAgentBadgeSvg\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/badge/{role}/embed\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get embeddable badge code\n * @description Returns HTML and Markdown embed snippets for displaying an AAO Verified badge on websites, social profiles, and documentation. The badge links to the agent's AAO registry listing.\n */\n get: operations[\"getAgentBadgeEmbed\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/badge/{role}/{version}.svg\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get version-pinned agent verification badge SVG\n * @description 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.\n */\n get: operations[\"getAgentBadgeVersionedSvg\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/badge/{role}/{version}/embed\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get version-pinned embeddable badge code\n * @description Returns HTML and Markdown embed snippets that point at the version-pinned SVG. Alt text includes the version (e.g. 'AAO 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`.\n */\n get: operations[\"getAgentBadgeVersionedEmbed\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/storyboard-status\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get agent storyboard status\n * @description Returns per-storyboard test results for an agent. Includes title, category, track, pass/fail status, and step counts.\n *\n * **Members only** — requires authentication and an active membership. Static admin API key callers may read this for support/debugging.\n */\n get: operations[\"getAgentStoryboardStatus\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/storyboard-status\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Bulk storyboard status\n * @description Returns per-storyboard test results for multiple agents in a single request.\n *\n * **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.\n */\n post: operations[\"bulkAgentStoryboardStatus\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/compliance/history\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get agent compliance history\n * @description Returns a list of compliance test runs for an agent, ordered most recent first.\n *\n * If the agent has opted out, returns an empty list.\n */\n get: operations[\"getAgentComplianceHistory\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/lifecycle\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n /**\n * Update agent lifecycle stage\n * @description Set the lifecycle stage for an agent. Requires authentication and ownership of the agent.\n */\n put: operations[\"updateAgentLifecycle\"];\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/compliance/opt-out\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n /**\n * Update compliance opt-out\n * @description Opt an agent in or out of public compliance reporting. Requires authentication and ownership of the agent.\n */\n put: operations[\"updateAgentComplianceOptOut\"];\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/monitoring/settings\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get monitoring settings\n * @description Returns the monitoring configuration for an agent. Requires authentication and ownership.\n */\n get: operations[\"getAgentMonitoringSettings\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/monitoring/pause\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n /**\n * Pause or resume monitoring\n * @description Pause or resume automated compliance monitoring for an agent. Requires authentication and ownership.\n */\n put: operations[\"updateAgentMonitoringPause\"];\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/monitoring/interval\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n /**\n * Update monitoring interval\n * @description Set the check interval for automated compliance monitoring (6–168 hours). Requires authentication and ownership.\n */\n put: operations[\"updateAgentMonitoringInterval\"];\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/monitoring/requeue\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Requeue agent for compliance heartbeat\n * @description 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.\n */\n post: operations[\"requeueAgentForHeartbeat\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/compliance/diagnostics\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get per-step diagnostics for a compliance run\n * @description Returns the exact request and response payloads the runner captured for failing storyboard steps on a single compliance run.\n *\n * 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.\n */\n get: operations[\"getAgentComplianceStepDiagnostics\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/monitoring/requests\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get outbound request log\n * @description 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.\n */\n get: operations[\"getAgentMonitoringRequests\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/refresh\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Refresh agent snapshot\n * @description 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).\n *\n * **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.\n *\n * **Auth:** owner of the agent, AAO admin, or static `ADMIN_API_KEY`.\n *\n * **Rate limits:** 60 seconds per agent URL, 30 requests per user per hour.\n */\n post: operations[\"refreshAgent\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/auth-status\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get agent auth status\n * @description Returns whether an agent has stored authentication credentials and OAuth token status. Requires authentication.\n */\n get: operations[\"getAgentAuthStatus\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/connect\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n /**\n * Connect agent credentials\n * @description Store authentication credentials for an agent. Requires authentication and ownership.\n */\n put: operations[\"connectAgent\"];\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/oauth-client-credentials\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n /**\n * Save OAuth 2.0 client-credentials for an agent\n * @description 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.\n */\n put: operations[\"saveAgentOAuthClientCredentials\"];\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/oauth-client-credentials/test\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Dry-run the saved OAuth 2.0 client-credentials config\n * @description 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`.\n */\n post: operations[\"testAgentOAuthClientCredentials\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/applicable-storyboards\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get applicable storyboards for agent\n * @description 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.\n */\n get: operations[\"getApplicableStoryboards\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/storyboards\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * List storyboards\n * @description Returns the catalog of compliance storyboards. Optionally filter by category.\n */\n get: operations[\"listStoryboards\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/storyboards/{id}\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get storyboard detail\n * @description Returns a single storyboard with its full phase and step structure, plus its test kit if available.\n */\n get: operations[\"getStoryboard\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/brands/find\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Find brands by name\n * @description Search for brands by name or domain. Returns matching results with basic identity info.\n */\n get: operations[\"findBrand\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/brands/setup-my-brand\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Set up a hosted brand.json\n * @description 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.\n */\n post: operations[\"setupMyBrand\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/check/bulk\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Bulk property identifier check\n * @description 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.\n */\n post: operations[\"bulkPropertyCheck\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/check/bulk/{reportId}\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get bulk check report\n * @description Retrieve a previously generated bulk property check report by ID.\n */\n get: operations[\"getBulkPropertyCheckReport\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/storyboard/{storyboardId}/step/{stepId}\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Run a single storyboard step\n * @description Execute a single storyboard step against an agent. Requires authentication and ownership.\n */\n post: operations[\"runStoryboardStep\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/storyboards/{storyboardId}/first-step\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get first step preview\n * @description Returns a preview of the first step of a storyboard. No agent call needed.\n */\n get: operations[\"getStoryboardFirstStep\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/storyboard/{storyboardId}/run\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Run full storyboard evaluation\n * @description Execute all steps of a storyboard against an agent and record the compliance result. Requires authentication and ownership.\n */\n post: operations[\"runStoryboard\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/storyboard/{storyboardId}/compare\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Compare storyboard against reference agent\n * @description Run a storyboard against both the target agent and the public reference agent, returning side-by-side results. Requires authentication and ownership.\n */\n post: operations[\"compareStoryboard\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/me/agents\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * List my registered agents\n * @description 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.\n */\n get: operations[\"listMemberAgents\"];\n put?: never;\n /**\n * Register an agent\n * @description Register an agent on the caller's organization member profile.\n *\n * 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`.\n *\n * **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:\n *\n * - 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`.\n *\n * - 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`.\n *\n * 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.\n *\n * `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.\n *\n * `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.\n */\n post: operations[\"registerMemberAgent\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/me/agents/{url}\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n post?: never;\n /**\n * Remove an agent\n * @description Remove one registered agent identified by its `url`.\n *\n * 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.\n */\n delete: operations[\"removeMemberAgent\"];\n options?: never;\n head?: never;\n /**\n * Update an agent\n * @description 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.\n */\n patch: operations[\"updateMemberAgent\"];\n trace?: never;\n };\n \"/api/organizations\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Create or adopt my organization\n * @description 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.\n *\n * **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.\n *\n * Three outcomes depending on the caller's state:\n *\n * - **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 } }`.\n *\n * - **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 }`.\n *\n * - **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.\n *\n * 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`.\n *\n * 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.\n */\n post: operations[\"createOrganization\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/resolve\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Resolve identifiers to property_rids (and contribute them)\n * @description 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.\n */\n post: operations[\"resolveIdentifiers\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/catalog/disputes\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Dispute a catalog fact\n * @description 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.\n */\n post: operations[\"fileCatalogDispute\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/catalog/disputes/{id}\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get a catalog dispute\n * @description Fetch the current state of a filed dispute by id.\n */\n get: operations[\"getCatalogDispute\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/catalog\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Browse the property catalog\n * @description 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.\n */\n get: operations[\"browseCatalog\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/catalog/sync\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Sync catalog changes since a watermark\n * @description 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.\n */\n get: operations[\"syncCatalog\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n}\nexport type webhooks = Record<string, never>;\nexport interface components {\n schemas: {\n BrandEventPayload: {\n /** @description Brand domain; brand.* events are identified by entity_id (the brand) and carry hierarchy context here. */\n domain?: string;\n /** @description On brand.resolved/hierarchy_updated: the resolved brand chain (root → leaf). */\n chain?: {\n [key: string]: unknown;\n }[];\n ancestor_domains?: string[];\n domains?: string[];\n };\n ResolvedBrand: {\n /** @example acmecorp.com */\n canonical_id: string;\n /** @example acmecorp.com */\n canonical_domain: string;\n /** @example Acme Corp */\n brand_name: string;\n names?: components[\"schemas\"][\"LocalizedName\"][];\n /** @enum {string} */\n keller_type?: \"master\" | \"sub_brand\" | \"endorsed\" | \"independent\";\n parent_brand?: string;\n house_domain?: string;\n /** @description House the requested domain claims. This field never extends trust on its own; `relationship_trust` reports whether the reciprocal declaration is current enough to do so. */\n claimed_house_domain?: string;\n house_name?: string;\n /**\n * @description How the brand-to-house relationship was established. `inline`: the house's own document defines the brand. `mutual`: both sides publish the relationship — the trust-extending edge. `leaf_only`: the brand claims a house whose reciprocal declaration is missing, not yet active, or too old to extend trust. `house_only`: a house claims the brand, which has not reciprocated. `standalone`: the brand claims no house. `unverifiable`: a claimed house could not be checked.\n * @enum {string}\n */\n relationship_trust?: \"inline\" | \"mutual\" | \"leaf_only\" | \"house_only\" | \"standalone\" | \"unverifiable\";\n /**\n * Format: date-time\n * @description When both sides of a mutual relationship were last seen agreeing. Present only for `mutual`, and it does not advance while the house side is unreachable, so callers can apply their own edge-aging policy.\n * @example 2026-07-28T12:00:00Z\n */\n relationship_verified_at?: string;\n /**\n * Format: date-time\n * @description When the house declared the relationship in `brand_refs[].effective_at`, or the resolver's durable first observation if the publisher omitted that field. Callers can apply a declaration-age ceiling independently of `relationship_verified_at`.\n * @example 2026-01-29T12:00:00Z\n */\n relationship_declared_at?: string;\n /** @description Set when a pre-v3 document was promoted to a canonical v3 document for this response. Identity only — legacy relationship data is preserved opaquely, never promoted to a trust claim. */\n promoted_from_schema?: string;\n /** @description Loss or ambiguity encountered while promoting a pre-v3 document. A `house` warning means the legacy house object was preserved only as opaque metadata and did not establish a trusted relationship. */\n migration_warnings?: {\n field: string;\n message: string;\n suggestion?: string;\n }[];\n brand_agent_url?: string;\n brand_manifest?: {\n [key: string]: unknown;\n };\n /**\n * @description Provenance of the selected record, not relationship authorization. Deterministic precedence is `hosted` > `brand_json` > `community` > `enriched` > `stub`; normal reads prefer the durable stored winner on a source tie, while `fresh=true` lets a successful live origin read win a tie. `brand_json`: the domain's own /.well-known/brand.json. `hosted`: registered by an owner whose control of the domain was verified. `community`: contributed by a member. `enriched`: third-party enrichment. `stub`: a minimal organization-derived placeholder awaiting stronger evidence.\n * @enum {string}\n */\n source: \"hosted\" | \"brand_json\" | \"community\" | \"enriched\" | \"stub\";\n /** @description This request's origin-validation diagnostics when `fresh=true` falls back to a stored registry record. Presence means the response is stored evidence, not a successful live-origin read. */\n live_brand_json?: {\n valid: boolean;\n url: string;\n status_code?: number;\n errors: {\n field: string;\n message: string;\n /** @enum {string} */\n severity: \"error\";\n }[];\n warnings: {\n field: string;\n message: string;\n suggestion?: string;\n }[];\n };\n };\n LocalizedName: {\n [key: string]: string;\n };\n Error: {\n error: string;\n };\n BrandRegistryItem: {\n /** @example acmecorp.com */\n domain: string;\n /** @example Acme Corp */\n brand_name?: string;\n /** @enum {string} */\n source: \"hosted\" | \"brand_json\" | \"community\" | \"enriched\" | \"stub\";\n has_manifest: boolean;\n verified: boolean;\n house_domain?: string;\n /** @enum {string} */\n keller_type?: \"master\" | \"sub_brand\" | \"endorsed\" | \"independent\";\n };\n BrandActivity: {\n /** @example acmecorp.com */\n domain: string;\n /** @example 3 */\n total: number;\n revisions: {\n /** @example 3 */\n revision_number: number;\n /** @example Pinnacle Media */\n editor_name: string;\n /** @example Updated logo and brand colors */\n edit_summary: string;\n /** @description Source type of the record at the time of this revision (brand_json, enriched, community) */\n source?: string;\n is_rollback: boolean;\n /** @description Revision number that was restored; only present when is_rollback is true */\n rolled_back_to?: number;\n /** @example 2026-03-01T12:34:56Z */\n created_at: string;\n }[];\n };\n PropertyActivity: {\n /** @example examplepub.com */\n domain: string;\n /** @example 3 */\n total: number;\n revisions: {\n /** @example 3 */\n revision_number: number;\n /** @example Pinnacle Media */\n editor_name: string;\n /** @example Updated logo and brand colors */\n edit_summary: string;\n /** @description Source type of the record at the time of this revision (brand_json, enriched, community) */\n source?: string;\n is_rollback: boolean;\n /** @description Revision number that was restored; only present when is_rollback is true */\n rolled_back_to?: number;\n /** @example 2026-03-01T12:34:56Z */\n created_at: string;\n }[];\n };\n ResolvedProperty: {\n /** @example examplepub.com */\n publisher_domain: string;\n /** @enum {string} */\n source: \"adagents_json\" | \"hosted\" | \"discovered\";\n authorized_agents?: {\n url: string;\n authorized_for?: string;\n }[];\n properties?: {\n id?: string;\n type?: string;\n name?: string;\n identifiers?: components[\"schemas\"][\"PropertyIdentifier\"][];\n tags?: string[];\n }[];\n contact?: {\n name?: string;\n email?: string;\n };\n verified: boolean;\n };\n PropertyIdentifier: {\n /** @example domain */\n type: string;\n /** @example examplepub.com */\n value: string;\n };\n PropertyRegistryItem: {\n /** @example examplepub.com */\n domain: string;\n /** @enum {string} */\n source: \"adagents_json\" | \"hosted\" | \"community\" | \"discovered\" | \"enriched\";\n property_count: number;\n agent_count: number;\n verified: boolean;\n };\n ValidationResult: {\n valid: boolean;\n domain?: string;\n url?: string;\n errors?: string[];\n warnings?: string[];\n status_code?: number;\n raw_data?: {\n [key: string]: unknown;\n };\n };\n FederatedAgentWithDetails: {\n url: string;\n name: string;\n /** @enum {string} */\n type: \"brand\" | \"rights\" | \"measurement\" | \"governance\" | \"creative\" | \"sales\" | \"buying\" | \"signals\" | \"unknown\";\n /** @enum {string} */\n protocol?: \"mcp\" | \"a2a\";\n description?: string;\n mcp_endpoint?: string;\n contact?: {\n name: string;\n email: string;\n website: string;\n };\n added_date?: string;\n /** @description AAO member that owns this agent record. The registry contains only agents that members have explicitly enrolled on their member profile. */\n member?: {\n slug?: string;\n display_name?: string;\n /** @description Raw AAO membership tier enum (e.g. `individual_professional`, `company_leader`). Present only when the profile owner has set their member card to public (`is_public=true`) AND the org has a resolvable tier. Absent for private profiles and for orgs without an active tier-bearing subscription. */\n membership_tier?: string;\n /** @description Human-readable label for `membership_tier` (e.g. `Professional`, `Partner`, `Leader`). Matches the AAO pricing page. Use this for UI display; the raw enum is for programmatic gating. Presence rules match `membership_tier`. */\n membership_tier_label?: string;\n /** @description True when the profile owner carries the Founding Member badge (joined before the founding-cohort cutoff). Surfaced when the profile owner has set their member card to public (`is_public=true`). Absent for private profiles. Founding Member is orthogonal to tier — founding orgs typically display both (e.g. Scope3 shows `Partner` + `Founding Member`). */\n is_founding_member?: boolean;\n };\n health?: components[\"schemas\"][\"AgentHealth\"];\n stats?: components[\"schemas\"][\"AgentStats\"];\n capabilities?: components[\"schemas\"][\"AgentCapabilities\"];\n compliance?: components[\"schemas\"][\"AgentCompliance\"];\n publisher_domains?: string[];\n property_summary?: components[\"schemas\"][\"PropertySummary\"];\n };\n AgentHealth: {\n online: boolean;\n checked_at: string;\n response_time_ms?: number;\n tools_count?: number;\n resources_count?: number;\n error?: string;\n };\n AgentStats: {\n property_count?: number;\n publisher_count?: number;\n publishers?: string[];\n creative_formats?: number;\n };\n AgentCapabilities: {\n tools_count: number;\n tools?: {\n name: string;\n description: string;\n }[];\n standard_operations?: {\n can_search_inventory: boolean;\n can_get_availability: boolean;\n can_reserve_inventory: boolean;\n can_get_pricing: boolean;\n can_create_order: boolean;\n can_list_properties: boolean;\n };\n creative_capabilities?: {\n supported_formats: ({\n capability_id?: string;\n format: {\n format_kind: string;\n publisher_domain?: string;\n format_option_id?: string;\n params?: {\n [key: string]: unknown;\n };\n } & {\n [key: string]: unknown;\n };\n operations: (\"build\" | \"validate\" | \"preview\")[];\n } & {\n [key: string]: unknown;\n })[];\n can_generate: boolean;\n can_validate: boolean;\n can_preview: boolean;\n } & {\n [key: string]: unknown;\n };\n signals_capabilities?: {\n audience_types: string[];\n can_match: boolean;\n can_activate: boolean;\n can_get_signals: boolean;\n };\n /** @description Vendor-published per-metric catalog for measurement agents. Populated when the crawler successfully fetched and validated `get_adcp_capabilities.measurement` (AdCP 3.x). Mirrors the protocol shape — see the AdCP `get_adcp_capabilities` reference for field semantics. */\n measurement_capabilities?: {\n metrics: {\n metric_id: string;\n standard_reference?: string;\n accreditations?: {\n accrediting_body: string;\n certification_id?: string;\n valid_until?: string;\n evidence_url?: string;\n /**\n * @description Always `false` — accreditation claims are vendor-asserted. AAO does not independently verify; renderers should mark these as vendor claims.\n * @enum {boolean}\n */\n verified_by_aao: false;\n }[];\n unit?: string;\n description?: string;\n methodology_url?: string;\n methodology_version?: string;\n }[];\n };\n };\n AgentCompliance: {\n /** @enum {string} */\n status: \"passing\" | \"degraded\" | \"failing\" | \"unknown\";\n /** @description Requested compliance target before alias resolution, e.g. 3.0 or 3.1-beta. */\n requested_compliance_target?: string | null;\n /** @description Concrete AdCP compliance bundle version used for the latest run, e.g. 3.0.12. */\n adcp_version?: string | null;\n /** @enum {string} */\n lifecycle_stage: \"development\" | \"testing\" | \"production\" | \"deprecated\";\n /**\n * @example {\n * \"core\": \"pass\",\n * \"products\": \"fail\"\n * }\n */\n tracks: {\n [key: string]: string;\n };\n /** @description Latest-run per-track summary. Skipped tracks with has_coverage_gap_skip=true represent selected coverage gaps, such as missing_test_controller. */\n track_details?: {\n track: string;\n status: string;\n scenario_count: number;\n passed_count: number;\n duration_ms: number;\n has_coverage_gap_skip?: boolean;\n }[];\n streak_days: number;\n last_checked_at: string | null;\n headline: string | null;\n monitoring_paused?: boolean;\n check_interval_hours?: number;\n verified?: boolean;\n /** @description AdCP protocols the agent is AAO Verified for (e.g. media-buy, creative). Matches enums/adcp-protocol.json. */\n verified_roles?: (\"media-buy\" | \"signals\" | \"governance\" | \"creative\" | \"brand\" | \"sponsored-intelligence\" | \"measurement\")[];\n };\n PropertySummary: {\n total_count: number;\n count_by_type: {\n [key: string]: number;\n };\n tags: string[];\n publisher_count: number;\n };\n FederatedPublisher: {\n domain: string;\n member?: {\n slug?: string;\n display_name?: string;\n /** @description Raw AAO membership tier enum (e.g. `individual_professional`, `company_leader`). Present only when the profile owner has set their member card to public (`is_public=true`) AND the org has a resolvable tier. Absent for private profiles and for orgs without an active tier-bearing subscription. */\n membership_tier?: string;\n /** @description Human-readable label for `membership_tier` (e.g. `Professional`, `Partner`, `Leader`). Matches the AAO pricing page. Use this for UI display; the raw enum is for programmatic gating. Presence rules match `membership_tier`. */\n membership_tier_label?: string;\n /** @description True when the profile owner carries the Founding Member badge (joined before the founding-cohort cutoff). Surfaced when the profile owner has set their member card to public (`is_public=true`). Absent for private profiles. Founding Member is orthogonal to tier — founding orgs typically display both (e.g. Scope3 shows `Partner` + `Founding Member`). */\n is_founding_member?: boolean;\n };\n agent_count?: number;\n last_validated?: string;\n has_valid_adagents?: boolean;\n };\n DomainLookupResult: {\n /** @example examplepub.com */\n domain: string;\n authorized_agents: {\n url: string;\n authorized_for?: string;\n member?: {\n slug?: string;\n display_name?: string;\n /** @description Raw AAO membership tier enum (e.g. `individual_professional`, `company_leader`). Present only when the profile owner has set their member card to public (`is_public=true`) AND the org has a resolvable tier. Absent for private profiles and for orgs without an active tier-bearing subscription. */\n membership_tier?: string;\n /** @description Human-readable label for `membership_tier` (e.g. `Professional`, `Partner`, `Leader`). Matches the AAO pricing page. Use this for UI display; the raw enum is for programmatic gating. Presence rules match `membership_tier`. */\n membership_tier_label?: string;\n /** @description True when the profile owner carries the Founding Member badge (joined before the founding-cohort cutoff). Surfaced when the profile owner has set their member card to public (`is_public=true`). Absent for private profiles. Founding Member is orthogonal to tier — founding orgs typically display both (e.g. Scope3 shows `Partner` + `Founding Member`). */\n is_founding_member?: boolean;\n };\n }[];\n sales_agents_claiming: {\n url: string;\n member?: {\n slug?: string;\n display_name?: string;\n /** @description Raw AAO membership tier enum (e.g. `individual_professional`, `company_leader`). Present only when the profile owner has set their member card to public (`is_public=true`) AND the org has a resolvable tier. Absent for private profiles and for orgs without an active tier-bearing subscription. */\n membership_tier?: string;\n /** @description Human-readable label for `membership_tier` (e.g. `Professional`, `Partner`, `Leader`). Matches the AAO pricing page. Use this for UI display; the raw enum is for programmatic gating. Presence rules match `membership_tier`. */\n membership_tier_label?: string;\n /** @description True when the profile owner carries the Founding Member badge (joined before the founding-cohort cutoff). Surfaced when the profile owner has set their member card to public (`is_public=true`). Absent for private profiles. Founding Member is orthogonal to tier — founding orgs typically display both (e.g. Scope3 shows `Partner` + `Founding Member`). */\n is_founding_member?: boolean;\n };\n }[];\n };\n OperatorLookupResult: {\n /** @example pubmatic.com */\n domain: string;\n member: {\n slug?: string;\n display_name?: string;\n /** @description Raw AAO membership tier enum (e.g. `individual_professional`, `company_leader`). Present only when the profile owner has set their member card to public (`is_public=true`) AND the org has a resolvable tier. Absent for private profiles and for orgs without an active tier-bearing subscription. */\n membership_tier?: string;\n /** @description Human-readable label for `membership_tier` (e.g. `Professional`, `Partner`, `Leader`). Matches the AAO pricing page. Use this for UI display; the raw enum is for programmatic gating. Presence rules match `membership_tier`. */\n membership_tier_label?: string;\n /** @description True when the profile owner carries the Founding Member badge (joined before the founding-cohort cutoff). Surfaced when the profile owner has set their member card to public (`is_public=true`). Absent for private profiles. Founding Member is orthogonal to tier — founding orgs typically display both (e.g. Scope3 shows `Partner` + `Founding Member`). */\n is_founding_member?: boolean;\n } | null;\n agents: {\n url: string;\n name: string;\n /** @enum {string} */\n type: \"brand\" | \"rights\" | \"measurement\" | \"governance\" | \"creative\" | \"sales\" | \"buying\" | \"signals\" | \"unknown\";\n authorized_by: {\n publisher_domain: string;\n authorized_for?: string;\n /** @enum {string} */\n source: \"adagents_json\" | \"agent_claim\";\n }[];\n }[];\n };\n PublisherLookupResult: {\n /** @example voxmedia.com */\n domain: string;\n member: {\n slug?: string;\n display_name?: string;\n /** @description Raw AAO membership tier enum (e.g. `individual_professional`, `company_leader`). Present only when the profile owner has set their member card to public (`is_public=true`) AND the org has a resolvable tier. Absent for private profiles and for orgs without an active tier-bearing subscription. */\n membership_tier?: string;\n /** @description Human-readable label for `membership_tier` (e.g. `Professional`, `Partner`, `Leader`). Matches the AAO pricing page. Use this for UI display; the raw enum is for programmatic gating. Presence rules match `membership_tier`. */\n membership_tier_label?: string;\n /** @description True when the profile owner carries the Founding Member badge (joined before the founding-cohort cutoff). Surfaced when the profile owner has set their member card to public (`is_public=true`). Absent for private profiles. Founding Member is orthogonal to tier — founding orgs typically display both (e.g. Scope3 shows `Partner` + `Founding Member`). */\n is_founding_member?: boolean;\n } | null;\n adagents_valid: boolean | null;\n /**\n * @description How the publisher's adagents.json was discovered on the most recent successful crawl or registry write. `direct`: publisher's own /.well-known/ served the document. `authoritative_location`: publisher's stub redirected to a canonical URL. `ads_txt_managerdomain`: manifest was discovered via ads.txt MANAGERDOMAIN delegation. `adagents_authoritative`: manager file named this publisher through publisher_properties fan-out. `community_catalog`: moderator-approved community catalog. Null until first crawl after migration 470.\n * @enum {string|null}\n */\n discovery_method?: \"direct\" | \"authoritative_location\" | \"ads_txt_managerdomain\" | \"adagents_authoritative\" | \"community_catalog\" | null;\n /** @description The manager domain whose adagents.json was used to authorize this publisher's agents. Non-null only when `discovery_method` is `ads_txt_managerdomain`. Matches the MANAGERDOMAIN value from the publisher's ads.txt. */\n manager_domain?: string | null;\n hosting: {\n /**\n * @description Where this publisher's adagents.json lives. `self` = publisher hosts a valid file at their own /.well-known. `self_invalid` = publisher's /.well-known returns a file that fails validation (fixable misconfiguration, not absence). `aao_hosted` = the publisher hosts a stub at their own /.well-known whose `authoritative_location` points at AAO's canonical document. `self_redirected` = the publisher's stub `authoritative_location` resolves to a third-party HTTPS origin (a CDN, partner CMS, or sibling host) — verifiers should audit the TLS chain at `resolved_url`, not at the publisher's own origin. `none` = no adagents.json configured yet.\n * @enum {string}\n */\n mode: \"self\" | \"self_invalid\" | \"aao_hosted\" | \"self_redirected\" | \"none\";\n /** @description Canonical AAO-hosted adagents.json URL. Present iff `mode === 'aao_hosted'`. Publishers reference this URL from their own /.well-known stub via the `authoritative_location` field (see https://docs.adcontextprotocol.org/docs/governance/property/adagents). */\n hosted_url?: string;\n /** @description Where adagents.json *should* live for this domain — the publisher's own /.well-known path. Always populated, regardless of `mode`. */\n expected_url: string;\n /** @description Where the canonical adagents.json document actually lives after following the publisher's `authoritative_location` stub or any HTTP-layer redirects. Populated when `mode === 'self_redirected'` (the third-party HTTPS origin verifiers should audit) and when `mode === 'aao_hosted'` AND the publisher has actively set up the redirect (`authoritative_location` in the manifest body or a network-layer redirect to AAO's hosted URL). NULL when there's no resolved-URL evidence to report. */\n resolved_url?: string | null;\n /** @description ISO timestamp of the last successful validation crawl. Lets verifiers sanity-check freshness. NULL when never crawled. */\n last_validated?: string | null;\n /** @description HTTP status code returned by AAO's most recent fetch attempt of the publisher's `/.well-known/adagents.json`. Verifier-grade chrome — lets a buy-side scraper confirm they see the same response AAO does. NULL until the first crawl records or for transient errors that never produced an HTTP response. */\n last_http_status?: number | null;\n /** @description Response body byte length from the most recent fetch (post-decompression). When `authoritative_location` was followed, measures the canonical document body, not the stub. NULL until the first crawl records. */\n last_bytes?: number | null;\n /** @description ISO timestamp of the last successful origin verification — AAO fetched the publisher's own /.well-known/adagents.json and confirmed `authoritative_location` points at our hosted URL. When set, the publisher's authorization rows have been promoted to `source='adagents_json'` (origin-attested). NULL when never verified or last attempt failed. Only populated when `mode === 'aao_hosted'`. */\n origin_verified_at?: string | null;\n /** @description ISO timestamp of the last verification attempt regardless of result. Lets a caller render \"checked X minutes ago, not yet verified\" vs \"never checked.\" Only populated when `mode === 'aao_hosted'`. */\n origin_last_checked_at?: string | null;\n };\n /** @description Plain-English summary of what AAO has found at the publisher's origin. The publisher page leads with this — `you have a valid adagents.json` is the primary signal, not `mode === self`. Optional in the schema for backwards compatibility; the handler always populates it. */\n files?: {\n adagents_json: {\n /**\n * @description What we know about the publisher's adagents.json right now. `valid` = crawler fetched a parsing-and-shape-valid file from the publisher origin. `community` = moderators approved a community adagents.json catalog for this domain. `invalid` = crawler fetched a file that failed validation. `unknown` = never crawled or last result is stale. `checking` = an auto-crawl was kicked off by this request; the page should poll for fresh data shortly.\n * @enum {string}\n */\n status: \"valid\" | \"community\" | \"invalid\" | \"unknown\" | \"checking\";\n /** @description Where adagents.json should live on the publisher's own origin. */\n expected_url: string;\n /** @description Registry-served adagents.json URL when the document is community or AgenticAdvertising.org hosted rather than served by the publisher origin. */\n registry_url?: string;\n };\n brand_json: {\n /**\n * @description What we know about the publisher's brand.json. `present` = a brand record with manifest data exists. `unknown` = no record yet. `checking` = an auto-crawl was kicked off.\n * @enum {string}\n */\n status: \"present\" | \"unknown\" | \"checking\";\n name?: string;\n };\n };\n properties: {\n id?: string;\n type?: string;\n name?: string;\n identifiers?: components[\"schemas\"][\"PropertyIdentifier\"][];\n /** @description Arbitrary string tags on this property. The `relationship:` prefix tag (e.g. `relationship:owned`) is deprecated in favour of the `delegation_type` field and will be removed in a future release. */\n tags?: string[];\n /**\n * @description Where this property came from. `adagents_json` comes from the publisher's own adagents.json, `community` from an approved community adagents.json catalog, `discovered` from crawler or third-party signals, and `brand_json` from the publisher's brand.json when no federated-index data exists yet.\n * @enum {string}\n */\n source?: \"adagents_json\" | \"community\" | \"discovered\" | \"brand_json\";\n /**\n * @description Delegation relationship declared in brand.json. Populated only when `source` is `brand_json` — for `adagents_json` and `discovered` sources the authoritative value is on the matching `authorized_agents` entry. Mirrors adagents.json `delegation_type` for bilateral verification: `direct` = publisher treats this as a direct buying path, even if a third party operates the software; `delegated` = a rep firm or manager is authorized to sell on the publisher's behalf (operator-declared, unilateral until corroborated by the publisher's adagents.json); `ad_network` = sold as part of a network/exchange package. `owned` properties have no `delegation_type` — ownership is implicit and has no adagents.json counterpart.\n * @enum {string}\n */\n delegation_type?: \"direct\" | \"delegated\" | \"ad_network\";\n }[];\n /** @description Display-oriented brand identity summary from brand.json. The full raw document remains available from the publisher's /.well-known/brand.json or hosted registry URL. */\n brand?: {\n /** @description Display name from brand.json or the registered brand row. */\n name?: string;\n /** @description Short brand or house description when present in brand.json. */\n description?: string;\n /** @description First usable logo URL from brand.json. */\n logo_url?: string;\n /** @description Representative hex colors from brand.json, capped for display. */\n colors?: string[];\n /** @description Industry labels from brand.json when present. */\n industries?: string[];\n };\n /** @description Lossy display-oriented summary of top-level adagents.json `formats[]`, normalized for publisher pages and eligibility discovery. It preserves `format_kind`, `format_option_id`, params, property scope, preference, and experimental status, but omits `v1_format_ref`, `canonical_formats_only`, `applies_to_channels`, `publisher_domain`, and custom `format_shape`/`format_schema`. Fetch the canonical document at hosting.resolved_url (or hosting.expected_url when self-hosted) for creative validation. */\n formats?: {\n /** @description Stable format option identifier from adagents.json `formats[]`. */\n format_option_id?: string;\n /** @description Human-readable format label for catalog and publisher UI display. */\n display_name: string;\n /** @description Canonical format discriminator, such as `image`, `video_hosted`, `native_in_feed`, or `custom`. */\n format_kind: string;\n /** @description Optional public HTTPS page where a human can inspect a sample render of this catalog format using publisher- or community-mirror-provided example assets. Informational only; this is not a renderer endpoint, buyer-asset preview, validation result, creative approval, proof of publisher acceptance, or live delivery guarantee. */\n sample_render_url?: string;\n /** @description Canonical format params from the publisher's adagents.json declaration. */\n params?: {\n [key: string]: unknown;\n };\n /** @description Property IDs this format applies to; absent means all properties. */\n applies_to_property_ids?: string[];\n /** @description Property tags this format applies to; absent means all properties. */\n applies_to_property_tags?: string[];\n /** @description Seller preference hint from the format declaration, when present. */\n seller_preference?: string;\n /** @description Whether this seller's format declaration is marked experimental. */\n experimental?: boolean;\n }[];\n /** @description Eligibility-oriented publisher placement summaries. Present only when the request includes `include=placements`; format references are resolved to canonical kind/params so callers can join property → placement → format without a second origin fetch. */\n placements?: {\n placement_id: string;\n name: string;\n description?: string;\n property_ids?: string[];\n property_tags?: string[];\n collection_ids?: string[];\n channels?: string[];\n tags?: string[];\n /** @description Placement format references resolved against the same response's top-level formats plus any inline canonical declarations. */\n format_options?: {\n format_option_id?: string;\n /** @description Resolved canonical format kind accepted by this placement. */\n format_kind: string;\n /** @description Resolved canonical narrowing for this placement format. */\n params?: {\n [key: string]: unknown;\n };\n }[];\n /**\n * @description Publisher-origin placements are adagents_json; moderator-maintained catalog placements are community.\n * @enum {string}\n */\n source: \"adagents_json\" | \"community\";\n }[];\n authorized_agents: {\n url: string;\n authorized_for?: string;\n /**\n * @description How strongly this authorization is attested. `adagents_json`: the publisher's origin actually serves a valid adagents.json (origin-verified). `aao_hosted`: AAO is hosting the canonical document on the publisher's behalf — represents publisher intent but origin has NOT been verified to redirect to AAO. `agent_claim`: the agent claimed it; publisher has not confirmed.\n * @enum {string}\n */\n source: \"adagents_json\" | \"aao_hosted\" | \"agent_claim\";\n /** @description Count of this publisher's properties the agent is authorized to sell. Absent when `rollup_truncated` is set (call `/api/registry/publisher/authorization` for the per-agent count) or when properties are entirely brand.json-hydrated (no adagents.json claim has actually been made about them). */\n properties_authorized?: number;\n /** @description Total number of properties this publisher exposes through the registry. Same value across all agents in the response. Absent when `properties_authorized` is absent. */\n properties_total?: number;\n /** @description True when the agent has only a publisher-wide authorization row and `properties_authorized` was synthesized as `properties_total`. False when the agent has property-level authorization rows. Absent when the rollup is absent. */\n publisher_wide?: boolean;\n }[];\n /** @description Set when the publisher has more authorized agents than the per-agent rollup cap. Above the cap, agents beyond `cap` are returned without `properties_authorized` / `properties_total` / `publisher_wide`; call `/api/registry/publisher/authorization?domain=X&agent=Y` for the per-agent count. Lets a caller decide whether to fan out individual calls or stop reading. */\n rollup_truncated?: {\n /** @description Maximum number of agents for which the rollup is computed in a single response. */\n cap: number;\n /** @description Total authorized-agent count for this publisher (the full population the cap was applied to). */\n total_agents: number;\n };\n /** @description Set to `true` when this request triggered a background crawl of the publisher's origin (we hadn't crawled before). The client should refetch in ~3-5s to pick up fresh data. Debounced per-domain so a tight refresh loop won't keep firing crawls. */\n auto_crawl_triggered?: boolean;\n };\n PublisherPropertySelector: {\n /** @example examplepub.com */\n publisher_domain?: string;\n property_types?: string[];\n property_ids?: string[];\n tags?: string[];\n };\n CreateAdagentsResponse: {\n /** @enum {boolean} */\n success: true;\n data: {\n /** @enum {boolean} */\n success: true;\n /** @description Pretty-printed adagents.json document generated by the service. */\n adagents_json: string;\n validation: components[\"schemas\"][\"AdagentsValidationResult\"];\n };\n /** Format: date-time */\n timestamp: string;\n };\n AdagentsValidationResult: {\n valid: boolean;\n errors: components[\"schemas\"][\"AdagentsValidationIssue\"][];\n warnings: components[\"schemas\"][\"AdagentsValidationWarning\"][];\n domain: string;\n url: string;\n status_code?: number;\n response_bytes?: number;\n resolved_url?: string;\n raw_data?: unknown;\n /** @enum {string} */\n discovery_method: \"direct\" | \"authoritative_location\" | \"ads_txt_managerdomain\" | \"adagents_authoritative\";\n manager_domain?: string;\n };\n AdagentsValidationIssue: {\n field: string;\n message: string;\n /** @enum {string} */\n severity: \"error\";\n };\n AdagentsValidationWarning: {\n field: string;\n message: string;\n suggestion?: string;\n };\n AdagentsAuthorizedAgent: {\n /**\n * Format: uri\n * @description Agent endpoint URL.\n */\n url: string;\n authorized_for?: string;\n /** @enum {string} */\n authorization_type?: \"property_ids\" | \"property_tags\" | \"inline_properties\" | \"publisher_properties\" | \"signal_ids\" | \"signal_tags\";\n property_ids?: string[];\n property_tags?: string[];\n properties?: {\n [key: string]: unknown;\n }[];\n publisher_properties?: {\n publisher_domain?: string;\n publisher_domains?: string[];\n /** @enum {string} */\n selection_type: \"all\" | \"by_id\" | \"by_tag\";\n property_ids?: string[];\n property_tags?: string[];\n }[];\n collections?: {\n publisher_domain: string;\n collection_ids: string[];\n }[];\n placement_ids?: string[];\n placement_tags?: string[];\n /** @enum {string} */\n delegation_type?: \"direct\" | \"delegated\" | \"ad_network\";\n exclusive?: boolean;\n countries?: string[];\n effective_from?: string;\n effective_until?: string;\n signal_ids?: string[];\n signal_tags?: string[];\n signing_keys?: {\n [key: string]: unknown;\n }[];\n } & {\n [key: string]: unknown;\n };\n CommunityMirrorProposalListResponse: {\n proposals: components[\"schemas\"][\"CommunityMirrorProposalSummary\"][];\n total: number;\n };\n CommunityMirrorProposalSummary: {\n /**\n * Format: uuid\n * @description Opaque identifier for the proposal.\n * @example 4ec8bc86-6180-4d0e-aa72-9cbf402d3638\n */\n id: string;\n /**\n * @description Lowercase platform identifier, normalized by the service.\n * @example example_platform\n */\n platform: string;\n catalog_etag: string | null;\n /** @description HTTPS URL. */\n superseded_by: string | null;\n /** @description SHA-256 digest that reviewers must echo when approving or rejecting this exact revision. */\n proposal_digest: string;\n /** @description Digest of the public mirror state this proposal was reviewed against, or null when none existed. */\n base_mirror_digest: string | null;\n /** @enum {string} */\n status: \"pending\" | \"approved\" | \"rejected\";\n /** Format: date-time */\n proposed_at: string;\n /** Format: date-time */\n reviewed_at: string | null;\n /** Format: date-time */\n published_at: string | null;\n /** Format: date-time */\n updated_at: string;\n };\n RateLimitError: {\n error: string;\n message?: string;\n /** @description Seconds to wait before retrying. */\n retryAfter?: number;\n };\n CommunityMirrorProposalGetResponse: {\n proposal: components[\"schemas\"][\"CommunityMirrorProposal\"];\n };\n CommunityMirrorProposal: {\n /**\n * Format: uuid\n * @description Opaque identifier for the proposal.\n * @example 4ec8bc86-6180-4d0e-aa72-9cbf402d3638\n */\n id: string;\n /**\n * @description Lowercase platform identifier, normalized by the service.\n * @example example_platform\n */\n platform: string;\n adagents_json: components[\"schemas\"][\"CommunityMirrorAdagentsJson\"];\n catalog_etag: string | null;\n /** @description HTTPS URL. */\n superseded_by: string | null;\n /** @description SHA-256 digest that reviewers must echo when approving or rejecting this exact revision. */\n proposal_digest: string;\n /** @description Digest of the public mirror state this proposal was reviewed against, or null when none existed. */\n base_mirror_digest: string | null;\n /** @enum {string} */\n status: \"pending\" | \"approved\" | \"rejected\";\n proposed_by_organization_id: string | null;\n /**\n * Format: email\n * @description Contributor email, returned only to registry moderators and AgenticAdvertising.org administrators.\n */\n proposed_by_email?: string | null;\n /** Format: date-time */\n proposed_at: string;\n /** Format: date-time */\n reviewed_at: string | null;\n review_notes: string | null;\n /** Format: date-time */\n published_at: string | null;\n /** Format: date-time */\n created_at: string;\n /** Format: date-time */\n updated_at: string;\n };\n CommunityMirrorAdagentsJson: {\n /** Format: uri */\n $schema?: string;\n /** @description Always empty for community mirrors; these catalogs never assert sales authorization. */\n authorized_agents: components[\"schemas\"][\"AdagentsAuthorizedAgent\"][];\n properties?: {\n [key: string]: unknown;\n }[];\n catalog_etag?: string;\n formats?: {\n [key: string]: unknown;\n }[];\n placements?: {\n [key: string]: unknown;\n }[];\n placement_tags?: {\n [key: string]: unknown;\n };\n collections?: {\n [key: string]: unknown;\n }[];\n signals?: {\n [key: string]: unknown;\n }[];\n signal_tags?: {\n [key: string]: unknown;\n };\n contact?: unknown;\n /** @description HTTPS URL for the canonical successor adagents.json document. Clients should re-fetch the successor and update cached mirror references before retiring use of this mirror. */\n superseded_by?: string;\n /** Format: date-time */\n last_updated?: string;\n } & {\n [key: string]: unknown;\n };\n CommunityMirrorProposalApprovalResponse: components[\"schemas\"][\"CommunityMirrorPublishResponse\"] & {\n /**\n * Format: uuid\n * @description Opaque identifier for the proposal.\n * @example 4ec8bc86-6180-4d0e-aa72-9cbf402d3638\n */\n proposal_id: string;\n };\n CommunityMirrorPublishResponse: {\n /** @enum {boolean} */\n success: true;\n /**\n * @description Lowercase platform identifier, normalized by the service.\n * @example example_platform\n */\n platform: string;\n catalog_etag: string | null;\n /** @description HTTPS successor document URL, when this mirror has been superseded. */\n superseded_by: string | null;\n /** @description Publisher domains updated from this community mirror catalog. */\n publisher_domains: string[];\n /** Format: date-time */\n updated_at: string;\n };\n CommunityMirrorPublishError: {\n error: string;\n /** @description Validation details for request-body parse failures or adagents.json conformance errors. */\n details?: unknown[];\n };\n CommunityMirrorProposalReviewRequest: {\n /** @description SHA-256 digest that reviewers must echo when approving or rejecting this exact revision. */\n proposal_digest: string;\n review_notes?: string;\n };\n CommunityMirrorProposalDecisionResponse: {\n /** @enum {boolean} */\n success: true;\n proposal: components[\"schemas\"][\"CommunityMirrorProposal\"];\n };\n CommunityMirrorProposalRejectRequest: {\n /** @description SHA-256 digest that reviewers must echo when approving or rejecting this exact revision. */\n proposal_digest: string;\n review_notes: string;\n };\n CommunityMirrorListResponse: {\n mirrors: components[\"schemas\"][\"CommunityMirrorSummary\"][];\n total: number;\n };\n CommunityMirrorSummary: {\n /**\n * @description Lowercase platform identifier, normalized by the service.\n * @example example_platform\n */\n platform: string;\n catalog_etag: string | null;\n /** @description HTTPS successor document URL, when this mirror has been superseded. */\n superseded_by: string | null;\n /** Format: date-time */\n updated_at: string;\n };\n CommunityMirrorGetResponse: {\n /**\n * @description Lowercase platform identifier, normalized by the service.\n * @example example_platform\n */\n platform: string;\n catalog_etag: string | null;\n /** @description HTTPS successor document URL, when this mirror has been superseded. */\n superseded_by: string | null;\n adagents_json: components[\"schemas\"][\"CommunityMirrorAdagentsJson\"];\n /** Format: date-time */\n created_at: string;\n /** Format: date-time */\n updated_at: string;\n };\n CommunityMirrorProposalSubmissionResponse: {\n /** @enum {boolean} */\n success: true;\n /** @enum {string} */\n status: \"pending\";\n /**\n * Format: uuid\n * @description Opaque identifier for the proposal.\n * @example 4ec8bc86-6180-4d0e-aa72-9cbf402d3638\n */\n proposal_id: string;\n /** @description SHA-256 digest that reviewers must echo when approving or rejecting this exact revision. */\n proposal_digest: string;\n /**\n * @description Lowercase platform identifier, normalized by the service.\n * @example example_platform\n */\n platform: string;\n /** @description Authenticated API path for fetching proposal status and content. */\n status_url: string;\n /** Format: date-time */\n submitted_at: string;\n };\n /** @description Catalog-only adagents.json body for a community mirror. At least one of `formats`, `properties`, `placements`, `collections`, or `signals` must be present and non-empty. The service regenerates `$schema` and `last_updated` before persisting. */\n CommunityMirrorPublishRequest: ({\n catalog_etag?: string;\n formats: {\n [key: string]: unknown;\n }[];\n properties?: {\n [key: string]: unknown;\n }[];\n placements?: {\n [key: string]: unknown;\n }[];\n placement_tags?: {\n [key: string]: unknown;\n };\n collections?: {\n [key: string]: unknown;\n }[];\n signals?: {\n [key: string]: unknown;\n }[];\n signal_tags?: {\n [key: string]: unknown;\n };\n contact?: unknown;\n /** @description HTTPS URL for the canonical successor adagents.json document. Set this before deleting a mirror so buyers can migrate cached references. */\n superseded_by?: string;\n } & {\n [key: string]: unknown;\n }) | ({\n catalog_etag?: string;\n formats?: {\n [key: string]: unknown;\n }[];\n properties: {\n [key: string]: unknown;\n }[];\n placements?: {\n [key: string]: unknown;\n }[];\n placement_tags?: {\n [key: string]: unknown;\n };\n collections?: {\n [key: string]: unknown;\n }[];\n signals?: {\n [key: string]: unknown;\n }[];\n signal_tags?: {\n [key: string]: unknown;\n };\n contact?: unknown;\n /** @description HTTPS URL for the canonical successor adagents.json document. Set this before deleting a mirror so buyers can migrate cached references. */\n superseded_by?: string;\n } & {\n [key: string]: unknown;\n }) | ({\n catalog_etag?: string;\n formats?: {\n [key: string]: unknown;\n }[];\n properties?: {\n [key: string]: unknown;\n }[];\n placements: {\n [key: string]: unknown;\n }[];\n placement_tags?: {\n [key: string]: unknown;\n };\n collections?: {\n [key: string]: unknown;\n }[];\n signals?: {\n [key: string]: unknown;\n }[];\n signal_tags?: {\n [key: string]: unknown;\n };\n contact?: unknown;\n /** @description HTTPS URL for the canonical successor adagents.json document. Set this before deleting a mirror so buyers can migrate cached references. */\n superseded_by?: string;\n } & {\n [key: string]: unknown;\n }) | ({\n catalog_etag?: string;\n formats?: {\n [key: string]: unknown;\n }[];\n properties?: {\n [key: string]: unknown;\n }[];\n placements?: {\n [key: string]: unknown;\n }[];\n placement_tags?: {\n [key: string]: unknown;\n };\n collections: {\n [key: string]: unknown;\n }[];\n signals?: {\n [key: string]: unknown;\n }[];\n signal_tags?: {\n [key: string]: unknown;\n };\n contact?: unknown;\n /** @description HTTPS URL for the canonical successor adagents.json document. Set this before deleting a mirror so buyers can migrate cached references. */\n superseded_by?: string;\n } & {\n [key: string]: unknown;\n }) | ({\n catalog_etag?: string;\n formats?: {\n [key: string]: unknown;\n }[];\n properties?: {\n [key: string]: unknown;\n }[];\n placements?: {\n [key: string]: unknown;\n }[];\n placement_tags?: {\n [key: string]: unknown;\n };\n collections?: {\n [key: string]: unknown;\n }[];\n signals: {\n [key: string]: unknown;\n }[];\n signal_tags?: {\n [key: string]: unknown;\n };\n contact?: unknown;\n /** @description HTTPS URL for the canonical successor adagents.json document. Set this before deleting a mirror so buyers can migrate cached references. */\n superseded_by?: string;\n } & {\n [key: string]: unknown;\n });\n CommunityMirrorDeleteResponse: {\n /** @enum {boolean} */\n success: true;\n /**\n * @description Lowercase platform identifier, normalized by the service.\n * @example example_platform\n */\n platform: string;\n };\n PolicySummary: {\n /** @example gdpr_consent */\n policy_id: string;\n /** @example 1.0.0 */\n version: string;\n /** @example GDPR Consent Requirements */\n name: string;\n /** @example Requirements for valid consent under GDPR */\n description: string | null;\n /** @enum {string} */\n category: \"regulation\" | \"standard\";\n /** @enum {string} */\n enforcement: \"must\" | \"should\" | \"may\";\n /**\n * @example [\n * \"EU\",\n * \"EEA\"\n * ]\n */\n jurisdictions: string[];\n /**\n * @example {\n * \"EU\": [\n * \"DE\",\n * \"FR\",\n * \"IT\"\n * ]\n * }\n */\n region_aliases: {\n [key: string]: string[];\n };\n /**\n * @example [\n * \"age_restricted\",\n * \"pharmaceutical_advertising\"\n * ]\n */\n policy_categories: string[];\n /**\n * @example [\n * \"display\",\n * \"video\"\n * ]\n */\n channels: string[] | null;\n /**\n * @example [\n * \"campaign\",\n * \"creative\"\n * ]\n */\n governance_domains: string[];\n /** @example 2025-05-25 */\n effective_date: string | null;\n sunset_date: string | null;\n /** @example https://eur-lex.europa.eu/eli/reg/2016/679/oj */\n source_url: string | null;\n /** @example EUR-Lex */\n source_name: string | null;\n /** @enum {string} */\n source_type: \"registry\" | \"community\";\n /** @enum {string} */\n review_status: \"pending\" | \"approved\";\n /** @example 2026-03-01T12:00:00.000Z */\n created_at: string;\n /** @example 2026-03-01T12:00:00.000Z */\n updated_at: string;\n };\n Policy: {\n /** @example gdpr_consent */\n policy_id: string;\n /** @example 1.0.0 */\n version: string;\n /** @example GDPR Consent Requirements */\n name: string;\n /** @example Requirements for valid consent under GDPR */\n description: string | null;\n /** @enum {string} */\n category: \"regulation\" | \"standard\";\n /** @enum {string} */\n enforcement: \"must\" | \"should\" | \"may\";\n /**\n * @example [\n * \"EU\",\n * \"EEA\"\n * ]\n */\n jurisdictions: string[];\n /**\n * @example {\n * \"EU\": [\n * \"DE\",\n * \"FR\",\n * \"IT\"\n * ]\n * }\n */\n region_aliases: {\n [key: string]: string[];\n };\n /**\n * @example [\n * \"age_restricted\",\n * \"pharmaceutical_advertising\"\n * ]\n */\n policy_categories: string[];\n /**\n * @example [\n * \"display\",\n * \"video\"\n * ]\n */\n channels: string[] | null;\n /**\n * @example [\n * \"campaign\",\n * \"creative\"\n * ]\n */\n governance_domains: string[];\n /** @example 2025-05-25 */\n effective_date: string | null;\n sunset_date: string | null;\n /** @example https://eur-lex.europa.eu/eli/reg/2016/679/oj */\n source_url: string | null;\n /** @example EUR-Lex */\n source_name: string | null;\n /** @example Data subjects must provide freely given, specific, informed and unambiguous consent... */\n policy: string;\n guidance: string | null;\n exemplars: {\n pass?: {\n /** @example Ad for alcohol shown during children's programming */\n scenario: string;\n /** @example Violates watershed timing rules for alcohol advertising */\n explanation: string;\n }[];\n fail?: {\n /** @example Ad for alcohol shown during children's programming */\n scenario: string;\n /** @example Violates watershed timing rules for alcohol advertising */\n explanation: string;\n }[];\n } | null;\n ext: {\n [key: string]: unknown;\n } | null;\n /** @enum {string} */\n source_type: \"registry\" | \"community\";\n /** @enum {string} */\n review_status: \"pending\" | \"approved\";\n /** @example 2026-03-01T12:00:00.000Z */\n created_at: string;\n /** @example 2026-03-01T12:00:00.000Z */\n updated_at: string;\n };\n PolicyHistory: {\n /** @example gdpr_consent */\n policy_id: string;\n /** @example 3 */\n total: number;\n revisions: {\n /** @example 2 */\n revision_number: number;\n /** @example Pinnacle Media */\n editor_name: string;\n /** @example Clarified consent requirements for minors */\n edit_summary: string;\n is_rollback: boolean;\n /** @description Revision number that was restored; only present when is_rollback is true */\n rolled_back_to?: number;\n /** @example 2026-03-01T12:34:56Z */\n created_at: string;\n }[];\n };\n RegistryFeedEvent: {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"agent.discovered\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"AgentEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"agent.removed\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"AgentEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"agent.profile_updated\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"AgentEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"agent.compliance_changed\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"AgentEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"agent.verification_earned\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"AgentEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"agent.verification_lost\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"AgentEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"property.created\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"PropertyEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"property.updated\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"PropertyEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"property.merged\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"PropertyEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"property.stale\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"PropertyEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"property.reactivated\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"PropertyEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"collection.created\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"CollectionEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"collection.updated\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"CollectionEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"collection.merged\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"CollectionEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"collection.removed\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"CollectionEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"authorization.granted\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"AuthorizationEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"authorization.revoked\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"AuthorizationEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"authorization.modified\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"AuthorizationEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"publisher.adagents_changed\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"PublisherEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"publisher.adagents_discovered\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"PublisherEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n };\n AgentEventPayload: {\n /** @description Canonical agent URL; the routing key for agent.* events (agents span many publishers). */\n agent_url: string;\n name?: string;\n type?: string;\n channels?: string[];\n property_types?: string[];\n markets?: string[];\n categories?: string[];\n category_taxonomy?: string | null;\n tags?: string[];\n delivery_types?: string[];\n /** @description Deprecated 3.x named-format profile projection. */\n format_ids?: string[];\n format_kinds?: string[];\n property_count?: number;\n publisher_count?: number;\n has_tmp?: boolean;\n updated_at?: string;\n changed_fields?: string[];\n /** @description On agent.profile_updated: the agent's refreshed inventory profile. */\n inventory_profile?: {\n [key: string]: unknown;\n };\n compliance_summary?: {\n [key: string]: unknown;\n };\n /** @description On agent.compliance_changed: prior compliance/verification status. */\n previous_status?: string;\n /** @description On agent.compliance_changed: new compliance/verification status. */\n current_status?: string;\n /** @description On agent.compliance_changed: human-readable summary of the compliance transition. */\n headline?: string | null;\n /** @description On agent.compliance_changed: map of compliance track id to track status. */\n tracks?: {\n [key: string]: \"pass\" | \"fail\" | \"partial\" | \"skip\" | \"silent\" | \"warning\" | \"unknown\" | \"skipped\";\n };\n storyboards_passing?: number;\n storyboards_total?: number;\n storyboards?: ({\n storyboard_id: string;\n status: string;\n steps_passed?: number;\n steps_total?: number;\n } & {\n [key: string]: unknown;\n })[];\n /** @description On agent.verification_earned/lost: verified role affected by the badge transition. */\n role?: string;\n /** @description On agent.verification_earned: specialisms covered by the earned badge. */\n verified_specialisms?: string[];\n /** @description On agent.verification_lost: reason the badge was revoked. */\n reason?: string;\n /** @description On agent.verification_earned/lost: AdCP version the badge applies to, when known. */\n adcp_version?: string;\n } & {\n [key: string]: unknown;\n };\n PropertyEventPayload: {\n property_rid?: string;\n /** @description Publisher domain that owns the property; the routing key for property.* events. */\n publisher_domain?: string;\n identifiers?: components[\"schemas\"][\"PropertyIdentifier\"][];\n classification?: string;\n /** @enum {string} */\n source?: \"authoritative\" | \"enriched\" | \"contributed\";\n /** @description Optional full post-change property object when available. */\n property?: {\n [key: string]: unknown;\n };\n changed_fields?: string[];\n /** @description On property.stale: last successful resolution timestamp. */\n last_resolved_at?: string;\n /** @description On property.reactivated: reactivation timestamp when available. */\n reactivated_at?: string;\n /** @description On property.stale: reason the property aged out of active resolution. */\n reason?: string;\n /** @description On property.merged: the RID merged away. */\n alias_rid?: string;\n /** @description On property.merged: the surviving RID. */\n canonical_rid?: string;\n evidence?: string;\n } & {\n [key: string]: unknown;\n };\n CollectionEventPayload: {\n collection_rid?: string;\n /** @description Publisher domain that owns the collection; the routing key for collection.* events. */\n publisher_domain?: string;\n collection_id?: string | null;\n name?: string | null;\n kind?: string | null;\n source?: string;\n status?: string;\n /** @description Distribution identifiers; the per-identifier publisher_domain (e.g. youtube.com) is the distribution surface, distinct from the owning publisher_domain above. */\n identifiers?: {\n publisher_domain: string;\n type: string;\n value: string;\n }[];\n collection?: {\n [key: string]: unknown;\n };\n changed_fields?: string[];\n /** @description On collection.merged: the RID merged away. */\n alias_rid?: string;\n /** @description On collection.merged: the surviving RID. */\n canonical_rid?: string;\n evidence?: string;\n } & {\n [key: string]: unknown;\n };\n AuthorizationEventPayload: {\n /**\n * Format: uuid\n * @description Registry authorization row id when the event is backed by a materialized effective authorization row.\n */\n id?: string;\n agent_url: string;\n /** @description Registry-canonicalized form of agent_url for equality checks. */\n agent_url_canonical?: string;\n /** @description Publisher domain the authorization applies to; the routing key for authorization.* events. */\n publisher_domain: string;\n /** @description Present on authorization.granted; authorization.revoked carries only agent_url + publisher_domain. */\n authorization_type?: string;\n authorized_for?: string | null;\n property_ids?: string[];\n property_tags?: string[];\n properties?: {\n [key: string]: unknown;\n }[];\n publisher_properties?: {\n [key: string]: unknown;\n }[];\n /** @description Catalog property_rid for materialized per-property authorization rows. Null for publisher-wide rows. */\n property_rid?: string | null;\n /** @description Publisher-local property id for materialized per-property authorization rows. */\n property_id_slug?: string | null;\n placement_ids?: string[];\n placement_tags?: string[];\n collections?: ({\n publisher_domain: string;\n collection_ids: string[];\n } & {\n [key: string]: unknown;\n })[];\n countries?: string[];\n delegation_type?: string;\n exclusive?: boolean;\n effective_from?: string;\n effective_until?: string;\n signing_keys?: {\n [key: string]: unknown;\n }[];\n evidence?: string;\n disputed?: boolean;\n created_by?: string | null;\n expires_at?: string | null;\n created_at?: string | null;\n updated_at?: string | null;\n override_applied?: boolean;\n override_reason?: string | null;\n } & {\n [key: string]: unknown;\n };\n PublisherEventPayload: {\n /** @description Publisher domain whose adagents.json was discovered/changed; the routing key for publisher.* events. */\n publisher_domain?: string;\n /** @description Legacy alias for publisher_domain retained for early feed examples. */\n domain?: string;\n properties_added?: number;\n properties_removed?: number;\n agents_added?: string[];\n agents_removed?: string[];\n agent_count?: number;\n property_count?: number;\n collection_count?: number;\n /** @description Number of top-level formats[] declarations after the revision. */\n format_count?: number;\n /** @description Number of top-level placements[] declarations after the revision. */\n placement_count?: number;\n /** @description Semantic top-level adagents.json fields changed by this revision, including formats or placements. Present on newly emitted 3.2 change events. */\n changed_fields?: string[];\n discovery_method?: string;\n manager_domain?: string | null;\n source?: string;\n } & {\n [key: string]: unknown;\n };\n AgentComplianceDetail: {\n agent_url: string;\n /** @description Requested compliance target before alias resolution, e.g. 3.0 or 3.1-beta. Null for legacy rows before target recording. */\n requested_compliance_target?: string | null;\n /** @description Concrete AdCP compliance bundle version used for the latest run, e.g. 3.0.12. Null for legacy rows before version recording. */\n adcp_version?: string | null;\n /** @enum {string} */\n status: \"passing\" | \"degraded\" | \"failing\" | \"unknown\" | \"opted_out\";\n /** @enum {string} */\n lifecycle_stage: \"development\" | \"testing\" | \"production\" | \"deprecated\";\n compliance_opt_out?: boolean;\n tracks?: {\n [key: string]: string;\n };\n /** @description Latest-run per-track summary. Skipped tracks with has_coverage_gap_skip=true represent selected coverage gaps, such as missing_test_controller. */\n track_details?: {\n track: string;\n status: string;\n scenario_count: number;\n passed_count: number;\n duration_ms: number;\n has_coverage_gap_skip?: boolean;\n }[];\n streak_days?: number;\n last_checked_at?: string | null;\n last_passed_at?: string | null;\n last_failed_at?: string | null;\n headline?: string | null;\n status_changed_at?: string | null;\n storyboards_passing?: number;\n storyboards_total?: number;\n /** @description How often the heartbeat re-tests this agent, in hours */\n check_interval_hours?: number;\n /** @description Specialisms the agent declared in get_adcp_capabilities, from the latest run */\n declared_specialisms?: string[];\n /** @description Per-specialism pass/fail/untested status — keyed on declared specialism, derived from the matching storyboard's status */\n specialism_status?: {\n [key: string]: \"passing\" | \"failing\" | \"untested\" | \"unknown\";\n };\n /** @description Public per-storyboard verdicts and aggregate step counts. First-failure diagnostic fields are populated only for owners; scalar diagnostics are null and validation evidence is empty for other callers. */\n storyboard_statuses?: {\n storyboard_id: string;\n requested_compliance_target?: string | null;\n adcp_version?: string | null;\n title: string;\n category: string | null;\n track: string | null;\n /** @enum {string} */\n status: \"passing\" | \"failing\" | \"partial\" | \"untested\";\n steps_passed: number;\n steps_total: number;\n failure_count: number;\n skipped_count: number;\n first_failed_step_id: string | null;\n first_failed_step_title: string | null;\n first_failed_step_task: string | null;\n first_failure_message: string | null;\n /** @description Validation evidence for the first failure. Populated only for owners and empty for other callers. */\n first_failure_validations: unknown[];\n last_tested_at: string | null;\n last_passed_at: string | null;\n }[];\n /** @description Run-summary notices from the latest non-dry-run compliance run. Unknown codes/severities are preserved verbatim. */\n notices?: unknown[];\n /** @description Public-safe advisory observations from the latest non-dry-run compliance run. Raw evidence is intentionally omitted; this array is not merged across runs, so cleared advisories disappear on the next fresh run. */\n observations?: {\n category: string;\n severity: string;\n message: string;\n }[];\n /** @description Owner-scoped: the agent owner's membership tier. Populated only when the authenticated viewer owns the agent; null otherwise. Field is always present so response shape doesn't reveal ownership. */\n membership_tier?: string | null;\n /** @description Owner-scoped: human-readable label for membership_tier (e.g. 'Builder'). Null for non-owners. */\n membership_tier_label?: string | null;\n /** @description Owner-scoped: the agent owner's subscription status (active, past_due, trialing, etc.). Null for non-owners. */\n subscription_status?: string | null;\n /** @description Owner-scoped: true when the owner's tier and subscription status grant badge eligibility. False for non-owners. Single source of truth — UI should not re-derive. */\n is_api_access_tier?: boolean;\n /**\n * @description Owner-scoped: triggered_by value of the most recent non-dry-run compliance check. Null for non-owners and when no run has been recorded. Operators use this as a UX cue ('did this verdict come from my recent test or the system heartbeat?').\n * @enum {string|null}\n */\n verdict_source?: \"heartbeat\" | \"owner_test\" | \"manual\" | \"webhook\" | null;\n verified?: boolean;\n verified_badges?: components[\"schemas\"][\"VerificationBadge\"][];\n };\n VerificationBadge: {\n /**\n * @description AdCP protocol this badge covers (enums/adcp-protocol.json).\n * @enum {string}\n */\n role: \"media-buy\" | \"signals\" | \"governance\" | \"creative\" | \"brand\" | \"sponsored-intelligence\" | \"measurement\";\n /** @description AdCP release this badge was issued against, MAJOR.MINOR (e.g. '3.0', '3.1'). Load-bearing for badge identity — pairs with the (agent_url, role, adcp_version) PK. */\n adcp_version: string;\n verified_at: string;\n /** @description Specialisms demonstrably passed (enums/specialism.json). Preview specialisms are excluded from stable badges. */\n verified_specialisms: (\"audience-sync\" | \"brand-rights\" | \"collection-lists\" | \"content-standards\" | \"creative-ad-server\" | \"creative-generative\" | \"creative-template\" | \"creative-transformers\" | \"governance-aware-seller\" | \"governance-delivery-monitor\" | \"governance-spend-authority\" | \"property-lists\" | \"sales-broadcast-tv\" | \"sales-catalog-driven\" | \"sales-guaranteed\" | \"sales-non-guaranteed\" | \"sales-proposal-mode\" | \"sales-social\" | \"signal-marketplace\" | \"signal-owned\" | \"signed-requests\" | \"sponsored-intelligence\")[];\n /** @description Verification axes earned. 'spec' = AdCP storyboards pass for the declared specialisms. 'live' = AAO has observed real production traffic via canonical campaigns. Always non-empty when a badge is present; an absent badge is conveyed by the parent record being omitted, not by an empty array. */\n verification_modes: (\"spec\" | \"live\")[];\n verified_protocol_version: string | null;\n /** @description Legacy URL — auto-upgrades to the highest active version. For version-pinned embedding, derive `/api/registry/agents/{encoded_url}/badge/{role}/{adcp_version}.svg` where `{encoded_url}` is `encodeURIComponent(agent_url)`. */\n badge_url?: string;\n };\n AgentVerification: {\n agent_url: string;\n verified: boolean;\n badges: components[\"schemas\"][\"VerificationBadge\"][];\n registry_url?: string;\n };\n StoryboardStatus: {\n storyboard_id: string;\n /** @description Requested compliance target from the run that produced this storyboard verdict, e.g. 3.0 or 3.1-beta. */\n requested_compliance_target?: string | null;\n /** @description Concrete AdCP compliance bundle version from the run that produced this storyboard verdict. */\n adcp_version?: string | null;\n title: string;\n category: string | null;\n track: string | null;\n /** @enum {string} */\n status: \"passing\" | \"failing\" | \"partial\" | \"untested\";\n steps_passed: number;\n steps_total: number;\n /** @description Root failing or actionable skipped step count. Cascaded prerequisite skips are excluded. */\n failure_count: number;\n /** @description Cascaded prerequisite skip count for this storyboard verdict. */\n skipped_count: number;\n /** @description First root failing or actionable skipped step id, when captured. */\n first_failed_step_id: string | null;\n /** @description First root failing or actionable skipped step title, when captured. */\n first_failed_step_title: string | null;\n /** @description Task/tool name for the first root failing or actionable skipped step, when captured. */\n first_failed_step_task: string | null;\n /** @description Runner error/detail text for the first root failing or actionable skipped step, when captured. */\n first_failure_message: string | null;\n last_tested_at: string | null;\n last_passed_at: string | null;\n };\n ComplianceRun: {\n id: string;\n requested_compliance_target?: string | null;\n adcp_version?: string | null;\n overall_status: string;\n headline: string | null;\n tracks_passed: number;\n tracks_failed: number;\n tracks_skipped: number;\n tracks_partial: number;\n tracks_json?: unknown;\n total_duration_ms: number | null;\n triggered_by: string;\n tested_at: string;\n };\n RegistryMetadata: {\n agent_url: string;\n /** @enum {string} */\n lifecycle_stage: \"development\" | \"testing\" | \"production\" | \"deprecated\";\n compliance_opt_out: boolean;\n monitoring_paused: boolean;\n check_interval_hours: number;\n monitoring_paused_at: string | null;\n created_at: string;\n updated_at: string;\n };\n MonitoringSettings: {\n monitoring_paused: boolean;\n check_interval_hours: number;\n monitoring_paused_at: string | null;\n };\n ComplianceStepDiagnostic: {\n id: number | string;\n run_id: string;\n agent_url: string;\n storyboard_id: string;\n phase_id: string;\n step_id: string;\n task: string;\n step_passed: boolean;\n duration_ms?: number | null;\n request_url?: string | null;\n request_jsonb?: unknown;\n response_status?: number | null;\n response_headers_jsonb?: {\n [key: string]: string;\n } | null;\n response_jsonb?: unknown;\n extraction_path?: string | null;\n extraction_note?: string | null;\n error_text?: string | null;\n adcp_error_jsonb?: unknown;\n failed_validations_jsonb?: unknown;\n served_by_agent_url?: string | null;\n captured_at: string;\n };\n OutboundRequest: {\n id: string;\n agent_url: string;\n request_type: string;\n user_agent: string;\n response_time_ms: number | null;\n success: boolean;\n error_message: string | null;\n created_at: string;\n };\n AgentAuthStatus: {\n has_auth: boolean;\n agent_context_id: string | null;\n /** @enum {string|null} */\n auth_type: \"bearer\" | \"basic\" | \"oauth\" | \"oauth_client_credentials\" | null;\n has_oauth_token: boolean;\n has_valid_oauth: boolean;\n oauth_token_expires_at: string | null;\n has_oauth_client_credentials: boolean;\n };\n CredentialSaveValidationError: {\n error: string;\n /**\n * @description Stable rejection tag. UI maps this to operator-friendly prose.\n * @enum {string}\n */\n code: \"invalid_blob_shape\" | \"missing_field\" | \"invalid_field_type\" | \"field_too_long\" | \"invalid_url\" | \"invalid_env_reference\" | \"invalid_auth_method_value\" | \"array_too_many\" | \"array_too_few\" | \"aggregate_too_long\";\n /**\n * @description Field the UI should scroll to + highlight.\n * @enum {string}\n */\n field: \"oauth_client_credentials\" | \"token_endpoint\" | \"client_id\" | \"client_secret\" | \"scope\" | \"resource\" | \"audience\" | \"auth_method\";\n };\n StoryboardSummary: {\n id: string;\n title: string;\n category: string;\n summary: string;\n interaction_model: string;\n examples: string[];\n phase_count: number;\n step_count: number;\n };\n StoryboardDetail: {\n id: string;\n title: string;\n category: string;\n summary: string;\n agent: {\n interaction_model: string;\n examples?: string[];\n };\n phases: {\n title: string;\n steps: {\n id: string;\n title: string;\n description: string;\n expected_output: string;\n }[];\n }[];\n prerequisites?: unknown;\n required_tools?: string[];\n track?: string;\n };\n FindCompanyResult: {\n results: components[\"schemas\"][\"CompanySearchResult\"][];\n };\n CompanySearchResult: {\n /** @example coca-cola.com */\n domain: string;\n /** @example coca-cola.com */\n canonical_domain: string;\n /** @example The Coca-Cola Company */\n brand_name: string;\n /** @example coca-cola.com */\n house_domain?: string;\n /** @enum {string} */\n keller_type?: \"master\" | \"sub_brand\" | \"endorsed\" | \"independent\";\n parent_brand?: string;\n brand_agent_url?: string;\n /** @example community */\n source: string;\n };\n MemberAgentListResponse: {\n agents: components[\"schemas\"][\"MemberAgent\"][];\n };\n /** @description Agent entry stored on a member profile. `type` is required on read because every write surface declares it and the operator endpoint always emits it; a stored value of `unknown` is the smuggle-protection outcome (snapshot contradicted the declaration without classifying it) and is the only path that surfaces an agent without a real type. */\n MemberAgent: {\n /**\n * Format: uri\n * @example https://agent.example.com/mcp\n */\n url: string;\n visibility: components[\"schemas\"][\"MemberAgentVisibility\"];\n type: components[\"schemas\"][\"MemberAgentType\"];\n name?: string;\n /**\n * Format: uri\n * @description Optional fallback liveness URL used by the health probe when the protocol handshake fails.\n */\n health_check_url?: string;\n };\n /**\n * @description Visibility tier on the registry catalog. `private` = profile owner only; `members_only` = AAO API-tier members on operator lookup; `public` = listed in the public catalog and reflected in the org's `brand.json` (requires a paid AAO tier — Professional, Builder, Member, or Leader).\n * @enum {string}\n */\n MemberAgentVisibility: \"private\" | \"members_only\" | \"public\";\n /**\n * @description Agent type as stored on the registry. Server-side smuggle protection compares the caller's declaration against the capability snapshot (when one exists) and may stamp `unknown` if the snapshot contradicts the declaration without classifying it. `unknown` is reserved for that server-side outcome; clients cannot submit it.\n * @enum {string}\n */\n MemberAgentType: \"brand\" | \"rights\" | \"measurement\" | \"governance\" | \"creative\" | \"sales\" | \"buying\" | \"signals\" | \"unknown\";\n MemberAgentResponse: {\n agent: components[\"schemas\"][\"MemberAgent\"];\n warnings?: components[\"schemas\"][\"MemberAgentVisibilityWarning\"][];\n /** @description Set to `true` when this `POST` was the caller's first interaction with the registry and the server auto-created the organization (display name derived from the user's email domain for corporate emails, or `<First Last>'s Workspace` for free-email providers). Combined with `profile_auto_created`, this is the one-call storefront experience: a third-party app holding only an OAuth token gets the org, profile, and registered agent in a single request. */\n org_auto_created?: boolean;\n /** @description Set to `true` when this `POST` was the first agent registration on the caller's organization and the server auto-created a private member profile (display name = organization name, `is_public: false`). Absent on subsequent calls and on update-in-place. Surfaced so storefront-style integrations can show a \"we set up your profile\" hint without needing to detect the prior 404 → bootstrap → retry shape. */\n profile_auto_created?: boolean;\n };\n /** @description Emitted when the tier gate downgrades a requested visibility. */\n MemberAgentVisibilityWarning: {\n /** @enum {string} */\n code: \"visibility_downgraded\";\n agent_url: string;\n /** @enum {string} */\n requested: \"public\";\n /** @enum {string} */\n applied: \"members_only\";\n /** @enum {string} */\n reason: \"tier_required\";\n message: string;\n };\n /** @description Request body for `POST /api/me/agents`. `type` is required — the owner declares it; the server never infers. */\n MemberAgentInput: {\n /**\n * Format: uri\n * @example https://agent.example.com/mcp\n */\n url: string;\n type: components[\"schemas\"][\"MemberAgentTypeInput\"];\n name?: string;\n visibility?: components[\"schemas\"][\"MemberAgentVisibility\"];\n /** Format: uri */\n health_check_url?: string;\n };\n /**\n * @description Agent type the caller declares. Required on register; smuggle-protection still cross-checks against the capability snapshot when one exists. The server never infers `type` — the owner declares what kind of agent this is.\n * @enum {string}\n */\n MemberAgentTypeInput: \"brand\" | \"rights\" | \"measurement\" | \"governance\" | \"creative\" | \"sales\" | \"buying\" | \"signals\";\n /** @description Request body for `PATCH /api/me/agents/{url}`. The `url` field cannot be changed via PATCH; re-register at the new URL and DELETE the old entry instead. If `type` is omitted, the existing value is preserved. */\n MemberAgentPatch: {\n name?: string;\n visibility?: components[\"schemas\"][\"MemberAgentVisibility\"];\n type?: components[\"schemas\"][\"MemberAgentTypeInput\"];\n /** Format: uri */\n health_check_url?: string;\n };\n /** @description Response from `POST /api/organizations`. The body shape varies by path: a fresh creation returns `{ success: true, organization: { id, name } }`; a prospect adoption returns `{ id, name, adopted: true }` directly. Both paths are 2xx; downstream callers should treat any `2xx` as \"the org now exists and you are an owner of it\" and read whichever id is present. */\n CreateOrganizationResponse: {\n success?: boolean;\n organization?: {\n /** @example org_01HXZAB123 */\n id: string;\n /** @example Acme Media */\n name: string;\n };\n /** @description Set on the **prospect-adoption** path: when an org with the user's email domain already exists in a `prospect` state (i.e. the registry pre-recorded it from a brand crawl but no human had claimed it yet), this call adopts that org for the caller instead of creating a new one. */\n id?: string;\n name?: string;\n /** @description `true` when the response is the prospect-adoption path. When `true`, no new WorkOS organization was created — the caller is now the owner of an existing prospect record. */\n adopted?: boolean;\n };\n /**\n * @description Request body for `POST /api/organizations`.\n *\n * Bootstraps a WorkOS organization, mirrors the caller as `owner`, records the caller's ToS / privacy-policy acceptance, and (for non-personal orgs) inserts an email-verified record into `organization_domains` so subsequent registry calls can skip explicit domain-verification.\n *\n * Membership tier and corporate domain are *not* caller-supplied: the tier is set by the Stripe webhook on subscription events, and the corporate domain is derived from the authenticated user's email.\n */\n CreateOrganizationInput: {\n /**\n * @description Display name for the organization. Used both as the org row name and (when auto-bootstrapping a member profile via the first agent registration) as the profile's `display_name`.\n * @example Acme Media\n */\n organization_name: string;\n /**\n * @description Set to `true` to create a personal workspace instead of a corporate organization. Personal workspaces skip corporate-domain verification, are limited to one per user, and cannot host the `company_*` membership tiers.\n * @default false\n */\n is_personal: boolean;\n company_type?: components[\"schemas\"][\"OrganizationCompanyType\"];\n revenue_tier?: components[\"schemas\"][\"OrganizationRevenueTier\"];\n /**\n * @description Whether the caller opted in to AAO marketing communications. Recorded once per user (not overwritten on subsequent calls). Independent of Terms-of-Service consent, which is recorded server-side from the request context.\n * @default false\n */\n marketing_opt_in: boolean;\n };\n /**\n * @description Coarse classification of the organization's role in the open ad ecosystem. Drives default verification badges and the member profile's display category.\n * @enum {string}\n */\n OrganizationCompanyType: \"adtech\" | \"agency\" | \"brand\" | \"publisher\" | \"data\" | \"ai\" | \"other\";\n /**\n * @description Annual revenue band, USD. Drives membership-tier eligibility for company-tier seats.\n * @enum {string}\n */\n OrganizationRevenueTier: \"under_1m\" | \"1m_5m\" | \"5m_50m\" | \"50m_250m\" | \"250m_1b\" | \"1b_plus\";\n ResolveResponse: {\n resolved: components[\"schemas\"][\"ResolvedEntry\"][];\n summary: {\n total: number;\n resolved: number;\n created: number;\n excluded: number;\n not_found: number;\n };\n server_timestamp: string;\n };\n ResolvedEntry: {\n identifier: components[\"schemas\"][\"CatalogIdentifier\"];\n /** @description Stable catalog handle for joining/dedup and TMP matching. NOT an authorization credential. `null` for excluded (ad_infra / publisher_mask) or unresolved-in-lookup identifiers. */\n property_rid: string | null;\n /** @example property */\n classification: string;\n /** @enum {string} */\n status: \"existing\" | \"created\" | \"excluded\";\n source: string | null;\n };\n CatalogIdentifier: {\n /** @example domain */\n type: string;\n /** @example nytimes.com */\n value: string;\n };\n ResolveRequest: {\n /** @description Identifiers to resolve (and, in resolve mode, contribute). Max 10,000 per call for all callers. */\n identifiers: components[\"schemas\"][\"CatalogIdentifier\"][];\n provenance: components[\"schemas\"][\"FactProvenance\"];\n /**\n * @description `resolve` (default) contributes the identifiers, auto-creates missing catalog entries, logs demand activity, and returns rids — requires authentication. `lookup` is a pure read: no write, no activity log, no auth.\n * @default resolve\n * @enum {string}\n */\n mode: \"resolve\" | \"lookup\";\n };\n FactProvenance: {\n /**\n * @description How the caller knows these identifiers — the trust/audit envelope on the fact. Determines the confidence the catalog assigns. `crawl` is reserved for server-side pipelines; callers use the others.\n * @enum {string}\n */\n type: \"agency_allowlist\" | \"publisher_declaration\" | \"impression_log\" | \"ssp_inventory\" | \"deal_history\" | \"crawl\" | \"data_partner\" | \"member_assertion\";\n /**\n * @description Optional free-text annotation (campaign, dataset).\n * @example unilever_q3\n */\n context?: string;\n };\n CatalogDisputeTriageResult: {\n dispute_id: string;\n /**\n * @description What filing the dispute did: a medium/weak link is suspended immediately; otherwise the dispute is queued or escalated for review.\n * @enum {string}\n */\n action_taken: \"link_suspended\" | \"queued_for_review\" | \"escalated\";\n reason: string;\n };\n CatalogDisputeRequest: {\n /** @enum {string} */\n dispute_type: \"identifier_link\" | \"classification\" | \"property_data\" | \"false_merge\";\n /**\n * @description What is being disputed — e.g. `identifier` or `property_rid`.\n * @example identifier\n */\n subject_type: string;\n /** @example com.example.app */\n subject_value: string;\n /** @description The dispute claim (10–2000 chars). */\n claim: string;\n /** @description Optional supporting evidence (≤5000 chars). */\n evidence?: string;\n };\n CatalogDisputeRecord: {\n id: string;\n /** @enum {string} */\n dispute_type: \"identifier_link\" | \"classification\" | \"property_data\" | \"false_merge\";\n subject_type: string;\n subject_value: string;\n claim: string;\n evidence?: string | null;\n /**\n * @description Current dispute status.\n * @example suspended\n */\n status: string;\n created_at: string;\n } & {\n [key: string]: unknown;\n };\n CatalogBrowseResponse: {\n entries: components[\"schemas\"][\"CatalogBrowseEntry\"][];\n total: number;\n /** @description Opaque cursor for the next page; null when exhausted. */\n next_cursor: string | null;\n };\n CatalogBrowseEntry: {\n property_rid: string;\n property_id: string | null;\n /** @example property */\n classification: string;\n /** @example adagents_json */\n source: string;\n /** @example active */\n status: string;\n identifiers: components[\"schemas\"][\"CatalogIdentifier\"][];\n };\n CatalogSyncResponse: {\n entries: components[\"schemas\"][\"CatalogSyncEntry\"][];\n /** @description Watermark to pass as `since` on the next sync (avoids clock skew). */\n server_timestamp: string;\n next_cursor: string | null;\n };\n CatalogSyncEntry: {\n property_rid: string;\n property_id: string | null;\n classification: string;\n source: string;\n status: string;\n adagents_url: string | null;\n created_by: string | null;\n created_at: string;\n updated_at: string;\n source_updated_at: string;\n };\n AdagentsJson: {\n /** Format: uri */\n $schema?: string;\n authorized_agents: components[\"schemas\"][\"AdagentsAuthorizedAgent\"][];\n properties?: {\n [key: string]: unknown;\n }[];\n catalog_etag?: string;\n formats?: {\n [key: string]: unknown;\n }[];\n placements?: {\n [key: string]: unknown;\n }[];\n placement_tags?: {\n [key: string]: unknown;\n };\n collections?: {\n [key: string]: unknown;\n }[];\n signals?: {\n [key: string]: unknown;\n }[];\n signal_tags?: {\n [key: string]: unknown;\n };\n contact?: unknown;\n /**\n * Format: uri\n * @description HTTPS URL for the canonical successor adagents.json document. Clients should re-fetch the successor and update cached mirror references before retiring use of this mirror.\n */\n superseded_by?: string;\n /** Format: date-time */\n last_updated?: string;\n } & {\n [key: string]: unknown;\n };\n };\n responses: never;\n parameters: never;\n requestBodies: never;\n headers: never;\n pathItems: never;\n}\nexport type $defs = Record<string, never>;\nexport interface operations {\n apiDiscovery: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description API discovery information */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n name: string;\n version: string;\n documentation: string;\n openapi: string;\n endpoints: {\n [key: string]: string;\n };\n };\n };\n };\n };\n };\n resolveBrand: {\n parameters: {\n query: {\n domain: string;\n /** @description Bypass the resolution cache and refetch from the origin. When a fresh fetch fails and a stored record is returned instead, `live_brand_json` carries that fetch's diagnostics. */\n fresh?: \"true\" | \"false\";\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Brand resolved successfully */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"ResolvedBrand\"];\n };\n };\n /** @description Invalid or missing domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Brand not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n domain: string;\n /** @description HTTP status code from brand.json fetch (e.g. 404 vs 200 with invalid data) */\n file_status?: number;\n };\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n resolveBrandsBulk: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n domains: string[];\n };\n };\n };\n responses: {\n /** @description Bulk resolution results */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n results: {\n [key: string]: components[\"schemas\"][\"ResolvedBrand\"] & (Record<string, never> | null);\n };\n };\n };\n };\n /** @description Invalid domain list */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Request body over 16 KB */\n 413: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Too much resolution work is already queued */\n 503: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getBrandJson: {\n parameters: {\n query: {\n domain: string;\n fresh?: \"true\" | \"false\";\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Raw brand.json data */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n domain: string;\n url: string;\n variant?: string;\n data: {\n [key: string]: unknown;\n };\n warnings?: {\n field: string;\n message: string;\n suggestion?: string;\n }[];\n promoted_from_schema?: string;\n live_brand_json?: {\n valid: boolean;\n url: string;\n status_code?: number;\n errors: {\n field: string;\n message: string;\n /** @enum {string} */\n severity: \"error\";\n }[];\n warnings: {\n field: string;\n message: string;\n suggestion?: string;\n }[];\n };\n };\n };\n };\n /** @description Invalid or missing domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Brand not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n saveBrand: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @example acmecorp.com */\n domain: string;\n /** @example Acme Corp */\n brand_name: string;\n brand_manifest?: {\n [key: string]: unknown;\n };\n };\n };\n };\n responses: {\n /** @description Brand saved or updated */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {boolean} */\n success: true;\n message: string;\n domain: string;\n id: string;\n revision_number?: number;\n };\n };\n };\n /** @description Missing required fields or invalid domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Cannot edit authoritative brand */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n listBrands: {\n parameters: {\n query?: {\n search?: string;\n limit?: number;\n offset?: number;\n /** @description Filter by source. Values match the per-brand source field in the response: hosted = registered by domain owner via /api/brands; brand_json = crawler-discovered with a live /.well-known/brand.json; enriched = Brandfetch-sourced; community = manually contributed; stub = organization-derived placeholder awaiting stronger evidence. */\n source?: \"hosted\" | \"brand_json\" | \"enriched\" | \"community\" | \"stub\";\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Brand list with stats */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n brands: components[\"schemas\"][\"BrandRegistryItem\"][];\n stats: {\n total: number;\n hosted: number;\n brand_json: number;\n community: number;\n enriched: number;\n stub: number;\n houses: number;\n sub_brands: number;\n with_manifest: number;\n };\n };\n };\n };\n /** @description Invalid source filter value */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getBrandHistory: {\n parameters: {\n query: {\n domain: string;\n limit?: number;\n offset?: number;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Brand activity history */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"BrandActivity\"];\n };\n };\n /** @description domain parameter required */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Brand not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n domain: string;\n };\n };\n };\n };\n };\n enrichBrand: {\n parameters: {\n query: {\n domain: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Enrichment data from Brandfetch */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {boolean} */\n success: true;\n domain: string;\n cached: boolean;\n manifest?: {\n name: string;\n url: string;\n description?: string;\n logos?: {\n url: string;\n tags: string[];\n }[];\n colors?: {\n primary?: string;\n secondary?: string;\n accent?: string;\n } & {\n [key: string]: unknown;\n };\n fonts?: ({\n name: string;\n role: string;\n } & {\n [key: string]: unknown;\n })[];\n company?: {\n name?: string;\n industry?: string;\n industries?: string[];\n employees?: string;\n founded?: number;\n location?: string;\n } & {\n [key: string]: unknown;\n };\n } & {\n [key: string]: unknown;\n };\n company?: {\n name?: string;\n industry?: string;\n industries?: string[];\n employees?: string;\n founded?: number;\n location?: string;\n } & {\n [key: string]: unknown;\n };\n /** @enum {string} */\n source_type?: \"brand_json\" | \"community\" | \"enriched\";\n context?: {\n [key: string]: unknown;\n };\n /** @enum {string} */\n context_source?: \"brandfetch\";\n /** @enum {string} */\n context_scope?: \"ephemeral\";\n context_error?: string;\n };\n };\n };\n /** @description Brandfetch not configured */\n 503: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getPropertyHistory: {\n parameters: {\n query: {\n domain: string;\n limit?: number;\n offset?: number;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Property activity history */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"PropertyActivity\"];\n };\n };\n /** @description domain parameter required */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Property not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n domain: string;\n };\n };\n };\n };\n };\n resolveProperty: {\n parameters: {\n query: {\n domain: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Property resolved */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"ResolvedProperty\"];\n };\n };\n /** @description Property not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n domain: string;\n };\n };\n };\n };\n };\n resolvePropertiesBulk: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n domains: string[];\n };\n };\n };\n responses: {\n /** @description Bulk resolution results */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n results: {\n [key: string]: components[\"schemas\"][\"ResolvedProperty\"] & (Record<string, never> | null);\n };\n };\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n listProperties: {\n parameters: {\n query?: {\n search?: string;\n limit?: number;\n offset?: number;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Property list with stats */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n properties: components[\"schemas\"][\"PropertyRegistryItem\"][];\n stats: {\n [key: string]: unknown;\n };\n };\n };\n };\n };\n };\n validateProperty: {\n parameters: {\n query: {\n domain: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Validation result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"ValidationResult\"];\n };\n };\n };\n };\n saveProperty: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @example examplepub.com */\n publisher_domain: string;\n /**\n * @description Ignored. Community-registry rows never assert sales authorization — the owner's origin adagents.json is the sole authorization source — so any value here is dropped and the stored document carries authorized_agents:[].\n * @example []\n */\n authorized_agents?: {\n url: string;\n authorized_for?: string;\n }[];\n /**\n * @example [\n * {\n * \"type\": \"website\",\n * \"name\": \"Example Publisher\"\n * }\n * ]\n */\n properties?: {\n type: string;\n name: string;\n }[];\n contact?: {\n name?: string;\n email?: string;\n };\n };\n };\n };\n responses: {\n /** @description Property saved or updated */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {boolean} */\n success: true;\n message: string;\n id: string;\n revision_number?: number;\n };\n };\n };\n /** @description Missing required fields or invalid domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Cannot edit authoritative property */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n claimHostedPropertyDomain: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n domain: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Claim issued */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {boolean} */\n success: true;\n domain: string;\n authoritative_location: string;\n instructions: string;\n };\n };\n };\n /** @description Invalid domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Caller is not a member of any organization */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Domain already verified and locked to another owner */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n verifyHostedPropertyOrigin: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n domain: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Verification outcome */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n verified: boolean;\n /** @enum {string} */\n reason: \"authoritative_location_pointer\" | \"not_found\" | \"invalid_json\" | \"no_authoritative_location\" | \"authoritative_location_mismatch\" | \"unresolvable\" | \"transient\";\n checked_at: string;\n detail?: string;\n bound_org_id?: string;\n };\n };\n };\n /** @description Invalid domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description No hosted property for this domain */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n checkPropertyList: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /**\n * @example [\n * \"www.nytimes.com\",\n * \"googlesyndication.com\",\n * \"wsj.com\"\n * ]\n */\n domains: string[];\n };\n };\n };\n responses: {\n /** @description Property list check results */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n summary: {\n total: number;\n remove: number;\n modify: number;\n assess: number;\n ok: number;\n };\n remove: {\n input: string;\n canonical: string;\n /** @enum {string} */\n reason: \"duplicate\" | \"blocked\";\n domain_type?: string;\n blocked_reason?: string;\n }[];\n modify: {\n input: string;\n canonical: string;\n reason: string;\n }[];\n assess: {\n domain: string;\n }[];\n ok: {\n domain: string;\n source: string;\n }[];\n /** @description UUID for retrieving this report later */\n report_id: string;\n };\n };\n };\n /** @description Invalid request */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getPropertyCheckReport: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n reportId: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Property check report */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n summary: {\n total: number;\n remove: number;\n modify: number;\n assess: number;\n ok: number;\n };\n };\n };\n };\n /** @description Report not found or expired */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n listAgents: {\n parameters: {\n query?: {\n type?: \"brand\" | \"rights\" | \"measurement\" | \"governance\" | \"creative\" | \"sales\" | \"buying\" | \"signals\" | \"unknown\";\n health?: \"true\";\n capabilities?: \"true\";\n properties?: \"true\";\n compliance?: \"true\";\n /** @description Measurement-vendor filter: exact match on `measurement.metrics[].metric_id`. Repeatable; multiple values are AND'd (vendor must carry all named metrics). When combined with `accreditation`, a cross-product AND applies — each (metric_id, accreditation) pair must be covered by the same metrics element. Duplicate values are ignored. Maximum 20 unique values; maximum 100 cross-product pairs. Implies `type=measurement`. */\n metric_id?: string | string[];\n /** @description Measurement-vendor filter: exact match on `measurement.metrics[].accreditations[].accrediting_body` (e.g. `MRC`, `JIC`, `ARF`). Repeatable; multiple values are AND'd. When combined with `metric_id`, a cross-product AND applies — see `metric_id` description. Duplicate values are ignored. Maximum 20 unique values; maximum 100 cross-product pairs. Implies `type=measurement`. Accreditation claims are vendor-asserted; AAO does not independently verify (`verified_by_aao` is always `false` in the response). */\n accreditation?: string | string[];\n /** @description Measurement-vendor filter: case-insensitive substring match against `measurement.metrics[].metric_id`. v1 scope: metric_id only (description/standard search is a follow-up). Max 64 chars; SQL wildcard characters are escaped. Implies `type=measurement`. */\n q?: string;\n /** @description Canonical creative-capability filter: exact match on creative.supported_formats[].format.format_kind. Repeatable with OR semantics. Matches standalone creative agents and mixed-role endpoints. */\n format_kind?: string | string[];\n /** @description Canonical creative-capability filter: exact publisher_domain on the same supported-format entry. Pair with format_option_id to find endpoints claiming an exact publisher format. */\n publisher_domain?: string;\n /** @description Canonical creative-capability filter: exact publisher format_option_id on the same supported-format entry. */\n format_option_id?: string;\n /** @description Canonical creative-capability filter: exact endpoint-local creative.supported_formats[].capability_id. */\n capability_id?: string;\n /** @description Canonical creative-capability filter: required supported operation on the same format entry. Repeatable with OR semantics. */\n creative_operation?: (\"build\" | \"validate\" | \"preview\") | (\"build\" | \"validate\" | \"preview\")[];\n /** @description Filter to agents whose active badge covers the given verification axis. Repeat the parameter for AND semantics: ?verification_mode=spec&verification_mode=live returns only agents verified on both axes. */\n verification_mode?: (\"spec\" | \"live\")[];\n /** @description When true, filter to agents that hold any active verification badge. */\n verified?: \"true\";\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Agent list */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agents: components[\"schemas\"][\"FederatedAgentWithDetails\"][];\n count: number;\n };\n };\n };\n /** @description Invalid query parameter */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n valid_values?: string[];\n };\n };\n };\n };\n };\n listPublishers: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Publisher list */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n publishers: components[\"schemas\"][\"FederatedPublisher\"][];\n count: number;\n };\n };\n };\n };\n };\n getRegistryStats: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Registry statistics */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n [key: string]: unknown;\n };\n };\n };\n };\n };\n lookupDomain: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n domain: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Domain lookup result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"DomainLookupResult\"];\n };\n };\n };\n };\n lookupProperty: {\n parameters: {\n query: {\n type: string;\n value: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Matching agents */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n type: string;\n value: string;\n agents: unknown[];\n count: number;\n };\n };\n };\n };\n };\n getAgentDomains: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n agentUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Domains for the agent */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n domains: string[];\n count: number;\n };\n };\n };\n };\n };\n getPublishersForAgentLegacyApiPrefix: {\n parameters: {\n query?: {\n /** @description ISO 8601 — return only publishers with last_verified_at ≥ since */\n since?: string;\n /** @description Opaque pagination cursor returned by a prior response */\n cursor?: string;\n /** @description Lifecycle status filter — repeat the key once per value (?status=authorized&status=revoked). Default: authorized. The comma-separated single-value form is rejected with 400. */\n status?: (\"authorized\" | \"revoked\")[];\n /** @description Opt into expanded per-row fields — repeat the key once per value. v1: `properties` adds `property_ids[]` to each PublisherEntry so consumers can run full set-diff against a federated fetch (count-equality is not set-equality). Unknown values return 400. The comma-separated form is rejected with 400. */\n include?: \"properties\"[];\n /** @description Page size, default 200, max 1000 */\n limit?: number;\n };\n header?: never;\n path: {\n /** @description Percent-encoded agent_url */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Publishers authorizing the agent */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n /**\n * Format: date-time\n * @description Most recent per-publisher refresh in this page. Null on empty pages (no anchor).\n */\n directory_indexed_at: string | null;\n publishers: {\n publisher_domain: string;\n /** @enum {string} */\n discovery_method: \"direct\" | \"authoritative_location\" | \"ads_txt_managerdomain\" | \"adagents_authoritative\" | \"community_catalog\";\n manager_domain: string | null;\n properties_authorized: number;\n properties_total: number;\n /** @description Canonical list of property_id strings the agent is authorized for under this publisher. Present iff the request included `?include=properties`. Same population as `properties_authorized` but surfaced as IDs for set-diff comparison. */\n property_ids?: string[];\n signing_keys_pinned: boolean;\n /** @enum {string} */\n status: \"authorized\" | \"revoked\";\n /** Format: date-time */\n last_verified_at: string;\n }[];\n next_cursor: string | null;\n };\n };\n };\n /** @description Not modified (If-None-Match matched) */\n 304: {\n headers: {\n [name: string]: unknown;\n };\n content?: never;\n };\n /** @description Invalid agent_url, cursor, since, or status */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Directory has never indexed any publisher referencing this agent_url. Distinct from 200 + empty. */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getPublishersForAgent: {\n parameters: {\n query?: {\n /** @description ISO 8601 — return only publishers with last_verified_at ≥ since */\n since?: string;\n /** @description Opaque pagination cursor returned by a prior response */\n cursor?: string;\n /** @description Lifecycle status filter — repeat the key once per value (?status=authorized&status=revoked). Default: authorized. The comma-separated single-value form is rejected with 400. */\n status?: (\"authorized\" | \"revoked\")[];\n /** @description Opt into expanded per-row fields — repeat the key once per value. v1: `properties` adds `property_ids[]` to each PublisherEntry so consumers can run full set-diff against a federated fetch (count-equality is not set-equality). Unknown values return 400. The comma-separated form is rejected with 400. */\n include?: \"properties\"[];\n /** @description Page size, default 200, max 1000 */\n limit?: number;\n };\n header?: never;\n path: {\n /** @description Percent-encoded agent_url */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Publishers authorizing the agent */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n /**\n * Format: date-time\n * @description Most recent per-publisher refresh in this page. Null on empty pages (no anchor).\n */\n directory_indexed_at: string | null;\n publishers: {\n publisher_domain: string;\n /** @enum {string} */\n discovery_method: \"direct\" | \"authoritative_location\" | \"ads_txt_managerdomain\" | \"adagents_authoritative\" | \"community_catalog\";\n manager_domain: string | null;\n properties_authorized: number;\n properties_total: number;\n /** @description Canonical list of property_id strings the agent is authorized for under this publisher. Present iff the request included `?include=properties`. Same population as `properties_authorized` but surfaced as IDs for set-diff comparison. */\n property_ids?: string[];\n signing_keys_pinned: boolean;\n /** @enum {string} */\n status: \"authorized\" | \"revoked\";\n /** Format: date-time */\n last_verified_at: string;\n }[];\n next_cursor: string | null;\n };\n };\n };\n /** @description Not modified (If-None-Match matched) */\n 304: {\n headers: {\n [name: string]: unknown;\n };\n content?: never;\n };\n /** @description Invalid agent_url, cursor, since, or status */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Directory has never indexed any publisher referencing this agent_url. Distinct from 200 + empty. */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n lookupOperator: {\n parameters: {\n query: {\n domain: string;\n /**\n * @description Visibility bucket filter for returned agents. One value per agent-visibility enum value plus a catch-all. Each bucket is still gated by auth — `scope` can only narrow, never escalate.\n *\n * - `public` → only `visibility=public` agents.\n * - `member` → public + members_only (members_only is gated on caller's tier; anonymous or explorer-tier callers silently fall through to public-only rather than 403).\n * - `private` → only `visibility=private`. Private agents are visible only to the profile owner; non-owners get an empty list.\n * - Omitted or `all` → tier-aware full unlock: public + members_only for API-tier members + private for the profile owner.\n *\n * Unknown values return 400 — a silent coerce to `all` could leak data the caller explicitly tried to scope away from.\n */\n scope?: \"public\" | \"member\" | \"private\" | \"all\";\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Operator lookup result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"OperatorLookupResult\"];\n };\n };\n /** @description Missing or invalid domain, or unknown scope value */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n lookupPublisher: {\n parameters: {\n query: {\n domain: string;\n /** @description Set to placements to include eligibility-oriented placement summaries with resolved canonical format options. */\n include?: \"placements\";\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Publisher lookup result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"PublisherLookupResult\"];\n };\n };\n /** @description Missing domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n revalidatePublisherAdagents: {\n parameters: {\n query?: {\n /** @description Accepted for tooling compatibility; live origin validation is always performed. */\n force?: \"1\" | \"true\";\n };\n header?: never;\n path: {\n domain: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Revalidation result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n domain: string;\n adagents_valid: boolean;\n /** Format: date-time */\n checked_at: string;\n error?: string;\n issues?: {\n errors: {\n field: string;\n message: string;\n /** @enum {string} */\n severity: \"error\";\n }[];\n warnings: {\n field: string;\n message: string;\n suggestion?: string;\n }[];\n };\n properties_count?: number;\n authorized_agents_count?: number;\n status_code?: number;\n response_bytes?: number;\n resolved_url?: string;\n /** @enum {string} */\n discovery_method?: \"direct\" | \"authoritative_location\" | \"ads_txt_managerdomain\" | \"adagents_authoritative\";\n manager_domain?: string;\n };\n };\n };\n /** @description Invalid domain format, private IP, or unresolvable domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Admin access required */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n /** @description Seconds to wait before retrying */\n retry_after: number;\n };\n };\n };\n };\n };\n forceBrandCrawl: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n domain: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Synchronous crawl result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n domain: string;\n /** @enum {string|null} */\n previous_source: \"hosted\" | \"brand_json\" | \"community\" | \"enriched\" | \"stub\" | null;\n /** @enum {string|null} */\n new_source: \"hosted\" | \"brand_json\" | \"community\" | \"enriched\" | \"stub\" | null;\n /** @enum {string|null} */\n previous_source_type: \"brand_json\" | \"community\" | \"enriched\" | \"stub\" | null;\n /** @enum {string|null} */\n new_source_type: \"brand_json\" | \"community\" | \"enriched\" | \"stub\" | null;\n /** @description True when the crawl replaced lower-trust stored evidence with live brand.json evidence. */\n promoted: boolean;\n brand_json_found: boolean;\n /** @enum {string|null} */\n live_variant: \"authoritative_location\" | \"house_redirect\" | \"brand_agent\" | \"house_portfolio\" | \"brand_canonical\" | null;\n has_manifest: boolean;\n /** Format: date-time */\n checked_at: string;\n };\n };\n };\n /** @description Invalid domain format, private IP, or unresolvable domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Admin access required */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n retry_after: number;\n };\n };\n };\n /** @description Crawl failed */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n lookupPublisherAgentAuthorization: {\n parameters: {\n query: {\n domain: string;\n agent: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Authorization rollup */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n publisher_domain: string;\n agent_url: string;\n /** @description Count of publisher's properties the agent can sell. */\n authorized: number;\n /** @description Total properties the publisher exposes. */\n total: number;\n /** @description True when the agent has only a publisher-wide authorization (no property-level rows). In that case `authorized` equals `total`. */\n publisher_wide: boolean;\n /** @enum {string} */\n source: \"adagents_json\" | \"agent_claim\";\n authorized_for?: string;\n /** @description Properties the agent is NOT authorized for. Empty when publisher_wide is true. */\n unauthorized_properties: {\n id?: string;\n name?: string;\n type?: string;\n }[];\n };\n };\n };\n /** @description Missing domain or agent */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description No authorization record for this agent on this publisher */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n validateProductAuthorization: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n agent_url: string;\n publisher_properties: components[\"schemas\"][\"PublisherPropertySelector\"][];\n };\n };\n };\n responses: {\n /** @description Authorization validation result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n authorized: boolean;\n checked_at: string;\n } & {\n [key: string]: unknown;\n };\n };\n };\n };\n };\n expandProductIdentifiers: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n agent_url: string;\n publisher_properties: components[\"schemas\"][\"PublisherPropertySelector\"][];\n };\n };\n };\n responses: {\n /** @description Expanded identifiers */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n properties: unknown[];\n identifiers: {\n type: string;\n value: string;\n property_id: string;\n publisher_domain: string;\n }[];\n property_count: number;\n identifier_count: number;\n generated_at: string;\n };\n };\n };\n };\n };\n validatePropertyAuthorization: {\n parameters: {\n query: {\n agent_url: string;\n identifier_type: string;\n identifier_value: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Authorization result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n identifier_type: string;\n identifier_value: string;\n authorized: boolean;\n checked_at: string;\n } & {\n [key: string]: unknown;\n };\n };\n };\n };\n };\n validateAdagents: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n domain: string;\n };\n };\n };\n responses: {\n /** @description Validation result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n success: boolean;\n data: {\n domain: string;\n found: boolean;\n validation?: unknown;\n agent_cards?: unknown;\n };\n timestamp: string;\n };\n };\n };\n };\n };\n createAdagents: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n authorized_agents: components[\"schemas\"][\"AdagentsAuthorizedAgent\"][];\n include_schema?: boolean;\n include_timestamp?: boolean;\n properties?: unknown[];\n catalog_etag?: string;\n formats?: unknown[];\n placements?: unknown[];\n placement_tags?: {\n [key: string]: unknown;\n };\n };\n };\n };\n responses: {\n /** @description Generated adagents.json */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CreateAdagentsResponse\"];\n };\n };\n };\n };\n listCommunityMirrorProposals: {\n parameters: {\n query?: {\n status?: \"pending\" | \"approved\" | \"rejected\";\n /** @description Set to `true` for the cross-organization moderator queue; non-moderators receive 403. */\n review_queue?: \"true\" | \"false\";\n limit?: number;\n offset?: number;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Community mirror proposal list */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorProposalListResponse\"];\n };\n };\n /** @description Invalid status */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Moderator access required for the review queue */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"RateLimitError\"];\n };\n };\n /** @description Failed to list proposals */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getCommunityMirrorProposal: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n id: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Community mirror proposal */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorProposalGetResponse\"];\n };\n };\n /** @description Invalid proposal identifier */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Proposal not found or not visible to the caller */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"RateLimitError\"];\n };\n };\n /** @description Failed to read proposal */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n approveCommunityMirrorProposal: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n id: string;\n };\n cookie?: never;\n };\n requestBody: {\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorProposalReviewRequest\"];\n };\n };\n responses: {\n /** @description Proposal approved and mirror published */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorProposalApprovalResponse\"];\n };\n };\n /** @description Invalid identifier, review body, or stale schema conformance */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorPublishError\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Reviewer role required */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Proposal not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Proposal changed after review, its base mirror is stale, or it was already reviewed */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"RateLimitError\"];\n };\n };\n /** @description Failed to approve proposal */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n rejectCommunityMirrorProposal: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n id: string;\n };\n cookie?: never;\n };\n requestBody: {\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorProposalRejectRequest\"];\n };\n };\n responses: {\n /** @description Proposal rejected */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorProposalDecisionResponse\"];\n };\n };\n /** @description Invalid identifier or review body */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorPublishError\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Reviewer role required */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Proposal not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Proposal changed after review or was already reviewed */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"RateLimitError\"];\n };\n };\n /** @description Failed to reject proposal */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n listCommunityMirrors: {\n parameters: {\n query?: {\n /** @description Maximum mirrors to return. The service defaults to 100 and clamps values to the 1-500 range. */\n limit?: number;\n /** @description Zero-based result offset. Defaults to 0; negative values are clamped to 0. */\n offset?: number;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Community mirror list */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorListResponse\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"RateLimitError\"];\n };\n };\n /** @description Failed to list community mirrors */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getCommunityMirror: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description Lowercase platform identifier. */\n platform: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Community mirror */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorGetResponse\"];\n };\n };\n /** @description Invalid platform identifier */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Community mirror not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"RateLimitError\"];\n };\n };\n /** @description Failed to read community mirror */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n publishCommunityMirror: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description Lowercase platform identifier. */\n platform: string;\n };\n cookie?: never;\n };\n requestBody: {\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorPublishRequest\"];\n };\n };\n responses: {\n /** @description Community mirror published */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorPublishResponse\"];\n };\n };\n /** @description Community mirror proposal accepted for review */\n 202: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorProposalSubmissionResponse\"];\n };\n };\n /** @description Invalid platform, request body, or adagents.json conformance failure */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorPublishError\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Organization context required for community proposals */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Proposal body or catalog item count exceeds the contributor limit */\n 413: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"RateLimitError\"];\n };\n };\n /** @description Failed to publish community mirror */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n deleteCommunityMirror: {\n parameters: {\n query?: {\n /** @description Set to `true` to delete a mirror without a `superseded_by` migration URL. */\n force?: string;\n };\n header?: never;\n path: {\n /** @description Lowercase platform identifier. */\n platform: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Community mirror deleted */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorDeleteResponse\"];\n };\n };\n /** @description Invalid platform identifier */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Only registry moderators or AgenticAdvertising.org admins can manage community mirrors */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Community mirror not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Mirror has not been superseded and force was not set */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"RateLimitError\"];\n };\n };\n /** @description Failed to delete community mirror */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n search: {\n parameters: {\n query: {\n q: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Search results */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n brands: unknown[];\n publishers: unknown[];\n properties: unknown[];\n };\n };\n };\n };\n };\n lookupManifestRef: {\n parameters: {\n query: {\n domain: string;\n type?: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Reference lookup result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {boolean} */\n success: true;\n /** @enum {boolean} */\n found: true;\n reference: {\n /** @enum {string} */\n reference_type: \"url\" | \"agent\";\n manifest_url: string | null;\n agent_url: string | null;\n agent_id: string | null;\n /** @enum {string} */\n verification_status: \"pending\" | \"valid\" | \"invalid\" | \"unreachable\";\n };\n } | {\n /** @enum {boolean} */\n success: false;\n /** @enum {boolean} */\n found: false;\n };\n };\n };\n };\n };\n discoverAgent: {\n parameters: {\n query: {\n url: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Discovered agent info */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n name: string;\n description?: string;\n protocols: string[];\n type: string;\n tools_count: number;\n tools: {\n name: string;\n description?: string;\n }[];\n stats: {\n format_count?: number;\n product_count?: number;\n publisher_count?: number;\n };\n };\n };\n };\n /** @description Connection timeout */\n 504: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n message: string;\n };\n };\n };\n };\n };\n getAgentFormats: {\n parameters: {\n query: {\n url: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Canonical creative capabilities */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n success: boolean;\n formats: unknown[];\n };\n };\n };\n /** @description Missing agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n message: string;\n retryAfter?: number;\n };\n };\n };\n /** @description Agent discovery failed */\n 502: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Connection timeout */\n 504: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n message: string;\n };\n };\n };\n };\n };\n getAgentPublishers: {\n parameters: {\n query: {\n url: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Publisher properties */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n success: boolean;\n properties: unknown[];\n };\n };\n };\n /** @description Missing agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n message: string;\n retryAfter?: number;\n };\n };\n };\n /** @description Agent discovery failed */\n 502: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Connection timeout */\n 504: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n message: string;\n };\n };\n };\n };\n };\n getAgentProducts: {\n parameters: {\n query: {\n url: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Products */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n success: boolean;\n products: unknown[];\n };\n };\n };\n /** @description Missing agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n message: string;\n retryAfter?: number;\n };\n };\n };\n /** @description Agent discovery failed */\n 502: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Connection timeout */\n 504: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n message: string;\n };\n };\n };\n };\n };\n validatePublisher: {\n parameters: {\n query: {\n domain: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Publisher validation result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n valid: boolean;\n domain: string;\n url?: string;\n /**\n * @description How the publisher's adagents.json was discovered. `ads_txt_managerdomain` indicates one-hop delegation via ads.txt MANAGERDOMAIN.\n * @enum {string}\n */\n discovery_method: \"direct\" | \"authoritative_location\" | \"ads_txt_managerdomain\";\n /** @description Manager domain that served the manifest. Present only when discovery_method is ads_txt_managerdomain. */\n manager_domain?: string;\n agent_count: number;\n property_count: number;\n property_type_counts: {\n [key: string]: number;\n };\n tag_count: number;\n errors?: string[];\n warnings?: string[];\n };\n };\n };\n };\n };\n listPolicies: {\n parameters: {\n query?: {\n /** @description Full-text search on policy name and description */\n search?: string;\n category?: \"regulation\" | \"standard\";\n enforcement?: \"must\" | \"should\" | \"may\";\n /** @description Filter by jurisdiction (includes region alias matching) */\n jurisdiction?: string;\n policy_category?: string;\n /** @description Filter by governance domain */\n domain?: string;\n /** @description Results per page (default 20, max 1000) */\n limit?: number;\n /** @description Pagination offset (default 0) */\n offset?: number;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Policy listing with facet stats */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n policies: components[\"schemas\"][\"PolicySummary\"][];\n stats: {\n total: number;\n regulation: number;\n standard: number;\n };\n };\n };\n };\n };\n };\n resolvePolicy: {\n parameters: {\n query: {\n policy_id: string;\n /** @description Return null if the current version does not match */\n version?: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Policy resolved */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Policy\"];\n };\n };\n /** @description Missing policy_id */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Policy not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n policy_id: string;\n };\n };\n };\n };\n };\n resolvePoliciesBulk: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /**\n * @example [\n * \"gdpr_consent\",\n * \"coppa_children\"\n * ]\n */\n policy_ids: string[];\n };\n };\n };\n responses: {\n /** @description Bulk resolution results */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n results: {\n [key: string]: components[\"schemas\"][\"Policy\"] & (Record<string, never> | null);\n };\n };\n };\n };\n /** @description Invalid request */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getPolicyHistory: {\n parameters: {\n query: {\n policy_id: string;\n /** @description Results per page (max 100, default 20) */\n limit?: number;\n /** @description Pagination offset (default 0) */\n offset?: number;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Revision history */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"PolicyHistory\"];\n };\n };\n /** @description Missing policy_id */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Policy not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n policy_id: string;\n };\n };\n };\n };\n };\n savePolicy: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /**\n * @description Lowercase alphanumeric with underscores\n * @example my_brand_safety\n */\n policy_id: string;\n /** @example 1.0.0 */\n version: string;\n /** @example Acme Corp Brand Safety */\n name: string;\n /** @enum {string} */\n category: \"regulation\" | \"standard\";\n /** @enum {string} */\n enforcement: \"must\" | \"should\" | \"may\";\n /** @example Ads must not appear adjacent to content depicting violence... */\n policy: string;\n description?: string;\n jurisdictions?: string[];\n region_aliases?: {\n [key: string]: string[];\n };\n policy_categories?: string[];\n channels?: string[];\n effective_date?: string;\n sunset_date?: string;\n governance_domains?: string[];\n /** @description Must use http:// or https:// */\n source_url?: string;\n source_name?: string;\n guidance?: string;\n exemplars?: {\n pass?: {\n scenario: string;\n explanation: string;\n }[];\n fail?: {\n scenario: string;\n explanation: string;\n }[];\n };\n ext?: {\n [key: string]: unknown;\n };\n };\n };\n };\n responses: {\n /** @description Policy saved */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {boolean} */\n success: true;\n message: string;\n policy_id: string;\n revision_number: number | null;\n };\n };\n };\n /** @description Validation error */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Cannot edit registry-sourced or pending policy */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n policy_id: string;\n };\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getRegistryFeed: {\n parameters: {\n query?: {\n /** @description Resume after this event ID */\n cursor?: string;\n /** @description Comma-separated event type filters with glob support (e.g. property.*) */\n types?: string;\n /** @description Max events per page (default 100, max 10,000) */\n limit?: number;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Feed page */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n events: components[\"schemas\"][\"RegistryFeedEvent\"][];\n /**\n * Format: uuid\n * @description Pass as cursor in the next request to continue polling\n */\n cursor: string | null;\n has_more: boolean;\n freshness: {\n /**\n * Format: date-time\n * @description Server timestamp when this feed page was generated.\n */\n generated_at: string;\n /**\n * Format: date-time\n * @description Newest event creation timestamp currently visible in the feed for the requested type filter. Null when no matching event exists inside retention.\n */\n latest_event_created_at: string | null;\n /** @description Seconds between generated_at and latest_event_created_at. Null when no matching event exists. */\n lag_seconds: number | null;\n /** @description Number of days the registry retains feed cursors and events. */\n retention_days: number;\n };\n };\n };\n };\n /** @description Invalid cursor format or type filter */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Cursor expired (older than 90-day retention window) */\n 410: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {string} */\n error: \"cursor_expired\";\n message: string;\n };\n };\n };\n };\n };\n streamRegistryFeed: {\n parameters: {\n query?: {\n /** @description Resume after this event ID */\n cursor?: string;\n /** @description Comma-separated event type filters with glob support (e.g. property.*) */\n types?: string;\n /** @description Max events per SSE feed page (default 100, max 10,000) */\n limit?: number;\n /** @description Server-side interval while caught up (default 15 seconds). Backlog pages are sent without waiting. */\n poll_interval_seconds?: number;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description SSE stream. `event: feed` data validates as a registry feed page. */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"text/event-stream\": string;\n };\n };\n /** @description Invalid cursor format, type filter, limit, or poll interval */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Initial cursor expired */\n 410: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {string} */\n error: \"cursor_expired\";\n message: string;\n };\n };\n };\n };\n };\n getAgentAuthorizations: {\n parameters: {\n query: {\n /** @description Agent URL to look up. Canonicalized server-side (lowercased, trailing slashes trimmed). */\n agent_url: string;\n /** @description `effective` (default) applies override layer; `raw` reads base table. */\n include?: \"raw\" | \"effective\";\n /** @description Comma-separated evidence allowlist. Defaults to `adagents_json`. */\n evidence?: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Authorization rows for the agent. */\n 200: {\n headers: {\n /** @description UUIDv7 cursor for the authorization change feed at snapshot time. Pass to /api/registry/feed?entity_type=authorization&cursor=<value>. */\n \"X-Sync-Cursor\"?: string;\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n evidence: string[];\n /** @enum {string} */\n include: \"raw\" | \"effective\";\n rows: {\n /** Format: uuid */\n id: string;\n agent_url: string;\n agent_url_canonical: string;\n /** Format: uuid */\n property_rid: string | null;\n property_id_slug: string | null;\n publisher_domain: string | null;\n authorized_for: string | null;\n evidence: string;\n disputed: boolean;\n created_by: string | null;\n /** Format: date-time */\n expires_at: string | null;\n /** Format: date-time */\n created_at: string;\n /** Format: date-time */\n updated_at: string;\n override_applied: boolean;\n override_reason: string | null;\n }[];\n count: number;\n };\n };\n };\n /** @description Validation error (missing/empty agent_url, unknown evidence, unknown include) */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getAgentAuthorizationsSnapshot: {\n parameters: {\n query?: {\n /** @description `effective` (default) applies override layer; `raw` reads base table. */\n include?: \"raw\" | \"effective\";\n /** @description Comma-separated evidence allowlist. Defaults to `adagents_json`. */\n evidence?: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description gzipped NDJSON stream — one authorization row per line. */\n 200: {\n headers: {\n /** @description UUIDv7 cursor for the authorization change feed at snapshot time. */\n \"X-Sync-Cursor\"?: string;\n /** @description Hash of X-Sync-Cursor; clients can If-None-Match. */\n ETag?: string;\n /** @description gzip */\n \"Content-Encoding\"?: string;\n [name: string]: unknown;\n };\n content: {\n \"application/x-ndjson\": string;\n };\n };\n /** @description Not modified — cursor unchanged from If-None-Match. */\n 304: {\n headers: {\n [name: string]: unknown;\n };\n content?: never;\n };\n /** @description Validation error (unknown evidence, unknown include) */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n searchAgentProfiles: {\n parameters: {\n query?: {\n /** @description Comma-separated channel filter */\n channels?: string;\n /** @description Comma-separated property type filter */\n property_types?: string;\n /** @description Comma-separated market/country code filter */\n markets?: string;\n /** @description Comma-separated IAB content category filter */\n categories?: string;\n /** @description Comma-separated tag filter */\n tags?: string;\n /** @description Comma-separated delivery type filter */\n delivery_types?: string;\n /** @description Require TMP support */\n has_tmp?: \"true\" | \"false\";\n /** @description Minimum number of properties in inventory */\n min_properties?: number | null;\n /** @description Pagination cursor from a previous response */\n cursor?: string;\n /** @description Max results per page (default 50, max 200) */\n limit?: number;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Search results ranked by relevance */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n results: {\n /** Format: uri */\n agent_url: string;\n channels: string[];\n property_types: string[];\n markets: string[];\n categories: string[];\n tags: string[];\n delivery_types: string[];\n /** @description Canonical format kinds present in this agent's indexed inventory profile */\n format_kinds: string[];\n property_count: number;\n publisher_count: number;\n has_tmp: boolean;\n category_taxonomy: string | null;\n relevance_score: number;\n matched_filters: string[];\n /** Format: date-time */\n updated_at: string;\n }[];\n cursor: string | null;\n has_more: boolean;\n };\n };\n };\n /** @description Invalid cursor or parameter */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n requestCrawl: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /**\n * @description Publisher domain to re-crawl\n * @example examplepub.com\n */\n domain: string;\n };\n };\n };\n responses: {\n /** @description Crawl request accepted */\n 202: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {string} */\n message: \"Crawl request accepted\";\n domain: string;\n };\n };\n };\n /** @description Invalid domain format, private IP, or unresolvable domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n /** @description Seconds to wait before retrying */\n retry_after: number;\n };\n };\n };\n };\n };\n requestManagerRevalidation: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /**\n * @description Manager domain whose delegating publishers should be queued for re-validation. Must already be present as `manager_domain` on at least one publisher row.\n * @example raptive.com\n */\n manager_domain: string;\n };\n };\n };\n responses: {\n /** @description Re-validation queue request accepted */\n 202: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {string} */\n message: \"Manager re-validation enqueued\";\n manager_domain: string;\n /** @description Number of delegating publisher rows added to or refreshed in the manager_revalidation_queue. Zero if no publisher delegates to this manager. */\n publishers_enqueued: number;\n };\n };\n };\n /** @description Invalid domain format, private IP, or unresolvable domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n /** @description Seconds to wait before retrying */\n retry_after: number;\n };\n };\n };\n };\n };\n requestBrandCrawl: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /**\n * @description Domain to re-crawl brand.json for\n * @example examplebrand.com\n */\n domain: string;\n };\n };\n };\n responses: {\n /** @description Brand crawl request accepted */\n 202: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {string} */\n message: \"Brand crawl request accepted\";\n domain: string;\n };\n };\n };\n /** @description Invalid domain format, private IP, or unresolvable domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n /** @description Seconds to wait before retrying */\n retry_after: number;\n };\n };\n };\n };\n };\n getAgentCompliance: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Compliance detail */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"AgentComplianceDetail\"];\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getJwks: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description JWKS response */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n keys: {\n [key: string]: unknown;\n }[];\n };\n };\n };\n };\n };\n getAgentVerification: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Verification status */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"AgentVerification\"];\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getAgentBadgeSvg: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n /** @description Badge role (sales, buying, creative, governance, signals, measurement) */\n role: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description SVG badge image */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"image/svg+xml\": string;\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content?: never;\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content?: never;\n };\n };\n };\n getAgentBadgeEmbed: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n /** @description Badge role */\n role: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Embed code */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n role: string;\n badge_svg_url: string;\n registry_url: string;\n html: string;\n markdown: string;\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getAgentBadgeVersionedSvg: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n /** @description Badge role (media-buy, creative, signals, governance, brand, sponsored-intelligence) */\n role: string;\n /** @description AdCP release as MAJOR.MINOR (e.g. '3.0', '3.1') */\n version: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description SVG badge image */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"image/svg+xml\": string;\n };\n };\n /** @description Invalid agent URL, role, or version */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content?: never;\n };\n };\n };\n getAgentBadgeVersionedEmbed: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n /** @description Badge role */\n role: string;\n /** @description AdCP release as MAJOR.MINOR */\n version: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Embed code */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n role: string;\n verified: boolean;\n adcp_version?: string;\n badge_svg_url: string;\n registry_url: string;\n html: string;\n markdown: string;\n };\n };\n };\n /** @description Invalid agent URL, role, or version */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getAgentStoryboardStatus: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Storyboard status for the agent */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n storyboards: components[\"schemas\"][\"StoryboardStatus\"][];\n passing_count: number;\n total_count: number;\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Members only */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n members_only: boolean;\n };\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n bulkAgentStoryboardStatus: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @description Agent URLs to fetch storyboard status for */\n agent_urls: string[];\n };\n };\n };\n responses: {\n /** @description Storyboard status keyed by agent URL */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agents: {\n [key: string]: components[\"schemas\"][\"StoryboardStatus\"][] | {\n /** @enum {string} */\n status: \"opted_out\";\n };\n };\n /** @description Count of invalid URLs that were skipped */\n invalid_urls?: number;\n };\n };\n };\n /** @description Invalid request body */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Members only */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n members_only: boolean;\n };\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getAgentComplianceHistory: {\n parameters: {\n query?: {\n /** @description Max results (default 30, max 100) */\n limit?: string;\n };\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Compliance run history */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n runs: components[\"schemas\"][\"ComplianceRun\"][];\n count: number;\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n updateAgentLifecycle: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @enum {string} */\n lifecycle_stage: \"development\" | \"testing\" | \"production\" | \"deprecated\";\n };\n };\n };\n responses: {\n /** @description Updated metadata */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"RegistryMetadata\"];\n };\n };\n /** @description Invalid agent URL or lifecycle stage */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n updateAgentComplianceOptOut: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n opt_out: boolean;\n };\n };\n };\n responses: {\n /** @description Updated metadata */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"RegistryMetadata\"];\n };\n };\n /** @description Invalid agent URL or opt_out value */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getAgentMonitoringSettings: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Monitoring settings */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"MonitoringSettings\"];\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n updateAgentMonitoringPause: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n paused: boolean;\n };\n };\n };\n responses: {\n /** @description Updated monitoring settings */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"MonitoringSettings\"];\n };\n };\n /** @description Invalid agent URL or paused value */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n updateAgentMonitoringInterval: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n interval_hours: number;\n };\n };\n };\n responses: {\n /** @description Updated monitoring settings */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"MonitoringSettings\"];\n };\n };\n /** @description Invalid agent URL or interval */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n requeueAgentForHeartbeat: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Agent requeued */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n requeued: boolean;\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limited */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getAgentComplianceStepDiagnostics: {\n parameters: {\n query?: {\n /** @description Specific compliance run UUID. Defaults to latest. */\n run_id?: string;\n /** @description Max rows (default 500, max 1000) */\n limit?: string;\n };\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Per-step diagnostics for the requested run */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n run_id: string | null;\n count: number;\n diagnostics: components[\"schemas\"][\"ComplianceStepDiagnostic\"][];\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getAgentMonitoringRequests: {\n parameters: {\n query?: {\n /** @description Max results (default 50, max 200) */\n limit?: string;\n /** @description ISO 8601 timestamp to filter from */\n since?: string;\n };\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Outbound request log */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n requests: components[\"schemas\"][\"OutboundRequest\"][];\n count: number;\n total: number;\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n refreshAgent: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @description Selected organization ID. The caller must own the agent in this organization before its credentials are used. */\n organization_id?: string;\n };\n };\n };\n responses: {\n /** @description Snapshot refreshed */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n online: boolean;\n tools_count: number | null;\n response_time_ms: number | null;\n /** @description Type inferred from discovered tools (sales, creative, signals, governance, etc.) or 'unknown' */\n inferred_type: string;\n /** @description True when registry type was upgraded from unknown to inferred_type */\n type_promoted: boolean;\n oauth_required: boolean;\n checked_at: string;\n error?: string;\n /** @description Compliance re-run summary. The capability/health portion of the response is independent of this block — a failed compliance run still returns the rest of the snapshot. */\n compliance: {\n /** @description True if the full storyboard suite ran and agent_storyboard_status was updated. False when ownership couldn't be resolved, the agent reported auth_required, or the compliance call itself failed. */\n ran: boolean;\n /** @description Compliance run id written by this refresh. Use with /compliance/diagnostics?run_id=... to inspect failing-step wire evidence. */\n run_id?: string;\n /** @description Fresh test session id used for the compliance run. Useful when matching seller-side logs to the refresh. */\n test_session_id?: string;\n /** @description Requested compliance target before alias resolution, e.g. 3.1, 3.0, 3.1-rc, or 3.1-beta. Present when `ran` is true. */\n requested_compliance_target?: string;\n /** @description Concrete AdCP compliance bundle version used for the run, e.g. 3.0.12 or 3.1.0-beta.7. Present when `ran` is true. */\n adcp_version?: string;\n /** @description True when this run can update public badge state. */\n badge_eligible?: boolean;\n /** @description Public badge versions this run can issue, e.g. ['3.0']. */\n badge_eligible_adcp_versions?: string[];\n /** @description Aggregate verdict from the run (passing / failing / partial / unknown). Only present when `ran` is true. */\n overall_status?: string;\n /** @description Number of storyboards passing on this run. */\n storyboards_passing?: number;\n /** @description Number of storyboards evaluated on this run. */\n storyboards_total?: number;\n /** @description Number of advisory observations emitted by this run. */\n observations_count?: number;\n /** @description Number of run-summary notices emitted by this run. */\n notices_count?: number;\n /** @description Reason compliance didn't run when `ran` is false. */\n error?: string;\n };\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized — must be owner or AAO admin */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Monitoring paused for this agent */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n /** @description Seconds to wait before retrying */\n retry_after: number;\n };\n };\n };\n /** @description Probe failed (timeout, DNS, OAuth wall, etc.) */\n 502: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getAgentAuthStatus: {\n parameters: {\n query?: {\n /** @description Selected organization ID. Required to disambiguate an agent URL registered by multiple organizations. */\n org?: string;\n };\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Auth status */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"AgentAuthStatus\"];\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n connectAgent: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @description Bearer or basic auth token */\n auth_token?: string;\n /**\n * @description Auth type (default: bearer)\n * @enum {string}\n */\n auth_type?: \"bearer\" | \"basic\";\n /** @description Selected organization ID. The caller must own the agent in this organization. */\n organization_id?: string;\n };\n };\n };\n responses: {\n /** @description Connection result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {boolean} */\n connected: true;\n has_auth: boolean;\n agent_context_id: string;\n };\n };\n };\n /** @description Invalid parameters */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n saveAgentOAuthClientCredentials: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @description Token endpoint URL (HTTPS required; localhost allowed in dev). */\n token_endpoint: string;\n /** @description OAuth client ID. May be a `$ENV:VAR_NAME` reference. */\n client_id: string;\n /** @description OAuth client secret. May be a `$ENV:VAR_NAME` reference. Stored encrypted at rest. */\n client_secret: string;\n /** @description Space-separated OAuth scope values. */\n scope?: string;\n /** @description RFC 8707 resource indicator. Accepts a single URI string or an array of 1–8 URI strings for multi-resource authorization servers (Keycloak strict, AWS Cognito multi-RS). */\n resource?: string | string[];\n /** @description Audience parameter for audience-validating authorization servers. */\n audience?: string;\n /**\n * @description Client-credentials placement: basic (HTTP Basic header, RFC 6749 §2.3.1 preferred) or body (form fields). SDK default is basic.\n * @enum {string}\n */\n auth_method?: \"basic\" | \"body\";\n /** @description Selected organization ID. The caller must own the agent in this organization. */\n organization_id?: string;\n };\n };\n };\n responses: {\n /** @description Credentials saved */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {boolean} */\n connected: true;\n /** @enum {boolean} */\n has_auth: true;\n agent_context_id: string;\n /** @enum {string} */\n auth_type: \"oauth_client_credentials\";\n };\n };\n };\n /** @description Invalid parameters — response carries `code` and `field` pointing to the rejection cause. */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CredentialSaveValidationError\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n testAgentOAuthClientCredentials: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @description Selected organization ID. The caller must own the agent in this organization. */\n organization_id?: string;\n };\n };\n };\n responses: {\n /** @description Result of the token exchange. `ok: true` on 2xx from the AS; `ok: false` with a typed error otherwise (HTTP response itself is still 200 — the error payload carries the rejection kind so UI can branch on it). */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {boolean} */\n ok: true;\n latency_ms: number;\n } | {\n /** @enum {boolean} */\n ok: false;\n latency_ms: number;\n error: {\n /**\n * @description Category of failure: `oauth` = AS returned a typed error (e.g. invalid_client), `malformed` = AS returned an unexpected 2xx payload, `network` = couldn't reach the AS.\n * @enum {string}\n */\n kind: \"oauth\" | \"malformed\" | \"network\";\n message: string;\n /** @description RFC 6749 `error` field when kind=oauth. */\n oauth_error?: string;\n /** @description RFC 6749 `error_description` field when kind=oauth. */\n oauth_error_description?: string;\n /** @description Status code when the AS returned a non-2xx. */\n http_status?: number;\n };\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description No saved client-credentials config for this agent */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getApplicableStoryboards: {\n parameters: {\n query?: {\n /** @description Selected organization ID. Required to disambiguate an agent URL registered by multiple organizations. */\n org?: string;\n };\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Bundles the agent will be tested against, driven by its declared capabilities */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n requested_compliance_target: string;\n adcp_version: string;\n agent_name: string;\n supported_protocols: string[];\n specialisms: string[];\n /** @description Agent-reported probe error. Untrusted — sanitized and truncated to 500 chars. Present when get_adcp_capabilities was advertised but failed; empty bundle list usually indicates this, not a v2 agent. */\n capabilities_probe_error?: string;\n bundles: {\n /** @enum {string} */\n kind: \"universal\" | \"domain\" | \"specialism\";\n id: string;\n storyboards: {\n id: string;\n title: string;\n summary: string;\n step_count: number;\n }[];\n }[];\n total_storyboards: number;\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Agent requires authentication, or declared capabilities cannot be resolved for the selected compliance target */\n 422: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n /** @enum {string} */\n error_kind?: \"specialism_parent_protocol_missing\" | \"unknown_specialism\" | \"unsupported_adcp_version\";\n needs_auth?: boolean;\n unknown_specialism?: boolean;\n specialism_parent_protocol_missing?: boolean;\n specialism?: string;\n parent_protocol?: string;\n compliance_version?: string;\n supported_versions?: string;\n /** @description Specialisms the agent declared, for unknown-specialism errors */\n declared_specialisms?: string[];\n /** @description Protocols the agent declared, for capability-resolution errors */\n declared_protocols?: string[];\n /** @description Specialism ids present in this server's local compliance cache */\n known_specialisms?: string[];\n };\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n /**\n * @description Coarse error classification for UI differentiation\n * @enum {string}\n */\n reason?: \"network\" | \"tls\" | \"timeout\" | \"protocol\" | \"unknown\";\n };\n };\n };\n /** @description Connection timeout */\n 504: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n listStoryboards: {\n parameters: {\n query?: {\n /** @description Filter by storyboard category */\n category?: string;\n /** @description Compliance target to inspect, e.g. 3.1, 3.0, 3.1-rc, or 3.1-beta */\n compliance_target?: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Storyboard catalog */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n adcp_version: string;\n requested_compliance_target: string;\n storyboards: components[\"schemas\"][\"StoryboardSummary\"][];\n count: number;\n };\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getStoryboard: {\n parameters: {\n query?: {\n /** @description Compliance target to inspect, e.g. 3.1, 3.0, 3.1-rc, or 3.1-beta */\n compliance_target?: string;\n };\n header?: never;\n path: {\n /** @description Storyboard ID */\n id: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Storyboard detail */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n adcp_version: string;\n requested_compliance_target: string;\n storyboard: components[\"schemas\"][\"StoryboardDetail\"];\n test_kit?: unknown;\n };\n };\n };\n /** @description Storyboard not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n findBrand: {\n parameters: {\n query: {\n /** @description Search query (min 2 characters) */\n q: string;\n /** @description Max results (default 10, max 50) */\n limit?: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Search results */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n results: components[\"schemas\"][\"FindCompanyResult\"][];\n };\n };\n };\n /** @description Query too short */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n setupMyBrand: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @example acmecorp.com */\n domain: string;\n brand_name: string;\n /** @description Optional full brand.json draft to host in the registry. Every recognized logo URL must be an absolute HTTPS URL of at most 2048 characters without userinfo credentials, backslashes, or markup-significant characters. The primary brand color must use #RRGGBB format. */\n brand_json?: {\n [key: string]: unknown;\n };\n /**\n * Format: uri\n * @description Absolute HTTPS URL for the brand logo. Userinfo credentials, backslashes, and markup-significant characters are not allowed.\n * @example https://cdn.example.com/brand/logo.svg\n */\n logo_url?: string;\n brand_color?: string;\n };\n };\n };\n responses: {\n /** @description Brand setup result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n domain: string;\n has_brand_json: boolean;\n hosted_brand_json_url: string;\n /** @description JSON string for brand.json pointer */\n pointer_snippet: string;\n };\n };\n };\n /** @description Invalid domain or missing fields */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Domain not owned by user's organization */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n bulkPropertyCheck: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @description Property identifiers to check */\n identifiers: string[];\n };\n };\n };\n responses: {\n /** @description Check results with report ID */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n summary: {\n total: number;\n ready: number;\n known: number;\n ad_infra: number;\n unknown: number;\n skipped: number;\n };\n entries: {\n input: string;\n identifier: {\n type: string;\n value: string;\n };\n verdict: string;\n classification: string | null;\n source: string | null;\n property_rid: string | null;\n action: string;\n }[];\n report_id: string;\n };\n };\n };\n /** @description Invalid identifiers */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getBulkPropertyCheckReport: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description Report UUID */\n reportId: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Report data */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n summary: {\n total: number;\n ready: number;\n known: number;\n ad_infra: number;\n unknown: number;\n skipped: number;\n };\n entries: {\n input: string;\n identifier: {\n type: string;\n value: string;\n };\n verdict: string;\n classification: string | null;\n source: string | null;\n property_rid: string | null;\n action: string;\n }[];\n };\n };\n };\n /** @description Report not found or expired */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n runStoryboardStep: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n storyboardId: string;\n stepId: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @description Optional context object for the step */\n context?: {\n [key: string]: unknown;\n };\n /** @description Dry run mode (default: true) */\n dry_run?: boolean;\n /** @description Selected organization ID. The caller must own the agent in this organization. */\n organization_id?: string;\n };\n };\n };\n responses: {\n /** @description Step execution result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n adcp_version: string;\n requested_compliance_target: string;\n } & {\n [key: string]: unknown;\n };\n };\n };\n /** @description Invalid parameters */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Storyboard not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getStoryboardFirstStep: {\n parameters: {\n query?: {\n /** @description Compliance target to inspect, e.g. 3.1, 3.0, 3.1-rc, or 3.1-beta */\n compliance_target?: string;\n };\n header?: never;\n path: {\n storyboardId: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description First step preview */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n adcp_version: string;\n requested_compliance_target: string;\n storyboard: {\n id: string;\n title: string;\n };\n step?: unknown;\n };\n };\n };\n /** @description Storyboard not found or has no steps */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n runStoryboard: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n storyboardId: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @description Selected organization ID. The caller must own the agent in this organization. */\n organization_id?: string;\n };\n };\n };\n responses: {\n /** @description Storyboard run result with annotated phases */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n storyboard: {\n id: string;\n title: string;\n category: string;\n narrative?: string;\n };\n agent: {\n url: string;\n profile?: unknown;\n };\n adcp_version: string;\n requested_compliance_target: string;\n badge_eligible: boolean;\n badge_eligible_adcp_versions: string[];\n /** @description Compliance run id written by this owner-triggered storyboard run. */\n run_id: string;\n /** @description Persisted storyboard verdict for this run, using the same executable-step semantics as agent_storyboard_status. */\n storyboard_status: {\n storyboard_id: string;\n /** @enum {string} */\n status: \"passing\" | \"failing\" | \"partial\" | \"untested\";\n steps_passed: number;\n steps_total: number;\n failure_count: number;\n skipped_count: number;\n first_failed_step_id: string | null;\n first_failed_step_title: string | null;\n first_failed_step_task: string | null;\n first_failure_message: string | null;\n first_failure_validations: unknown[];\n };\n phases?: unknown;\n summary?: unknown;\n /** @description Owner-scoped failing-step validation summary for this run. Full request/response diagnostics remain available via /compliance/diagnostics?run_id=... */\n diagnostics: {\n run_id: string;\n agent_url: string;\n storyboard_id: string;\n phase_id: string;\n step_id: string;\n task: string;\n response_status?: number | null;\n error_text?: string | null;\n failed_validations_jsonb?: unknown;\n adcp_error_jsonb?: unknown;\n }[];\n observations?: unknown;\n total_duration_ms: number;\n test_kit?: unknown;\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Storyboard not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n compareStoryboard: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n storyboardId: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @description Selected organization ID. The caller must own the agent in this organization. */\n organization_id?: string;\n };\n };\n };\n responses: {\n /** @description Side-by-side comparison results */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n storyboard: {\n id: string;\n title: string;\n category: string;\n };\n user_agent: {\n url: string;\n profile?: unknown;\n summary?: unknown;\n };\n reference_agent: {\n url: string;\n name: string;\n profile?: unknown;\n summary?: unknown;\n };\n adcp_version: string;\n requested_compliance_target: string;\n badge_eligible: boolean;\n badge_eligible_adcp_versions: string[];\n phases?: unknown;\n total_duration_ms: number;\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Storyboard not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n listMemberAgents: {\n parameters: {\n query?: {\n /** @description WorkOS organization id to act on. Defaults to the caller's primary organization. Use this from a multi-org session (or when shelling with a user JWT) to target a non-primary org. Verification goes through WorkOS membership lookup; non-members get `403`. */\n org?: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Registered agents */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"MemberAgentListResponse\"];\n };\n };\n /** @description No organization associated with this account */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description `?org=` was supplied but the caller is not a member of that organization. */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description No member profile exists yet — create one via `POST /api/me/member-profile`. */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n registerMemberAgent: {\n parameters: {\n query?: {\n /** @description WorkOS organization id to act on. Defaults to the caller's primary organization. Use this from a multi-org session (or when shelling with a user JWT) to target a non-primary org. Verification goes through WorkOS membership lookup; non-members get `403`. */\n org?: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": components[\"schemas\"][\"MemberAgentInput\"];\n };\n };\n responses: {\n /** @description Agent already registered at this `url`; entry updated in place. */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"MemberAgentResponse\"];\n };\n };\n /** @description Agent registered. When this is the first agent on a freshly created organization, the response includes `profile_auto_created: true`. */\n 201: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"MemberAgentResponse\"];\n };\n };\n /** @description Missing or invalid `url`, missing/invalid `type`, or the caller has memberships in other orgs but no primary org set — pass `?org=<id>` to target one explicitly. (Fresh users with no memberships at all hit the org auto-bootstrap path and do not see this error.) */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description `?org=` was supplied but the caller is not a member of that organization. */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Auto-bootstrap could not run (e.g. the organization has no name yet). Call `POST /api/me/member-profile` to create a profile explicitly, then retry. */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n removeMemberAgent: {\n parameters: {\n query?: {\n /** @description WorkOS organization id to act on. Defaults to the caller's primary organization. Use this from a multi-org session (or when shelling with a user JWT) to target a non-primary org. Verification goes through WorkOS membership lookup; non-members get `403`. */\n org?: string;\n };\n header?: never;\n path: {\n /** @description The agent's `url`, URL-encoded (e.g. `https%3A%2F%2Fagent.example.com%2Fmcp`). */\n url: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Agent removed. */\n 204: {\n headers: {\n [name: string]: unknown;\n };\n content?: never;\n };\n /** @description No organization associated with this account */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description `?org=` was supplied but the caller is not a member of that organization. */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description No member profile, or no agent registered at the given `url`. */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Agent is currently `public` and reflected in `brand.json`; unpublish first. */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n updateMemberAgent: {\n parameters: {\n query?: {\n /** @description WorkOS organization id to act on. Defaults to the caller's primary organization. Use this from a multi-org session (or when shelling with a user JWT) to target a non-primary org. Verification goes through WorkOS membership lookup; non-members get `403`. */\n org?: string;\n };\n header?: never;\n path: {\n /** @description The agent's `url`, URL-encoded (e.g. `https%3A%2F%2Fagent.example.com%2Fmcp`). */\n url: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": components[\"schemas\"][\"MemberAgentPatch\"];\n };\n };\n responses: {\n /** @description Agent updated. */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"MemberAgentResponse\"];\n };\n };\n /** @description No organization associated with this account, or `body.url` differs from the path (`url_immutable`). */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description `?org=` was supplied but the caller is not a member of that organization. */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description No member profile, or no agent registered at the given `url`. */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n createOrganization: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": components[\"schemas\"][\"CreateOrganizationInput\"];\n };\n };\n responses: {\n /** @description Prospect adoption — an existing prospect organization for this domain was claimed by the caller. Body is `{ id, name, adopted: true }`. */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CreateOrganizationResponse\"];\n };\n };\n /** @description New organization created. Body is `{ success: true, organization: { id, name } }`. The caller is the `owner`; the corporate domain is recorded as email-verified for downstream registry calls. */\n 201: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CreateOrganizationResponse\"];\n };\n };\n /**\n * @description One of:\n * - `organization_name` missing or invalid\n * - `company_type` / `revenue_tier` value not in the documented enum\n * - caller is on a personal-email domain (gmail.com, yahoo.com, …) and is trying to register a corporate org — register `is_personal: true` instead\n * - per-user organization cap reached (10 orgs per user)\n */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description An active organization already exists for this caller's email domain. The body includes `existing_org_id` and `existing_org_name`; the caller should switch to the join-request flow rather than retrying. */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded — 15 failed attempts per hour per user. Successful calls do not count against the limit. */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n resolveIdentifiers: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": components[\"schemas\"][\"ResolveRequest\"];\n };\n };\n responses: {\n /** @description Resolve/lookup result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"ResolveResponse\"];\n };\n };\n /** @description Invalid request (bad identifiers, unknown provenance type, batch > 10,000) */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required for resolve mode */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n fileCatalogDispute: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": components[\"schemas\"][\"CatalogDisputeRequest\"];\n };\n };\n responses: {\n /** @description Dispute filed and triaged */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CatalogDisputeTriageResult\"];\n };\n };\n /** @description Invalid dispute request */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getCatalogDispute: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n id: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Dispute record */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CatalogDisputeRecord\"];\n };\n };\n /** @description Dispute not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n browseCatalog: {\n parameters: {\n query?: {\n classification?: string;\n source?: string;\n status?: string;\n identifier_type?: string;\n search?: string;\n /** @description Minimum lifetime resolve count (integer). */\n min_resolves?: string;\n /** @description ISO 8601 — only properties with resolve activity since this time. */\n active_since?: string;\n /** @description Page size (integer). */\n limit?: string;\n /** @description Opaque pagination cursor from a prior `next_cursor`. */\n cursor?: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Catalog page */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CatalogBrowseResponse\"];\n };\n };\n };\n };\n syncCatalog: {\n parameters: {\n query: {\n /** @description Watermark from a prior response `server_timestamp` (required). */\n since: string;\n /** @description Page size, capped at 10,000. */\n limit?: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Catalog delta */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CatalogSyncResponse\"];\n };\n };\n /** @description Missing required `since` parameter */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n}\n\n\n// ====== Ergonomic type aliases ======\n// Re-export component schemas as standalone types for direct import\n\nexport type ResolvedBrand = components['schemas']['ResolvedBrand'];\nexport type LocalizedName = components['schemas']['LocalizedName'];\nexport type BrandRegistryItem = components['schemas']['BrandRegistryItem'];\nexport type ResolvedProperty = components['schemas']['ResolvedProperty'];\nexport type PropertyIdentifier = components['schemas']['PropertyIdentifier'];\nexport type PropertyRegistryItem = components['schemas']['PropertyRegistryItem'];\nexport type ValidationResult = components['schemas']['ValidationResult'];\nexport type RegistryError = components['schemas']['Error'];\nexport type PublisherPropertySelector = components['schemas']['PublisherPropertySelector'];\nexport type FederatedAgentWithDetails = components['schemas']['FederatedAgentWithDetails'];\nexport type AgentHealth = components['schemas']['AgentHealth'];\nexport type AgentStats = components['schemas']['AgentStats'];\nexport type AgentCapabilities = components['schemas']['AgentCapabilities'];\nexport type PropertySummary = components['schemas']['PropertySummary'];\nexport type FederatedPublisher = components['schemas']['FederatedPublisher'];\nexport type DomainLookupResult = components['schemas']['DomainLookupResult'];\nexport type BrandActivity = components['schemas']['BrandActivity'];\nexport type PropertyActivity = components['schemas']['PropertyActivity'];\nexport type PolicySummary = components['schemas']['PolicySummary'];\nexport type Policy = components['schemas']['Policy'];\nexport type PolicyHistory = components['schemas']['PolicyHistory'];\nexport type RegistryFeedEvent = components['schemas']['RegistryFeedEvent'];\nexport type AgentEventPayload = components['schemas']['AgentEventPayload'];\nexport type PropertyEventPayload = components['schemas']['PropertyEventPayload'];\nexport type CollectionEventPayload = components['schemas']['CollectionEventPayload'];\nexport type AuthorizationEventPayload = components['schemas']['AuthorizationEventPayload'];\nexport type PublisherEventPayload = components['schemas']['PublisherEventPayload'];\nexport type BrandEventPayload = components['schemas']['BrandEventPayload'];\nexport type CatalogBrowseResponse = components['schemas']['CatalogBrowseResponse'];\nexport type CatalogBrowseEntry = components['schemas']['CatalogBrowseEntry'];\nexport type CatalogSyncResponse = components['schemas']['CatalogSyncResponse'];\nexport type CatalogSyncEntry = components['schemas']['CatalogSyncEntry'];\nexport type AgentCompliance = components['schemas']['AgentCompliance'];\nexport type AgentComplianceDetail = components['schemas']['AgentComplianceDetail'];\nexport type StoryboardStatus = components['schemas']['StoryboardStatus'];\nexport type OperatorLookupResult = components['schemas']['OperatorLookupResult'];\nexport type PublisherLookupResult = components['schemas']['PublisherLookupResult'];\nexport type CommunityMirrorListResponse = components['schemas']['CommunityMirrorListResponse'];\nexport type CommunityMirrorSummary = components['schemas']['CommunityMirrorSummary'];\nexport type CommunityMirrorGetResponse = components['schemas']['CommunityMirrorGetResponse'];\nexport type CommunityMirrorAdagentsJson = components['schemas']['CommunityMirrorAdagentsJson'];\nexport type CommunityMirrorPublishResponse = components['schemas']['CommunityMirrorPublishResponse'];\nexport type CommunityMirrorPublishError = components['schemas']['CommunityMirrorPublishError'];\nexport type CommunityMirrorPublishRequest = components['schemas']['CommunityMirrorPublishRequest'];\nexport type CommunityMirrorDeleteResponse = components['schemas']['CommunityMirrorDeleteResponse'];\n\n// ====== Inline operation types ======\n// The following types are defined inline in operation responses (not in components.schemas)\n// in ADCP 3.0.0-rc.3. We extract them here for ergonomic standalone usage.\n\n/** A single event from the registry feed (inline in getRegistryFeed 200 response). */\nexport type CatalogEvent = operations['getRegistryFeed']['responses']['200']['content']['application/json']['events'][number];\n\n/** Feed freshness metadata for lag monitoring (adcp#5733). Reported on every real feed page. */\nexport type FeedFreshness = NonNullable<\n operations['getRegistryFeed']['responses']['200']['content']['application/json']['freshness']\n>;\n\n/**\n * Full response from GET /api/registry/feed.\n *\n * `cursor_expired` is set by the client when the server returns 410; that\n * synthetic marker carries no `freshness`, so `freshness` is widened to\n * optional here even though the spec requires it on real pages. The SDK never\n * fabricates freshness — it is present iff the server sent it.\n */\nexport type FeedResponse = Omit<\n operations['getRegistryFeed']['responses']['200']['content']['application/json'],\n 'freshness'\n> & {\n /** Set to true by the client when the server returns 410 (cursor expired). */\n cursor_expired?: boolean;\n /** Feed lag metadata. Present on every real feed page; absent on the cursor_expired marker. */\n freshness?: FeedFreshness;\n};\n\n/** Raw search result from the searchAgentProfiles operation. */\nexport type AgentProfileSearchResult =\n operations['searchAgentProfiles']['responses']['200']['content']['application/json']['results'][number];\n\n/** Full response from GET /api/registry/agents/search (raw operation type). */\nexport type AgentProfileSearchResponse =\n operations['searchAgentProfiles']['responses']['200']['content']['application/json'];\n\n/** Response from POST /api/registry/crawl-request (202). */\nexport type CrawlRequestResponse = operations['requestCrawl']['responses']['202']['content']['application/json'];\n\n// ====== Client-facing composite types ======\n// These provide a stable API for the sync module and client consumers,\n// mapping the flat searchAgentProfiles response to the richer shape expected by callers.\n\n/** Inventory profile for an agent (channels, markets, categories, etc.). */\nexport type AgentInventoryProfile = {\n channels: string[];\n property_types: string[];\n markets: string[];\n categories: string[];\n category_taxonomy: string | null;\n tags: string[];\n delivery_types: string[];\n format_ids?: string[];\n property_count: number;\n publisher_count: number;\n has_tmp: boolean;\n};\n\n/** An agent search result in the client-facing shape used by RegistrySync. */\nexport type AgentSearchResult = {\n url: string;\n name: string;\n type: string;\n inventory_profile: AgentInventoryProfile;\n compliance_summary?: AgentCompliance;\n match: { score: number; matched_filters: string[] };\n};\n\n/** Response shape for the searchAgents client method. */\nexport type AgentSearchResponse = {\n results: AgentSearchResult[];\n cursor: string | null;\n has_more: boolean;\n};\n\n/** An authorization entry used by the sync module. Mirrors authorization.* event payloads. */\nexport type AuthorizationEntry = components['schemas']['AuthorizationEventPayload'] & {\n /** Legacy alias still returned by some registry deployments. */\n effective_to?: string;\n};\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/registry/types.generated.ts"],"sourcesContent":["// Generated AdCP Registry types from OpenAPI spec\n// Generated at: 2026-08-10T04:55:06.883Z\n// Source: https://agenticadvertising.org/openapi/registry.yaml\n//\n// Do not edit this file manually. Run: npm run generate-registry-types\n\nexport interface paths {\n \"/api\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * API discovery\n * @description Returns links to the main API entry points and documentation.\n */\n get: operations[\"apiDiscovery\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/brands/resolve\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Resolve brand\n * @description 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.\n *\n * 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.\n * Record selection is deterministic: `hosted` > `brand_json` > `community` > `enriched`. `source` reports provenance only and must not be used as a substitute for `relationship_trust`.\n * 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.\n *\n * **Rate limit:** 60 requests per minute per IP address.\n */\n get: operations[\"resolveBrand\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/brands/resolve/bulk\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Bulk resolve brands\n * @description Resolve up to 25 domains to their canonical brand identities in a single request. Unresolvable domains map to `null`.\n *\n * **Rate limits:** 20 requests and 100 unique domain resolutions per minute per IP address. Request bodies are capped at 16 KB.\n */\n post: operations[\"resolveBrandsBulk\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/brands/brand-json\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get brand.json\n * @description Fetch the raw brand.json file for a bare DNS hostname.\n *\n * **Rate limit:** 60 requests per minute per IP address.\n */\n get: operations[\"getBrandJson\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/brands/save\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Save brand\n * @description 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.\n */\n post: operations[\"saveBrand\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/brands/registry\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * List brands\n * @description List all brands in the registry with optional search, pagination, and source filter.\n */\n get: operations[\"listBrands\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/brands/history\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Brand activity history\n * @description 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.\n */\n get: operations[\"getBrandHistory\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/brands/enrich\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Enrich brand\n * @description Enrich brand data using Brandfetch. Returns logo, colors, and company information. Authenticated callers may also receive ephemeral Brand Context API identity/positioning/voice data.\n */\n get: operations[\"enrichBrand\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/history\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Property activity history\n * @description Returns the edit history for a property in the registry, newest first.\n */\n get: operations[\"getPropertyHistory\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/resolve\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Resolve property\n * @description Resolve a publisher domain to its property information. Checks hosted properties, discovered properties, then live adagents.json validation.\n */\n get: operations[\"resolveProperty\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/resolve/bulk\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Bulk resolve properties\n * @description Resolve up to 100 publisher domains at once.\n *\n * **Rate limit:** 20 requests per minute per IP address.\n */\n post: operations[\"resolvePropertiesBulk\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/registry\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * List properties\n * @description List all properties in the registry with optional search, pagination.\n */\n get: operations[\"listProperties\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/validate\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Validate adagents.json\n * @description Validate a domain's adagents.json file and return the validation result.\n */\n get: operations[\"validateProperty\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/save\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Save property\n * @description 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.\n *\n * 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.\n */\n post: operations[\"saveProperty\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/hosted/{domain}/claim\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Claim a domain for bind-on-verify\n * @description Issue a pending domain claim for the caller's organization and return a claim-specific `authoritative_location` URL (`…/adagents.json?adcp_claim=<token>`). 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.\n *\n * 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.\n */\n post: operations[\"claimHostedPropertyDomain\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/hosted/{domain}/verify-origin\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Verify AAO-hosted publisher origin\n * @description 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.\n *\n * 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.\n *\n * Failure classification:\n * - `not_found`: publisher origin returned 404 (permanent — demotes if previously verified).\n * - `invalid_json` / `no_authoritative_location` / `authoritative_location_mismatch`: publisher origin returned a parseable response that doesn't satisfy the spec stub pattern (permanent — demotes).\n * - `unresolvable`: DNS NXDOMAIN, private IP, or non-http scheme (permanent — demotes).\n * - `transient`: 5xx / 429 / 3xx / network timeout (leaves persisted state alone, stamps `origin_last_checked_at`).\n */\n post: operations[\"verifyHostedPropertyOrigin\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/check\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Check property list\n * @description 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.\n *\n * Returns four buckets:\n * - **remove**: duplicates or known blocked domains (ad servers, CDNs, trackers, intermediaries)\n * - **modify**: domains that were normalized (e.g. www.example.com → example.com)\n * - **assess**: unknown domains not in registry, not blocked\n * - **ok**: domains found in registry with no changes needed\n *\n * Results are stored for 7 days and retrievable via the `report_id`.\n */\n post: operations[\"checkPropertyList\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/check/{reportId}\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get property check report\n * @description Retrieve a previously stored property check report by ID. Reports expire after 7 days.\n */\n get: operations[\"getPropertyCheckReport\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * List agents\n * @description 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.\n */\n get: operations[\"listAgents\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/publishers\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * List publishers\n * @description List all registered publishers.\n */\n get: operations[\"listPublishers\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/stats\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Registry statistics\n * @description Get aggregate statistics about the registry.\n */\n get: operations[\"getRegistryStats\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/lookup/domain/{domain}\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Domain lookup (deprecated)\n * @deprecated\n * @description **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.\n */\n get: operations[\"lookupDomain\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/lookup/property\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Property identifier lookup\n * @description Find agents that hold a specific property identifier.\n */\n get: operations[\"lookupProperty\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/lookup/agent/{agentUrl}/domains\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Agent domain lookup\n * @description Get all publisher domains associated with an agent.\n */\n get: operations[\"getAgentDomains\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/v1/agents/{encodedUrl}/publishers\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * AAO directory inverse-lookup\n * @description 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`).\n *\n * 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.\n */\n get: operations[\"getPublishersForAgentLegacyApiPrefix\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/v1/agents/{encodedUrl}/publishers\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * AAO directory inverse-lookup\n * @description 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`).\n *\n * 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.\n */\n get: operations[\"getPublishersForAgent\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/operator\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Operator lookup\n * @description Given a domain, returns the agents this entity operates and which publishers trust them.\n *\n * **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.\n *\n * **`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).\n *\n * **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.\n */\n get: operations[\"lookupOperator\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/publisher\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Publisher lookup\n * @description Given a domain, returns the inventory this entity publishes and which agents it authorizes.\n *\n * **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.\n *\n * **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`).\n *\n * **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.\n */\n get: operations[\"lookupPublisher\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/publisher/{domain}/adagents/revalidate\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Revalidate publisher adagents.json\n * @description 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.\n *\n * **Rate limits:** 5 minutes per domain, 30 requests per user per hour.\n */\n post: operations[\"revalidatePublisherAdagents\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/brand/{domain}/force-crawl\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Force a synchronous brand.json crawl\n * @description 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.\n *\n * **Rate limits:** 5 minutes per domain, 30 requests per user per hour.\n */\n post: operations[\"forceBrandCrawl\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/publisher/authorization\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Per-agent authorization rollup\n * @description 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.\n */\n get: operations[\"lookupPublisherAgentAuthorization\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/validate/product-authorization\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Validate product authorization\n * @description Check whether an agent is authorized to sell a product based on its publisher_properties.\n */\n post: operations[\"validateProductAuthorization\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/expand/product-identifiers\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Expand product identifiers\n * @description Expand publisher_properties selectors into concrete property identifiers for caching.\n */\n post: operations[\"expandProductIdentifiers\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/validate/property-authorization\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Property authorization check\n * @description Quick check if a property identifier is authorized for an agent. Optimized for real-time ad request validation.\n */\n get: operations[\"validatePropertyAuthorization\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/adagents/validate\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Validate adagents.json\n * @description Validate a domain's adagents.json file and optionally validate referenced agent cards.\n */\n post: operations[\"validateAdagents\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/adagents/create\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Generate adagents.json\n * @description 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.\n */\n post: operations[\"createAdagents\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/mirror-proposals\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * List community mirror proposals\n * @description 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`.\n */\n get: operations[\"listCommunityMirrorProposals\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/mirror-proposals/{id}\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get community mirror proposal\n * @description Fetch a proposal owned by the caller. Registry moderators and AgenticAdvertising.org administrators may fetch any proposal.\n */\n get: operations[\"getCommunityMirrorProposal\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/mirror-proposals/{id}/approve\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Approve community mirror proposal\n * @description Approve and atomically publish a pending proposal. Requires a registry moderator or AgenticAdvertising.org administrator.\n */\n post: operations[\"approveCommunityMirrorProposal\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/mirror-proposals/{id}/reject\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Reject community mirror proposal\n * @description Reject a pending proposal with reviewer notes. Requires a registry moderator or AgenticAdvertising.org administrator.\n */\n post: operations[\"rejectCommunityMirrorProposal\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/mirrors\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * List community mirrors\n * @description 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.\n */\n get: operations[\"listCommunityMirrors\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/mirrors/{platform}\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get community mirror\n * @description 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.\n */\n get: operations[\"getCommunityMirror\"];\n /**\n * Publish or propose community mirror\n * @description 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`.\n */\n put: operations[\"publishCommunityMirror\"];\n post?: never;\n /**\n * Delete community mirror\n * @description 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.\n */\n delete: operations[\"deleteCommunityMirror\"];\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/search\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Search\n * @description Search across brands, publishers, and properties. Returns up to 5 results per category.\n */\n get: operations[\"search\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/manifest-refs/lookup\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Manifest reference lookup\n * @description Find the best manifest reference (brand.json URL or agent) for a domain.\n */\n get: operations[\"lookupManifestRef\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/public/discover-agent\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Discover agent\n * @description Probe an agent URL to discover its name, type, supported protocols, and basic statistics.\n */\n get: operations[\"discoverAgent\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/public/agent-formats\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get creative-agent format capabilities\n * @description 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.\n */\n get: operations[\"getAgentFormats\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/public/agent-publishers\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get agent publisher properties\n * @description Fetch public list_authorized_properties data from a sales agent.\n */\n get: operations[\"getAgentPublishers\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/public/agent-products\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get agent products\n * @description Fetch products from a sales agent.\n */\n get: operations[\"getAgentProducts\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/public/validate-publisher\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Validate publisher\n * @description Validate a publisher domain's adagents.json and return summary statistics.\n */\n get: operations[\"validatePublisher\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/policies/registry\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * List policies\n * @description Browse and search the governance policy registry. Returns approved policies with optional filtering by category, enforcement level, jurisdiction, policy category, and governance domain.\n */\n get: operations[\"listPolicies\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/policies/resolve\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Resolve policy\n * @description Resolve a single policy by ID. Optionally pin to a specific version — returns null if the version does not match.\n */\n get: operations[\"resolvePolicy\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/policies/resolve/bulk\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Bulk resolve policies\n * @description Resolve up to 100 policies by ID in a single request. Returns a map of policy_id to Policy (or null if not found).\n *\n * **Rate limit:** 20 requests per minute per IP address.\n */\n post: operations[\"resolvePoliciesBulk\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/policies/history\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Policy revision history\n * @description Retrieve the edit history for a policy. Each revision records who made the change, a summary, and whether it was a rollback.\n */\n get: operations[\"getPolicyHistory\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/policies/save\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Save policy\n * @description 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.\n */\n post: operations[\"savePolicy\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/feed\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Registry change feed\n * @description 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`.\n *\n * Type filtering supports glob patterns: `property.*` matches `property.created`, `property.updated`, etc.\n */\n get: operations[\"getRegistryFeed\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/feed/stream\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Registry change feed stream\n * @description 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.\n */\n get: operations[\"streamRegistryFeed\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/authorizations\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Per-agent authorization pull\n * @description 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.\n *\n * **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.\n */\n get: operations[\"getAgentAuthorizations\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/authorizations/snapshot\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Bootstrap snapshot for inline verifiers\n * @description 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=<value>` for deltas.\n *\n * **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.\n */\n get: operations[\"getAgentAuthorizationsSnapshot\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/search\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Search agent inventory profiles\n * @description 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.\n */\n get: operations[\"searchAgentProfiles\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/crawl-request\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Request domain re-crawl\n * @description Trigger an immediate re-crawl of a publisher domain after updating adagents.json. The crawl runs asynchronously in the accepting process — returns 202 immediately. The response `crawl_request_id` correlates accepted, running, completed, skipped, and failed lifecycle logs; a 202 does not by itself mean the mirror write completed.\n *\n * **Rate limits:** 5 minutes per domain, 30 requests per user per hour.\n */\n post: operations[\"requestCrawl\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/manager-revalidation-request\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Request manager fan-out re-validation\n * @description 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.\n *\n * **Rate limits:** 5 minutes per manager domain, 30 requests per user per hour (shared with other crawl-request endpoints).\n */\n post: operations[\"requestManagerRevalidation\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/brand-crawl-request\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Request brand.json re-crawl\n * @description Trigger an immediate re-crawl of a domain's brand.json. The crawl runs asynchronously — returns 202 immediately.\n *\n * **Rate limits:** 5 minutes per domain, 30 requests per user per hour (shared with adagents.json crawl requests).\n */\n post: operations[\"requestBrandCrawl\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/compliance\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get agent compliance detail\n * @description Returns detailed compliance status for a single agent, including track-level results, storyboard counts, and timestamps.\n *\n * If the agent has opted out of compliance monitoring, returns a minimal response with `status: opted_out`.\n */\n get: operations[\"getAgentCompliance\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/.well-known/jwks.json\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * AAO public key set\n * @description 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.\n */\n get: operations[\"getJwks\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/verification\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get agent AAO Verified status\n * @description Returns AAO Verified badge status for a single agent. Public and cacheable. Includes role badges, verified storyboards, and a link to the agent's registry listing.\n */\n get: operations[\"getAgentVerification\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/badge/{role}.svg\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get agent verification badge SVG\n * @description Returns an SVG badge image for the specified agent and role. Shows 'AAO Verified | Sales Agent' (teal) when verified, or 'AAO Verified | Not Verified' (grey) when not. Cacheable, suitable for embedding in websites.\n */\n get: operations[\"getAgentBadgeSvg\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/badge/{role}/embed\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get embeddable badge code\n * @description Returns HTML and Markdown embed snippets for displaying an AAO Verified badge on websites, social profiles, and documentation. The badge links to the agent's AAO registry listing.\n */\n get: operations[\"getAgentBadgeEmbed\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/badge/{role}/{version}.svg\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get version-pinned agent verification badge SVG\n * @description 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.\n */\n get: operations[\"getAgentBadgeVersionedSvg\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/badge/{role}/{version}/embed\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get version-pinned embeddable badge code\n * @description Returns HTML and Markdown embed snippets that point at the version-pinned SVG. Alt text includes the version (e.g. 'AAO 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`.\n */\n get: operations[\"getAgentBadgeVersionedEmbed\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/storyboard-status\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get agent storyboard status\n * @description Returns per-storyboard test results for an agent. Includes title, category, track, pass/fail status, and step counts.\n *\n * **Members only** — requires authentication and an active membership. Static admin API key callers may read this for support/debugging.\n */\n get: operations[\"getAgentStoryboardStatus\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/storyboard-status\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Bulk storyboard status\n * @description Returns per-storyboard test results for multiple agents in a single request.\n *\n * **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.\n */\n post: operations[\"bulkAgentStoryboardStatus\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/compliance/history\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get agent compliance history\n * @description Returns a list of compliance test runs for an agent, ordered most recent first.\n *\n * If the agent has opted out, returns an empty list.\n */\n get: operations[\"getAgentComplianceHistory\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/lifecycle\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n /**\n * Update agent lifecycle stage\n * @description Set the lifecycle stage for an agent. Requires authentication and ownership of the agent.\n */\n put: operations[\"updateAgentLifecycle\"];\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/compliance/opt-out\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n /**\n * Update compliance opt-out\n * @description Opt an agent in or out of public compliance reporting. Requires authentication and ownership of the agent.\n */\n put: operations[\"updateAgentComplianceOptOut\"];\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/monitoring/settings\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get monitoring settings\n * @description Returns the monitoring configuration for an agent. Requires authentication and ownership.\n */\n get: operations[\"getAgentMonitoringSettings\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/monitoring/pause\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n /**\n * Pause or resume monitoring\n * @description Pause or resume automated compliance monitoring for an agent. Requires authentication and ownership.\n */\n put: operations[\"updateAgentMonitoringPause\"];\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/monitoring/interval\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n /**\n * Update monitoring interval\n * @description Set the check interval for automated compliance monitoring (6–168 hours). Requires authentication and ownership.\n */\n put: operations[\"updateAgentMonitoringInterval\"];\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/monitoring/requeue\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Requeue agent for compliance heartbeat\n * @description 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.\n */\n post: operations[\"requeueAgentForHeartbeat\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/compliance/diagnostics\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get per-step diagnostics for a compliance run\n * @description Returns the exact request and response payloads the runner captured for failing storyboard steps on a single compliance run.\n *\n * 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.\n */\n get: operations[\"getAgentComplianceStepDiagnostics\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/monitoring/requests\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get outbound request log\n * @description 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.\n */\n get: operations[\"getAgentMonitoringRequests\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/refresh\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Refresh agent snapshot\n * @description 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).\n *\n * **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.\n *\n * **Auth:** owner of the agent, AAO admin, or static `ADMIN_API_KEY`.\n *\n * **Rate limits:** 60 seconds per agent URL, 30 requests per user per hour.\n */\n post: operations[\"refreshAgent\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/auth-status\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get agent auth status\n * @description Returns whether an agent has stored authentication credentials and OAuth token status. Requires authentication.\n */\n get: operations[\"getAgentAuthStatus\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/connect\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n /**\n * Connect agent credentials\n * @description Store authentication credentials for an agent. Requires authentication and ownership.\n */\n put: operations[\"connectAgent\"];\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/oauth-client-credentials\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n /**\n * Save OAuth 2.0 client-credentials for an agent\n * @description 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.\n */\n put: operations[\"saveAgentOAuthClientCredentials\"];\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/oauth-client-credentials/test\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Dry-run the saved OAuth 2.0 client-credentials config\n * @description 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`.\n */\n post: operations[\"testAgentOAuthClientCredentials\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/applicable-storyboards\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get applicable storyboards for agent\n * @description 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.\n */\n get: operations[\"getApplicableStoryboards\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/storyboards\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * List storyboards\n * @description Returns the catalog of compliance storyboards. Optionally filter by category.\n */\n get: operations[\"listStoryboards\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/storyboards/{id}\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get storyboard detail\n * @description Returns a single storyboard with its full phase and step structure, plus its test kit if available.\n */\n get: operations[\"getStoryboard\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/brands/find\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Find brands by name\n * @description Search for brands by name or domain. Returns matching results with basic identity info.\n */\n get: operations[\"findBrand\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/brands/setup-my-brand\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Set up a hosted brand.json\n * @description 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.\n */\n post: operations[\"setupMyBrand\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/check/bulk\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Bulk property identifier check\n * @description 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.\n */\n post: operations[\"bulkPropertyCheck\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/properties/check/bulk/{reportId}\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get bulk check report\n * @description Retrieve a previously generated bulk property check report by ID.\n */\n get: operations[\"getBulkPropertyCheckReport\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/storyboard/{storyboardId}/step/{stepId}\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Run a single storyboard step\n * @description Execute a single storyboard step against an agent. Requires authentication and ownership.\n */\n post: operations[\"runStoryboardStep\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/storyboards/{storyboardId}/first-step\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get first step preview\n * @description Returns a preview of the first step of a storyboard. No agent call needed.\n */\n get: operations[\"getStoryboardFirstStep\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/storyboard/{storyboardId}/run\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Run full storyboard evaluation\n * @description Execute all steps of a storyboard against an agent and record the compliance result. Requires authentication and ownership.\n */\n post: operations[\"runStoryboard\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/agents/{encodedUrl}/storyboard/{storyboardId}/compare\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Compare storyboard against reference agent\n * @description Run a storyboard against both the target agent and the public reference agent, returning side-by-side results. Requires authentication and ownership.\n */\n post: operations[\"compareStoryboard\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/me/agents\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * List my registered agents\n * @description 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.\n */\n get: operations[\"listMemberAgents\"];\n put?: never;\n /**\n * Register an agent\n * @description Register an agent on the caller's organization member profile.\n *\n * 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`.\n *\n * **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:\n *\n * - 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`.\n *\n * - 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`.\n *\n * 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.\n *\n * `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.\n *\n * `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.\n */\n post: operations[\"registerMemberAgent\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/me/agents/{url}\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n post?: never;\n /**\n * Remove an agent\n * @description Remove one registered agent identified by its `url`.\n *\n * 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.\n */\n delete: operations[\"removeMemberAgent\"];\n options?: never;\n head?: never;\n /**\n * Update an agent\n * @description 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.\n */\n patch: operations[\"updateMemberAgent\"];\n trace?: never;\n };\n \"/api/organizations\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Create or adopt my organization\n * @description 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.\n *\n * **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.\n *\n * Three outcomes depending on the caller's state:\n *\n * - **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 } }`.\n *\n * - **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 }`.\n *\n * - **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.\n *\n * 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`.\n *\n * 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.\n */\n post: operations[\"createOrganization\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/resolve\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Resolve identifiers to property_rids (and contribute them)\n * @description 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.\n */\n post: operations[\"resolveIdentifiers\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/catalog/disputes\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n get?: never;\n put?: never;\n /**\n * Dispute a catalog fact\n * @description 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.\n */\n post: operations[\"fileCatalogDispute\"];\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/catalog/disputes/{id}\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Get a catalog dispute\n * @description Fetch the current state of a filed dispute by id.\n */\n get: operations[\"getCatalogDispute\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/catalog\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Browse the property catalog\n * @description 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.\n */\n get: operations[\"browseCatalog\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n \"/api/registry/catalog/sync\": {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n /**\n * Sync catalog changes since a watermark\n * @description 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.\n */\n get: operations[\"syncCatalog\"];\n put?: never;\n post?: never;\n delete?: never;\n options?: never;\n head?: never;\n patch?: never;\n trace?: never;\n };\n}\nexport type webhooks = Record<string, never>;\nexport interface components {\n schemas: {\n BrandEventPayload: {\n /** @description Brand domain; brand.* events are identified by entity_id (the brand) and carry hierarchy context here. */\n domain?: string;\n /** @description On brand.resolved/hierarchy_updated: the resolved brand chain (root → leaf). */\n chain?: {\n [key: string]: unknown;\n }[];\n ancestor_domains?: string[];\n domains?: string[];\n };\n ResolvedBrand: {\n /** @example acmecorp.com */\n canonical_id: string;\n /** @example acmecorp.com */\n canonical_domain: string;\n /** @example Acme Corp */\n brand_name: string;\n names?: components[\"schemas\"][\"LocalizedName\"][];\n /** @enum {string} */\n keller_type?: \"master\" | \"sub_brand\" | \"endorsed\" | \"independent\";\n parent_brand?: string;\n house_domain?: string;\n /** @description House the requested domain claims. This field never extends trust on its own; `relationship_trust` reports whether the reciprocal declaration is current enough to do so. */\n claimed_house_domain?: string;\n house_name?: string;\n /**\n * @description How the brand-to-house relationship was established. `inline`: the house's own document defines the brand. `mutual`: both sides publish the relationship — the trust-extending edge. `leaf_only`: the brand claims a house whose reciprocal declaration is missing, not yet active, or too old to extend trust. `house_only`: a house claims the brand, which has not reciprocated. `standalone`: the brand claims no house. `unverifiable`: a claimed house could not be checked.\n * @enum {string}\n */\n relationship_trust?: \"inline\" | \"mutual\" | \"leaf_only\" | \"house_only\" | \"standalone\" | \"unverifiable\";\n /**\n * Format: date-time\n * @description When both sides of a mutual relationship were last seen agreeing. Present only for `mutual`, and it does not advance while the house side is unreachable, so callers can apply their own edge-aging policy.\n * @example 2026-07-28T12:00:00Z\n */\n relationship_verified_at?: string;\n /**\n * Format: date-time\n * @description When the house declared the relationship in `brand_refs[].effective_at`, or the resolver's durable first observation if the publisher omitted that field. Callers can apply a declaration-age ceiling independently of `relationship_verified_at`.\n * @example 2026-01-29T12:00:00Z\n */\n relationship_declared_at?: string;\n /** @description Set when a pre-v3 document was promoted to a canonical v3 document for this response. Identity only — legacy relationship data is preserved opaquely, never promoted to a trust claim. */\n promoted_from_schema?: string;\n /** @description Loss or ambiguity encountered while promoting a pre-v3 document. A `house` warning means the legacy house object was preserved only as opaque metadata and did not establish a trusted relationship. */\n migration_warnings?: {\n field: string;\n message: string;\n suggestion?: string;\n }[];\n brand_agent_url?: string;\n brand_manifest?: {\n [key: string]: unknown;\n };\n /**\n * @description Provenance of the selected record, not relationship authorization. Deterministic precedence is `hosted` > `brand_json` > `community` > `enriched` > `stub`; normal reads prefer the durable stored winner on a source tie, while `fresh=true` lets a successful live origin read win a tie. `brand_json`: the domain's own /.well-known/brand.json. `hosted`: registered by an owner whose control of the domain was verified. `community`: contributed by a member. `enriched`: third-party enrichment. `stub`: a minimal organization-derived placeholder awaiting stronger evidence.\n * @enum {string}\n */\n source: \"hosted\" | \"brand_json\" | \"community\" | \"enriched\" | \"stub\";\n /** @description This request's origin-validation diagnostics when `fresh=true` falls back to a stored registry record. Presence means the response is stored evidence, not a successful live-origin read. */\n live_brand_json?: {\n valid: boolean;\n url: string;\n status_code?: number;\n errors: {\n field: string;\n message: string;\n /** @enum {string} */\n severity: \"error\";\n }[];\n warnings: {\n field: string;\n message: string;\n suggestion?: string;\n }[];\n };\n };\n LocalizedName: {\n [key: string]: string;\n };\n Error: {\n error: string;\n };\n BrandRegistryItem: {\n /** @example acmecorp.com */\n domain: string;\n /** @example Acme Corp */\n brand_name?: string;\n /** @enum {string} */\n source: \"hosted\" | \"brand_json\" | \"community\" | \"enriched\" | \"stub\";\n has_manifest: boolean;\n verified: boolean;\n house_domain?: string;\n /** @enum {string} */\n keller_type?: \"master\" | \"sub_brand\" | \"endorsed\" | \"independent\";\n };\n BrandActivity: {\n /** @example acmecorp.com */\n domain: string;\n /** @example 3 */\n total: number;\n revisions: {\n /** @example 3 */\n revision_number: number;\n /** @example Pinnacle Media */\n editor_name: string;\n /** @example Updated logo and brand colors */\n edit_summary: string;\n /** @description Source type of the record at the time of this revision (brand_json, enriched, community) */\n source?: string;\n is_rollback: boolean;\n /** @description Revision number that was restored; only present when is_rollback is true */\n rolled_back_to?: number;\n /** @example 2026-03-01T12:34:56Z */\n created_at: string;\n }[];\n };\n PropertyActivity: {\n /** @example examplepub.com */\n domain: string;\n /** @example 3 */\n total: number;\n revisions: {\n /** @example 3 */\n revision_number: number;\n /** @example Pinnacle Media */\n editor_name: string;\n /** @example Updated logo and brand colors */\n edit_summary: string;\n /** @description Source type of the record at the time of this revision (brand_json, enriched, community) */\n source?: string;\n is_rollback: boolean;\n /** @description Revision number that was restored; only present when is_rollback is true */\n rolled_back_to?: number;\n /** @example 2026-03-01T12:34:56Z */\n created_at: string;\n }[];\n };\n ResolvedProperty: {\n /** @example examplepub.com */\n publisher_domain: string;\n /** @enum {string} */\n source: \"adagents_json\" | \"hosted\" | \"discovered\";\n authorized_agents?: {\n url: string;\n authorized_for?: string;\n }[];\n properties?: {\n id?: string;\n type?: string;\n name?: string;\n identifiers?: components[\"schemas\"][\"PropertyIdentifier\"][];\n tags?: string[];\n }[];\n contact?: {\n name?: string;\n email?: string;\n };\n verified: boolean;\n };\n PropertyIdentifier: {\n /** @example domain */\n type: string;\n /** @example examplepub.com */\n value: string;\n };\n PropertyRegistryItem: {\n /** @example examplepub.com */\n domain: string;\n /** @enum {string} */\n source: \"adagents_json\" | \"hosted\" | \"community\" | \"discovered\" | \"enriched\";\n property_count: number;\n agent_count: number;\n verified: boolean;\n };\n ValidationResult: {\n valid: boolean;\n domain?: string;\n url?: string;\n errors?: string[];\n warnings?: string[];\n status_code?: number;\n raw_data?: {\n [key: string]: unknown;\n };\n };\n FederatedAgentWithDetails: {\n url: string;\n name: string;\n /** @enum {string} */\n type: \"brand\" | \"rights\" | \"measurement\" | \"governance\" | \"creative\" | \"sales\" | \"buying\" | \"signals\" | \"unknown\";\n /** @enum {string} */\n protocol?: \"mcp\" | \"a2a\";\n description?: string;\n mcp_endpoint?: string;\n contact?: {\n name: string;\n email: string;\n website: string;\n };\n added_date?: string;\n /** @description AAO member that owns this agent record. The registry contains only agents that members have explicitly enrolled on their member profile. */\n member?: {\n slug?: string;\n display_name?: string;\n /** @description Raw AAO membership tier enum (e.g. `individual_professional`, `company_leader`). Present only when the profile owner has set their member card to public (`is_public=true`) AND the org has a resolvable tier. Absent for private profiles and for orgs without an active tier-bearing subscription. */\n membership_tier?: string;\n /** @description Human-readable label for `membership_tier` (e.g. `Professional`, `Partner`, `Leader`). Matches the AAO pricing page. Use this for UI display; the raw enum is for programmatic gating. Presence rules match `membership_tier`. */\n membership_tier_label?: string;\n /** @description True when the profile owner carries the Founding Member badge (joined before the founding-cohort cutoff). Surfaced when the profile owner has set their member card to public (`is_public=true`). Absent for private profiles. Founding Member is orthogonal to tier — founding orgs typically display both (e.g. Scope3 shows `Partner` + `Founding Member`). */\n is_founding_member?: boolean;\n };\n health?: components[\"schemas\"][\"AgentHealth\"];\n stats?: components[\"schemas\"][\"AgentStats\"];\n capabilities?: components[\"schemas\"][\"AgentCapabilities\"];\n compliance?: components[\"schemas\"][\"AgentCompliance\"];\n publisher_domains?: string[];\n property_summary?: components[\"schemas\"][\"PropertySummary\"];\n };\n AgentHealth: {\n online: boolean;\n checked_at: string;\n response_time_ms?: number;\n tools_count?: number;\n resources_count?: number;\n error?: string;\n };\n AgentStats: {\n property_count?: number;\n publisher_count?: number;\n publishers?: string[];\n creative_formats?: number;\n };\n AgentCapabilities: {\n tools_count: number;\n tools?: {\n name: string;\n description: string;\n }[];\n standard_operations?: {\n can_search_inventory: boolean;\n can_get_availability: boolean;\n can_reserve_inventory: boolean;\n can_get_pricing: boolean;\n can_create_order: boolean;\n can_list_properties: boolean;\n };\n creative_capabilities?: {\n supported_formats: ({\n capability_id?: string;\n format: {\n format_kind: string;\n publisher_domain?: string;\n format_option_id?: string;\n params?: {\n [key: string]: unknown;\n };\n } & {\n [key: string]: unknown;\n };\n operations: (\"build\" | \"validate\" | \"preview\")[];\n } & {\n [key: string]: unknown;\n })[];\n can_generate: boolean;\n can_validate: boolean;\n can_preview: boolean;\n } & {\n [key: string]: unknown;\n };\n signals_capabilities?: {\n audience_types: string[];\n can_match: boolean;\n can_activate: boolean;\n can_get_signals: boolean;\n };\n /** @description Vendor-published per-metric catalog for measurement agents. Populated when the crawler successfully fetched and validated `get_adcp_capabilities.measurement` (AdCP 3.x). Mirrors the protocol shape — see the AdCP `get_adcp_capabilities` reference for field semantics. */\n measurement_capabilities?: {\n metrics: {\n metric_id: string;\n standard_reference?: string;\n accreditations?: {\n accrediting_body: string;\n certification_id?: string;\n valid_until?: string;\n evidence_url?: string;\n /**\n * @description Always `false` — accreditation claims are vendor-asserted. AAO does not independently verify; renderers should mark these as vendor claims.\n * @enum {boolean}\n */\n verified_by_aao: false;\n }[];\n unit?: string;\n description?: string;\n methodology_url?: string;\n methodology_version?: string;\n }[];\n };\n };\n AgentCompliance: {\n /** @enum {string} */\n status: \"passing\" | \"degraded\" | \"failing\" | \"unknown\";\n /** @description Requested compliance target before alias resolution, e.g. 3.0 or 3.1-beta. */\n requested_compliance_target?: string | null;\n /** @description Concrete AdCP compliance bundle version used for the latest run, e.g. 3.0.12. */\n adcp_version?: string | null;\n /** @enum {string} */\n lifecycle_stage: \"development\" | \"testing\" | \"production\" | \"deprecated\";\n /**\n * @example {\n * \"core\": \"pass\",\n * \"products\": \"fail\"\n * }\n */\n tracks: {\n [key: string]: string;\n };\n /** @description Latest-run per-track summary. Skipped tracks with has_coverage_gap_skip=true represent selected coverage gaps, such as missing_test_controller. */\n track_details?: {\n track: string;\n status: string;\n scenario_count: number;\n passed_count: number;\n duration_ms: number;\n has_coverage_gap_skip?: boolean;\n }[];\n streak_days: number;\n last_checked_at: string | null;\n headline: string | null;\n monitoring_paused?: boolean;\n check_interval_hours?: number;\n verified?: boolean;\n /** @description AdCP protocols the agent is AAO Verified for (e.g. media-buy, creative). Matches enums/adcp-protocol.json. */\n verified_roles?: (\"media-buy\" | \"signals\" | \"governance\" | \"creative\" | \"brand\" | \"sponsored-intelligence\" | \"measurement\")[];\n };\n PropertySummary: {\n total_count: number;\n count_by_type: {\n [key: string]: number;\n };\n tags: string[];\n publisher_count: number;\n };\n FederatedPublisher: {\n domain: string;\n member?: {\n slug?: string;\n display_name?: string;\n /** @description Raw AAO membership tier enum (e.g. `individual_professional`, `company_leader`). Present only when the profile owner has set their member card to public (`is_public=true`) AND the org has a resolvable tier. Absent for private profiles and for orgs without an active tier-bearing subscription. */\n membership_tier?: string;\n /** @description Human-readable label for `membership_tier` (e.g. `Professional`, `Partner`, `Leader`). Matches the AAO pricing page. Use this for UI display; the raw enum is for programmatic gating. Presence rules match `membership_tier`. */\n membership_tier_label?: string;\n /** @description True when the profile owner carries the Founding Member badge (joined before the founding-cohort cutoff). Surfaced when the profile owner has set their member card to public (`is_public=true`). Absent for private profiles. Founding Member is orthogonal to tier — founding orgs typically display both (e.g. Scope3 shows `Partner` + `Founding Member`). */\n is_founding_member?: boolean;\n };\n agent_count?: number;\n last_validated?: string;\n has_valid_adagents?: boolean;\n };\n DomainLookupResult: {\n /** @example examplepub.com */\n domain: string;\n authorized_agents: {\n url: string;\n authorized_for?: string;\n member?: {\n slug?: string;\n display_name?: string;\n /** @description Raw AAO membership tier enum (e.g. `individual_professional`, `company_leader`). Present only when the profile owner has set their member card to public (`is_public=true`) AND the org has a resolvable tier. Absent for private profiles and for orgs without an active tier-bearing subscription. */\n membership_tier?: string;\n /** @description Human-readable label for `membership_tier` (e.g. `Professional`, `Partner`, `Leader`). Matches the AAO pricing page. Use this for UI display; the raw enum is for programmatic gating. Presence rules match `membership_tier`. */\n membership_tier_label?: string;\n /** @description True when the profile owner carries the Founding Member badge (joined before the founding-cohort cutoff). Surfaced when the profile owner has set their member card to public (`is_public=true`). Absent for private profiles. Founding Member is orthogonal to tier — founding orgs typically display both (e.g. Scope3 shows `Partner` + `Founding Member`). */\n is_founding_member?: boolean;\n };\n }[];\n sales_agents_claiming: {\n url: string;\n member?: {\n slug?: string;\n display_name?: string;\n /** @description Raw AAO membership tier enum (e.g. `individual_professional`, `company_leader`). Present only when the profile owner has set their member card to public (`is_public=true`) AND the org has a resolvable tier. Absent for private profiles and for orgs without an active tier-bearing subscription. */\n membership_tier?: string;\n /** @description Human-readable label for `membership_tier` (e.g. `Professional`, `Partner`, `Leader`). Matches the AAO pricing page. Use this for UI display; the raw enum is for programmatic gating. Presence rules match `membership_tier`. */\n membership_tier_label?: string;\n /** @description True when the profile owner carries the Founding Member badge (joined before the founding-cohort cutoff). Surfaced when the profile owner has set their member card to public (`is_public=true`). Absent for private profiles. Founding Member is orthogonal to tier — founding orgs typically display both (e.g. Scope3 shows `Partner` + `Founding Member`). */\n is_founding_member?: boolean;\n };\n }[];\n };\n OperatorLookupResult: {\n /** @example pubmatic.com */\n domain: string;\n member: {\n slug?: string;\n display_name?: string;\n /** @description Raw AAO membership tier enum (e.g. `individual_professional`, `company_leader`). Present only when the profile owner has set their member card to public (`is_public=true`) AND the org has a resolvable tier. Absent for private profiles and for orgs without an active tier-bearing subscription. */\n membership_tier?: string;\n /** @description Human-readable label for `membership_tier` (e.g. `Professional`, `Partner`, `Leader`). Matches the AAO pricing page. Use this for UI display; the raw enum is for programmatic gating. Presence rules match `membership_tier`. */\n membership_tier_label?: string;\n /** @description True when the profile owner carries the Founding Member badge (joined before the founding-cohort cutoff). Surfaced when the profile owner has set their member card to public (`is_public=true`). Absent for private profiles. Founding Member is orthogonal to tier — founding orgs typically display both (e.g. Scope3 shows `Partner` + `Founding Member`). */\n is_founding_member?: boolean;\n } | null;\n agents: {\n url: string;\n name: string;\n /** @enum {string} */\n type: \"brand\" | \"rights\" | \"measurement\" | \"governance\" | \"creative\" | \"sales\" | \"buying\" | \"signals\" | \"unknown\";\n authorized_by: {\n publisher_domain: string;\n authorized_for?: string;\n /** @enum {string} */\n source: \"adagents_json\" | \"agent_claim\";\n }[];\n }[];\n };\n PublisherLookupResult: {\n /** @example voxmedia.com */\n domain: string;\n member: {\n slug?: string;\n display_name?: string;\n /** @description Raw AAO membership tier enum (e.g. `individual_professional`, `company_leader`). Present only when the profile owner has set their member card to public (`is_public=true`) AND the org has a resolvable tier. Absent for private profiles and for orgs without an active tier-bearing subscription. */\n membership_tier?: string;\n /** @description Human-readable label for `membership_tier` (e.g. `Professional`, `Partner`, `Leader`). Matches the AAO pricing page. Use this for UI display; the raw enum is for programmatic gating. Presence rules match `membership_tier`. */\n membership_tier_label?: string;\n /** @description True when the profile owner carries the Founding Member badge (joined before the founding-cohort cutoff). Surfaced when the profile owner has set their member card to public (`is_public=true`). Absent for private profiles. Founding Member is orthogonal to tier — founding orgs typically display both (e.g. Scope3 shows `Partner` + `Founding Member`). */\n is_founding_member?: boolean;\n } | null;\n adagents_valid: boolean | null;\n /**\n * @description How the publisher's adagents.json was discovered on the most recent successful crawl or registry write. `direct`: publisher's own /.well-known/ served the document. `authoritative_location`: publisher's stub redirected to a canonical URL. `ads_txt_managerdomain`: manifest was discovered via ads.txt MANAGERDOMAIN delegation. `adagents_authoritative`: manager file named this publisher through publisher_properties fan-out. `community_catalog`: moderator-approved community catalog. Null until first crawl after migration 470.\n * @enum {string|null}\n */\n discovery_method?: \"direct\" | \"authoritative_location\" | \"ads_txt_managerdomain\" | \"adagents_authoritative\" | \"community_catalog\" | null;\n /** @description The manager domain whose adagents.json was used to authorize this publisher's agents. Non-null only when `discovery_method` is `ads_txt_managerdomain`. Matches the MANAGERDOMAIN value from the publisher's ads.txt. */\n manager_domain?: string | null;\n hosting: {\n /**\n * @description Where this publisher's adagents.json lives. `self` = publisher hosts a valid file at their own /.well-known. `self_invalid` = publisher's /.well-known returns a file that fails validation (fixable misconfiguration, not absence). `aao_hosted` = the publisher hosts a stub at their own /.well-known whose `authoritative_location` points at AAO's canonical document. `self_redirected` = the publisher's stub `authoritative_location` resolves to a third-party HTTPS origin (a CDN, partner CMS, or sibling host) — verifiers should audit the TLS chain at `resolved_url`, not at the publisher's own origin. `none` = no adagents.json configured yet.\n * @enum {string}\n */\n mode: \"self\" | \"self_invalid\" | \"aao_hosted\" | \"self_redirected\" | \"none\";\n /** @description Canonical AAO-hosted adagents.json URL. Present iff `mode === 'aao_hosted'`. Publishers reference this URL from their own /.well-known stub via the `authoritative_location` field (see https://docs.adcontextprotocol.org/docs/governance/property/adagents). */\n hosted_url?: string;\n /** @description Where adagents.json *should* live for this domain — the publisher's own /.well-known path. Always populated, regardless of `mode`. */\n expected_url: string;\n /** @description Where the canonical adagents.json document actually lives after following the publisher's `authoritative_location` stub or any HTTP-layer redirects. Populated when `mode === 'self_redirected'` (the third-party HTTPS origin verifiers should audit) and when `mode === 'aao_hosted'` AND the publisher has actively set up the redirect (`authoritative_location` in the manifest body or a network-layer redirect to AAO's hosted URL). NULL when there's no resolved-URL evidence to report. */\n resolved_url?: string | null;\n /** @description ISO timestamp of the last successful validation crawl. Lets verifiers sanity-check freshness. NULL when never crawled. */\n last_validated?: string | null;\n /** @description HTTP status code returned by AAO's most recent fetch attempt of the publisher's `/.well-known/adagents.json`. Verifier-grade chrome — lets a buy-side scraper confirm they see the same response AAO does. NULL until the first crawl records or for transient errors that never produced an HTTP response. */\n last_http_status?: number | null;\n /** @description Response body byte length from the most recent fetch (post-decompression). When `authoritative_location` was followed, measures the canonical document body, not the stub. NULL until the first crawl records. */\n last_bytes?: number | null;\n /** @description ISO timestamp of the last successful origin verification — AAO fetched the publisher's own /.well-known/adagents.json and confirmed `authoritative_location` points at our hosted URL. When set, the publisher's authorization rows have been promoted to `source='adagents_json'` (origin-attested). NULL when never verified or last attempt failed. Only populated when `mode === 'aao_hosted'`. */\n origin_verified_at?: string | null;\n /** @description ISO timestamp of the last verification attempt regardless of result. Lets a caller render \"checked X minutes ago, not yet verified\" vs \"never checked.\" Only populated when `mode === 'aao_hosted'`. */\n origin_last_checked_at?: string | null;\n };\n /** @description Plain-English summary of what AAO has found at the publisher's origin. The publisher page leads with this — `you have a valid adagents.json` is the primary signal, not `mode === self`. Optional in the schema for backwards compatibility; the handler always populates it. */\n files?: {\n adagents_json: {\n /**\n * @description What we know about the publisher's adagents.json right now. `valid` = crawler fetched a parsing-and-shape-valid file from the publisher origin. `community` = moderators approved a community adagents.json catalog for this domain. `invalid` = crawler fetched a file that failed validation. `unknown` = never crawled or last result is stale. `checking` = an auto-crawl was kicked off by this request; the page should poll for fresh data shortly.\n * @enum {string}\n */\n status: \"valid\" | \"community\" | \"invalid\" | \"unknown\" | \"checking\";\n /** @description Where adagents.json should live on the publisher's own origin. */\n expected_url: string;\n /** @description Registry-served adagents.json URL when the document is community or AgenticAdvertising.org hosted rather than served by the publisher origin. */\n registry_url?: string;\n };\n brand_json: {\n /**\n * @description What we know about the publisher's brand.json. `present` = a brand record with manifest data exists. `unknown` = no record yet. `checking` = an auto-crawl was kicked off.\n * @enum {string}\n */\n status: \"present\" | \"unknown\" | \"checking\";\n name?: string;\n };\n };\n properties: {\n id?: string;\n type?: string;\n name?: string;\n identifiers?: components[\"schemas\"][\"PropertyIdentifier\"][];\n /** @description Arbitrary string tags on this property. The `relationship:` prefix tag (e.g. `relationship:owned`) is deprecated in favour of the `delegation_type` field and will be removed in a future release. */\n tags?: string[];\n /**\n * @description Where this property came from. `adagents_json` comes from the publisher's own adagents.json, `community` from an approved community adagents.json catalog, `discovered` from crawler or third-party signals, and `brand_json` from the publisher's brand.json when no federated-index data exists yet.\n * @enum {string}\n */\n source?: \"adagents_json\" | \"community\" | \"discovered\" | \"brand_json\";\n /**\n * @description Delegation relationship declared in brand.json. Populated only when `source` is `brand_json` — for `adagents_json` and `discovered` sources the authoritative value is on the matching `authorized_agents` entry. Mirrors adagents.json `delegation_type` for bilateral verification: `direct` = publisher treats this as a direct buying path, even if a third party operates the software; `delegated` = a rep firm or manager is authorized to sell on the publisher's behalf (operator-declared, unilateral until corroborated by the publisher's adagents.json); `ad_network` = sold as part of a network/exchange package. `owned` properties have no `delegation_type` — ownership is implicit and has no adagents.json counterpart.\n * @enum {string}\n */\n delegation_type?: \"direct\" | \"delegated\" | \"ad_network\";\n }[];\n /** @description Display-oriented brand identity summary from brand.json. The full raw document remains available from the publisher's /.well-known/brand.json or hosted registry URL. */\n brand?: {\n /** @description Display name from brand.json or the registered brand row. */\n name?: string;\n /** @description Short brand or house description when present in brand.json. */\n description?: string;\n /** @description First usable logo URL from brand.json. */\n logo_url?: string;\n /** @description Representative hex colors from brand.json, capped for display. */\n colors?: string[];\n /** @description Industry labels from brand.json when present. */\n industries?: string[];\n };\n /** @description Lossy display-oriented summary of top-level adagents.json `formats[]`, normalized for publisher pages and eligibility discovery. It preserves `format_kind`, `format_option_id`, params, property scope, preference, and experimental status, but omits `v1_format_ref`, `canonical_formats_only`, `applies_to_channels`, `publisher_domain`, and custom `format_shape`/`format_schema`. Fetch the canonical document at hosting.resolved_url (or hosting.expected_url when self-hosted) for creative validation. */\n formats?: {\n /** @description Stable format option identifier from adagents.json `formats[]`. */\n format_option_id?: string;\n /** @description Human-readable format label for catalog and publisher UI display. */\n display_name: string;\n /** @description Canonical format discriminator, such as `image`, `video_hosted`, `native_in_feed`, or `custom`. */\n format_kind: string;\n /** @description Optional public HTTPS page where a human can inspect a sample render of this catalog format using publisher- or community-mirror-provided example assets. Informational only; this is not a renderer endpoint, buyer-asset preview, validation result, creative approval, proof of publisher acceptance, or live delivery guarantee. */\n sample_render_url?: string;\n /** @description Canonical format params from the publisher's adagents.json declaration. */\n params?: {\n [key: string]: unknown;\n };\n /** @description Property IDs this format applies to; absent means all properties. */\n applies_to_property_ids?: string[];\n /** @description Property tags this format applies to; absent means all properties. */\n applies_to_property_tags?: string[];\n /** @description Seller preference hint from the format declaration, when present. */\n seller_preference?: string;\n /** @description Whether this seller's format declaration is marked experimental. */\n experimental?: boolean;\n }[];\n /** @description Eligibility-oriented publisher placement summaries. Present only when the request includes `include=placements`; format references are resolved to canonical kind/params so callers can join property → placement → format without a second origin fetch. */\n placements?: {\n placement_id: string;\n name: string;\n description?: string;\n property_ids?: string[];\n property_tags?: string[];\n collection_ids?: string[];\n channels?: string[];\n tags?: string[];\n /** @description Placement format references resolved against the same response's top-level formats plus any inline canonical declarations. */\n format_options?: {\n format_option_id?: string;\n /** @description Resolved canonical format kind accepted by this placement. */\n format_kind: string;\n /** @description Resolved canonical narrowing for this placement format. */\n params?: {\n [key: string]: unknown;\n };\n }[];\n /**\n * @description Publisher-origin placements are adagents_json; moderator-maintained catalog placements are community.\n * @enum {string}\n */\n source: \"adagents_json\" | \"community\";\n }[];\n authorized_agents: {\n url: string;\n authorized_for?: string;\n /**\n * @description How strongly this authorization is attested. `adagents_json`: the publisher's origin actually serves a valid adagents.json (origin-verified). `aao_hosted`: AAO is hosting the canonical document on the publisher's behalf — represents publisher intent but origin has NOT been verified to redirect to AAO. `agent_claim`: the agent claimed it; publisher has not confirmed.\n * @enum {string}\n */\n source: \"adagents_json\" | \"aao_hosted\" | \"agent_claim\";\n /** @description Count of this publisher's properties the agent is authorized to sell. Absent when `rollup_truncated` is set (call `/api/registry/publisher/authorization` for the per-agent count) or when properties are entirely brand.json-hydrated (no adagents.json claim has actually been made about them). */\n properties_authorized?: number;\n /** @description Total number of properties this publisher exposes through the registry. Same value across all agents in the response. Absent when `properties_authorized` is absent. */\n properties_total?: number;\n /** @description True when the agent has only a publisher-wide authorization row and `properties_authorized` was synthesized as `properties_total`. False when the agent has property-level authorization rows. Absent when the rollup is absent. */\n publisher_wide?: boolean;\n }[];\n /** @description Set when the publisher has more authorized agents than the per-agent rollup cap. Above the cap, agents beyond `cap` are returned without `properties_authorized` / `properties_total` / `publisher_wide`; call `/api/registry/publisher/authorization?domain=X&agent=Y` for the per-agent count. Lets a caller decide whether to fan out individual calls or stop reading. */\n rollup_truncated?: {\n /** @description Maximum number of agents for which the rollup is computed in a single response. */\n cap: number;\n /** @description Total authorized-agent count for this publisher (the full population the cap was applied to). */\n total_agents: number;\n };\n /** @description Set to `true` when this request triggered a background crawl of the publisher's origin (we hadn't crawled before). The client should refetch in ~3-5s to pick up fresh data. Debounced per-domain so a tight refresh loop won't keep firing crawls. */\n auto_crawl_triggered?: boolean;\n };\n PublisherPropertySelector: {\n /** @example examplepub.com */\n publisher_domain?: string;\n property_types?: string[];\n property_ids?: string[];\n tags?: string[];\n };\n CreateAdagentsResponse: {\n /** @enum {boolean} */\n success: true;\n data: {\n /** @enum {boolean} */\n success: true;\n /** @description Pretty-printed adagents.json document generated by the service. */\n adagents_json: string;\n validation: components[\"schemas\"][\"AdagentsValidationResult\"];\n };\n /** Format: date-time */\n timestamp: string;\n };\n AdagentsValidationResult: {\n valid: boolean;\n errors: components[\"schemas\"][\"AdagentsValidationIssue\"][];\n warnings: components[\"schemas\"][\"AdagentsValidationWarning\"][];\n domain: string;\n url: string;\n status_code?: number;\n response_bytes?: number;\n resolved_url?: string;\n raw_data?: unknown;\n /** @enum {string} */\n discovery_method: \"direct\" | \"authoritative_location\" | \"ads_txt_managerdomain\" | \"adagents_authoritative\";\n manager_domain?: string;\n };\n AdagentsValidationIssue: {\n field: string;\n message: string;\n /** @enum {string} */\n severity: \"error\";\n };\n AdagentsValidationWarning: {\n field: string;\n message: string;\n suggestion?: string;\n };\n AdagentsAuthorizedAgent: {\n /**\n * Format: uri\n * @description Agent endpoint URL.\n */\n url: string;\n authorized_for?: string;\n /** @enum {string} */\n authorization_type?: \"property_ids\" | \"property_tags\" | \"inline_properties\" | \"publisher_properties\" | \"signal_ids\" | \"signal_tags\";\n property_ids?: string[];\n property_tags?: string[];\n properties?: {\n [key: string]: unknown;\n }[];\n publisher_properties?: {\n publisher_domain?: string;\n publisher_domains?: string[];\n /** @enum {string} */\n selection_type: \"all\" | \"by_id\" | \"by_tag\";\n property_ids?: string[];\n property_tags?: string[];\n }[];\n collections?: {\n publisher_domain: string;\n collection_ids: string[];\n }[];\n placement_ids?: string[];\n placement_tags?: string[];\n /** @enum {string} */\n delegation_type?: \"direct\" | \"delegated\" | \"ad_network\";\n exclusive?: boolean;\n countries?: string[];\n effective_from?: string;\n effective_until?: string;\n signal_ids?: string[];\n signal_tags?: string[];\n signing_keys?: {\n [key: string]: unknown;\n }[];\n } & {\n [key: string]: unknown;\n };\n CommunityMirrorProposalListResponse: {\n proposals: components[\"schemas\"][\"CommunityMirrorProposalSummary\"][];\n total: number;\n };\n CommunityMirrorProposalSummary: {\n /**\n * Format: uuid\n * @description Opaque identifier for the proposal.\n * @example 4ec8bc86-6180-4d0e-aa72-9cbf402d3638\n */\n id: string;\n /**\n * @description Lowercase platform identifier, normalized by the service.\n * @example example_platform\n */\n platform: string;\n catalog_etag: string | null;\n /** @description HTTPS URL. */\n superseded_by: string | null;\n /** @description SHA-256 digest that reviewers must echo when approving or rejecting this exact revision. */\n proposal_digest: string;\n /** @description Digest of the public mirror state this proposal was reviewed against, or null when none existed. */\n base_mirror_digest: string | null;\n /** @enum {string} */\n status: \"pending\" | \"approved\" | \"rejected\";\n /** Format: date-time */\n proposed_at: string;\n /** Format: date-time */\n reviewed_at: string | null;\n /** Format: date-time */\n published_at: string | null;\n /** Format: date-time */\n updated_at: string;\n };\n RateLimitError: {\n error: string;\n message?: string;\n /** @description Seconds to wait before retrying. */\n retryAfter?: number;\n };\n CommunityMirrorProposalGetResponse: {\n proposal: components[\"schemas\"][\"CommunityMirrorProposal\"];\n };\n CommunityMirrorProposal: {\n /**\n * Format: uuid\n * @description Opaque identifier for the proposal.\n * @example 4ec8bc86-6180-4d0e-aa72-9cbf402d3638\n */\n id: string;\n /**\n * @description Lowercase platform identifier, normalized by the service.\n * @example example_platform\n */\n platform: string;\n adagents_json: components[\"schemas\"][\"CommunityMirrorAdagentsJson\"];\n catalog_etag: string | null;\n /** @description HTTPS URL. */\n superseded_by: string | null;\n /** @description SHA-256 digest that reviewers must echo when approving or rejecting this exact revision. */\n proposal_digest: string;\n /** @description Digest of the public mirror state this proposal was reviewed against, or null when none existed. */\n base_mirror_digest: string | null;\n /** @enum {string} */\n status: \"pending\" | \"approved\" | \"rejected\";\n proposed_by_organization_id: string | null;\n /**\n * Format: email\n * @description Contributor email, returned only to registry moderators and AgenticAdvertising.org administrators.\n */\n proposed_by_email?: string | null;\n /** Format: date-time */\n proposed_at: string;\n /** Format: date-time */\n reviewed_at: string | null;\n review_notes: string | null;\n /** Format: date-time */\n published_at: string | null;\n /** Format: date-time */\n created_at: string;\n /** Format: date-time */\n updated_at: string;\n };\n CommunityMirrorAdagentsJson: {\n /** Format: uri */\n $schema?: string;\n /** @description Always empty for community mirrors; these catalogs never assert sales authorization. */\n authorized_agents: components[\"schemas\"][\"AdagentsAuthorizedAgent\"][];\n properties?: {\n [key: string]: unknown;\n }[];\n catalog_etag?: string;\n formats?: {\n [key: string]: unknown;\n }[];\n placements?: {\n [key: string]: unknown;\n }[];\n placement_tags?: {\n [key: string]: unknown;\n };\n collections?: {\n [key: string]: unknown;\n }[];\n signals?: {\n [key: string]: unknown;\n }[];\n signal_tags?: {\n [key: string]: unknown;\n };\n contact?: unknown;\n /** @description HTTPS URL for the canonical successor adagents.json document. Clients should re-fetch the successor and update cached mirror references before retiring use of this mirror. */\n superseded_by?: string;\n /** Format: date-time */\n last_updated?: string;\n } & {\n [key: string]: unknown;\n };\n CommunityMirrorProposalApprovalResponse: components[\"schemas\"][\"CommunityMirrorPublishResponse\"] & {\n /**\n * Format: uuid\n * @description Opaque identifier for the proposal.\n * @example 4ec8bc86-6180-4d0e-aa72-9cbf402d3638\n */\n proposal_id: string;\n };\n CommunityMirrorPublishResponse: {\n /** @enum {boolean} */\n success: true;\n /**\n * @description Lowercase platform identifier, normalized by the service.\n * @example example_platform\n */\n platform: string;\n catalog_etag: string | null;\n /** @description HTTPS successor document URL, when this mirror has been superseded. */\n superseded_by: string | null;\n /** @description Publisher domains updated from this community mirror catalog. */\n publisher_domains: string[];\n /** Format: date-time */\n updated_at: string;\n };\n CommunityMirrorPublishError: {\n error: string;\n /** @description Validation details for request-body parse failures or adagents.json conformance errors. */\n details?: unknown[];\n };\n CommunityMirrorProposalReviewRequest: {\n /** @description SHA-256 digest that reviewers must echo when approving or rejecting this exact revision. */\n proposal_digest: string;\n review_notes?: string;\n };\n CommunityMirrorProposalDecisionResponse: {\n /** @enum {boolean} */\n success: true;\n proposal: components[\"schemas\"][\"CommunityMirrorProposal\"];\n };\n CommunityMirrorProposalRejectRequest: {\n /** @description SHA-256 digest that reviewers must echo when approving or rejecting this exact revision. */\n proposal_digest: string;\n review_notes: string;\n };\n CommunityMirrorListResponse: {\n mirrors: components[\"schemas\"][\"CommunityMirrorSummary\"][];\n total: number;\n };\n CommunityMirrorSummary: {\n /**\n * @description Lowercase platform identifier, normalized by the service.\n * @example example_platform\n */\n platform: string;\n catalog_etag: string | null;\n /** @description HTTPS successor document URL, when this mirror has been superseded. */\n superseded_by: string | null;\n /** Format: date-time */\n updated_at: string;\n };\n CommunityMirrorGetResponse: {\n /**\n * @description Lowercase platform identifier, normalized by the service.\n * @example example_platform\n */\n platform: string;\n catalog_etag: string | null;\n /** @description HTTPS successor document URL, when this mirror has been superseded. */\n superseded_by: string | null;\n adagents_json: components[\"schemas\"][\"CommunityMirrorAdagentsJson\"];\n /** Format: date-time */\n created_at: string;\n /** Format: date-time */\n updated_at: string;\n };\n CommunityMirrorProposalSubmissionResponse: {\n /** @enum {boolean} */\n success: true;\n /** @enum {string} */\n status: \"pending\";\n /**\n * Format: uuid\n * @description Opaque identifier for the proposal.\n * @example 4ec8bc86-6180-4d0e-aa72-9cbf402d3638\n */\n proposal_id: string;\n /** @description SHA-256 digest that reviewers must echo when approving or rejecting this exact revision. */\n proposal_digest: string;\n /**\n * @description Lowercase platform identifier, normalized by the service.\n * @example example_platform\n */\n platform: string;\n /** @description Authenticated API path for fetching proposal status and content. */\n status_url: string;\n /** Format: date-time */\n submitted_at: string;\n };\n /** @description Catalog-only adagents.json body for a community mirror. At least one of `formats`, `properties`, `placements`, `collections`, or `signals` must be present and non-empty. The service regenerates `$schema` and `last_updated` before persisting. */\n CommunityMirrorPublishRequest: ({\n catalog_etag?: string;\n formats: {\n [key: string]: unknown;\n }[];\n properties?: {\n [key: string]: unknown;\n }[];\n placements?: {\n [key: string]: unknown;\n }[];\n placement_tags?: {\n [key: string]: unknown;\n };\n collections?: {\n [key: string]: unknown;\n }[];\n signals?: {\n [key: string]: unknown;\n }[];\n signal_tags?: {\n [key: string]: unknown;\n };\n contact?: unknown;\n /** @description HTTPS URL for the canonical successor adagents.json document. Set this before deleting a mirror so buyers can migrate cached references. */\n superseded_by?: string;\n } & {\n [key: string]: unknown;\n }) | ({\n catalog_etag?: string;\n formats?: {\n [key: string]: unknown;\n }[];\n properties: {\n [key: string]: unknown;\n }[];\n placements?: {\n [key: string]: unknown;\n }[];\n placement_tags?: {\n [key: string]: unknown;\n };\n collections?: {\n [key: string]: unknown;\n }[];\n signals?: {\n [key: string]: unknown;\n }[];\n signal_tags?: {\n [key: string]: unknown;\n };\n contact?: unknown;\n /** @description HTTPS URL for the canonical successor adagents.json document. Set this before deleting a mirror so buyers can migrate cached references. */\n superseded_by?: string;\n } & {\n [key: string]: unknown;\n }) | ({\n catalog_etag?: string;\n formats?: {\n [key: string]: unknown;\n }[];\n properties?: {\n [key: string]: unknown;\n }[];\n placements: {\n [key: string]: unknown;\n }[];\n placement_tags?: {\n [key: string]: unknown;\n };\n collections?: {\n [key: string]: unknown;\n }[];\n signals?: {\n [key: string]: unknown;\n }[];\n signal_tags?: {\n [key: string]: unknown;\n };\n contact?: unknown;\n /** @description HTTPS URL for the canonical successor adagents.json document. Set this before deleting a mirror so buyers can migrate cached references. */\n superseded_by?: string;\n } & {\n [key: string]: unknown;\n }) | ({\n catalog_etag?: string;\n formats?: {\n [key: string]: unknown;\n }[];\n properties?: {\n [key: string]: unknown;\n }[];\n placements?: {\n [key: string]: unknown;\n }[];\n placement_tags?: {\n [key: string]: unknown;\n };\n collections: {\n [key: string]: unknown;\n }[];\n signals?: {\n [key: string]: unknown;\n }[];\n signal_tags?: {\n [key: string]: unknown;\n };\n contact?: unknown;\n /** @description HTTPS URL for the canonical successor adagents.json document. Set this before deleting a mirror so buyers can migrate cached references. */\n superseded_by?: string;\n } & {\n [key: string]: unknown;\n }) | ({\n catalog_etag?: string;\n formats?: {\n [key: string]: unknown;\n }[];\n properties?: {\n [key: string]: unknown;\n }[];\n placements?: {\n [key: string]: unknown;\n }[];\n placement_tags?: {\n [key: string]: unknown;\n };\n collections?: {\n [key: string]: unknown;\n }[];\n signals: {\n [key: string]: unknown;\n }[];\n signal_tags?: {\n [key: string]: unknown;\n };\n contact?: unknown;\n /** @description HTTPS URL for the canonical successor adagents.json document. Set this before deleting a mirror so buyers can migrate cached references. */\n superseded_by?: string;\n } & {\n [key: string]: unknown;\n });\n CommunityMirrorDeleteResponse: {\n /** @enum {boolean} */\n success: true;\n /**\n * @description Lowercase platform identifier, normalized by the service.\n * @example example_platform\n */\n platform: string;\n };\n PolicySummary: {\n /** @example gdpr_consent */\n policy_id: string;\n /** @example 1.0.0 */\n version: string;\n /** @example GDPR Consent Requirements */\n name: string;\n /** @example Requirements for valid consent under GDPR */\n description: string | null;\n /** @enum {string} */\n category: \"regulation\" | \"standard\";\n /** @enum {string} */\n enforcement: \"must\" | \"should\" | \"may\";\n /**\n * @example [\n * \"EU\",\n * \"EEA\"\n * ]\n */\n jurisdictions: string[];\n /**\n * @example {\n * \"EU\": [\n * \"DE\",\n * \"FR\",\n * \"IT\"\n * ]\n * }\n */\n region_aliases: {\n [key: string]: string[];\n };\n /**\n * @example [\n * \"age_restricted\",\n * \"pharmaceutical_advertising\"\n * ]\n */\n policy_categories: string[];\n /**\n * @example [\n * \"display\",\n * \"video\"\n * ]\n */\n channels: string[] | null;\n /**\n * @example [\n * \"campaign\",\n * \"creative\"\n * ]\n */\n governance_domains: string[];\n /** @example 2025-05-25 */\n effective_date: string | null;\n sunset_date: string | null;\n /** @example https://eur-lex.europa.eu/eli/reg/2016/679/oj */\n source_url: string | null;\n /** @example EUR-Lex */\n source_name: string | null;\n /** @enum {string} */\n source_type: \"registry\" | \"community\";\n /** @enum {string} */\n review_status: \"pending\" | \"approved\";\n /** @example 2026-03-01T12:00:00.000Z */\n created_at: string;\n /** @example 2026-03-01T12:00:00.000Z */\n updated_at: string;\n };\n Policy: {\n /** @example gdpr_consent */\n policy_id: string;\n /** @example 1.0.0 */\n version: string;\n /** @example GDPR Consent Requirements */\n name: string;\n /** @example Requirements for valid consent under GDPR */\n description: string | null;\n /** @enum {string} */\n category: \"regulation\" | \"standard\";\n /** @enum {string} */\n enforcement: \"must\" | \"should\" | \"may\";\n /**\n * @example [\n * \"EU\",\n * \"EEA\"\n * ]\n */\n jurisdictions: string[];\n /**\n * @example {\n * \"EU\": [\n * \"DE\",\n * \"FR\",\n * \"IT\"\n * ]\n * }\n */\n region_aliases: {\n [key: string]: string[];\n };\n /**\n * @example [\n * \"age_restricted\",\n * \"pharmaceutical_advertising\"\n * ]\n */\n policy_categories: string[];\n /**\n * @example [\n * \"display\",\n * \"video\"\n * ]\n */\n channels: string[] | null;\n /**\n * @example [\n * \"campaign\",\n * \"creative\"\n * ]\n */\n governance_domains: string[];\n /** @example 2025-05-25 */\n effective_date: string | null;\n sunset_date: string | null;\n /** @example https://eur-lex.europa.eu/eli/reg/2016/679/oj */\n source_url: string | null;\n /** @example EUR-Lex */\n source_name: string | null;\n /** @example Data subjects must provide freely given, specific, informed and unambiguous consent... */\n policy: string;\n guidance: string | null;\n exemplars: {\n pass?: {\n /** @example Ad for alcohol shown during children's programming */\n scenario: string;\n /** @example Violates watershed timing rules for alcohol advertising */\n explanation: string;\n }[];\n fail?: {\n /** @example Ad for alcohol shown during children's programming */\n scenario: string;\n /** @example Violates watershed timing rules for alcohol advertising */\n explanation: string;\n }[];\n } | null;\n ext: {\n [key: string]: unknown;\n } | null;\n /** @enum {string} */\n source_type: \"registry\" | \"community\";\n /** @enum {string} */\n review_status: \"pending\" | \"approved\";\n /** @example 2026-03-01T12:00:00.000Z */\n created_at: string;\n /** @example 2026-03-01T12:00:00.000Z */\n updated_at: string;\n };\n PolicyHistory: {\n /** @example gdpr_consent */\n policy_id: string;\n /** @example 3 */\n total: number;\n revisions: {\n /** @example 2 */\n revision_number: number;\n /** @example Pinnacle Media */\n editor_name: string;\n /** @example Clarified consent requirements for minors */\n edit_summary: string;\n is_rollback: boolean;\n /** @description Revision number that was restored; only present when is_rollback is true */\n rolled_back_to?: number;\n /** @example 2026-03-01T12:34:56Z */\n created_at: string;\n }[];\n };\n RegistryFeedEvent: {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"agent.discovered\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"AgentEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"agent.removed\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"AgentEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"agent.profile_updated\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"AgentEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"agent.compliance_changed\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"AgentEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"agent.verification_earned\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"AgentEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"agent.verification_lost\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"AgentEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"property.created\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"PropertyEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"property.updated\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"PropertyEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"property.merged\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"PropertyEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"property.stale\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"PropertyEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"property.reactivated\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"PropertyEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"collection.created\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"CollectionEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"collection.updated\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"CollectionEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"collection.merged\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"CollectionEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"collection.removed\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"CollectionEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"authorization.granted\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"AuthorizationEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"authorization.revoked\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"AuthorizationEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"authorization.modified\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"AuthorizationEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"publisher.adagents_changed\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"PublisherEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n } | {\n /** Format: uuid */\n event_id: string;\n /** @enum {string} */\n event_type: \"publisher.adagents_discovered\";\n entity_type: string;\n entity_id: string;\n payload: components[\"schemas\"][\"PublisherEventPayload\"];\n actor: string;\n /** Format: date-time */\n created_at: string;\n };\n AgentEventPayload: {\n /** @description Canonical agent URL; the routing key for agent.* events (agents span many publishers). */\n agent_url: string;\n name?: string;\n type?: string;\n channels?: string[];\n property_types?: string[];\n markets?: string[];\n categories?: string[];\n category_taxonomy?: string | null;\n tags?: string[];\n delivery_types?: string[];\n /** @description Deprecated 3.x named-format profile projection. */\n format_ids?: string[];\n format_kinds?: string[];\n property_count?: number;\n publisher_count?: number;\n has_tmp?: boolean;\n updated_at?: string;\n changed_fields?: string[];\n /** @description On agent.profile_updated: the agent's refreshed inventory profile. */\n inventory_profile?: {\n [key: string]: unknown;\n };\n compliance_summary?: {\n [key: string]: unknown;\n };\n /** @description On agent.compliance_changed: prior compliance/verification status. */\n previous_status?: string;\n /** @description On agent.compliance_changed: new compliance/verification status. */\n current_status?: string;\n /** @description On agent.compliance_changed: human-readable summary of the compliance transition. */\n headline?: string | null;\n /** @description On agent.compliance_changed: map of compliance track id to track status. */\n tracks?: {\n [key: string]: \"pass\" | \"fail\" | \"partial\" | \"skip\" | \"silent\" | \"warning\" | \"unknown\" | \"skipped\";\n };\n storyboards_passing?: number;\n storyboards_total?: number;\n storyboards?: ({\n storyboard_id: string;\n status: string;\n steps_passed?: number;\n steps_total?: number;\n } & {\n [key: string]: unknown;\n })[];\n /** @description On agent.verification_earned/lost: verified role affected by the badge transition. */\n role?: string;\n /** @description On agent.verification_earned: specialisms covered by the earned badge. */\n verified_specialisms?: string[];\n /** @description On agent.verification_lost: reason the badge was revoked. */\n reason?: string;\n /** @description On agent.verification_earned/lost: AdCP version the badge applies to, when known. */\n adcp_version?: string;\n } & {\n [key: string]: unknown;\n };\n PropertyEventPayload: {\n property_rid?: string;\n /** @description Publisher domain that owns the property; the routing key for property.* events. */\n publisher_domain?: string;\n identifiers?: components[\"schemas\"][\"PropertyIdentifier\"][];\n classification?: string;\n /** @enum {string} */\n source?: \"authoritative\" | \"enriched\" | \"contributed\";\n /** @description Optional full post-change property object when available. */\n property?: {\n [key: string]: unknown;\n };\n changed_fields?: string[];\n /** @description On property.stale: last successful resolution timestamp. */\n last_resolved_at?: string;\n /** @description On property.reactivated: reactivation timestamp when available. */\n reactivated_at?: string;\n /** @description On property.stale: reason the property aged out of active resolution. */\n reason?: string;\n /** @description On property.merged: the RID merged away. */\n alias_rid?: string;\n /** @description On property.merged: the surviving RID. */\n canonical_rid?: string;\n evidence?: string;\n } & {\n [key: string]: unknown;\n };\n CollectionEventPayload: {\n collection_rid?: string;\n /** @description Publisher domain that owns the collection; the routing key for collection.* events. */\n publisher_domain?: string;\n collection_id?: string | null;\n name?: string | null;\n kind?: string | null;\n source?: string;\n status?: string;\n /** @description Distribution identifiers; the per-identifier publisher_domain (e.g. youtube.com) is the distribution surface, distinct from the owning publisher_domain above. */\n identifiers?: {\n publisher_domain: string;\n type: string;\n value: string;\n }[];\n collection?: {\n [key: string]: unknown;\n };\n changed_fields?: string[];\n /** @description On collection.merged: the RID merged away. */\n alias_rid?: string;\n /** @description On collection.merged: the surviving RID. */\n canonical_rid?: string;\n evidence?: string;\n } & {\n [key: string]: unknown;\n };\n AuthorizationEventPayload: {\n /**\n * Format: uuid\n * @description Registry authorization row id when the event is backed by a materialized effective authorization row.\n */\n id?: string;\n agent_url: string;\n /** @description Registry-canonicalized form of agent_url for equality checks. */\n agent_url_canonical?: string;\n /** @description Publisher domain the authorization applies to; the routing key for authorization.* events. */\n publisher_domain: string;\n /** @description Present on authorization.granted; authorization.revoked carries only agent_url + publisher_domain. */\n authorization_type?: string;\n authorized_for?: string | null;\n property_ids?: string[];\n property_tags?: string[];\n properties?: {\n [key: string]: unknown;\n }[];\n publisher_properties?: {\n [key: string]: unknown;\n }[];\n /** @description Catalog property_rid for materialized per-property authorization rows. Null for publisher-wide rows. */\n property_rid?: string | null;\n /** @description Publisher-local property id for materialized per-property authorization rows. */\n property_id_slug?: string | null;\n placement_ids?: string[];\n placement_tags?: string[];\n collections?: ({\n publisher_domain: string;\n collection_ids: string[];\n } & {\n [key: string]: unknown;\n })[];\n countries?: string[];\n delegation_type?: string;\n exclusive?: boolean;\n effective_from?: string;\n effective_until?: string;\n signing_keys?: {\n [key: string]: unknown;\n }[];\n evidence?: string;\n disputed?: boolean;\n created_by?: string | null;\n expires_at?: string | null;\n created_at?: string | null;\n updated_at?: string | null;\n override_applied?: boolean;\n override_reason?: string | null;\n } & {\n [key: string]: unknown;\n };\n PublisherEventPayload: {\n /** @description Publisher domain whose adagents.json was discovered/changed; the routing key for publisher.* events. */\n publisher_domain?: string;\n /** @description Legacy alias for publisher_domain retained for early feed examples. */\n domain?: string;\n properties_added?: number;\n properties_removed?: number;\n agents_added?: string[];\n agents_removed?: string[];\n agent_count?: number;\n property_count?: number;\n collection_count?: number;\n /** @description Number of top-level formats[] declarations after the revision. */\n format_count?: number;\n /** @description Number of top-level placements[] declarations after the revision. */\n placement_count?: number;\n /** @description Semantic top-level adagents.json fields changed by this revision, including formats or placements. Present on newly emitted 3.2 change events. */\n changed_fields?: string[];\n discovery_method?: string;\n manager_domain?: string | null;\n source?: string;\n } & {\n [key: string]: unknown;\n };\n AgentComplianceDetail: {\n agent_url: string;\n /** @description Requested compliance target before alias resolution, e.g. 3.0 or 3.1-beta. Null for legacy rows before target recording. */\n requested_compliance_target?: string | null;\n /** @description Concrete AdCP compliance bundle version used for the latest run, e.g. 3.0.12. Null for legacy rows before version recording. */\n adcp_version?: string | null;\n /** @enum {string} */\n status: \"passing\" | \"degraded\" | \"failing\" | \"unknown\" | \"opted_out\";\n /** @enum {string} */\n lifecycle_stage: \"development\" | \"testing\" | \"production\" | \"deprecated\";\n compliance_opt_out?: boolean;\n tracks?: {\n [key: string]: string;\n };\n /** @description Latest-run per-track summary. Skipped tracks with has_coverage_gap_skip=true represent selected coverage gaps, such as missing_test_controller. */\n track_details?: {\n track: string;\n status: string;\n scenario_count: number;\n passed_count: number;\n duration_ms: number;\n has_coverage_gap_skip?: boolean;\n }[];\n streak_days?: number;\n last_checked_at?: string | null;\n last_passed_at?: string | null;\n last_failed_at?: string | null;\n headline?: string | null;\n status_changed_at?: string | null;\n storyboards_passing?: number;\n storyboards_total?: number;\n /** @description How often the heartbeat re-tests this agent, in hours */\n check_interval_hours?: number;\n /** @description Specialisms the agent declared in get_adcp_capabilities, from the latest run */\n declared_specialisms?: string[];\n /** @description Per-specialism pass/fail/untested status — keyed on declared specialism, derived from the matching storyboard's status */\n specialism_status?: {\n [key: string]: \"passing\" | \"failing\" | \"untested\" | \"unknown\";\n };\n /** @description Public per-storyboard verdicts and aggregate step counts. First-failure diagnostic fields are populated only for owners; scalar diagnostics are null and validation evidence is empty for other callers. */\n storyboard_statuses?: {\n storyboard_id: string;\n requested_compliance_target?: string | null;\n adcp_version?: string | null;\n title: string;\n category: string | null;\n track: string | null;\n /** @enum {string} */\n status: \"passing\" | \"failing\" | \"partial\" | \"untested\";\n steps_passed: number;\n steps_total: number;\n failure_count: number;\n skipped_count: number;\n first_failed_step_id: string | null;\n first_failed_step_title: string | null;\n first_failed_step_task: string | null;\n first_failure_message: string | null;\n /** @description Validation evidence for the first failure. Populated only for owners and empty for other callers. */\n first_failure_validations: unknown[];\n last_tested_at: string | null;\n last_passed_at: string | null;\n }[];\n /** @description Run-summary notices from the latest non-dry-run compliance run. Unknown codes/severities are preserved verbatim. */\n notices?: unknown[];\n /** @description Public-safe advisory observations from the latest non-dry-run compliance run. Raw evidence is intentionally omitted; this array is not merged across runs, so cleared advisories disappear on the next fresh run. */\n observations?: {\n category: string;\n severity: string;\n message: string;\n }[];\n /** @description Owner-scoped: the agent owner's membership tier. Populated only when the authenticated viewer owns the agent; null otherwise. Field is always present so response shape doesn't reveal ownership. */\n membership_tier?: string | null;\n /** @description Owner-scoped: human-readable label for membership_tier (e.g. 'Builder'). Null for non-owners. */\n membership_tier_label?: string | null;\n /** @description Owner-scoped: the agent owner's subscription status (active, past_due, trialing, etc.). Null for non-owners. */\n subscription_status?: string | null;\n /** @description Owner-scoped: true when the owner's tier and subscription status grant badge eligibility. False for non-owners. Single source of truth — UI should not re-derive. */\n is_api_access_tier?: boolean;\n /**\n * @description Owner-scoped: triggered_by value of the most recent non-dry-run compliance check. Null for non-owners and when no run has been recorded. Operators use this as a UX cue ('did this verdict come from my recent test or the system heartbeat?').\n * @enum {string|null}\n */\n verdict_source?: \"heartbeat\" | \"owner_test\" | \"manual\" | \"webhook\" | null;\n verified?: boolean;\n verified_badges?: components[\"schemas\"][\"VerificationBadge\"][];\n };\n VerificationBadge: {\n /**\n * @description AdCP protocol this badge covers (enums/adcp-protocol.json).\n * @enum {string}\n */\n role: \"media-buy\" | \"signals\" | \"governance\" | \"creative\" | \"brand\" | \"sponsored-intelligence\" | \"measurement\";\n /** @description AdCP release this badge was issued against, MAJOR.MINOR (e.g. '3.0', '3.1'). Load-bearing for badge identity — pairs with the (agent_url, role, adcp_version) PK. */\n adcp_version: string;\n verified_at: string;\n /** @description Specialisms demonstrably passed (enums/specialism.json). Preview specialisms are excluded from stable badges. */\n verified_specialisms: (\"audience-sync\" | \"brand-rights\" | \"collection-lists\" | \"content-standards\" | \"creative-ad-server\" | \"creative-generative\" | \"creative-template\" | \"creative-transformers\" | \"governance-aware-seller\" | \"governance-delivery-monitor\" | \"governance-spend-authority\" | \"property-lists\" | \"sales-broadcast-tv\" | \"sales-catalog-driven\" | \"sales-guaranteed\" | \"sales-non-guaranteed\" | \"sales-proposal-mode\" | \"sales-social\" | \"signal-marketplace\" | \"signal-owned\" | \"signed-requests\" | \"sponsored-intelligence\")[];\n /** @description Verification axes earned. 'spec' = AdCP storyboards pass for the declared specialisms. 'live' = AAO has observed real production traffic via canonical campaigns. Always non-empty when a badge is present; an absent badge is conveyed by the parent record being omitted, not by an empty array. */\n verification_modes: (\"spec\" | \"live\")[];\n verified_protocol_version: string | null;\n /** @description Legacy URL — auto-upgrades to the highest active version. For version-pinned embedding, derive `/api/registry/agents/{encoded_url}/badge/{role}/{adcp_version}.svg` where `{encoded_url}` is `encodeURIComponent(agent_url)`. */\n badge_url?: string;\n };\n AgentVerification: {\n agent_url: string;\n verified: boolean;\n badges: components[\"schemas\"][\"VerificationBadge\"][];\n registry_url?: string;\n };\n StoryboardStatus: {\n storyboard_id: string;\n /** @description Requested compliance target from the run that produced this storyboard verdict, e.g. 3.0 or 3.1-beta. */\n requested_compliance_target?: string | null;\n /** @description Concrete AdCP compliance bundle version from the run that produced this storyboard verdict. */\n adcp_version?: string | null;\n title: string;\n category: string | null;\n track: string | null;\n /** @enum {string} */\n status: \"passing\" | \"failing\" | \"partial\" | \"untested\";\n steps_passed: number;\n steps_total: number;\n /** @description Root failing or actionable skipped step count. Cascaded prerequisite skips are excluded. */\n failure_count: number;\n /** @description Cascaded prerequisite skip count for this storyboard verdict. */\n skipped_count: number;\n /** @description First root failing or actionable skipped step id, when captured. */\n first_failed_step_id: string | null;\n /** @description First root failing or actionable skipped step title, when captured. */\n first_failed_step_title: string | null;\n /** @description Task/tool name for the first root failing or actionable skipped step, when captured. */\n first_failed_step_task: string | null;\n /** @description Runner error/detail text for the first root failing or actionable skipped step, when captured. */\n first_failure_message: string | null;\n last_tested_at: string | null;\n last_passed_at: string | null;\n };\n ComplianceRun: {\n id: string;\n requested_compliance_target?: string | null;\n adcp_version?: string | null;\n overall_status: string;\n headline: string | null;\n tracks_passed: number;\n tracks_failed: number;\n tracks_skipped: number;\n tracks_partial: number;\n tracks_json?: unknown;\n total_duration_ms: number | null;\n triggered_by: string;\n tested_at: string;\n };\n RegistryMetadata: {\n agent_url: string;\n /** @enum {string} */\n lifecycle_stage: \"development\" | \"testing\" | \"production\" | \"deprecated\";\n compliance_opt_out: boolean;\n monitoring_paused: boolean;\n check_interval_hours: number;\n monitoring_paused_at: string | null;\n created_at: string;\n updated_at: string;\n };\n MonitoringSettings: {\n monitoring_paused: boolean;\n check_interval_hours: number;\n monitoring_paused_at: string | null;\n };\n ComplianceStepDiagnostic: {\n id: number | string;\n run_id: string;\n agent_url: string;\n storyboard_id: string;\n phase_id: string;\n step_id: string;\n task: string;\n step_passed: boolean;\n duration_ms?: number | null;\n request_url?: string | null;\n request_jsonb?: unknown;\n response_status?: number | null;\n response_headers_jsonb?: {\n [key: string]: string;\n } | null;\n response_jsonb?: unknown;\n extraction_path?: string | null;\n extraction_note?: string | null;\n error_text?: string | null;\n adcp_error_jsonb?: unknown;\n failed_validations_jsonb?: unknown;\n served_by_agent_url?: string | null;\n captured_at: string;\n };\n OutboundRequest: {\n id: string;\n agent_url: string;\n request_type: string;\n user_agent: string;\n response_time_ms: number | null;\n success: boolean;\n error_message: string | null;\n created_at: string;\n };\n AgentAuthStatus: {\n has_auth: boolean;\n agent_context_id: string | null;\n /** @enum {string|null} */\n auth_type: \"bearer\" | \"basic\" | \"oauth\" | \"oauth_client_credentials\" | null;\n has_oauth_token: boolean;\n has_valid_oauth: boolean;\n oauth_token_expires_at: string | null;\n has_oauth_client_credentials: boolean;\n };\n CredentialSaveValidationError: {\n error: string;\n /**\n * @description Stable rejection tag. UI maps this to operator-friendly prose.\n * @enum {string}\n */\n code: \"invalid_blob_shape\" | \"missing_field\" | \"invalid_field_type\" | \"field_too_long\" | \"invalid_url\" | \"invalid_env_reference\" | \"invalid_auth_method_value\" | \"array_too_many\" | \"array_too_few\" | \"aggregate_too_long\";\n /**\n * @description Field the UI should scroll to + highlight.\n * @enum {string}\n */\n field: \"oauth_client_credentials\" | \"token_endpoint\" | \"client_id\" | \"client_secret\" | \"scope\" | \"resource\" | \"audience\" | \"auth_method\";\n };\n StoryboardSummary: {\n id: string;\n title: string;\n category: string;\n summary: string;\n interaction_model: string;\n examples: string[];\n phase_count: number;\n step_count: number;\n };\n StoryboardDetail: {\n id: string;\n title: string;\n category: string;\n summary: string;\n agent: {\n interaction_model: string;\n examples?: string[];\n };\n phases: {\n title: string;\n steps: {\n id: string;\n title: string;\n description: string;\n expected_output: string;\n }[];\n }[];\n prerequisites?: unknown;\n required_tools?: string[];\n track?: string;\n };\n FindCompanyResult: {\n results: components[\"schemas\"][\"CompanySearchResult\"][];\n };\n CompanySearchResult: {\n /** @example coca-cola.com */\n domain: string;\n /** @example coca-cola.com */\n canonical_domain: string;\n /** @example The Coca-Cola Company */\n brand_name: string;\n /** @example coca-cola.com */\n house_domain?: string;\n /** @enum {string} */\n keller_type?: \"master\" | \"sub_brand\" | \"endorsed\" | \"independent\";\n parent_brand?: string;\n brand_agent_url?: string;\n /** @example community */\n source: string;\n };\n MemberAgentListResponse: {\n agents: components[\"schemas\"][\"MemberAgent\"][];\n };\n /** @description Agent entry stored on a member profile. `type` is required on read because every write surface declares it and the operator endpoint always emits it; a stored value of `unknown` is the smuggle-protection outcome (snapshot contradicted the declaration without classifying it) and is the only path that surfaces an agent without a real type. */\n MemberAgent: {\n /**\n * Format: uri\n * @example https://agent.example.com/mcp\n */\n url: string;\n visibility: components[\"schemas\"][\"MemberAgentVisibility\"];\n type: components[\"schemas\"][\"MemberAgentType\"];\n name?: string;\n /**\n * Format: uri\n * @description Optional fallback liveness URL used by the health probe when the protocol handshake fails.\n */\n health_check_url?: string;\n };\n /**\n * @description Visibility tier on the registry catalog. `private` = profile owner only; `members_only` = AAO API-tier members on operator lookup; `public` = listed in the public catalog and reflected in the org's `brand.json` (requires a paid AAO tier — Professional, Builder, Member, or Leader).\n * @enum {string}\n */\n MemberAgentVisibility: \"private\" | \"members_only\" | \"public\";\n /**\n * @description Agent type as stored on the registry. Server-side smuggle protection compares the caller's declaration against the capability snapshot (when one exists) and may stamp `unknown` if the snapshot contradicts the declaration without classifying it. `unknown` is reserved for that server-side outcome; clients cannot submit it.\n * @enum {string}\n */\n MemberAgentType: \"brand\" | \"rights\" | \"measurement\" | \"governance\" | \"creative\" | \"sales\" | \"buying\" | \"signals\" | \"unknown\";\n MemberAgentResponse: {\n agent: components[\"schemas\"][\"MemberAgent\"];\n warnings?: components[\"schemas\"][\"MemberAgentVisibilityWarning\"][];\n /** @description Set to `true` when this `POST` was the caller's first interaction with the registry and the server auto-created the organization (display name derived from the user's email domain for corporate emails, or `<First Last>'s Workspace` for free-email providers). Combined with `profile_auto_created`, this is the one-call storefront experience: a third-party app holding only an OAuth token gets the org, profile, and registered agent in a single request. */\n org_auto_created?: boolean;\n /** @description Set to `true` when this `POST` was the first agent registration on the caller's organization and the server auto-created a private member profile (display name = organization name, `is_public: false`). Absent on subsequent calls and on update-in-place. Surfaced so storefront-style integrations can show a \"we set up your profile\" hint without needing to detect the prior 404 → bootstrap → retry shape. */\n profile_auto_created?: boolean;\n };\n /** @description Emitted when the tier gate downgrades a requested visibility. */\n MemberAgentVisibilityWarning: {\n /** @enum {string} */\n code: \"visibility_downgraded\";\n agent_url: string;\n /** @enum {string} */\n requested: \"public\";\n /** @enum {string} */\n applied: \"members_only\";\n /** @enum {string} */\n reason: \"tier_required\";\n message: string;\n };\n /** @description Request body for `POST /api/me/agents`. `type` is required — the owner declares it; the server never infers. */\n MemberAgentInput: {\n /**\n * Format: uri\n * @example https://agent.example.com/mcp\n */\n url: string;\n type: components[\"schemas\"][\"MemberAgentTypeInput\"];\n name?: string;\n visibility?: components[\"schemas\"][\"MemberAgentVisibility\"];\n /** Format: uri */\n health_check_url?: string;\n };\n /**\n * @description Agent type the caller declares. Required on register; smuggle-protection still cross-checks against the capability snapshot when one exists. The server never infers `type` — the owner declares what kind of agent this is.\n * @enum {string}\n */\n MemberAgentTypeInput: \"brand\" | \"rights\" | \"measurement\" | \"governance\" | \"creative\" | \"sales\" | \"buying\" | \"signals\";\n /** @description Request body for `PATCH /api/me/agents/{url}`. The `url` field cannot be changed via PATCH; re-register at the new URL and DELETE the old entry instead. If `type` is omitted, the existing value is preserved. */\n MemberAgentPatch: {\n name?: string;\n visibility?: components[\"schemas\"][\"MemberAgentVisibility\"];\n type?: components[\"schemas\"][\"MemberAgentTypeInput\"];\n /** Format: uri */\n health_check_url?: string;\n };\n /** @description Response from `POST /api/organizations`. The body shape varies by path: a fresh creation returns `{ success: true, organization: { id, name } }`; a prospect adoption returns `{ id, name, adopted: true }` directly. Both paths are 2xx; downstream callers should treat any `2xx` as \"the org now exists and you are an owner of it\" and read whichever id is present. */\n CreateOrganizationResponse: {\n success?: boolean;\n organization?: {\n /** @example org_01HXZAB123 */\n id: string;\n /** @example Acme Media */\n name: string;\n };\n /** @description Set on the **prospect-adoption** path: when an org with the user's email domain already exists in a `prospect` state (i.e. the registry pre-recorded it from a brand crawl but no human had claimed it yet), this call adopts that org for the caller instead of creating a new one. */\n id?: string;\n name?: string;\n /** @description `true` when the response is the prospect-adoption path. When `true`, no new WorkOS organization was created — the caller is now the owner of an existing prospect record. */\n adopted?: boolean;\n };\n /**\n * @description Request body for `POST /api/organizations`.\n *\n * Bootstraps a WorkOS organization, mirrors the caller as `owner`, records the caller's ToS / privacy-policy acceptance, and (for non-personal orgs) inserts an email-verified record into `organization_domains` so subsequent registry calls can skip explicit domain-verification.\n *\n * Membership tier and corporate domain are *not* caller-supplied: the tier is set by the Stripe webhook on subscription events, and the corporate domain is derived from the authenticated user's email.\n */\n CreateOrganizationInput: {\n /**\n * @description Display name for the organization. Used both as the org row name and (when auto-bootstrapping a member profile via the first agent registration) as the profile's `display_name`.\n * @example Acme Media\n */\n organization_name: string;\n /**\n * @description Set to `true` to create a personal workspace instead of a corporate organization. Personal workspaces skip corporate-domain verification, are limited to one per user, and cannot host the `company_*` membership tiers.\n * @default false\n */\n is_personal: boolean;\n company_type?: components[\"schemas\"][\"OrganizationCompanyType\"];\n revenue_tier?: components[\"schemas\"][\"OrganizationRevenueTier\"];\n /**\n * @description Whether the caller opted in to AAO marketing communications. Recorded once per user (not overwritten on subsequent calls). Independent of Terms-of-Service consent, which is recorded server-side from the request context.\n * @default false\n */\n marketing_opt_in: boolean;\n };\n /**\n * @description Coarse classification of the organization's role in the open ad ecosystem. Drives default verification badges and the member profile's display category.\n * @enum {string}\n */\n OrganizationCompanyType: \"adtech\" | \"agency\" | \"brand\" | \"publisher\" | \"data\" | \"ai\" | \"other\";\n /**\n * @description Annual revenue band, USD. Drives membership-tier eligibility for company-tier seats.\n * @enum {string}\n */\n OrganizationRevenueTier: \"under_1m\" | \"1m_5m\" | \"5m_50m\" | \"50m_250m\" | \"250m_1b\" | \"1b_plus\";\n ResolveResponse: {\n resolved: components[\"schemas\"][\"ResolvedEntry\"][];\n summary: {\n total: number;\n resolved: number;\n created: number;\n excluded: number;\n not_found: number;\n };\n server_timestamp: string;\n };\n ResolvedEntry: {\n identifier: components[\"schemas\"][\"CatalogIdentifier\"];\n /** @description Stable catalog handle for joining/dedup and TMP matching. NOT an authorization credential. `null` for excluded (ad_infra / publisher_mask) or unresolved-in-lookup identifiers. */\n property_rid: string | null;\n /** @example property */\n classification: string;\n /** @enum {string} */\n status: \"existing\" | \"created\" | \"excluded\";\n source: string | null;\n };\n CatalogIdentifier: {\n /** @example domain */\n type: string;\n /** @example nytimes.com */\n value: string;\n };\n ResolveRequest: {\n /** @description Identifiers to resolve (and, in resolve mode, contribute). Max 10,000 per call for all callers. */\n identifiers: components[\"schemas\"][\"CatalogIdentifier\"][];\n provenance: components[\"schemas\"][\"FactProvenance\"];\n /**\n * @description `resolve` (default) contributes the identifiers, auto-creates missing catalog entries, logs demand activity, and returns rids — requires authentication. `lookup` is a pure read: no write, no activity log, no auth.\n * @default resolve\n * @enum {string}\n */\n mode: \"resolve\" | \"lookup\";\n };\n FactProvenance: {\n /**\n * @description How the caller knows these identifiers — the trust/audit envelope on the fact. Determines the confidence the catalog assigns. `crawl` is reserved for server-side pipelines; callers use the others.\n * @enum {string}\n */\n type: \"agency_allowlist\" | \"publisher_declaration\" | \"impression_log\" | \"ssp_inventory\" | \"deal_history\" | \"crawl\" | \"data_partner\" | \"member_assertion\";\n /**\n * @description Optional free-text annotation (campaign, dataset).\n * @example unilever_q3\n */\n context?: string;\n };\n CatalogDisputeTriageResult: {\n dispute_id: string;\n /**\n * @description What filing the dispute did: a medium/weak link is suspended immediately; otherwise the dispute is queued or escalated for review.\n * @enum {string}\n */\n action_taken: \"link_suspended\" | \"queued_for_review\" | \"escalated\";\n reason: string;\n };\n CatalogDisputeRequest: {\n /** @enum {string} */\n dispute_type: \"identifier_link\" | \"classification\" | \"property_data\" | \"false_merge\";\n /**\n * @description What is being disputed — e.g. `identifier` or `property_rid`.\n * @example identifier\n */\n subject_type: string;\n /** @example com.example.app */\n subject_value: string;\n /** @description The dispute claim (10–2000 chars). */\n claim: string;\n /** @description Optional supporting evidence (≤5000 chars). */\n evidence?: string;\n };\n CatalogDisputeRecord: {\n id: string;\n /** @enum {string} */\n dispute_type: \"identifier_link\" | \"classification\" | \"property_data\" | \"false_merge\";\n subject_type: string;\n subject_value: string;\n claim: string;\n evidence?: string | null;\n /**\n * @description Current dispute status.\n * @example suspended\n */\n status: string;\n created_at: string;\n } & {\n [key: string]: unknown;\n };\n CatalogBrowseResponse: {\n entries: components[\"schemas\"][\"CatalogBrowseEntry\"][];\n total: number;\n /** @description Opaque cursor for the next page; null when exhausted. */\n next_cursor: string | null;\n };\n CatalogBrowseEntry: {\n property_rid: string;\n property_id: string | null;\n /** @example property */\n classification: string;\n /** @example adagents_json */\n source: string;\n /** @example active */\n status: string;\n identifiers: components[\"schemas\"][\"CatalogIdentifier\"][];\n };\n CatalogSyncResponse: {\n entries: components[\"schemas\"][\"CatalogSyncEntry\"][];\n /** @description Watermark to pass as `since` on the next sync (avoids clock skew). */\n server_timestamp: string;\n next_cursor: string | null;\n };\n CatalogSyncEntry: {\n property_rid: string;\n property_id: string | null;\n classification: string;\n source: string;\n status: string;\n adagents_url: string | null;\n created_by: string | null;\n created_at: string;\n updated_at: string;\n source_updated_at: string;\n };\n AdagentsJson: {\n /** Format: uri */\n $schema?: string;\n authorized_agents: components[\"schemas\"][\"AdagentsAuthorizedAgent\"][];\n properties?: {\n [key: string]: unknown;\n }[];\n catalog_etag?: string;\n formats?: {\n [key: string]: unknown;\n }[];\n placements?: {\n [key: string]: unknown;\n }[];\n placement_tags?: {\n [key: string]: unknown;\n };\n collections?: {\n [key: string]: unknown;\n }[];\n signals?: {\n [key: string]: unknown;\n }[];\n signal_tags?: {\n [key: string]: unknown;\n };\n contact?: unknown;\n /**\n * Format: uri\n * @description HTTPS URL for the canonical successor adagents.json document. Clients should re-fetch the successor and update cached mirror references before retiring use of this mirror.\n */\n superseded_by?: string;\n /** Format: date-time */\n last_updated?: string;\n } & {\n [key: string]: unknown;\n };\n };\n responses: never;\n parameters: never;\n requestBodies: never;\n headers: never;\n pathItems: never;\n}\nexport type $defs = Record<string, never>;\nexport interface operations {\n apiDiscovery: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description API discovery information */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n name: string;\n version: string;\n documentation: string;\n openapi: string;\n endpoints: {\n [key: string]: string;\n };\n };\n };\n };\n };\n };\n resolveBrand: {\n parameters: {\n query: {\n domain: string;\n /** @description Bypass the resolution cache and refetch from the origin. When a fresh fetch fails and a stored record is returned instead, `live_brand_json` carries that fetch's diagnostics. */\n fresh?: \"true\" | \"false\";\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Brand resolved successfully */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"ResolvedBrand\"];\n };\n };\n /** @description Invalid or missing domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Brand not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n domain: string;\n /** @description HTTP status code from brand.json fetch (e.g. 404 vs 200 with invalid data) */\n file_status?: number;\n };\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n resolveBrandsBulk: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n domains: string[];\n };\n };\n };\n responses: {\n /** @description Bulk resolution results */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n results: {\n [key: string]: components[\"schemas\"][\"ResolvedBrand\"] & (Record<string, never> | null);\n };\n };\n };\n };\n /** @description Invalid domain list */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Request body over 16 KB */\n 413: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Too much resolution work is already queued */\n 503: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getBrandJson: {\n parameters: {\n query: {\n domain: string;\n fresh?: \"true\" | \"false\";\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Raw brand.json data */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n domain: string;\n url: string;\n variant?: string;\n data: {\n [key: string]: unknown;\n };\n warnings?: {\n field: string;\n message: string;\n suggestion?: string;\n }[];\n promoted_from_schema?: string;\n live_brand_json?: {\n valid: boolean;\n url: string;\n status_code?: number;\n errors: {\n field: string;\n message: string;\n /** @enum {string} */\n severity: \"error\";\n }[];\n warnings: {\n field: string;\n message: string;\n suggestion?: string;\n }[];\n };\n };\n };\n };\n /** @description Invalid or missing domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Brand not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n saveBrand: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @example acmecorp.com */\n domain: string;\n /** @example Acme Corp */\n brand_name: string;\n brand_manifest?: {\n [key: string]: unknown;\n };\n };\n };\n };\n responses: {\n /** @description Brand saved or updated */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {boolean} */\n success: true;\n message: string;\n domain: string;\n id: string;\n revision_number?: number;\n };\n };\n };\n /** @description Missing required fields or invalid domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Cannot edit authoritative brand */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n listBrands: {\n parameters: {\n query?: {\n search?: string;\n limit?: number;\n offset?: number;\n /** @description Filter by source. Values match the per-brand source field in the response: hosted = registered by domain owner via /api/brands; brand_json = crawler-discovered with a live /.well-known/brand.json; enriched = Brandfetch-sourced; community = manually contributed; stub = organization-derived placeholder awaiting stronger evidence. */\n source?: \"hosted\" | \"brand_json\" | \"enriched\" | \"community\" | \"stub\";\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Brand list with stats */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n brands: components[\"schemas\"][\"BrandRegistryItem\"][];\n stats: {\n total: number;\n hosted: number;\n brand_json: number;\n community: number;\n enriched: number;\n stub: number;\n houses: number;\n sub_brands: number;\n with_manifest: number;\n };\n };\n };\n };\n /** @description Invalid source filter value */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getBrandHistory: {\n parameters: {\n query: {\n domain: string;\n limit?: number;\n offset?: number;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Brand activity history */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"BrandActivity\"];\n };\n };\n /** @description domain parameter required */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Brand not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n domain: string;\n };\n };\n };\n };\n };\n enrichBrand: {\n parameters: {\n query: {\n domain: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Enrichment data from Brandfetch */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {boolean} */\n success: true;\n domain: string;\n cached: boolean;\n manifest?: {\n name: string;\n url: string;\n description?: string;\n logos?: {\n url: string;\n tags: string[];\n }[];\n colors?: {\n primary?: string;\n secondary?: string;\n accent?: string;\n } & {\n [key: string]: unknown;\n };\n fonts?: ({\n name: string;\n role: string;\n } & {\n [key: string]: unknown;\n })[];\n company?: {\n name?: string;\n industry?: string;\n industries?: string[];\n employees?: string;\n founded?: number;\n location?: string;\n } & {\n [key: string]: unknown;\n };\n } & {\n [key: string]: unknown;\n };\n company?: {\n name?: string;\n industry?: string;\n industries?: string[];\n employees?: string;\n founded?: number;\n location?: string;\n } & {\n [key: string]: unknown;\n };\n /** @enum {string} */\n source_type?: \"brand_json\" | \"community\" | \"enriched\";\n context?: {\n [key: string]: unknown;\n };\n /** @enum {string} */\n context_source?: \"brandfetch\";\n /** @enum {string} */\n context_scope?: \"ephemeral\";\n context_error?: string;\n };\n };\n };\n /** @description Brandfetch not configured */\n 503: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getPropertyHistory: {\n parameters: {\n query: {\n domain: string;\n limit?: number;\n offset?: number;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Property activity history */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"PropertyActivity\"];\n };\n };\n /** @description domain parameter required */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Property not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n domain: string;\n };\n };\n };\n };\n };\n resolveProperty: {\n parameters: {\n query: {\n domain: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Property resolved */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"ResolvedProperty\"];\n };\n };\n /** @description Property not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n domain: string;\n };\n };\n };\n };\n };\n resolvePropertiesBulk: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n domains: string[];\n };\n };\n };\n responses: {\n /** @description Bulk resolution results */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n results: {\n [key: string]: components[\"schemas\"][\"ResolvedProperty\"] & (Record<string, never> | null);\n };\n };\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n listProperties: {\n parameters: {\n query?: {\n search?: string;\n limit?: number;\n offset?: number;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Property list with stats */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n properties: components[\"schemas\"][\"PropertyRegistryItem\"][];\n stats: {\n [key: string]: unknown;\n };\n };\n };\n };\n };\n };\n validateProperty: {\n parameters: {\n query: {\n domain: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Validation result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"ValidationResult\"];\n };\n };\n };\n };\n saveProperty: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @example examplepub.com */\n publisher_domain: string;\n /**\n * @description Ignored. Community-registry rows never assert sales authorization — the owner's origin adagents.json is the sole authorization source — so any value here is dropped and the stored document carries authorized_agents:[].\n * @example []\n */\n authorized_agents?: {\n url: string;\n authorized_for?: string;\n }[];\n /**\n * @example [\n * {\n * \"type\": \"website\",\n * \"name\": \"Example Publisher\"\n * }\n * ]\n */\n properties?: {\n type: string;\n name: string;\n }[];\n contact?: {\n name?: string;\n email?: string;\n };\n };\n };\n };\n responses: {\n /** @description Property saved or updated */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {boolean} */\n success: true;\n message: string;\n id: string;\n revision_number?: number;\n };\n };\n };\n /** @description Missing required fields or invalid domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Cannot edit authoritative property */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n claimHostedPropertyDomain: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n domain: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Claim issued */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {boolean} */\n success: true;\n domain: string;\n authoritative_location: string;\n instructions: string;\n };\n };\n };\n /** @description Invalid domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Caller is not a member of any organization */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Domain already verified and locked to another owner */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n verifyHostedPropertyOrigin: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n domain: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Verification outcome */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n verified: boolean;\n /** @enum {string} */\n reason: \"authoritative_location_pointer\" | \"not_found\" | \"invalid_json\" | \"no_authoritative_location\" | \"authoritative_location_mismatch\" | \"unresolvable\" | \"transient\";\n checked_at: string;\n detail?: string;\n bound_org_id?: string;\n };\n };\n };\n /** @description Invalid domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description No hosted property for this domain */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n checkPropertyList: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /**\n * @example [\n * \"www.nytimes.com\",\n * \"googlesyndication.com\",\n * \"wsj.com\"\n * ]\n */\n domains: string[];\n };\n };\n };\n responses: {\n /** @description Property list check results */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n summary: {\n total: number;\n remove: number;\n modify: number;\n assess: number;\n ok: number;\n };\n remove: {\n input: string;\n canonical: string;\n /** @enum {string} */\n reason: \"duplicate\" | \"blocked\";\n domain_type?: string;\n blocked_reason?: string;\n }[];\n modify: {\n input: string;\n canonical: string;\n reason: string;\n }[];\n assess: {\n domain: string;\n }[];\n ok: {\n domain: string;\n source: string;\n }[];\n /** @description UUID for retrieving this report later */\n report_id: string;\n };\n };\n };\n /** @description Invalid request */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getPropertyCheckReport: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n reportId: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Property check report */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n summary: {\n total: number;\n remove: number;\n modify: number;\n assess: number;\n ok: number;\n };\n };\n };\n };\n /** @description Report not found or expired */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n listAgents: {\n parameters: {\n query?: {\n type?: \"brand\" | \"rights\" | \"measurement\" | \"governance\" | \"creative\" | \"sales\" | \"buying\" | \"signals\" | \"unknown\";\n health?: \"true\";\n capabilities?: \"true\";\n properties?: \"true\";\n compliance?: \"true\";\n /** @description Measurement-vendor filter: exact match on `measurement.metrics[].metric_id`. Repeatable; multiple values are AND'd (vendor must carry all named metrics). When combined with `accreditation`, a cross-product AND applies — each (metric_id, accreditation) pair must be covered by the same metrics element. Duplicate values are ignored. Maximum 20 unique values; maximum 100 cross-product pairs. Implies `type=measurement`. */\n metric_id?: string | string[];\n /** @description Measurement-vendor filter: exact match on `measurement.metrics[].accreditations[].accrediting_body` (e.g. `MRC`, `JIC`, `ARF`). Repeatable; multiple values are AND'd. When combined with `metric_id`, a cross-product AND applies — see `metric_id` description. Duplicate values are ignored. Maximum 20 unique values; maximum 100 cross-product pairs. Implies `type=measurement`. Accreditation claims are vendor-asserted; AAO does not independently verify (`verified_by_aao` is always `false` in the response). */\n accreditation?: string | string[];\n /** @description Measurement-vendor filter: case-insensitive substring match against `measurement.metrics[].metric_id`. v1 scope: metric_id only (description/standard search is a follow-up). Max 64 chars; SQL wildcard characters are escaped. Implies `type=measurement`. */\n q?: string;\n /** @description Canonical creative-capability filter: exact match on creative.supported_formats[].format.format_kind. Repeatable with OR semantics. Matches standalone creative agents and mixed-role endpoints. */\n format_kind?: string | string[];\n /** @description Canonical creative-capability filter: exact publisher_domain on the same supported-format entry. Pair with format_option_id to find endpoints claiming an exact publisher format. */\n publisher_domain?: string;\n /** @description Canonical creative-capability filter: exact publisher format_option_id on the same supported-format entry. */\n format_option_id?: string;\n /** @description Canonical creative-capability filter: exact endpoint-local creative.supported_formats[].capability_id. */\n capability_id?: string;\n /** @description Canonical creative-capability filter: required supported operation on the same format entry. Repeatable with OR semantics. */\n creative_operation?: (\"build\" | \"validate\" | \"preview\") | (\"build\" | \"validate\" | \"preview\")[];\n /** @description Filter to agents whose active badge covers the given verification axis. Repeat the parameter for AND semantics: ?verification_mode=spec&verification_mode=live returns only agents verified on both axes. */\n verification_mode?: (\"spec\" | \"live\")[];\n /** @description When true, filter to agents that hold any active verification badge. */\n verified?: \"true\";\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Agent list */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agents: components[\"schemas\"][\"FederatedAgentWithDetails\"][];\n count: number;\n };\n };\n };\n /** @description Invalid query parameter */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n valid_values?: string[];\n };\n };\n };\n };\n };\n listPublishers: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Publisher list */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n publishers: components[\"schemas\"][\"FederatedPublisher\"][];\n count: number;\n };\n };\n };\n };\n };\n getRegistryStats: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Registry statistics */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n [key: string]: unknown;\n };\n };\n };\n };\n };\n lookupDomain: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n domain: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Domain lookup result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"DomainLookupResult\"];\n };\n };\n };\n };\n lookupProperty: {\n parameters: {\n query: {\n type: string;\n value: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Matching agents */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n type: string;\n value: string;\n agents: unknown[];\n count: number;\n };\n };\n };\n };\n };\n getAgentDomains: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n agentUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Domains for the agent */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n domains: string[];\n count: number;\n };\n };\n };\n };\n };\n getPublishersForAgentLegacyApiPrefix: {\n parameters: {\n query?: {\n /** @description ISO 8601 — return only publishers with last_verified_at ≥ since */\n since?: string;\n /** @description Opaque pagination cursor returned by a prior response */\n cursor?: string;\n /** @description Lifecycle status filter — repeat the key once per value (?status=authorized&status=revoked). Default: authorized. The comma-separated single-value form is rejected with 400. */\n status?: (\"authorized\" | \"revoked\")[];\n /** @description Opt into expanded per-row fields — repeat the key once per value. v1: `properties` adds `property_ids[]` to each PublisherEntry so consumers can run full set-diff against a federated fetch (count-equality is not set-equality). Unknown values return 400. The comma-separated form is rejected with 400. */\n include?: \"properties\"[];\n /** @description Page size, default 200, max 1000 */\n limit?: number;\n };\n header?: never;\n path: {\n /** @description Percent-encoded agent_url */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Publishers authorizing the agent */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n /**\n * Format: date-time\n * @description Most recent per-publisher refresh in this page. Null on empty pages (no anchor).\n */\n directory_indexed_at: string | null;\n publishers: {\n publisher_domain: string;\n /** @enum {string} */\n discovery_method: \"direct\" | \"authoritative_location\" | \"ads_txt_managerdomain\" | \"adagents_authoritative\" | \"community_catalog\";\n manager_domain: string | null;\n properties_authorized: number;\n properties_total: number;\n /** @description Canonical list of property_id strings the agent is authorized for under this publisher. Present iff the request included `?include=properties`. Same population as `properties_authorized` but surfaced as IDs for set-diff comparison. */\n property_ids?: string[];\n signing_keys_pinned: boolean;\n /** @enum {string} */\n status: \"authorized\" | \"revoked\";\n /** Format: date-time */\n last_verified_at: string;\n }[];\n next_cursor: string | null;\n };\n };\n };\n /** @description Not modified (If-None-Match matched) */\n 304: {\n headers: {\n [name: string]: unknown;\n };\n content?: never;\n };\n /** @description Invalid agent_url, cursor, since, or status */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Directory has never indexed any publisher referencing this agent_url. Distinct from 200 + empty. */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getPublishersForAgent: {\n parameters: {\n query?: {\n /** @description ISO 8601 — return only publishers with last_verified_at ≥ since */\n since?: string;\n /** @description Opaque pagination cursor returned by a prior response */\n cursor?: string;\n /** @description Lifecycle status filter — repeat the key once per value (?status=authorized&status=revoked). Default: authorized. The comma-separated single-value form is rejected with 400. */\n status?: (\"authorized\" | \"revoked\")[];\n /** @description Opt into expanded per-row fields — repeat the key once per value. v1: `properties` adds `property_ids[]` to each PublisherEntry so consumers can run full set-diff against a federated fetch (count-equality is not set-equality). Unknown values return 400. The comma-separated form is rejected with 400. */\n include?: \"properties\"[];\n /** @description Page size, default 200, max 1000 */\n limit?: number;\n };\n header?: never;\n path: {\n /** @description Percent-encoded agent_url */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Publishers authorizing the agent */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n /**\n * Format: date-time\n * @description Most recent per-publisher refresh in this page. Null on empty pages (no anchor).\n */\n directory_indexed_at: string | null;\n publishers: {\n publisher_domain: string;\n /** @enum {string} */\n discovery_method: \"direct\" | \"authoritative_location\" | \"ads_txt_managerdomain\" | \"adagents_authoritative\" | \"community_catalog\";\n manager_domain: string | null;\n properties_authorized: number;\n properties_total: number;\n /** @description Canonical list of property_id strings the agent is authorized for under this publisher. Present iff the request included `?include=properties`. Same population as `properties_authorized` but surfaced as IDs for set-diff comparison. */\n property_ids?: string[];\n signing_keys_pinned: boolean;\n /** @enum {string} */\n status: \"authorized\" | \"revoked\";\n /** Format: date-time */\n last_verified_at: string;\n }[];\n next_cursor: string | null;\n };\n };\n };\n /** @description Not modified (If-None-Match matched) */\n 304: {\n headers: {\n [name: string]: unknown;\n };\n content?: never;\n };\n /** @description Invalid agent_url, cursor, since, or status */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Directory has never indexed any publisher referencing this agent_url. Distinct from 200 + empty. */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n lookupOperator: {\n parameters: {\n query: {\n domain: string;\n /**\n * @description Visibility bucket filter for returned agents. One value per agent-visibility enum value plus a catch-all. Each bucket is still gated by auth — `scope` can only narrow, never escalate.\n *\n * - `public` → only `visibility=public` agents.\n * - `member` → public + members_only (members_only is gated on caller's tier; anonymous or explorer-tier callers silently fall through to public-only rather than 403).\n * - `private` → only `visibility=private`. Private agents are visible only to the profile owner; non-owners get an empty list.\n * - Omitted or `all` → tier-aware full unlock: public + members_only for API-tier members + private for the profile owner.\n *\n * Unknown values return 400 — a silent coerce to `all` could leak data the caller explicitly tried to scope away from.\n */\n scope?: \"public\" | \"member\" | \"private\" | \"all\";\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Operator lookup result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"OperatorLookupResult\"];\n };\n };\n /** @description Missing or invalid domain, or unknown scope value */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n lookupPublisher: {\n parameters: {\n query: {\n domain: string;\n /** @description Set to placements to include eligibility-oriented placement summaries with resolved canonical format options. */\n include?: \"placements\";\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Publisher lookup result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"PublisherLookupResult\"];\n };\n };\n /** @description Missing domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Publisher lookup exceeded its bounded read deadline */\n 503: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n /** @enum {string} */\n code: \"publisher_lookup_timeout\";\n retry_after: number;\n };\n };\n };\n };\n };\n revalidatePublisherAdagents: {\n parameters: {\n query?: {\n /** @description Accepted for tooling compatibility; live origin validation is always performed. */\n force?: \"1\" | \"true\";\n };\n header?: never;\n path: {\n domain: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Revalidation result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n domain: string;\n adagents_valid: boolean;\n /** Format: date-time */\n checked_at: string;\n error?: string;\n issues?: {\n errors: {\n field: string;\n message: string;\n /** @enum {string} */\n severity: \"error\";\n }[];\n warnings: {\n field: string;\n message: string;\n suggestion?: string;\n }[];\n };\n properties_count?: number;\n authorized_agents_count?: number;\n status_code?: number;\n response_bytes?: number;\n resolved_url?: string;\n /** @enum {string} */\n discovery_method?: \"direct\" | \"authoritative_location\" | \"ads_txt_managerdomain\" | \"adagents_authoritative\";\n manager_domain?: string;\n };\n };\n };\n /** @description Invalid domain format, private IP, or unresolvable domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Admin access required */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n /** @description Seconds to wait before retrying */\n retry_after: number;\n };\n };\n };\n };\n };\n forceBrandCrawl: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n domain: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Synchronous crawl result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n domain: string;\n /** @enum {string|null} */\n previous_source: \"hosted\" | \"brand_json\" | \"community\" | \"enriched\" | \"stub\" | null;\n /** @enum {string|null} */\n new_source: \"hosted\" | \"brand_json\" | \"community\" | \"enriched\" | \"stub\" | null;\n /** @enum {string|null} */\n previous_source_type: \"brand_json\" | \"community\" | \"enriched\" | \"stub\" | null;\n /** @enum {string|null} */\n new_source_type: \"brand_json\" | \"community\" | \"enriched\" | \"stub\" | null;\n /** @description True when the crawl replaced lower-trust stored evidence with live brand.json evidence. */\n promoted: boolean;\n brand_json_found: boolean;\n /** @enum {string|null} */\n live_variant: \"authoritative_location\" | \"house_redirect\" | \"brand_agent\" | \"house_portfolio\" | \"brand_canonical\" | null;\n has_manifest: boolean;\n /** Format: date-time */\n checked_at: string;\n };\n };\n };\n /** @description Invalid domain format, private IP, or unresolvable domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Admin access required */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n retry_after: number;\n };\n };\n };\n /** @description Crawl failed */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n lookupPublisherAgentAuthorization: {\n parameters: {\n query: {\n domain: string;\n agent: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Authorization rollup */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n publisher_domain: string;\n agent_url: string;\n /** @description Count of publisher's properties the agent can sell. */\n authorized: number;\n /** @description Total properties the publisher exposes. */\n total: number;\n /** @description True when the agent has only a publisher-wide authorization (no property-level rows). In that case `authorized` equals `total`. */\n publisher_wide: boolean;\n /** @enum {string} */\n source: \"adagents_json\" | \"agent_claim\";\n authorized_for?: string;\n /** @description Properties the agent is NOT authorized for. Empty when publisher_wide is true. */\n unauthorized_properties: {\n id?: string;\n name?: string;\n type?: string;\n }[];\n };\n };\n };\n /** @description Missing domain or agent */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description No authorization record for this agent on this publisher */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Publisher authorization lookup exceeded its bounded read deadline */\n 503: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n /** @enum {string} */\n code: \"publisher_lookup_timeout\";\n retry_after: number;\n };\n };\n };\n };\n };\n validateProductAuthorization: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n agent_url: string;\n publisher_properties: components[\"schemas\"][\"PublisherPropertySelector\"][];\n };\n };\n };\n responses: {\n /** @description Authorization validation result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n authorized: boolean;\n checked_at: string;\n } & {\n [key: string]: unknown;\n };\n };\n };\n };\n };\n expandProductIdentifiers: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n agent_url: string;\n publisher_properties: components[\"schemas\"][\"PublisherPropertySelector\"][];\n };\n };\n };\n responses: {\n /** @description Expanded identifiers */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n properties: unknown[];\n identifiers: {\n type: string;\n value: string;\n property_id: string;\n publisher_domain: string;\n }[];\n property_count: number;\n identifier_count: number;\n generated_at: string;\n };\n };\n };\n };\n };\n validatePropertyAuthorization: {\n parameters: {\n query: {\n agent_url: string;\n identifier_type: string;\n identifier_value: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Authorization result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n identifier_type: string;\n identifier_value: string;\n authorized: boolean;\n checked_at: string;\n } & {\n [key: string]: unknown;\n };\n };\n };\n };\n };\n validateAdagents: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n domain: string;\n };\n };\n };\n responses: {\n /** @description Validation result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n success: boolean;\n data: {\n domain: string;\n found: boolean;\n validation?: unknown;\n agent_cards?: unknown;\n };\n timestamp: string;\n };\n };\n };\n };\n };\n createAdagents: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n authorized_agents: components[\"schemas\"][\"AdagentsAuthorizedAgent\"][];\n include_schema?: boolean;\n include_timestamp?: boolean;\n properties?: unknown[];\n catalog_etag?: string;\n formats?: unknown[];\n placements?: unknown[];\n placement_tags?: {\n [key: string]: unknown;\n };\n };\n };\n };\n responses: {\n /** @description Generated adagents.json */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CreateAdagentsResponse\"];\n };\n };\n };\n };\n listCommunityMirrorProposals: {\n parameters: {\n query?: {\n status?: \"pending\" | \"approved\" | \"rejected\";\n /** @description Set to `true` for the cross-organization moderator queue; non-moderators receive 403. */\n review_queue?: \"true\" | \"false\";\n limit?: number;\n offset?: number;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Community mirror proposal list */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorProposalListResponse\"];\n };\n };\n /** @description Invalid status */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Moderator access required for the review queue */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"RateLimitError\"];\n };\n };\n /** @description Failed to list proposals */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getCommunityMirrorProposal: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n id: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Community mirror proposal */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorProposalGetResponse\"];\n };\n };\n /** @description Invalid proposal identifier */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Proposal not found or not visible to the caller */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"RateLimitError\"];\n };\n };\n /** @description Failed to read proposal */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n approveCommunityMirrorProposal: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n id: string;\n };\n cookie?: never;\n };\n requestBody: {\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorProposalReviewRequest\"];\n };\n };\n responses: {\n /** @description Proposal approved and mirror published */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorProposalApprovalResponse\"];\n };\n };\n /** @description Invalid identifier, review body, or stale schema conformance */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorPublishError\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Reviewer role required */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Proposal not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Proposal changed after review, its base mirror is stale, or it was already reviewed */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"RateLimitError\"];\n };\n };\n /** @description Failed to approve proposal */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n rejectCommunityMirrorProposal: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n id: string;\n };\n cookie?: never;\n };\n requestBody: {\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorProposalRejectRequest\"];\n };\n };\n responses: {\n /** @description Proposal rejected */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorProposalDecisionResponse\"];\n };\n };\n /** @description Invalid identifier or review body */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorPublishError\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Reviewer role required */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Proposal not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Proposal changed after review or was already reviewed */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"RateLimitError\"];\n };\n };\n /** @description Failed to reject proposal */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n listCommunityMirrors: {\n parameters: {\n query?: {\n /** @description Maximum mirrors to return. The service defaults to 100 and clamps values to the 1-500 range. */\n limit?: number;\n /** @description Zero-based result offset. Defaults to 0; negative values are clamped to 0. */\n offset?: number;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Community mirror list */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorListResponse\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"RateLimitError\"];\n };\n };\n /** @description Failed to list community mirrors */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getCommunityMirror: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description Lowercase platform identifier. */\n platform: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Community mirror */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorGetResponse\"];\n };\n };\n /** @description Invalid platform identifier */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Community mirror not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"RateLimitError\"];\n };\n };\n /** @description Failed to read community mirror */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n publishCommunityMirror: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description Lowercase platform identifier. */\n platform: string;\n };\n cookie?: never;\n };\n requestBody: {\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorPublishRequest\"];\n };\n };\n responses: {\n /** @description Community mirror published */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorPublishResponse\"];\n };\n };\n /** @description Community mirror proposal accepted for review */\n 202: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorProposalSubmissionResponse\"];\n };\n };\n /** @description Invalid platform, request body, or adagents.json conformance failure */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorPublishError\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Organization context required for community proposals */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Proposal body or catalog item count exceeds the contributor limit */\n 413: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"RateLimitError\"];\n };\n };\n /** @description Failed to publish community mirror */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n deleteCommunityMirror: {\n parameters: {\n query?: {\n /** @description Set to `true` to delete a mirror without a `superseded_by` migration URL. */\n force?: string;\n };\n header?: never;\n path: {\n /** @description Lowercase platform identifier. */\n platform: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Community mirror deleted */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CommunityMirrorDeleteResponse\"];\n };\n };\n /** @description Invalid platform identifier */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Only registry moderators or AgenticAdvertising.org admins can manage community mirrors */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Community mirror not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Mirror has not been superseded and force was not set */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"RateLimitError\"];\n };\n };\n /** @description Failed to delete community mirror */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n search: {\n parameters: {\n query: {\n q: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Search results */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n brands: unknown[];\n publishers: unknown[];\n properties: unknown[];\n };\n };\n };\n };\n };\n lookupManifestRef: {\n parameters: {\n query: {\n domain: string;\n type?: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Reference lookup result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {boolean} */\n success: true;\n /** @enum {boolean} */\n found: true;\n reference: {\n /** @enum {string} */\n reference_type: \"url\" | \"agent\";\n manifest_url: string | null;\n agent_url: string | null;\n agent_id: string | null;\n /** @enum {string} */\n verification_status: \"pending\" | \"valid\" | \"invalid\" | \"unreachable\";\n };\n } | {\n /** @enum {boolean} */\n success: false;\n /** @enum {boolean} */\n found: false;\n };\n };\n };\n };\n };\n discoverAgent: {\n parameters: {\n query: {\n url: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Discovered agent info */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n name: string;\n description?: string;\n protocols: string[];\n type: string;\n tools_count: number;\n tools: {\n name: string;\n description?: string;\n }[];\n stats: {\n format_count?: number;\n product_count?: number;\n publisher_count?: number;\n };\n };\n };\n };\n /** @description Connection timeout */\n 504: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n message: string;\n };\n };\n };\n };\n };\n getAgentFormats: {\n parameters: {\n query: {\n url: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Canonical creative capabilities */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n success: boolean;\n formats: unknown[];\n };\n };\n };\n /** @description Missing agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n message: string;\n retryAfter?: number;\n };\n };\n };\n /** @description Agent discovery failed */\n 502: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Connection timeout */\n 504: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n message: string;\n };\n };\n };\n };\n };\n getAgentPublishers: {\n parameters: {\n query: {\n url: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Publisher properties */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n success: boolean;\n properties: unknown[];\n };\n };\n };\n /** @description Missing agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n message: string;\n retryAfter?: number;\n };\n };\n };\n /** @description Agent discovery failed */\n 502: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Connection timeout */\n 504: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n message: string;\n };\n };\n };\n };\n };\n getAgentProducts: {\n parameters: {\n query: {\n url: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Products */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n success: boolean;\n products: unknown[];\n };\n };\n };\n /** @description Missing agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n message: string;\n retryAfter?: number;\n };\n };\n };\n /** @description Agent discovery failed */\n 502: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Connection timeout */\n 504: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n message: string;\n };\n };\n };\n };\n };\n validatePublisher: {\n parameters: {\n query: {\n domain: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Publisher validation result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n valid: boolean;\n domain: string;\n url?: string;\n /**\n * @description How the publisher's adagents.json was discovered. `ads_txt_managerdomain` indicates one-hop delegation via ads.txt MANAGERDOMAIN.\n * @enum {string}\n */\n discovery_method: \"direct\" | \"authoritative_location\" | \"ads_txt_managerdomain\";\n /** @description Manager domain that served the manifest. Present only when discovery_method is ads_txt_managerdomain. */\n manager_domain?: string;\n agent_count: number;\n property_count: number;\n property_type_counts: {\n [key: string]: number;\n };\n tag_count: number;\n errors?: string[];\n warnings?: string[];\n };\n };\n };\n };\n };\n listPolicies: {\n parameters: {\n query?: {\n /** @description Full-text search on policy name and description */\n search?: string;\n category?: \"regulation\" | \"standard\";\n enforcement?: \"must\" | \"should\" | \"may\";\n /** @description Filter by jurisdiction (includes region alias matching) */\n jurisdiction?: string;\n policy_category?: string;\n /** @description Filter by governance domain */\n domain?: string;\n /** @description Results per page (default 20, max 1000) */\n limit?: number;\n /** @description Pagination offset (default 0) */\n offset?: number;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Policy listing with facet stats */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n policies: components[\"schemas\"][\"PolicySummary\"][];\n stats: {\n total: number;\n regulation: number;\n standard: number;\n };\n };\n };\n };\n };\n };\n resolvePolicy: {\n parameters: {\n query: {\n policy_id: string;\n /** @description Return null if the current version does not match */\n version?: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Policy resolved */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Policy\"];\n };\n };\n /** @description Missing policy_id */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Policy not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n policy_id: string;\n };\n };\n };\n };\n };\n resolvePoliciesBulk: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /**\n * @example [\n * \"gdpr_consent\",\n * \"coppa_children\"\n * ]\n */\n policy_ids: string[];\n };\n };\n };\n responses: {\n /** @description Bulk resolution results */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n results: {\n [key: string]: components[\"schemas\"][\"Policy\"] & (Record<string, never> | null);\n };\n };\n };\n };\n /** @description Invalid request */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getPolicyHistory: {\n parameters: {\n query: {\n policy_id: string;\n /** @description Results per page (max 100, default 20) */\n limit?: number;\n /** @description Pagination offset (default 0) */\n offset?: number;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Revision history */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"PolicyHistory\"];\n };\n };\n /** @description Missing policy_id */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Policy not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n policy_id: string;\n };\n };\n };\n };\n };\n savePolicy: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /**\n * @description Lowercase alphanumeric with underscores\n * @example my_brand_safety\n */\n policy_id: string;\n /** @example 1.0.0 */\n version: string;\n /** @example Acme Corp Brand Safety */\n name: string;\n /** @enum {string} */\n category: \"regulation\" | \"standard\";\n /** @enum {string} */\n enforcement: \"must\" | \"should\" | \"may\";\n /** @example Ads must not appear adjacent to content depicting violence... */\n policy: string;\n description?: string;\n jurisdictions?: string[];\n region_aliases?: {\n [key: string]: string[];\n };\n policy_categories?: string[];\n channels?: string[];\n effective_date?: string;\n sunset_date?: string;\n governance_domains?: string[];\n /** @description Must use http:// or https:// */\n source_url?: string;\n source_name?: string;\n guidance?: string;\n exemplars?: {\n pass?: {\n scenario: string;\n explanation: string;\n }[];\n fail?: {\n scenario: string;\n explanation: string;\n }[];\n };\n ext?: {\n [key: string]: unknown;\n };\n };\n };\n };\n responses: {\n /** @description Policy saved */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {boolean} */\n success: true;\n message: string;\n policy_id: string;\n revision_number: number | null;\n };\n };\n };\n /** @description Validation error */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Cannot edit registry-sourced or pending policy */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n policy_id: string;\n };\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getRegistryFeed: {\n parameters: {\n query?: {\n /** @description Resume after this event ID */\n cursor?: string;\n /** @description Comma-separated event type filters with glob support (e.g. property.*) */\n types?: string;\n /** @description Max events per page (default 100, max 10,000) */\n limit?: number;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Feed page */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n events: components[\"schemas\"][\"RegistryFeedEvent\"][];\n /**\n * Format: uuid\n * @description Pass as cursor in the next request to continue polling\n */\n cursor: string | null;\n has_more: boolean;\n freshness: {\n /**\n * Format: date-time\n * @description Server timestamp when this feed page was generated.\n */\n generated_at: string;\n /**\n * Format: date-time\n * @description Newest event creation timestamp currently visible in the feed for the requested type filter. Null when no matching event exists inside retention.\n */\n latest_event_created_at: string | null;\n /** @description Seconds between generated_at and latest_event_created_at. Null when no matching event exists. */\n lag_seconds: number | null;\n /** @description Number of days the registry retains feed cursors and events. */\n retention_days: number;\n };\n };\n };\n };\n /** @description Invalid cursor format or type filter */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Cursor expired (older than 90-day retention window) */\n 410: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {string} */\n error: \"cursor_expired\";\n message: string;\n };\n };\n };\n };\n };\n streamRegistryFeed: {\n parameters: {\n query?: {\n /** @description Resume after this event ID */\n cursor?: string;\n /** @description Comma-separated event type filters with glob support (e.g. property.*) */\n types?: string;\n /** @description Max events per SSE feed page (default 100, max 10,000) */\n limit?: number;\n /** @description Server-side interval while caught up (default 15 seconds). Backlog pages are sent without waiting. */\n poll_interval_seconds?: number;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description SSE stream. `event: feed` data validates as a registry feed page. */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"text/event-stream\": string;\n };\n };\n /** @description Invalid cursor format, type filter, limit, or poll interval */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Initial cursor expired */\n 410: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {string} */\n error: \"cursor_expired\";\n message: string;\n };\n };\n };\n };\n };\n getAgentAuthorizations: {\n parameters: {\n query: {\n /** @description Agent URL to look up. Canonicalized server-side (lowercased, trailing slashes trimmed). */\n agent_url: string;\n /** @description `effective` (default) applies override layer; `raw` reads base table. */\n include?: \"raw\" | \"effective\";\n /** @description Comma-separated evidence allowlist. Defaults to `adagents_json`. */\n evidence?: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Authorization rows for the agent. */\n 200: {\n headers: {\n /** @description UUIDv7 cursor for the authorization change feed at snapshot time. Pass to /api/registry/feed?entity_type=authorization&cursor=<value>. */\n \"X-Sync-Cursor\"?: string;\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n evidence: string[];\n /** @enum {string} */\n include: \"raw\" | \"effective\";\n rows: {\n /** Format: uuid */\n id: string;\n agent_url: string;\n agent_url_canonical: string;\n /** Format: uuid */\n property_rid: string | null;\n property_id_slug: string | null;\n publisher_domain: string | null;\n authorized_for: string | null;\n evidence: string;\n disputed: boolean;\n created_by: string | null;\n /** Format: date-time */\n expires_at: string | null;\n /** Format: date-time */\n created_at: string;\n /** Format: date-time */\n updated_at: string;\n override_applied: boolean;\n override_reason: string | null;\n }[];\n count: number;\n };\n };\n };\n /** @description Validation error (missing/empty agent_url, unknown evidence, unknown include) */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getAgentAuthorizationsSnapshot: {\n parameters: {\n query?: {\n /** @description `effective` (default) applies override layer; `raw` reads base table. */\n include?: \"raw\" | \"effective\";\n /** @description Comma-separated evidence allowlist. Defaults to `adagents_json`. */\n evidence?: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description gzipped NDJSON stream — one authorization row per line. */\n 200: {\n headers: {\n /** @description UUIDv7 cursor for the authorization change feed at snapshot time. */\n \"X-Sync-Cursor\"?: string;\n /** @description Hash of X-Sync-Cursor; clients can If-None-Match. */\n ETag?: string;\n /** @description gzip */\n \"Content-Encoding\"?: string;\n [name: string]: unknown;\n };\n content: {\n \"application/x-ndjson\": string;\n };\n };\n /** @description Not modified — cursor unchanged from If-None-Match. */\n 304: {\n headers: {\n [name: string]: unknown;\n };\n content?: never;\n };\n /** @description Validation error (unknown evidence, unknown include) */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n searchAgentProfiles: {\n parameters: {\n query?: {\n /** @description Comma-separated channel filter */\n channels?: string;\n /** @description Comma-separated property type filter */\n property_types?: string;\n /** @description Comma-separated market/country code filter */\n markets?: string;\n /** @description Comma-separated IAB content category filter */\n categories?: string;\n /** @description Comma-separated tag filter */\n tags?: string;\n /** @description Comma-separated delivery type filter */\n delivery_types?: string;\n /** @description Require TMP support */\n has_tmp?: \"true\" | \"false\";\n /** @description Minimum number of properties in inventory */\n min_properties?: number | null;\n /** @description Pagination cursor from a previous response */\n cursor?: string;\n /** @description Max results per page (default 50, max 200) */\n limit?: number;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Search results ranked by relevance */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n results: {\n /** Format: uri */\n agent_url: string;\n channels: string[];\n property_types: string[];\n markets: string[];\n categories: string[];\n tags: string[];\n delivery_types: string[];\n /** @description Canonical format kinds present in this agent's indexed inventory profile */\n format_kinds: string[];\n property_count: number;\n publisher_count: number;\n has_tmp: boolean;\n category_taxonomy: string | null;\n relevance_score: number;\n matched_filters: string[];\n /** Format: date-time */\n updated_at: string;\n }[];\n cursor: string | null;\n has_more: boolean;\n };\n };\n };\n /** @description Invalid cursor or parameter */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n requestCrawl: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /**\n * @description Publisher domain to re-crawl\n * @example examplepub.com\n */\n domain: string;\n };\n };\n };\n responses: {\n /** @description Crawl request accepted */\n 202: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {string} */\n message: \"Crawl request accepted\";\n domain: string;\n /**\n * Format: uuid\n * @description Correlation ID for crawl lifecycle logs; acceptance is not completion.\n */\n crawl_request_id: string;\n };\n };\n };\n /** @description Invalid domain format, private IP, or unresolvable domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n /** @description Seconds to wait before retrying */\n retry_after: number;\n };\n };\n };\n /** @description A full crawl is active; the request was not accepted */\n 503: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n /** @enum {string} */\n code: \"crawl_temporarily_unavailable\";\n retry_after: number;\n };\n };\n };\n };\n };\n requestManagerRevalidation: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /**\n * @description Manager domain whose delegating publishers should be queued for re-validation. Must already be present as `manager_domain` on at least one publisher row.\n * @example raptive.com\n */\n manager_domain: string;\n };\n };\n };\n responses: {\n /** @description Re-validation queue request accepted */\n 202: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {string} */\n message: \"Manager re-validation enqueued\";\n manager_domain: string;\n /** @description Number of delegating publisher rows added to or refreshed in the manager_revalidation_queue. Zero if no publisher delegates to this manager. */\n publishers_enqueued: number;\n };\n };\n };\n /** @description Invalid domain format, private IP, or unresolvable domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n /** @description Seconds to wait before retrying */\n retry_after: number;\n };\n };\n };\n };\n };\n requestBrandCrawl: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /**\n * @description Domain to re-crawl brand.json for\n * @example examplebrand.com\n */\n domain: string;\n };\n };\n };\n responses: {\n /** @description Brand crawl request accepted */\n 202: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {string} */\n message: \"Brand crawl request accepted\";\n domain: string;\n };\n };\n };\n /** @description Invalid domain format, private IP, or unresolvable domain */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n /** @description Seconds to wait before retrying */\n retry_after: number;\n };\n };\n };\n };\n };\n getAgentCompliance: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Compliance detail */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"AgentComplianceDetail\"];\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getJwks: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description JWKS response */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n keys: {\n [key: string]: unknown;\n }[];\n };\n };\n };\n };\n };\n getAgentVerification: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Verification status */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"AgentVerification\"];\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getAgentBadgeSvg: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n /** @description Badge role (sales, buying, creative, governance, signals, measurement) */\n role: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description SVG badge image */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"image/svg+xml\": string;\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content?: never;\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content?: never;\n };\n };\n };\n getAgentBadgeEmbed: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n /** @description Badge role */\n role: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Embed code */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n role: string;\n badge_svg_url: string;\n registry_url: string;\n html: string;\n markdown: string;\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getAgentBadgeVersionedSvg: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n /** @description Badge role (media-buy, creative, signals, governance, brand, sponsored-intelligence) */\n role: string;\n /** @description AdCP release as MAJOR.MINOR (e.g. '3.0', '3.1') */\n version: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description SVG badge image */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"image/svg+xml\": string;\n };\n };\n /** @description Invalid agent URL, role, or version */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content?: never;\n };\n };\n };\n getAgentBadgeVersionedEmbed: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n /** @description Badge role */\n role: string;\n /** @description AdCP release as MAJOR.MINOR */\n version: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Embed code */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n role: string;\n verified: boolean;\n adcp_version?: string;\n badge_svg_url: string;\n registry_url: string;\n html: string;\n markdown: string;\n };\n };\n };\n /** @description Invalid agent URL, role, or version */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getAgentStoryboardStatus: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Storyboard status for the agent */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n storyboards: components[\"schemas\"][\"StoryboardStatus\"][];\n passing_count: number;\n total_count: number;\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Members only */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n members_only: boolean;\n };\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n bulkAgentStoryboardStatus: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @description Agent URLs to fetch storyboard status for */\n agent_urls: string[];\n };\n };\n };\n responses: {\n /** @description Storyboard status keyed by agent URL */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agents: {\n [key: string]: components[\"schemas\"][\"StoryboardStatus\"][] | {\n /** @enum {string} */\n status: \"opted_out\";\n };\n };\n /** @description Count of invalid URLs that were skipped */\n invalid_urls?: number;\n };\n };\n };\n /** @description Invalid request body */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Members only */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n members_only: boolean;\n };\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getAgentComplianceHistory: {\n parameters: {\n query?: {\n /** @description Max results (default 30, max 100) */\n limit?: string;\n };\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Compliance run history */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n runs: components[\"schemas\"][\"ComplianceRun\"][];\n count: number;\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n updateAgentLifecycle: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @enum {string} */\n lifecycle_stage: \"development\" | \"testing\" | \"production\" | \"deprecated\";\n };\n };\n };\n responses: {\n /** @description Updated metadata */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"RegistryMetadata\"];\n };\n };\n /** @description Invalid agent URL or lifecycle stage */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n updateAgentComplianceOptOut: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n opt_out: boolean;\n };\n };\n };\n responses: {\n /** @description Updated metadata */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"RegistryMetadata\"];\n };\n };\n /** @description Invalid agent URL or opt_out value */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getAgentMonitoringSettings: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Monitoring settings */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"MonitoringSettings\"];\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n updateAgentMonitoringPause: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n paused: boolean;\n };\n };\n };\n responses: {\n /** @description Updated monitoring settings */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"MonitoringSettings\"];\n };\n };\n /** @description Invalid agent URL or paused value */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n updateAgentMonitoringInterval: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n interval_hours: number;\n };\n };\n };\n responses: {\n /** @description Updated monitoring settings */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"MonitoringSettings\"];\n };\n };\n /** @description Invalid agent URL or interval */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n requeueAgentForHeartbeat: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Agent requeued */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n requeued: boolean;\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limited */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getAgentComplianceStepDiagnostics: {\n parameters: {\n query?: {\n /** @description Specific compliance run UUID. Defaults to latest. */\n run_id?: string;\n /** @description Max rows (default 500, max 1000) */\n limit?: string;\n };\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Per-step diagnostics for the requested run */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n run_id: string | null;\n count: number;\n diagnostics: components[\"schemas\"][\"ComplianceStepDiagnostic\"][];\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getAgentMonitoringRequests: {\n parameters: {\n query?: {\n /** @description Max results (default 50, max 200) */\n limit?: string;\n /** @description ISO 8601 timestamp to filter from */\n since?: string;\n };\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Outbound request log */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n requests: components[\"schemas\"][\"OutboundRequest\"][];\n count: number;\n total: number;\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n refreshAgent: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @description Selected organization ID. The caller must own the agent in this organization before its credentials are used. */\n organization_id?: string;\n };\n };\n };\n responses: {\n /** @description Snapshot refreshed */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n online: boolean;\n tools_count: number | null;\n response_time_ms: number | null;\n /** @description Type inferred from discovered tools (sales, creative, signals, governance, etc.) or 'unknown' */\n inferred_type: string;\n /** @description True when registry type was upgraded from unknown to inferred_type */\n type_promoted: boolean;\n oauth_required: boolean;\n checked_at: string;\n error?: string;\n /** @description Compliance re-run summary. The capability/health portion of the response is independent of this block — a failed compliance run still returns the rest of the snapshot. */\n compliance: {\n /** @description True if the full storyboard suite ran and agent_storyboard_status was updated. False when ownership couldn't be resolved, the agent reported auth_required, or the compliance call itself failed. */\n ran: boolean;\n /** @description Compliance run id written by this refresh. Use with /compliance/diagnostics?run_id=... to inspect failing-step wire evidence. */\n run_id?: string;\n /** @description Fresh test session id used for the compliance run. Useful when matching seller-side logs to the refresh. */\n test_session_id?: string;\n /** @description Requested compliance target before alias resolution, e.g. 3.1, 3.0, 3.1-rc, or 3.1-beta. Present when `ran` is true. */\n requested_compliance_target?: string;\n /** @description Concrete AdCP compliance bundle version used for the run, e.g. 3.0.12 or 3.1.0-beta.7. Present when `ran` is true. */\n adcp_version?: string;\n /** @description True when this run can update public badge state. */\n badge_eligible?: boolean;\n /** @description Public badge versions this run can issue, e.g. ['3.0']. */\n badge_eligible_adcp_versions?: string[];\n /** @description Aggregate verdict from the run (passing / failing / partial / unknown). Only present when `ran` is true. */\n overall_status?: string;\n /** @description Number of storyboards passing on this run. */\n storyboards_passing?: number;\n /** @description Number of storyboards evaluated on this run. */\n storyboards_total?: number;\n /** @description Number of advisory observations emitted by this run. */\n observations_count?: number;\n /** @description Number of run-summary notices emitted by this run. */\n notices_count?: number;\n /** @description Reason compliance didn't run when `ran` is false. */\n error?: string;\n };\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized — must be owner or AAO admin */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Monitoring paused for this agent */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n /** @description Seconds to wait before retrying */\n retry_after: number;\n };\n };\n };\n /** @description Probe failed (timeout, DNS, OAuth wall, etc.) */\n 502: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getAgentAuthStatus: {\n parameters: {\n query?: {\n /** @description Selected organization ID. Required to disambiguate an agent URL registered by multiple organizations. */\n org?: string;\n };\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Auth status */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"AgentAuthStatus\"];\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n connectAgent: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @description Bearer or basic auth token */\n auth_token?: string;\n /**\n * @description Auth type (default: bearer)\n * @enum {string}\n */\n auth_type?: \"bearer\" | \"basic\";\n /** @description Selected organization ID. The caller must own the agent in this organization. */\n organization_id?: string;\n };\n };\n };\n responses: {\n /** @description Connection result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {boolean} */\n connected: true;\n has_auth: boolean;\n agent_context_id: string;\n };\n };\n };\n /** @description Invalid parameters */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n saveAgentOAuthClientCredentials: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @description Token endpoint URL (HTTPS required; localhost allowed in dev). */\n token_endpoint: string;\n /** @description OAuth client ID. May be a `$ENV:VAR_NAME` reference. */\n client_id: string;\n /** @description OAuth client secret. May be a `$ENV:VAR_NAME` reference. Stored encrypted at rest. */\n client_secret: string;\n /** @description Space-separated OAuth scope values. */\n scope?: string;\n /** @description RFC 8707 resource indicator. Accepts a single URI string or an array of 1–8 URI strings for multi-resource authorization servers (Keycloak strict, AWS Cognito multi-RS). */\n resource?: string | string[];\n /** @description Audience parameter for audience-validating authorization servers. */\n audience?: string;\n /**\n * @description Client-credentials placement: basic (HTTP Basic header, RFC 6749 §2.3.1 preferred) or body (form fields). SDK default is basic.\n * @enum {string}\n */\n auth_method?: \"basic\" | \"body\";\n /** @description Selected organization ID. The caller must own the agent in this organization. */\n organization_id?: string;\n };\n };\n };\n responses: {\n /** @description Credentials saved */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {boolean} */\n connected: true;\n /** @enum {boolean} */\n has_auth: true;\n agent_context_id: string;\n /** @enum {string} */\n auth_type: \"oauth_client_credentials\";\n };\n };\n };\n /** @description Invalid parameters — response carries `code` and `field` pointing to the rejection cause. */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CredentialSaveValidationError\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n testAgentOAuthClientCredentials: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @description Selected organization ID. The caller must own the agent in this organization. */\n organization_id?: string;\n };\n };\n };\n responses: {\n /** @description Result of the token exchange. `ok: true` on 2xx from the AS; `ok: false` with a typed error otherwise (HTTP response itself is still 200 — the error payload carries the rejection kind so UI can branch on it). */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n /** @enum {boolean} */\n ok: true;\n latency_ms: number;\n } | {\n /** @enum {boolean} */\n ok: false;\n latency_ms: number;\n error: {\n /**\n * @description Category of failure: `oauth` = AS returned a typed error (e.g. invalid_client), `malformed` = AS returned an unexpected 2xx payload, `network` = couldn't reach the AS.\n * @enum {string}\n */\n kind: \"oauth\" | \"malformed\" | \"network\";\n message: string;\n /** @description RFC 6749 `error` field when kind=oauth. */\n oauth_error?: string;\n /** @description RFC 6749 `error_description` field when kind=oauth. */\n oauth_error_description?: string;\n /** @description Status code when the AS returned a non-2xx. */\n http_status?: number;\n };\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description No saved client-credentials config for this agent */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getApplicableStoryboards: {\n parameters: {\n query?: {\n /** @description Selected organization ID. Required to disambiguate an agent URL registered by multiple organizations. */\n org?: string;\n };\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Bundles the agent will be tested against, driven by its declared capabilities */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n agent_url: string;\n requested_compliance_target: string;\n adcp_version: string;\n agent_name: string;\n supported_protocols: string[];\n specialisms: string[];\n /** @description Agent-reported probe error. Untrusted — sanitized and truncated to 500 chars. Present when get_adcp_capabilities was advertised but failed; empty bundle list usually indicates this, not a v2 agent. */\n capabilities_probe_error?: string;\n bundles: {\n /** @enum {string} */\n kind: \"universal\" | \"domain\" | \"specialism\";\n id: string;\n storyboards: {\n id: string;\n title: string;\n summary: string;\n step_count: number;\n }[];\n }[];\n total_storyboards: number;\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Agent requires authentication, or declared capabilities cannot be resolved for the selected compliance target */\n 422: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n /** @enum {string} */\n error_kind?: \"specialism_parent_protocol_missing\" | \"unknown_specialism\" | \"unsupported_adcp_version\";\n needs_auth?: boolean;\n unknown_specialism?: boolean;\n specialism_parent_protocol_missing?: boolean;\n specialism?: string;\n parent_protocol?: string;\n compliance_version?: string;\n supported_versions?: string;\n /** @description Specialisms the agent declared, for unknown-specialism errors */\n declared_specialisms?: string[];\n /** @description Protocols the agent declared, for capability-resolution errors */\n declared_protocols?: string[];\n /** @description Specialism ids present in this server's local compliance cache */\n known_specialisms?: string[];\n };\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n error: string;\n /**\n * @description Coarse error classification for UI differentiation\n * @enum {string}\n */\n reason?: \"network\" | \"tls\" | \"timeout\" | \"protocol\" | \"unknown\";\n };\n };\n };\n /** @description Connection timeout */\n 504: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n listStoryboards: {\n parameters: {\n query?: {\n /** @description Filter by storyboard category */\n category?: string;\n /** @description Compliance target to inspect, e.g. 3.1, 3.0, 3.1-rc, or 3.1-beta */\n compliance_target?: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Storyboard catalog */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n adcp_version: string;\n requested_compliance_target: string;\n storyboards: components[\"schemas\"][\"StoryboardSummary\"][];\n count: number;\n };\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getStoryboard: {\n parameters: {\n query?: {\n /** @description Compliance target to inspect, e.g. 3.1, 3.0, 3.1-rc, or 3.1-beta */\n compliance_target?: string;\n };\n header?: never;\n path: {\n /** @description Storyboard ID */\n id: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Storyboard detail */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n adcp_version: string;\n requested_compliance_target: string;\n storyboard: components[\"schemas\"][\"StoryboardDetail\"];\n test_kit?: unknown;\n };\n };\n };\n /** @description Storyboard not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n findBrand: {\n parameters: {\n query: {\n /** @description Search query (min 2 characters) */\n q: string;\n /** @description Max results (default 10, max 50) */\n limit?: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Search results */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n results: components[\"schemas\"][\"FindCompanyResult\"][];\n };\n };\n };\n /** @description Query too short */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n setupMyBrand: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @example acmecorp.com */\n domain: string;\n brand_name: string;\n /** @description Optional full brand.json draft to host in the registry. Every recognized logo URL must be an absolute HTTPS URL of at most 2048 characters without userinfo credentials, backslashes, or markup-significant characters. The primary brand color must use #RRGGBB format. */\n brand_json?: {\n [key: string]: unknown;\n };\n /**\n * Format: uri\n * @description Absolute HTTPS URL for the brand logo. Userinfo credentials, backslashes, and markup-significant characters are not allowed.\n * @example https://cdn.example.com/brand/logo.svg\n */\n logo_url?: string;\n brand_color?: string;\n };\n };\n };\n responses: {\n /** @description Brand setup result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n domain: string;\n has_brand_json: boolean;\n hosted_brand_json_url: string;\n /** @description JSON string for brand.json pointer */\n pointer_snippet: string;\n };\n };\n };\n /** @description Invalid domain or missing fields */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Domain not owned by user's organization */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n bulkPropertyCheck: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @description Property identifiers to check */\n identifiers: string[];\n };\n };\n };\n responses: {\n /** @description Check results with report ID */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n summary: {\n total: number;\n ready: number;\n known: number;\n ad_infra: number;\n unknown: number;\n skipped: number;\n };\n entries: {\n input: string;\n identifier: {\n type: string;\n value: string;\n };\n verdict: string;\n classification: string | null;\n source: string | null;\n property_rid: string | null;\n action: string;\n }[];\n report_id: string;\n };\n };\n };\n /** @description Invalid identifiers */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getBulkPropertyCheckReport: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description Report UUID */\n reportId: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Report data */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n summary: {\n total: number;\n ready: number;\n known: number;\n ad_infra: number;\n unknown: number;\n skipped: number;\n };\n entries: {\n input: string;\n identifier: {\n type: string;\n value: string;\n };\n verdict: string;\n classification: string | null;\n source: string | null;\n property_rid: string | null;\n action: string;\n }[];\n };\n };\n };\n /** @description Report not found or expired */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n runStoryboardStep: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n storyboardId: string;\n stepId: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @description Optional context object for the step */\n context?: {\n [key: string]: unknown;\n };\n /** @description Dry run mode (default: true) */\n dry_run?: boolean;\n /** @description Selected organization ID. The caller must own the agent in this organization. */\n organization_id?: string;\n };\n };\n };\n responses: {\n /** @description Step execution result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n adcp_version: string;\n requested_compliance_target: string;\n } & {\n [key: string]: unknown;\n };\n };\n };\n /** @description Invalid parameters */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Storyboard not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getStoryboardFirstStep: {\n parameters: {\n query?: {\n /** @description Compliance target to inspect, e.g. 3.1, 3.0, 3.1-rc, or 3.1-beta */\n compliance_target?: string;\n };\n header?: never;\n path: {\n storyboardId: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description First step preview */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n adcp_version: string;\n requested_compliance_target: string;\n storyboard: {\n id: string;\n title: string;\n };\n step?: unknown;\n };\n };\n };\n /** @description Storyboard not found or has no steps */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n runStoryboard: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n storyboardId: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @description Selected organization ID. The caller must own the agent in this organization. */\n organization_id?: string;\n };\n };\n };\n responses: {\n /** @description Storyboard run result with annotated phases */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n storyboard: {\n id: string;\n title: string;\n category: string;\n narrative?: string;\n };\n agent: {\n url: string;\n profile?: unknown;\n };\n adcp_version: string;\n requested_compliance_target: string;\n badge_eligible: boolean;\n badge_eligible_adcp_versions: string[];\n /** @description Compliance run id written by this owner-triggered storyboard run. */\n run_id: string;\n /** @description Persisted storyboard verdict for this run, using the same executable-step semantics as agent_storyboard_status. */\n storyboard_status: {\n storyboard_id: string;\n /** @enum {string} */\n status: \"passing\" | \"failing\" | \"partial\" | \"untested\";\n steps_passed: number;\n steps_total: number;\n failure_count: number;\n skipped_count: number;\n first_failed_step_id: string | null;\n first_failed_step_title: string | null;\n first_failed_step_task: string | null;\n first_failure_message: string | null;\n first_failure_validations: unknown[];\n };\n phases?: unknown;\n summary?: unknown;\n /** @description Owner-scoped failing-step validation summary for this run. Full request/response diagnostics remain available via /compliance/diagnostics?run_id=... */\n diagnostics: {\n run_id: string;\n agent_url: string;\n storyboard_id: string;\n phase_id: string;\n step_id: string;\n task: string;\n response_status?: number | null;\n error_text?: string | null;\n failed_validations_jsonb?: unknown;\n adcp_error_jsonb?: unknown;\n }[];\n observations?: unknown;\n total_duration_ms: number;\n test_kit?: unknown;\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Storyboard not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n compareStoryboard: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n /** @description URL-encoded agent URL */\n encodedUrl: string;\n storyboardId: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": {\n /** @description Selected organization ID. The caller must own the agent in this organization. */\n organization_id?: string;\n };\n };\n };\n responses: {\n /** @description Side-by-side comparison results */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": {\n storyboard: {\n id: string;\n title: string;\n category: string;\n };\n user_agent: {\n url: string;\n profile?: unknown;\n summary?: unknown;\n };\n reference_agent: {\n url: string;\n name: string;\n profile?: unknown;\n summary?: unknown;\n };\n adcp_version: string;\n requested_compliance_target: string;\n badge_eligible: boolean;\n badge_eligible_adcp_versions: string[];\n phases?: unknown;\n total_duration_ms: number;\n };\n };\n };\n /** @description Invalid agent URL */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Not authorized */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Storyboard not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Server error */\n 500: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n listMemberAgents: {\n parameters: {\n query?: {\n /** @description WorkOS organization id to act on. Defaults to the caller's primary organization. Use this from a multi-org session (or when shelling with a user JWT) to target a non-primary org. Verification goes through WorkOS membership lookup; non-members get `403`. */\n org?: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Registered agents */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"MemberAgentListResponse\"];\n };\n };\n /** @description No organization associated with this account */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description `?org=` was supplied but the caller is not a member of that organization. */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description No member profile exists yet — create one via `POST /api/me/member-profile`. */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n registerMemberAgent: {\n parameters: {\n query?: {\n /** @description WorkOS organization id to act on. Defaults to the caller's primary organization. Use this from a multi-org session (or when shelling with a user JWT) to target a non-primary org. Verification goes through WorkOS membership lookup; non-members get `403`. */\n org?: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": components[\"schemas\"][\"MemberAgentInput\"];\n };\n };\n responses: {\n /** @description Agent already registered at this `url`; entry updated in place. */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"MemberAgentResponse\"];\n };\n };\n /** @description Agent registered. When this is the first agent on a freshly created organization, the response includes `profile_auto_created: true`. */\n 201: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"MemberAgentResponse\"];\n };\n };\n /** @description Missing or invalid `url`, missing/invalid `type`, or the caller has memberships in other orgs but no primary org set — pass `?org=<id>` to target one explicitly. (Fresh users with no memberships at all hit the org auto-bootstrap path and do not see this error.) */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description `?org=` was supplied but the caller is not a member of that organization. */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Auto-bootstrap could not run (e.g. the organization has no name yet). Call `POST /api/me/member-profile` to create a profile explicitly, then retry. */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n removeMemberAgent: {\n parameters: {\n query?: {\n /** @description WorkOS organization id to act on. Defaults to the caller's primary organization. Use this from a multi-org session (or when shelling with a user JWT) to target a non-primary org. Verification goes through WorkOS membership lookup; non-members get `403`. */\n org?: string;\n };\n header?: never;\n path: {\n /** @description The agent's `url`, URL-encoded (e.g. `https%3A%2F%2Fagent.example.com%2Fmcp`). */\n url: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Agent removed. */\n 204: {\n headers: {\n [name: string]: unknown;\n };\n content?: never;\n };\n /** @description No organization associated with this account */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description `?org=` was supplied but the caller is not a member of that organization. */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description No member profile, or no agent registered at the given `url`. */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Agent is currently `public` and reflected in `brand.json`; unpublish first. */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n updateMemberAgent: {\n parameters: {\n query?: {\n /** @description WorkOS organization id to act on. Defaults to the caller's primary organization. Use this from a multi-org session (or when shelling with a user JWT) to target a non-primary org. Verification goes through WorkOS membership lookup; non-members get `403`. */\n org?: string;\n };\n header?: never;\n path: {\n /** @description The agent's `url`, URL-encoded (e.g. `https%3A%2F%2Fagent.example.com%2Fmcp`). */\n url: string;\n };\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": components[\"schemas\"][\"MemberAgentPatch\"];\n };\n };\n responses: {\n /** @description Agent updated. */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"MemberAgentResponse\"];\n };\n };\n /** @description No organization associated with this account, or `body.url` differs from the path (`url_immutable`). */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description `?org=` was supplied but the caller is not a member of that organization. */\n 403: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description No member profile, or no agent registered at the given `url`. */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n createOrganization: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": components[\"schemas\"][\"CreateOrganizationInput\"];\n };\n };\n responses: {\n /** @description Prospect adoption — an existing prospect organization for this domain was claimed by the caller. Body is `{ id, name, adopted: true }`. */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CreateOrganizationResponse\"];\n };\n };\n /** @description New organization created. Body is `{ success: true, organization: { id, name } }`. The caller is the `owner`; the corporate domain is recorded as email-verified for downstream registry calls. */\n 201: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CreateOrganizationResponse\"];\n };\n };\n /**\n * @description One of:\n * - `organization_name` missing or invalid\n * - `company_type` / `revenue_tier` value not in the documented enum\n * - caller is on a personal-email domain (gmail.com, yahoo.com, …) and is trying to register a corporate org — register `is_personal: true` instead\n * - per-user organization cap reached (10 orgs per user)\n */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description An active organization already exists for this caller's email domain. The body includes `existing_org_id` and `existing_org_name`; the caller should switch to the join-request flow rather than retrying. */\n 409: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Rate limit exceeded — 15 failed attempts per hour per user. Successful calls do not count against the limit. */\n 429: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n resolveIdentifiers: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": components[\"schemas\"][\"ResolveRequest\"];\n };\n };\n responses: {\n /** @description Resolve/lookup result */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"ResolveResponse\"];\n };\n };\n /** @description Invalid request (bad identifiers, unknown provenance type, batch > 10,000) */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required for resolve mode */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n fileCatalogDispute: {\n parameters: {\n query?: never;\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: {\n content: {\n \"application/json\": components[\"schemas\"][\"CatalogDisputeRequest\"];\n };\n };\n responses: {\n /** @description Dispute filed and triaged */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CatalogDisputeTriageResult\"];\n };\n };\n /** @description Invalid dispute request */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n /** @description Authentication required */\n 401: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n getCatalogDispute: {\n parameters: {\n query?: never;\n header?: never;\n path: {\n id: string;\n };\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Dispute record */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CatalogDisputeRecord\"];\n };\n };\n /** @description Dispute not found */\n 404: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n browseCatalog: {\n parameters: {\n query?: {\n classification?: string;\n source?: string;\n status?: string;\n identifier_type?: string;\n search?: string;\n /** @description Minimum lifetime resolve count (integer). */\n min_resolves?: string;\n /** @description ISO 8601 — only properties with resolve activity since this time. */\n active_since?: string;\n /** @description Page size (integer). */\n limit?: string;\n /** @description Opaque pagination cursor from a prior `next_cursor`. */\n cursor?: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Catalog page */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CatalogBrowseResponse\"];\n };\n };\n };\n };\n syncCatalog: {\n parameters: {\n query: {\n /** @description Watermark from a prior response `server_timestamp` (required). */\n since: string;\n /** @description Page size, capped at 10,000. */\n limit?: string;\n };\n header?: never;\n path?: never;\n cookie?: never;\n };\n requestBody?: never;\n responses: {\n /** @description Catalog delta */\n 200: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"CatalogSyncResponse\"];\n };\n };\n /** @description Missing required `since` parameter */\n 400: {\n headers: {\n [name: string]: unknown;\n };\n content: {\n \"application/json\": components[\"schemas\"][\"Error\"];\n };\n };\n };\n };\n}\n\n\n// ====== Ergonomic type aliases ======\n// Re-export component schemas as standalone types for direct import\n\nexport type ResolvedBrand = components['schemas']['ResolvedBrand'];\nexport type LocalizedName = components['schemas']['LocalizedName'];\nexport type BrandRegistryItem = components['schemas']['BrandRegistryItem'];\nexport type ResolvedProperty = components['schemas']['ResolvedProperty'];\nexport type PropertyIdentifier = components['schemas']['PropertyIdentifier'];\nexport type PropertyRegistryItem = components['schemas']['PropertyRegistryItem'];\nexport type ValidationResult = components['schemas']['ValidationResult'];\nexport type RegistryError = components['schemas']['Error'];\nexport type PublisherPropertySelector = components['schemas']['PublisherPropertySelector'];\nexport type FederatedAgentWithDetails = components['schemas']['FederatedAgentWithDetails'];\nexport type AgentHealth = components['schemas']['AgentHealth'];\nexport type AgentStats = components['schemas']['AgentStats'];\nexport type AgentCapabilities = components['schemas']['AgentCapabilities'];\nexport type PropertySummary = components['schemas']['PropertySummary'];\nexport type FederatedPublisher = components['schemas']['FederatedPublisher'];\nexport type DomainLookupResult = components['schemas']['DomainLookupResult'];\nexport type BrandActivity = components['schemas']['BrandActivity'];\nexport type PropertyActivity = components['schemas']['PropertyActivity'];\nexport type PolicySummary = components['schemas']['PolicySummary'];\nexport type Policy = components['schemas']['Policy'];\nexport type PolicyHistory = components['schemas']['PolicyHistory'];\nexport type RegistryFeedEvent = components['schemas']['RegistryFeedEvent'];\nexport type AgentEventPayload = components['schemas']['AgentEventPayload'];\nexport type PropertyEventPayload = components['schemas']['PropertyEventPayload'];\nexport type CollectionEventPayload = components['schemas']['CollectionEventPayload'];\nexport type AuthorizationEventPayload = components['schemas']['AuthorizationEventPayload'];\nexport type PublisherEventPayload = components['schemas']['PublisherEventPayload'];\nexport type BrandEventPayload = components['schemas']['BrandEventPayload'];\nexport type CatalogBrowseResponse = components['schemas']['CatalogBrowseResponse'];\nexport type CatalogBrowseEntry = components['schemas']['CatalogBrowseEntry'];\nexport type CatalogSyncResponse = components['schemas']['CatalogSyncResponse'];\nexport type CatalogSyncEntry = components['schemas']['CatalogSyncEntry'];\nexport type AgentCompliance = components['schemas']['AgentCompliance'];\nexport type AgentComplianceDetail = components['schemas']['AgentComplianceDetail'];\nexport type StoryboardStatus = components['schemas']['StoryboardStatus'];\nexport type OperatorLookupResult = components['schemas']['OperatorLookupResult'];\nexport type PublisherLookupResult = components['schemas']['PublisherLookupResult'];\nexport type CommunityMirrorListResponse = components['schemas']['CommunityMirrorListResponse'];\nexport type CommunityMirrorSummary = components['schemas']['CommunityMirrorSummary'];\nexport type CommunityMirrorGetResponse = components['schemas']['CommunityMirrorGetResponse'];\nexport type CommunityMirrorAdagentsJson = components['schemas']['CommunityMirrorAdagentsJson'];\nexport type CommunityMirrorPublishResponse = components['schemas']['CommunityMirrorPublishResponse'];\nexport type CommunityMirrorPublishError = components['schemas']['CommunityMirrorPublishError'];\nexport type CommunityMirrorPublishRequest = components['schemas']['CommunityMirrorPublishRequest'];\nexport type CommunityMirrorDeleteResponse = components['schemas']['CommunityMirrorDeleteResponse'];\n\n// ====== Inline operation types ======\n// The following types are defined inline in operation responses (not in components.schemas)\n// in ADCP 3.0.0-rc.3. We extract them here for ergonomic standalone usage.\n\n/** A single event from the registry feed (inline in getRegistryFeed 200 response). */\nexport type CatalogEvent = operations['getRegistryFeed']['responses']['200']['content']['application/json']['events'][number];\n\n/** Feed freshness metadata for lag monitoring (adcp#5733). Reported on every real feed page. */\nexport type FeedFreshness = NonNullable<\n operations['getRegistryFeed']['responses']['200']['content']['application/json']['freshness']\n>;\n\n/**\n * Full response from GET /api/registry/feed.\n *\n * `cursor_expired` is set by the client when the server returns 410; that\n * synthetic marker carries no `freshness`, so `freshness` is widened to\n * optional here even though the spec requires it on real pages. The SDK never\n * fabricates freshness — it is present iff the server sent it.\n */\nexport type FeedResponse = Omit<\n operations['getRegistryFeed']['responses']['200']['content']['application/json'],\n 'freshness'\n> & {\n /** Set to true by the client when the server returns 410 (cursor expired). */\n cursor_expired?: boolean;\n /** Feed lag metadata. Present on every real feed page; absent on the cursor_expired marker. */\n freshness?: FeedFreshness;\n};\n\n/** Raw search result from the searchAgentProfiles operation. */\nexport type AgentProfileSearchResult =\n operations['searchAgentProfiles']['responses']['200']['content']['application/json']['results'][number];\n\n/** Full response from GET /api/registry/agents/search (raw operation type). */\nexport type AgentProfileSearchResponse =\n operations['searchAgentProfiles']['responses']['200']['content']['application/json'];\n\n/** Response from POST /api/registry/crawl-request (202). */\nexport type CrawlRequestResponse = operations['requestCrawl']['responses']['202']['content']['application/json'];\n\n// ====== Client-facing composite types ======\n// These provide a stable API for the sync module and client consumers,\n// mapping the flat searchAgentProfiles response to the richer shape expected by callers.\n\n/** Inventory profile for an agent (channels, markets, categories, etc.). */\nexport type AgentInventoryProfile = {\n channels: string[];\n property_types: string[];\n markets: string[];\n categories: string[];\n category_taxonomy: string | null;\n tags: string[];\n delivery_types: string[];\n format_ids?: string[];\n property_count: number;\n publisher_count: number;\n has_tmp: boolean;\n};\n\n/** An agent search result in the client-facing shape used by RegistrySync. */\nexport type AgentSearchResult = {\n url: string;\n name: string;\n type: string;\n inventory_profile: AgentInventoryProfile;\n compliance_summary?: AgentCompliance;\n match: { score: number; matched_filters: string[] };\n};\n\n/** Response shape for the searchAgents client method. */\nexport type AgentSearchResponse = {\n results: AgentSearchResult[];\n cursor: string | null;\n has_more: boolean;\n};\n\n/** An authorization entry used by the sync module. Mirrors authorization.* event payloads. */\nexport type AuthorizationEntry = components['schemas']['AuthorizationEventPayload'] & {\n /** Legacy alias still returned by some registry deployments. */\n effective_to?: string;\n};\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}