> ## Documentation Index
> Fetch the complete documentation index at: https://agenticadvertisingorg-addie-wg-slack-context.mintlify.site/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, timestamps, and owner-only grading comparisons. Exact badge-scope rows compare Legacy and Strict Spec grading for one role/version; Sandbox remains preview-only. Reading never contacts the agent.

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



## OpenAPI

````yaml https://raw.githubusercontent.com/adcontextprotocol/adcp/v3.2.0-rc.6/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: >-
      Propose, review, 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, timestamps, and owner-only
        grading comparisons. Exact badge-scope rows compare Legacy and Strict
        Spec grading for one role/version; Sandbox remains preview-only. Reading
        never contacts the agent.


        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:
        provenance:
          $ref: '#/components/schemas/ComplianceRunProvenance'
        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
        selected_grading_statuses:
          type: array
          items:
            type: object
            properties:
              role:
                $ref: '#/components/schemas/BadgeRole'
              adcp_version:
                type: string
              grading_profile:
                type: string
                enum:
                  - legacy
                  - spec
              grading_status:
                type:
                  - string
                  - 'null'
                enum:
                  - passing
                  - partial
                  - failing
                  - null
              availability:
                type: string
                enum:
                  - current
                  - unavailable
              badge_status:
                type:
                  - string
                  - 'null'
                enum:
                  - active
                  - degraded
                  - revoked
                  - null
              revision:
                type: string
            required:
              - role
              - adcp_version
              - grading_profile
              - grading_status
              - availability
              - badge_status
              - revision
          description: >-
            Public exact role/version status for every explicit grading
            selection. This is authoritative for the selected badge identity;
            the top-level status remains the agent-wide compliance summary.
        lifecycle_stage:
          type: string
          enum:
            - development
            - testing
            - production
            - deprecated
        compliance_opt_out:
          type: boolean
        badge_requalification_required:
          type: boolean
          description: >-
            True when monitoring is enabled but badges remain suppressed until a
            fresh passing full-suite run completes.
        refresh_availability:
          type: object
          properties:
            available:
              type: boolean
            retryable:
              type: boolean
              description: >-
                Whether retrying the same human refresh request later is
                expected to succeed without a platform change.
            scope:
              type: string
              enum:
                - platform
            applies_to:
              type: string
              enum:
                - human_session
            code:
              type: string
              enum:
                - refresh_authorization_provenance_required
            notice:
              type: string
            alternative_action:
              type: string
              enum:
                - monitoring_requeue
            alternative_description:
              type: string
          required:
            - available
            - retryable
            - scope
            - applies_to
            - code
            - notice
            - alternative_action
            - alternative_description
          description: >-
            Current human refresh admission state. Monitoring requeue is a
            separate scheduler operation and is not a retry or ETA for this
            endpoint.
        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
        eligibility:
          $ref: '#/components/schemas/ComplianceEligibility'
        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'
              first_failure_validations:
                type: array
                items: {}
                description: >-
                  Validation evidence for the first failure. Populated only for
                  owners and empty for other callers.
              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
              - first_failure_validations
              - last_tested_at
              - last_passed_at
          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.
        notices:
          type: array
          items:
            $ref: '#/components/schemas/PublicComplianceNotice'
          maxItems: 50
          description: >-
            Public-safe run-summary notices from the latest non-dry-run
            compliance run. Unknown code/severity values are preserved verbatim;
            private fields are omitted.
        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.
        eligibility_owner:
          $ref: '#/components/schemas/OwnerComplianceEligibility'
        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'
        grading_profile_comparisons:
          type: array
          items:
            $ref: '#/components/schemas/GradingProfileComparison'
          description: >-
            Owner/admin-only comparisons from one source run. Exact badge-scope
            rows allow Legacy or Strict Spec selection; Sandbox remains
            preview-only. Empty for other viewers. Reading never contacts the
            agent.
      required:
        - agent_url
        - status
        - lifecycle_stage
    Error:
      type: object
      properties:
        error:
          type: string
      required:
        - error
    ComplianceRunProvenance:
      type:
        - object
        - 'null'
      properties:
        grading_policy_version:
          type: string
        compliance_bundle_version:
          type:
            - string
            - 'null'
        sdk_version:
          type: string
        agent_build_version:
          type:
            - string
            - 'null'
          description: >-
            Agent-reported adcp.build_version; null when not supplied. Never
            inferred from the endpoint.
        agent_library_version:
          type:
            - string
            - 'null'
        test_session_id:
          type:
            - string
            - 'null'
        timeout_ms:
          type:
            - number
            - 'null'
        storyboard_start_offset:
          type:
            - number
            - 'null'
        auth_type:
          type:
            - string
            - 'null'
      required:
        - grading_policy_version
        - compliance_bundle_version
        - sdk_version
        - agent_build_version
        - agent_library_version
        - test_session_id
        - timeout_ms
        - storyboard_start_offset
        - auth_type
    BadgeRole:
      type: string
      enum:
        - media-buy
        - creative
        - signals
        - governance
        - brand
        - sponsored-intelligence
    ComplianceEligibility:
      type: object
      properties:
        criteria_version:
          type: string
          description: Version of the badge eligibility criteria and blocker vocabulary.
          example: 2026-08
        blockers:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
                enum:
                  - no_declared_specialisms
            required:
              - code
          description: >-
            Agent-level blockers. no_declared_specialisms appears when no
            supported, stable badge role can be derived from the declaration.
        roles:
          type: object
          properties:
            media-buy:
              $ref: '#/components/schemas/RoleEligibility'
            creative:
              $ref: '#/components/schemas/RoleEligibility'
            signals:
              $ref: '#/components/schemas/RoleEligibility'
            governance:
              $ref: '#/components/schemas/RoleEligibility'
            brand:
              $ref: '#/components/schemas/RoleEligibility'
            sponsored-intelligence:
              $ref: '#/components/schemas/RoleEligibility'
      required:
        - criteria_version
        - blockers
        - roles
      description: >-
        Public machine-readable badge eligibility by role. Contains only
        declared-specialism and storyboard blockers; membership tier is
        owner-scoped separately.
    PublicComplianceNotice:
      type: object
      properties:
        severity:
          type: string
          minLength: 1
          maxLength: 64
        code:
          type: string
          minLength: 1
          maxLength: 200
        message:
          type: string
          minLength: 1
          maxLength: 1000
        effective_version:
          type: string
          minLength: 1
          maxLength: 64
        requirement:
          type: string
          minLength: 1
          maxLength: 500
        capability_path:
          type: string
          minLength: 1
          maxLength: 512
        capability_pointer:
          type: string
          minLength: 1
          maxLength: 1024
        reference_url:
          type: string
          maxLength: 2048
          format: uri
      required:
        - severity
        - code
        - message
      additionalProperties: false
    OwnerComplianceEligibility:
      type: object
      properties:
        criteria_version:
          type: string
        eligible:
          type:
            - boolean
            - 'null'
          description: >-
            Whether the owner membership tier grants badge eligibility. Null for
            non-owners.
        blockers:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
                enum:
                  - membership_tier_ineligible
            required:
              - code
          description: Owner-only membership blockers. Empty for non-owners.
      required:
        - criteria_version
        - eligible
        - blockers
      description: >-
        Owner-scoped membership leg of badge eligibility. Non-owners receive
        eligible: null and an empty blocker list.
    VerificationBadge:
      type: object
      properties:
        role:
          allOf:
            - $ref: '#/components/schemas/BadgeRole'
            - description: Canonical role this verification badge covers.
        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
              - buyer-activation
              - buyer-discovery
              - buyer-monitoring
              - buyer-negotiation
              - buyer-recovery
              - 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-dooh
              - sales-exchange
              - sales-guaranteed
              - sales-non-guaranteed
              - sales-proposal-mode
              - sales-retail-media
              - sales-streaming-tv
              - sales-social
              - signal-marketplace
              - orchestrator-multi-agent
              - 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: >-
            Evidence modes earned. 'spec' = AdCP storyboards were exercised;
            'live' = production traffic was observed. Independent of
            grading_profile and always non-empty when a badge is present.
        grading_profile:
          type: string
          enum:
            - legacy
            - spec
          description: >-
            Grading profile that produced the public badge. 'spec' means Strict
            Spec grading; this is independent of the 'spec' evidence mode.
        grading_profile_revision:
          type: integer
          minimum: 0
        first_failing_spec_at:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Start of the current Strict Spec failure episode. Null when no
            Strict Spec failure clock is active.
        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
        - grading_profile
        - verified_protocol_version
    GradingProfileComparison:
      oneOf:
        - type: object
          properties:
            role:
              $ref: '#/components/schemas/BadgeRole'
            adcp_version:
              type: string
            availability:
              type: string
              enum:
                - current
                - stale
                - pending
                - temporarily_unavailable
            unavailable_reason:
              type:
                - string
                - 'null'
            selected_profile:
              type: string
              enum:
                - legacy
                - spec
            selection_enabled:
              type: boolean
            selection_revision:
              type: integer
              minimum: 0
            first_failing_spec_at:
              type:
                - string
                - 'null'
              format: date-time
            legacy_selection_allowed_until:
              type:
                - string
                - 'null'
              format: date-time
            source_run_id:
              type: string
              format: uuid
            evaluator_policy_version:
              type: string
            requested_compliance_target:
              type:
                - string
                - 'null'
            compliance_bundle_version:
              type:
                - string
                - 'null'
            assessed_at:
              type:
                - string
                - 'null'
              format: date-time
            source_tested_at:
              type:
                - string
                - 'null'
              format: date-time
            stale:
              type: boolean
            incomplete:
              type: boolean
            public_impact:
              type: string
            profiles:
              type:
                - object
                - 'null'
              properties:
                legacy:
                  type: object
                  properties:
                    available:
                      type: boolean
                    status:
                      type:
                        - string
                        - 'null'
                      enum:
                        - passing
                        - partial
                        - failing
                        - null
                    observed_status:
                      type:
                        - string
                        - 'null'
                      enum:
                        - passing
                        - partial
                        - failing
                        - null
                    explanation:
                      type: string
                    assessment_id:
                      type: string
                      format: uuid
                    selectable:
                      type: boolean
                    public_effect:
                      type: string
                      enum:
                        - unchanged
                        - issue
                        - restore
                        - regrade
                        - degrade
                        - revoke
                    grace_deadline:
                      type:
                        - string
                        - 'null'
                      format: date-time
                  required:
                    - available
                    - status
                    - observed_status
                    - explanation
                spec:
                  type: object
                  properties:
                    available:
                      type: boolean
                    status:
                      type:
                        - string
                        - 'null'
                      enum:
                        - passing
                        - partial
                        - failing
                        - null
                    observed_status:
                      type:
                        - string
                        - 'null'
                      enum:
                        - passing
                        - partial
                        - failing
                        - null
                    explanation:
                      type: string
                    assessment_id:
                      type: string
                      format: uuid
                    selectable:
                      type: boolean
                    public_effect:
                      type: string
                      enum:
                        - unchanged
                        - issue
                        - restore
                        - regrade
                        - degrade
                        - revoke
                    grace_deadline:
                      type:
                        - string
                        - 'null'
                      format: date-time
                  required:
                    - available
                    - status
                    - observed_status
                    - explanation
                sandbox:
                  type: object
                  properties:
                    available:
                      type: boolean
                    status:
                      type:
                        - string
                        - 'null'
                      enum:
                        - passing
                        - partial
                        - failing
                        - null
                    observed_status:
                      type:
                        - string
                        - 'null'
                      enum:
                        - passing
                        - partial
                        - failing
                        - null
                    explanation:
                      type: string
                    assessment_id:
                      type: string
                      format: uuid
                    selectable:
                      type: boolean
                    public_effect:
                      type: string
                      enum:
                        - unchanged
                        - issue
                        - restore
                        - regrade
                        - degrade
                        - revoke
                    grace_deadline:
                      type:
                        - string
                        - 'null'
                      format: date-time
                  required:
                    - available
                    - status
                    - observed_status
                    - explanation
              required:
                - legacy
                - spec
                - sandbox
            scope:
              type: string
              enum:
                - agent
            evidence:
              type: object
              properties:
                run_complete:
                  type: boolean
                bundle_evidence_present:
                  type: boolean
                selected_storyboard_count:
                  type: integer
                  minimum: 0
                controller_gap_phase_count:
                  type: integer
                  minimum: 0
                observed_failure_count:
                  type: integer
                  minimum: 0
                flat_failure_count:
                  type: integer
                  minimum: 0
                unattributed_failure_count:
                  type: integer
                  minimum: 0
                sandbox_unresolved_bundle_count:
                  type: integer
                  minimum: 0
              required:
                - run_complete
                - bundle_evidence_present
                - selected_storyboard_count
                - controller_gap_phase_count
                - observed_failure_count
                - flat_failure_count
                - unattributed_failure_count
                - sandbox_unresolved_bundle_count
          required:
            - availability
            - unavailable_reason
            - selected_profile
            - selection_enabled
            - compliance_bundle_version
            - profiles
            - scope
        - type: object
          properties:
            role:
              $ref: '#/components/schemas/BadgeRole'
            adcp_version:
              type: string
            availability:
              type: string
              enum:
                - current
                - stale
                - pending
                - temporarily_unavailable
            unavailable_reason:
              type:
                - string
                - 'null'
            selected_profile:
              type: string
              enum:
                - legacy
                - spec
            selection_enabled:
              type: boolean
            selection_revision:
              type: integer
              minimum: 0
            first_failing_spec_at:
              type:
                - string
                - 'null'
              format: date-time
            legacy_selection_allowed_until:
              type:
                - string
                - 'null'
              format: date-time
            source_run_id:
              type: string
              format: uuid
            evaluator_policy_version:
              type: string
            requested_compliance_target:
              type:
                - string
                - 'null'
            compliance_bundle_version:
              type: string
            assessed_at:
              type:
                - string
                - 'null'
              format: date-time
            source_tested_at:
              type:
                - string
                - 'null'
              format: date-time
            stale:
              type: boolean
            incomplete:
              type: boolean
            public_impact:
              type: string
            profiles:
              type:
                - object
                - 'null'
              properties:
                legacy:
                  type: object
                  properties:
                    available:
                      type: boolean
                    status:
                      type:
                        - string
                        - 'null'
                      enum:
                        - passing
                        - partial
                        - failing
                        - null
                    observed_status:
                      type:
                        - string
                        - 'null'
                      enum:
                        - passing
                        - partial
                        - failing
                        - null
                    explanation:
                      type: string
                    assessment_id:
                      type: string
                      format: uuid
                    selectable:
                      type: boolean
                    public_effect:
                      type: string
                      enum:
                        - unchanged
                        - issue
                        - restore
                        - regrade
                        - degrade
                        - revoke
                    grace_deadline:
                      type:
                        - string
                        - 'null'
                      format: date-time
                  required:
                    - available
                    - status
                    - observed_status
                    - explanation
                spec:
                  type: object
                  properties:
                    available:
                      type: boolean
                    status:
                      type:
                        - string
                        - 'null'
                      enum:
                        - passing
                        - partial
                        - failing
                        - null
                    observed_status:
                      type:
                        - string
                        - 'null'
                      enum:
                        - passing
                        - partial
                        - failing
                        - null
                    explanation:
                      type: string
                    assessment_id:
                      type: string
                      format: uuid
                    selectable:
                      type: boolean
                    public_effect:
                      type: string
                      enum:
                        - unchanged
                        - issue
                        - restore
                        - regrade
                        - degrade
                        - revoke
                    grace_deadline:
                      type:
                        - string
                        - 'null'
                      format: date-time
                  required:
                    - available
                    - status
                    - observed_status
                    - explanation
                sandbox:
                  type: object
                  properties:
                    available:
                      type: boolean
                    status:
                      type:
                        - string
                        - 'null'
                      enum:
                        - passing
                        - partial
                        - failing
                        - null
                    observed_status:
                      type:
                        - string
                        - 'null'
                      enum:
                        - passing
                        - partial
                        - failing
                        - null
                    explanation:
                      type: string
                    assessment_id:
                      type: string
                      format: uuid
                    selectable:
                      type: boolean
                    public_effect:
                      type: string
                      enum:
                        - unchanged
                        - issue
                        - restore
                        - regrade
                        - degrade
                        - revoke
                    grace_deadline:
                      type:
                        - string
                        - 'null'
                      format: date-time
                  required:
                    - available
                    - status
                    - observed_status
                    - explanation
              required:
                - legacy
                - spec
                - sandbox
            scope:
              type: string
              enum:
                - badge
            evidence:
              type: object
              properties:
                specialisms:
                  type: array
                  items:
                    type: string
                relevant_bundle_count:
                  type: integer
                  minimum: 0
                relevant_bundle_ids:
                  type: array
                  items:
                    type: string
                failing_bundle_count:
                  type: integer
                  minimum: 0
                incomplete_bundle_count:
                  type: integer
                  minimum: 0
                relevant_failure_count:
                  type: integer
                  minimum: 0
                missing_universal_bundle:
                  type: boolean
                missing_protocol_bundle:
                  type: boolean
                missing_specialism_bundles:
                  type: array
                  items:
                    type: string
                evaluator:
                  type: string
              required:
                - specialisms
                - relevant_bundle_count
                - relevant_bundle_ids
                - failing_bundle_count
                - incomplete_bundle_count
                - relevant_failure_count
                - missing_universal_bundle
                - missing_protocol_bundle
                - missing_specialism_bundles
                - evaluator
          required:
            - role
            - adcp_version
            - availability
            - unavailable_reason
            - selected_profile
            - selection_enabled
            - source_run_id
            - evaluator_policy_version
            - compliance_bundle_version
            - profiles
            - scope
            - evidence
    RoleEligibility:
      type: object
      properties:
        eligible:
          type: boolean
        blockers:
          type: array
          items:
            $ref: '#/components/schemas/RoleEligibilityBlocker'
      required:
        - eligible
        - blockers
    RoleEligibilityBlocker:
      type: object
      properties:
        code:
          type: string
          enum:
            - storyboards_failing
            - storyboards_partial
            - storyboards_untested
      required:
        - code

````