curl --request GET \
--url https://agenticadvertising.org/api/registry/agents/{encodedUrl}/complianceimport requests
url = "https://agenticadvertising.org/api/registry/agents/{encodedUrl}/compliance"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://agenticadvertising.org/api/registry/agents/{encodedUrl}/compliance', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://agenticadvertising.org/api/registry/agents/{encodedUrl}/compliance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://agenticadvertising.org/api/registry/agents/{encodedUrl}/compliance"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://agenticadvertising.org/api/registry/agents/{encodedUrl}/compliance")
.asString();require 'uri'
require 'net/http'
url = URI("https://agenticadvertising.org/api/registry/agents/{encodedUrl}/compliance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"agent_url": "<string>",
"status": "passing",
"lifecycle_stage": "development",
"provenance": {
"grading_policy_version": "<string>",
"compliance_bundle_version": "<string>",
"sdk_version": "<string>",
"agent_build_version": "<string>",
"agent_library_version": "<string>",
"test_session_id": "<string>",
"timeout_ms": 123,
"storyboard_start_offset": 123,
"auth_type": "<string>"
},
"requested_compliance_target": "<string>",
"adcp_version": "<string>",
"selected_grading_statuses": [
{
"role": "media-buy",
"adcp_version": "<string>",
"grading_profile": "legacy",
"grading_status": "passing",
"availability": "current",
"badge_status": "active",
"revision": "<string>"
}
],
"compliance_opt_out": true,
"badge_requalification_required": true,
"refresh_availability": {
"available": true,
"retryable": true,
"scope": "platform",
"applies_to": "human_session",
"code": "refresh_authorization_provenance_required",
"notice": "<string>",
"alternative_action": "monitoring_requeue",
"alternative_description": "<string>"
},
"tracks": {},
"track_details": [
{
"track": "<string>",
"status": "<string>",
"scenario_count": 123,
"passed_count": 123,
"duration_ms": 123,
"has_coverage_gap_skip": true
}
],
"streak_days": 123,
"last_checked_at": "<string>",
"last_passed_at": "<string>",
"last_failed_at": "<string>",
"headline": "<string>",
"status_changed_at": "<string>",
"storyboards_passing": 123,
"storyboards_total": 123,
"check_interval_hours": 123,
"declared_specialisms": [
"<string>"
],
"specialism_status": {},
"eligibility": {
"criteria_version": "2026-08",
"blockers": [
{
"code": "no_declared_specialisms"
}
],
"roles": {
"media-buy": {
"eligible": true,
"blockers": [
{
"code": "storyboards_failing"
}
]
},
"creative": {
"eligible": true,
"blockers": [
{
"code": "storyboards_failing"
}
]
},
"signals": {
"eligible": true,
"blockers": [
{
"code": "storyboards_failing"
}
]
},
"governance": {
"eligible": true,
"blockers": [
{
"code": "storyboards_failing"
}
]
},
"brand": {
"eligible": true,
"blockers": [
{
"code": "storyboards_failing"
}
]
},
"sponsored-intelligence": {
"eligible": true,
"blockers": [
{
"code": "storyboards_failing"
}
]
}
}
},
"storyboard_statuses": [
{
"storyboard_id": "<string>",
"title": "<string>",
"category": "<string>",
"track": "<string>",
"status": "passing",
"steps_passed": 123,
"steps_total": 123,
"failure_count": 123,
"skipped_count": 123,
"first_failed_step_id": "<string>",
"first_failed_step_title": "<string>",
"first_failed_step_task": "<string>",
"first_failure_message": "<string>",
"first_failure_validations": [
"<unknown>"
],
"last_tested_at": "<string>",
"last_passed_at": "<string>",
"requested_compliance_target": "<string>",
"adcp_version": "<string>"
}
],
"notices": [
{
"severity": "<string>",
"code": "<string>",
"message": "<string>",
"effective_version": "<string>",
"requirement": "<string>",
"capability_path": "<string>",
"capability_pointer": "<string>",
"reference_url": "<string>"
}
],
"observations": [
{
"category": "<string>",
"severity": "<string>",
"message": "<string>"
}
],
"membership_tier": "<string>",
"membership_tier_label": "<string>",
"subscription_status": "<string>",
"is_api_access_tier": true,
"eligibility_owner": {
"criteria_version": "<string>",
"eligible": true,
"blockers": [
{
"code": "membership_tier_ineligible"
}
]
},
"verdict_source": "heartbeat",
"verified": true,
"verified_badges": [
{
"role": "media-buy",
"adcp_version": "<string>",
"verified_at": "<string>",
"verified_specialisms": [
"audience-sync"
],
"verification_modes": [
"spec"
],
"grading_profile": "legacy",
"verified_protocol_version": "<string>",
"grading_profile_revision": 1,
"first_failing_spec_at": "2023-11-07T05:31:56Z",
"badge_url": "<string>"
}
],
"grading_profile_comparisons": [
{
"availability": "current",
"unavailable_reason": "<string>",
"selected_profile": "legacy",
"selection_enabled": true,
"compliance_bundle_version": "<string>",
"profiles": {
"legacy": {
"available": true,
"status": "passing",
"observed_status": "passing",
"explanation": "<string>",
"assessment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"selectable": true,
"public_effect": "unchanged",
"grace_deadline": "2023-11-07T05:31:56Z"
},
"spec": {
"available": true,
"status": "passing",
"observed_status": "passing",
"explanation": "<string>",
"assessment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"selectable": true,
"public_effect": "unchanged",
"grace_deadline": "2023-11-07T05:31:56Z"
},
"sandbox": {
"available": true,
"status": "passing",
"observed_status": "passing",
"explanation": "<string>",
"assessment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"selectable": true,
"public_effect": "unchanged",
"grace_deadline": "2023-11-07T05:31:56Z"
}
},
"scope": "agent",
"role": "media-buy",
"adcp_version": "<string>",
"selection_revision": 1,
"first_failing_spec_at": "2023-11-07T05:31:56Z",
"legacy_selection_allowed_until": "2023-11-07T05:31:56Z",
"source_run_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"evaluator_policy_version": "<string>",
"requested_compliance_target": "<string>",
"assessed_at": "2023-11-07T05:31:56Z",
"source_tested_at": "2023-11-07T05:31:56Z",
"stale": true,
"incomplete": true,
"public_impact": "<string>",
"evidence": {
"run_complete": true,
"bundle_evidence_present": true,
"selected_storyboard_count": 1,
"controller_gap_phase_count": 1,
"observed_failure_count": 1,
"flat_failure_count": 1,
"unattributed_failure_count": 1,
"sandbox_unresolved_bundle_count": 1
}
}
]
}{
"error": "<string>"
}{
"error": "<string>"
}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.
curl --request GET \
--url https://agenticadvertising.org/api/registry/agents/{encodedUrl}/complianceimport requests
url = "https://agenticadvertising.org/api/registry/agents/{encodedUrl}/compliance"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://agenticadvertising.org/api/registry/agents/{encodedUrl}/compliance', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://agenticadvertising.org/api/registry/agents/{encodedUrl}/compliance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://agenticadvertising.org/api/registry/agents/{encodedUrl}/compliance"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://agenticadvertising.org/api/registry/agents/{encodedUrl}/compliance")
.asString();require 'uri'
require 'net/http'
url = URI("https://agenticadvertising.org/api/registry/agents/{encodedUrl}/compliance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"agent_url": "<string>",
"status": "passing",
"lifecycle_stage": "development",
"provenance": {
"grading_policy_version": "<string>",
"compliance_bundle_version": "<string>",
"sdk_version": "<string>",
"agent_build_version": "<string>",
"agent_library_version": "<string>",
"test_session_id": "<string>",
"timeout_ms": 123,
"storyboard_start_offset": 123,
"auth_type": "<string>"
},
"requested_compliance_target": "<string>",
"adcp_version": "<string>",
"selected_grading_statuses": [
{
"role": "media-buy",
"adcp_version": "<string>",
"grading_profile": "legacy",
"grading_status": "passing",
"availability": "current",
"badge_status": "active",
"revision": "<string>"
}
],
"compliance_opt_out": true,
"badge_requalification_required": true,
"refresh_availability": {
"available": true,
"retryable": true,
"scope": "platform",
"applies_to": "human_session",
"code": "refresh_authorization_provenance_required",
"notice": "<string>",
"alternative_action": "monitoring_requeue",
"alternative_description": "<string>"
},
"tracks": {},
"track_details": [
{
"track": "<string>",
"status": "<string>",
"scenario_count": 123,
"passed_count": 123,
"duration_ms": 123,
"has_coverage_gap_skip": true
}
],
"streak_days": 123,
"last_checked_at": "<string>",
"last_passed_at": "<string>",
"last_failed_at": "<string>",
"headline": "<string>",
"status_changed_at": "<string>",
"storyboards_passing": 123,
"storyboards_total": 123,
"check_interval_hours": 123,
"declared_specialisms": [
"<string>"
],
"specialism_status": {},
"eligibility": {
"criteria_version": "2026-08",
"blockers": [
{
"code": "no_declared_specialisms"
}
],
"roles": {
"media-buy": {
"eligible": true,
"blockers": [
{
"code": "storyboards_failing"
}
]
},
"creative": {
"eligible": true,
"blockers": [
{
"code": "storyboards_failing"
}
]
},
"signals": {
"eligible": true,
"blockers": [
{
"code": "storyboards_failing"
}
]
},
"governance": {
"eligible": true,
"blockers": [
{
"code": "storyboards_failing"
}
]
},
"brand": {
"eligible": true,
"blockers": [
{
"code": "storyboards_failing"
}
]
},
"sponsored-intelligence": {
"eligible": true,
"blockers": [
{
"code": "storyboards_failing"
}
]
}
}
},
"storyboard_statuses": [
{
"storyboard_id": "<string>",
"title": "<string>",
"category": "<string>",
"track": "<string>",
"status": "passing",
"steps_passed": 123,
"steps_total": 123,
"failure_count": 123,
"skipped_count": 123,
"first_failed_step_id": "<string>",
"first_failed_step_title": "<string>",
"first_failed_step_task": "<string>",
"first_failure_message": "<string>",
"first_failure_validations": [
"<unknown>"
],
"last_tested_at": "<string>",
"last_passed_at": "<string>",
"requested_compliance_target": "<string>",
"adcp_version": "<string>"
}
],
"notices": [
{
"severity": "<string>",
"code": "<string>",
"message": "<string>",
"effective_version": "<string>",
"requirement": "<string>",
"capability_path": "<string>",
"capability_pointer": "<string>",
"reference_url": "<string>"
}
],
"observations": [
{
"category": "<string>",
"severity": "<string>",
"message": "<string>"
}
],
"membership_tier": "<string>",
"membership_tier_label": "<string>",
"subscription_status": "<string>",
"is_api_access_tier": true,
"eligibility_owner": {
"criteria_version": "<string>",
"eligible": true,
"blockers": [
{
"code": "membership_tier_ineligible"
}
]
},
"verdict_source": "heartbeat",
"verified": true,
"verified_badges": [
{
"role": "media-buy",
"adcp_version": "<string>",
"verified_at": "<string>",
"verified_specialisms": [
"audience-sync"
],
"verification_modes": [
"spec"
],
"grading_profile": "legacy",
"verified_protocol_version": "<string>",
"grading_profile_revision": 1,
"first_failing_spec_at": "2023-11-07T05:31:56Z",
"badge_url": "<string>"
}
],
"grading_profile_comparisons": [
{
"availability": "current",
"unavailable_reason": "<string>",
"selected_profile": "legacy",
"selection_enabled": true,
"compliance_bundle_version": "<string>",
"profiles": {
"legacy": {
"available": true,
"status": "passing",
"observed_status": "passing",
"explanation": "<string>",
"assessment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"selectable": true,
"public_effect": "unchanged",
"grace_deadline": "2023-11-07T05:31:56Z"
},
"spec": {
"available": true,
"status": "passing",
"observed_status": "passing",
"explanation": "<string>",
"assessment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"selectable": true,
"public_effect": "unchanged",
"grace_deadline": "2023-11-07T05:31:56Z"
},
"sandbox": {
"available": true,
"status": "passing",
"observed_status": "passing",
"explanation": "<string>",
"assessment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"selectable": true,
"public_effect": "unchanged",
"grace_deadline": "2023-11-07T05:31:56Z"
}
},
"scope": "agent",
"role": "media-buy",
"adcp_version": "<string>",
"selection_revision": 1,
"first_failing_spec_at": "2023-11-07T05:31:56Z",
"legacy_selection_allowed_until": "2023-11-07T05:31:56Z",
"source_run_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"evaluator_policy_version": "<string>",
"requested_compliance_target": "<string>",
"assessed_at": "2023-11-07T05:31:56Z",
"source_tested_at": "2023-11-07T05:31:56Z",
"stale": true,
"incomplete": true,
"public_impact": "<string>",
"evidence": {
"run_complete": true,
"bundle_evidence_present": true,
"selected_storyboard_count": 1,
"controller_gap_phase_count": 1,
"observed_failure_count": 1,
"flat_failure_count": 1,
"unattributed_failure_count": 1,
"sandbox_unresolved_bundle_count": 1
}
}
]
}{
"error": "<string>"
}{
"error": "<string>"
}Path Parameters
URL-encoded agent URL
"https%3A%2F%2Fexample.com%2Fmcp"
Response
Compliance detail
passing, degraded, failing, unknown, opted_out development, testing, production, deprecated Show child attributes
Show child attributes
Requested compliance target before alias resolution, e.g. 3.0 or 3.1-beta. Null for legacy rows before target recording.
Concrete AdCP compliance bundle version used for the latest run, e.g. 3.0.12. Null for legacy rows before version recording.
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.
Show child attributes
Show child attributes
True when monitoring is enabled but badges remain suppressed until a fresh passing full-suite run completes.
Current human refresh admission state. Monitoring requeue is a separate scheduler operation and is not a retry or ETA for this endpoint.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Latest-run per-track summary. Skipped tracks with has_coverage_gap_skip=true represent selected coverage gaps, such as missing_test_controller.
Show child attributes
Show child attributes
How often the heartbeat re-tests this agent, in hours
Specialisms the agent declared in get_adcp_capabilities, from the latest run
Per-specialism pass/fail/untested status — keyed on declared specialism, derived from the matching storyboard's status
Show child attributes
Show child attributes
Public machine-readable badge eligibility by role. Contains only declared-specialism and storyboard blockers; membership tier is owner-scoped separately.
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
Public-safe run-summary notices from the latest non-dry-run compliance run. Unknown code/severity values are preserved verbatim; private fields are omitted.
50Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
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.
Owner-scoped: human-readable label for membership_tier (e.g. 'Builder'). Null for non-owners.
Owner-scoped: the agent owner's subscription status (active, past_due, trialing, etc.). Null for non-owners.
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.
Owner-scoped membership leg of badge eligibility. Non-owners receive eligible: null and an empty blocker list.
Show child attributes
Show child attributes
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?').
heartbeat, owner_test, manual, webhook, null Show child attributes
Show child attributes
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.
- Option 1
- Option 2
Show child attributes
Show child attributes
Was this page helpful?