> ## Documentation Index
> Fetch the complete documentation index at: https://docs.adcontextprotocol.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Publish community mirror

> Publish or update a catalog-only adagents.json community mirror. Requires a registry moderator or AgenticAdvertising.org admin. The service validates the assembled document against adagents.json, forces `authorized_agents: []`, regenerates `$schema` and `last_updated`, and updates derived publisher-domain catalog rows.



## OpenAPI

````yaml /static/openapi/registry.yaml put /api/registry/mirrors/{platform}
openapi: 3.1.0
info:
  title: AgenticAdvertising.org Registry API
  description: >-
    REST API for the AgenticAdvertising.org registry. Resolve brands,

    discover properties, look up agents, and validate authorization in the

    AdCP ecosystem.


    Most endpoints are public and require no authentication. Endpoints marked

    with a lock icon accept either an organization API key or a user JWT

    obtained via the OAuth 2.1 flow — see
    [Authentication](https://agenticadvertising.org/docs/registry/index#authentication).


    **Base URL:** `https://agenticadvertising.org`
  version: 1.0.0
  contact:
    name: AgenticAdvertising.org
    url: https://agenticadvertising.org
servers:
  - url: https://agenticadvertising.org
    description: Production
security: []
tags:
  - name: Onboarding
    description: >-
      Explicitly bootstrap a third-party integration into the AAO registry. Most
      callers don't need this tag — `POST /api/me/agents` auto-creates the org
      (for fresh users) and the member profile (for first-time agent
      registration) without a separate round trip. Use `POST /api/organizations`
      only when you need to override the auto-derived org name / company_type /
      revenue_tier. Tier transitions happen via the billing flow only; the
      Stripe webhook is the sole writer of `organizations.membership_tier`.
  - name: Member Agents
    description: >-
      Register, list, update, and remove agents on the caller's organization
      member profile. Authenticated programmatic surface for CI / scripts that
      don't want to round-trip the full member profile.
  - name: Brand Resolution
    description: Resolve advertiser domains to canonical brand identities.
  - name: Property Resolution
    description: >-
      Resolve publisher domains to their property configurations and authorized
      agents.
  - name: Agent Discovery
    description: >-
      Browse the federated agent network, search agent inventory profiles,
      publisher index, and registry statistics.
  - name: Change Feed
    description: Poll cursor-based registry change events for local sync.
  - name: Lookups & Authorization
    description: >-
      Look up agents by domain or property, and validate ad-serving
      authorization.
  - name: Validation Tools
    description: >-
      Validate publisher adagents.json files and generate compliant
      configurations.
  - name: Community Mirrors
    description: >-
      Publish, fetch, list, and retire catalog-only adagents.json mirrors for
      platforms that have not adopted AdCP.
  - name: Search
    description: Cross-entity search across brands, publishers, agents, and properties.
  - name: Agent Probing
    description: >-
      Connect to live agents and inspect their capabilities, formats, and
      inventory.
  - name: Brand Discovery
    description: Discover and crawl brand.json files across domains.
  - name: Agent Compliance
    description: Agent compliance status, storyboard test results, and compliance history.
  - name: Policy Registry
    description: >-
      Browse, resolve, and contribute governance policies for campaign
      compliance.
  - name: Property Catalog
    description: >-
      Contribute facts to the property fact-graph: resolve identifiers to stable
      property_rids (which also contributes them, with provenance) and dispute
      catalog claims.
paths:
  /api/registry/mirrors/{platform}:
    put:
      tags:
        - Community Mirrors
      summary: Publish community mirror
      description: >-
        Publish or update a catalog-only adagents.json community mirror.
        Requires a registry moderator or AgenticAdvertising.org admin. The
        service validates the assembled document against adagents.json, forces
        `authorized_agents: []`, regenerates `$schema` and `last_updated`, and
        updates derived publisher-domain catalog rows.
      operationId: publishCommunityMirror
      parameters:
        - schema:
            type: string
            pattern: ^[a-z0-9_-]{1,64}$
            description: Lowercase platform identifier.
            example: example_platform
          required: true
          description: Lowercase platform identifier.
          name: platform
          in: path
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CommunityMirrorPublishRequest'
      responses:
        '200':
          description: Community mirror published
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommunityMirrorPublishResponse'
        '400':
          description: Invalid platform, request body, or adagents.json conformance failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CommunityMirrorPublishError'
        '401':
          description: Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: >-
            Only registry moderators or AgenticAdvertising.org admins can manage
            community mirrors
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitError'
        '500':
          description: Failed to publish community mirror
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearerAuth: []
        - oauth2: []
components:
  schemas:
    CommunityMirrorPublishRequest:
      anyOf:
        - type: object
          properties:
            catalog_etag:
              type: string
              minLength: 1
              maxLength: 255
            formats:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
              minItems: 1
            properties:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
            placements:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
            placement_tags:
              type: object
              additionalProperties: {}
            collections:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
            signals:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
            signal_tags:
              type: object
              additionalProperties: {}
            contact: {}
            superseded_by:
              type: string
              pattern: ^https:\/\/
              description: >-
                HTTPS URL for the canonical successor adagents.json document.
                Set this before deleting a mirror so buyers can migrate cached
                references.
          required:
            - formats
          additionalProperties: {}
        - type: object
          properties:
            catalog_etag:
              type: string
              minLength: 1
              maxLength: 255
            formats:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
            properties:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
              minItems: 1
            placements:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
            placement_tags:
              type: object
              additionalProperties: {}
            collections:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
            signals:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
            signal_tags:
              type: object
              additionalProperties: {}
            contact: {}
            superseded_by:
              type: string
              pattern: ^https:\/\/
              description: >-
                HTTPS URL for the canonical successor adagents.json document.
                Set this before deleting a mirror so buyers can migrate cached
                references.
          required:
            - properties
          additionalProperties: {}
        - type: object
          properties:
            catalog_etag:
              type: string
              minLength: 1
              maxLength: 255
            formats:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
            properties:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
            placements:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
              minItems: 1
            placement_tags:
              type: object
              additionalProperties: {}
            collections:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
            signals:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
            signal_tags:
              type: object
              additionalProperties: {}
            contact: {}
            superseded_by:
              type: string
              pattern: ^https:\/\/
              description: >-
                HTTPS URL for the canonical successor adagents.json document.
                Set this before deleting a mirror so buyers can migrate cached
                references.
          required:
            - placements
          additionalProperties: {}
        - type: object
          properties:
            catalog_etag:
              type: string
              minLength: 1
              maxLength: 255
            formats:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
            properties:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
            placements:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
            placement_tags:
              type: object
              additionalProperties: {}
            collections:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
              minItems: 1
            signals:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
            signal_tags:
              type: object
              additionalProperties: {}
            contact: {}
            superseded_by:
              type: string
              pattern: ^https:\/\/
              description: >-
                HTTPS URL for the canonical successor adagents.json document.
                Set this before deleting a mirror so buyers can migrate cached
                references.
          required:
            - collections
          additionalProperties: {}
        - type: object
          properties:
            catalog_etag:
              type: string
              minLength: 1
              maxLength: 255
            formats:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
            properties:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
            placements:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
            placement_tags:
              type: object
              additionalProperties: {}
            collections:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
            signals:
              type: array
              items:
                type: object
                additionalProperties: {}
                description: >-
                  Protocol-defined catalog object. See the adagents.json JSON
                  Schema for the authoritative nested shape.
              minItems: 1
            signal_tags:
              type: object
              additionalProperties: {}
            contact: {}
            superseded_by:
              type: string
              pattern: ^https:\/\/
              description: >-
                HTTPS URL for the canonical successor adagents.json document.
                Set this before deleting a mirror so buyers can migrate cached
                references.
          required:
            - signals
          additionalProperties: {}
      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.
    CommunityMirrorPublishResponse:
      type: object
      properties:
        success:
          type: boolean
          enum:
            - true
        platform:
          type: string
          pattern: ^[a-z0-9_-]{1,64}$
          description: Lowercase platform identifier, normalized by the service.
          example: example_platform
        catalog_etag:
          type:
            - string
            - 'null'
        superseded_by:
          type:
            - string
            - 'null'
          pattern: ^https:\/\/
          description: HTTPS successor document URL, when this mirror has been superseded.
        publisher_domains:
          type: array
          items:
            type: string
          description: Publisher domains updated from this community mirror catalog.
        updated_at:
          type: string
          format: date-time
      required:
        - success
        - platform
        - catalog_etag
        - superseded_by
        - publisher_domains
        - updated_at
    CommunityMirrorPublishError:
      type: object
      properties:
        error:
          type: string
        details:
          type: array
          items: {}
          description: >-
            Validation details for request-body parse failures or adagents.json
            conformance errors.
      required:
        - error
    Error:
      type: object
      properties:
        error:
          type: string
      required:
        - error
    RateLimitError:
      type: object
      properties:
        error:
          type: string
        message:
          type: string
        retryAfter:
          type: integer
          description: Seconds to wait before retrying.
      required:
        - error
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Bearer token in the `Authorization` header. Two token types are
        accepted:


        - **Organization API key** (`sk_...`) issued via the dashboard.
        Org-scoped, long-lived, for server-to-server use.

        - **User JWT** obtained via the OAuth 2.1 authorization code flow with
        PKCE. User-scoped, short-lived. Discover the authorization server at
        `/.well-known/oauth-authorization-server` and the protected-resource
        metadata at `/.well-known/oauth-protected-resource/api`.
    oauth2:
      type: oauth2
      description: >-
        OAuth 2.1 authorization code flow with PKCE. Users authenticate via
        AuthKit and clients receive a Bearer JWT that authorizes both the MCP
        endpoint and this REST API. Dynamic client registration is supported at
        `/register`.
      flows:
        authorizationCode:
          authorizationUrl: https://agenticadvertising.org/authorize
          tokenUrl: https://agenticadvertising.org/token
          refreshUrl: https://agenticadvertising.org/token
          scopes:
            openid: User identifier
            profile: User profile information
            email: User email address

````