---
title: "Get agent compliance detail"
method: GET
path: "/api/registry/agents/{encodedUrl}/compliance"
tags: ["Agent Compliance"]
---

# Get agent compliance detail

`GET /api/registry/agents/{encodedUrl}/compliance`

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

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

## Path parameters

- `encodedUrl` string, required — URL-encoded agent URL

## Response `200`

Compliance detail

- AgentComplianceDetail
  - `agent_url` string, required
  - `requested_compliance_target` string, nullable — Requested compliance target before alias resolution, e.g. 3.0 or 3.1-beta. Null for legacy rows before target recording.
  - `adcp_version` string, nullable — Concrete AdCP compliance bundle version used for the latest run, e.g. 3.0.12. Null for legacy rows before version recording.
  - `status` 'passing' | 'degraded' | 'failing' | 'unknown' | 'opted_out', required
  - `lifecycle_stage` 'development' | 'testing' | 'production' | 'deprecated', required
  - `compliance_opt_out` boolean
  - `tracks` object
  - `track_details` object[] — Latest-run per-track summary. Skipped tracks with has_coverage_gap_skip=true represent selected coverage gaps, such as missing_test_controller.
    - `track` string, required
    - `status` string, required
    - `scenario_count` integer, required
    - `passed_count` integer, required
    - `duration_ms` number, required
    - `has_coverage_gap_skip` boolean
  - `streak_days` integer
  - `last_checked_at` string, nullable
  - `last_passed_at` string, nullable
  - `last_failed_at` string, nullable
  - `headline` string, nullable
  - `status_changed_at` string, nullable
  - `storyboards_passing` integer
  - `storyboards_total` integer
  - `check_interval_hours` integer — How often the heartbeat re-tests this agent, in hours
  - `declared_specialisms` string[] — Specialisms the agent declared in get_adcp_capabilities, from the latest run
  - `specialism_status` object — Per-specialism pass/fail/untested status — keyed on declared specialism, derived from the matching storyboard's status
  - `storyboard_statuses` object[] — Owner-scoped per-storyboard diagnostics used by the dashboard. Empty for non-owners.
    - `storyboard_id` string, required
    - `requested_compliance_target` string, nullable
    - `adcp_version` string, nullable
    - `title` string, required
    - `category` string, nullable, required
    - `track` string, nullable, required
    - `status` 'passing' | 'failing' | 'partial' | 'untested', required
    - `steps_passed` integer, required
    - `steps_total` integer, required
    - `failure_count` integer, required
    - `skipped_count` integer, required
    - `first_failed_step_id` string, nullable, required
    - `first_failed_step_title` string, nullable, required
    - `first_failed_step_task` string, nullable, required
    - `first_failure_message` string, nullable, required
    - `last_tested_at` string, nullable, required
    - `last_passed_at` string, nullable, required
  - `notices` unknown[] — Run-summary notices from the latest non-dry-run compliance run. Unknown codes/severities are preserved verbatim.
    - unknown
  - `observations` object[] — 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.
    - `category` string, required
    - `severity` string, required
    - `message` string, required
  - `membership_tier` string, nullable — 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` string, nullable — Owner-scoped: human-readable label for membership_tier (e.g. 'Builder'). Null for non-owners.
  - `subscription_status` string, nullable — Owner-scoped: the agent owner's subscription status (active, past_due, trialing, etc.). Null for non-owners.
  - `is_api_access_tier` boolean — 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` 'heartbeat' | 'owner_test' | 'manual' | 'webhook' | 'null', nullable — 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` boolean
  - `verified_badges` VerificationBadge[]
    - `role` 'media-buy' | 'signals' | 'governance' | 'creative' | 'brand' | 'sponsored-intelligence' | 'measurement', required — AdCP protocol this badge covers (enums/adcp-protocol.json).
    - `adcp_version` string, required — 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` string, required
    - `verified_specialisms` string[], required — Specialisms demonstrably passed (enums/specialism.json). Preview specialisms are excluded from stable badges.
    - `verification_modes` string[], required — 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` string, nullable, required
    - `badge_url` string — 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)`.

## Other responses

- `400` — Invalid agent URL
- `500` — Server error

---

[API](https://skmtc.net/adcontextprotocol/apis/agenticadvertising-org-registry-api.md) · [All operations](https://skmtc.net/adcontextprotocol/apis/agenticadvertising-org-registry-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/adcontextprotocol/agenticadvertising-org-registry-api/revisions/9ea7fedf54c0/schema)
