> ## 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.

# Get agent compliance detail

> Returns detailed compliance status for a single agent, including track-level results, storyboard counts, and timestamps.

If the agent has opted out of compliance monitoring, returns a minimal response with `status: opted_out`.



## OpenAPI

````yaml /static/openapi/registry.yaml get /api/registry/agents/{encodedUrl}/compliance
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/agents/{encodedUrl}/compliance:
    get:
      tags:
        - Agent Compliance
      summary: Get agent compliance detail
      description: >-
        Returns detailed compliance status for a single agent, including
        track-level results, storyboard counts, and timestamps.


        If the agent has opted out of compliance monitoring, returns a minimal
        response with `status: opted_out`.
      operationId: getAgentCompliance
      parameters:
        - schema:
            type: string
            description: URL-encoded agent URL
            example: https%3A%2F%2Fexample.com%2Fmcp
          required: true
          description: URL-encoded agent URL
          name: encodedUrl
          in: path
      responses:
        '200':
          description: Compliance detail
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AgentComplianceDetail'
        '400':
          description: Invalid agent URL
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    AgentComplianceDetail:
      type: object
      properties:
        agent_url:
          type: string
        requested_compliance_target:
          type:
            - string
            - 'null'
          description: >-
            Requested compliance target before alias resolution, e.g. 3.0 or
            3.1-beta. Null for legacy rows before target recording.
        adcp_version:
          type:
            - string
            - 'null'
          description: >-
            Concrete AdCP compliance bundle version used for the latest run,
            e.g. 3.0.12. Null for legacy rows before version recording.
        status:
          type: string
          enum:
            - passing
            - degraded
            - failing
            - unknown
            - opted_out
        lifecycle_stage:
          type: string
          enum:
            - development
            - testing
            - production
            - deprecated
        compliance_opt_out:
          type: boolean
        tracks:
          type: object
          additionalProperties:
            type: string
        track_details:
          type: array
          items:
            type: object
            properties:
              track:
                type: string
              status:
                type: string
              scenario_count:
                type: integer
              passed_count:
                type: integer
              duration_ms:
                type: number
              has_coverage_gap_skip:
                type: boolean
            required:
              - track
              - status
              - scenario_count
              - passed_count
              - duration_ms
          description: >-
            Latest-run per-track summary. Skipped tracks with
            has_coverage_gap_skip=true represent selected coverage gaps, such as
            missing_test_controller.
        streak_days:
          type: integer
        last_checked_at:
          type:
            - string
            - 'null'
        last_passed_at:
          type:
            - string
            - 'null'
        last_failed_at:
          type:
            - string
            - 'null'
        headline:
          type:
            - string
            - 'null'
        status_changed_at:
          type:
            - string
            - 'null'
        storyboards_passing:
          type: integer
        storyboards_total:
          type: integer
        check_interval_hours:
          type: integer
          description: How often the heartbeat re-tests this agent, in hours
        declared_specialisms:
          type: array
          items:
            type: string
          description: >-
            Specialisms the agent declared in get_adcp_capabilities, from the
            latest run
        specialism_status:
          type: object
          additionalProperties:
            type: string
            enum:
              - passing
              - failing
              - untested
              - unknown
          description: >-
            Per-specialism pass/fail/untested status — keyed on declared
            specialism, derived from the matching storyboard's status
        storyboard_statuses:
          type: array
          items:
            type: object
            properties:
              storyboard_id:
                type: string
              requested_compliance_target:
                type:
                  - string
                  - 'null'
              adcp_version:
                type:
                  - string
                  - 'null'
              title:
                type: string
              category:
                type:
                  - string
                  - 'null'
              track:
                type:
                  - string
                  - 'null'
              status:
                type: string
                enum:
                  - passing
                  - failing
                  - partial
                  - untested
              steps_passed:
                type: integer
              steps_total:
                type: integer
              failure_count:
                type: integer
              skipped_count:
                type: integer
              first_failed_step_id:
                type:
                  - string
                  - 'null'
              first_failed_step_title:
                type:
                  - string
                  - 'null'
              first_failed_step_task:
                type:
                  - string
                  - 'null'
              first_failure_message:
                type:
                  - string
                  - 'null'
              last_tested_at:
                type:
                  - string
                  - 'null'
              last_passed_at:
                type:
                  - string
                  - 'null'
            required:
              - storyboard_id
              - title
              - category
              - track
              - status
              - steps_passed
              - steps_total
              - failure_count
              - skipped_count
              - first_failed_step_id
              - first_failed_step_title
              - first_failed_step_task
              - first_failure_message
              - last_tested_at
              - last_passed_at
          description: >-
            Owner-scoped per-storyboard diagnostics used by the dashboard. Empty
            for non-owners.
        notices:
          type: array
          items: {}
          description: >-
            Run-summary notices from the latest non-dry-run compliance run.
            Unknown codes/severities are preserved verbatim.
        observations:
          type: array
          items:
            type: object
            properties:
              category:
                type: string
              severity:
                type: string
              message:
                type: string
            required:
              - category
              - severity
              - message
          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.
        membership_tier:
          type:
            - string
            - 'null'
          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.
        membership_tier_label:
          type:
            - string
            - 'null'
          description: >-
            Owner-scoped: human-readable label for membership_tier (e.g.
            'Builder'). Null for non-owners.
        subscription_status:
          type:
            - string
            - 'null'
          description: >-
            Owner-scoped: the agent owner's subscription status (active,
            past_due, trialing, etc.). Null for non-owners.
        is_api_access_tier:
          type: boolean
          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.
        verdict_source:
          type:
            - string
            - 'null'
          enum:
            - heartbeat
            - owner_test
            - manual
            - webhook
            - null
          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?').
        verified:
          type: boolean
        verified_badges:
          type: array
          items:
            $ref: '#/components/schemas/VerificationBadge'
      required:
        - agent_url
        - status
        - lifecycle_stage
    Error:
      type: object
      properties:
        error:
          type: string
      required:
        - error
    VerificationBadge:
      type: object
      properties:
        role:
          type: string
          enum:
            - media-buy
            - signals
            - governance
            - creative
            - brand
            - sponsored-intelligence
            - measurement
          description: AdCP protocol this badge covers (enums/adcp-protocol.json).
        adcp_version:
          type: string
          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.
        verified_at:
          type: string
        verified_specialisms:
          type: array
          items:
            type: string
            enum:
              - 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
          description: >-
            Specialisms demonstrably passed (enums/specialism.json). Preview
            specialisms are excluded from stable badges.
        verification_modes:
          type: array
          items:
            type: string
            enum:
              - spec
              - live
          minItems: 1
          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.
        verified_protocol_version:
          type:
            - string
            - 'null'
        badge_url:
          type: string
          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)`.
      required:
        - role
        - adcp_version
        - verified_at
        - verified_specialisms
        - verification_modes
        - verified_protocol_version

````