API reference

Compliance

The compliance score and the rules behind it.

  1. GET/v1/compliance/alerts
  2. GET/v1/compliance/domains/{domainId}/checks
  3. GET/v1/compliance/rule-sets
  4. GET/v1/compliance/summary
GET/v1/compliance/alerts

What is currently wrong with this workspace

Derived from live state — banner findings, unverified domains, failed scans, verified domains recording no traffic. An alert exists only while its cause does, and its id is stable for that whole time.

Needs: A signed-in panel session, sent as Authorization: Bearer <access token>.

Parameters
NameWhereTypeWhat it is
limitquerynumber
severityquery"critical" | "warning" | "info"
Responses
StatusBodyWhen
200ComplianceAlertsDto
200 body · ComplianceAlertsDto
FieldTypeWhat it is
alerts requiredComplianceAlertDto[]
alerts[].id requiredstringStable for as long as the underlying condition holds, so a client can dismiss one and not have it reappear on the next poll under a new id.
alerts[].kind required"compliance_finding" | "domain_unverified" | "scan_failed" | "no_traffic"
alerts[].severity required"critical" | "warning" | "info"
alerts[].at requiredstringWhen the underlying condition was last observed. For a derived condition (a misconfigured banner) this is when the thing it derives from last changed, not when the alert was generated.
alerts[].title requiredstring
alerts[].detail requiredstringWhat to do about it. Safe to show verbatim.
alerts[].domainIdstring | null
alerts[].hostnamestring | null
total requirednumberTotal before limit was applied.
GET/v1/compliance/domains/{domainId}/checks

Dark-pattern / GDPR checks for a domain’s banner

Needs: A signed-in panel session, sent as Authorization: Bearer <access token>.

Parameters
NameWhereTypeWhat it is
domainId requiredpathstring
Responses
StatusBodyWhen
200DomainComplianceDto
200 body · DomainComplianceDto
FieldTypeWhat it is
domainId requiredstring
hostname requiredstring
published requiredbooleanWhether these checks run against the published config (else the draft).
score requirednumber
byJurisdiction requiredJurisdictionScoresDto
byJurisdiction.all requirednumber
byJurisdiction.eea_uk requirednumber
byJurisdiction.us requirednumber
critical requirednumber
warnings requirednumber
info requirednumber
findings requiredComplianceFindingDto[]
findings[].id requiredstring
findings[].severity required"info" | "warning" | "critical"
findings[].jurisdiction required"eea_uk" | "us" | "all"
findings[].title requiredstring
findings[].description requiredstring
findings[].fix requiredstring
findings[].regulation requiredstring
findings[].field requiredstring
findings[].impact requirednumberPoints this finding costs — and so exactly what clearing it returns.
notes requiredstring[]Settings that shape this banner's behaviour without being scored, such as the six-month rejection memory. Empty when there is nothing to say.
GET/v1/compliance/rule-sets

The consent rules each domain’s banner applies

One row per domain: its regimes (EEA/UK, US, rest of world), consent expiry, rejection memory, blocking rules, sensitive categories and Global Privacy Control — read from the published banner, which is what visitors are served, else from the draft, and saying which. Read-only: every one of these is changed in the banner builder.

Needs: A signed-in panel session, sent as Authorization: Bearer <access token>.

Responses
StatusBodyWhen
200ComplianceRuleSetsDto
200 body · ComplianceRuleSetsDto
FieldTypeWhat it is
domains requiredDomainRuleSetDto[]
domains[].domainId requiredstring
domains[].hostname requiredstring
domains[].status required"pending" | "verified" | "failed"
domains[].published requiredbooleanA banner is live: visitors get ruleSet.
domains[].source required"none" | "draft" | "published"
domains[].publishedAt requiredstring | nullISO timestamp of the last publish, or null if never published.
domains[].ruleSet requiredRuleSetDto | nullNull only when source is none — there is no banner config to read.
GET/v1/compliance/summary

The workspace’s compliance score, and the issues on each domain

Needs: A signed-in panel session, sent as Authorization: Bearer <access token>.

Parameters
NameWhereTypeWhat it is
statusquery"healthy" | "warning" | "critical"
qquerystring
Responses
StatusBodyWhen
200ComplianceSummaryDto
200 body · ComplianceSummaryDto
FieldTypeWhat it is
score requirednumberAverage score across all domains (100 when there are none).
domains requirednumber
critical requirednumber
warnings requirednumber
info requirednumber
rows requiredDomainComplianceRowDto[]
rows[].domainId requiredstring
rows[].hostname requiredstring
rows[].score requirednumber
rows[].critical requirednumber
rows[].warnings requirednumber
rows[].info requirednumber
rows[].status required"warning" | "critical" | "healthy"
facets requiredComplianceFacetsDtoFilter-independent counts for the status filters and severity chips.
facets.status requiredComplianceStatusFacetsDto
facets.severity requiredComplianceSeverityFacetsDto
checksRun requirednumberHow many rule checks this score is based on, and how many of them passed. Counted over every domain in the workspace, not only the filtered rows.
checksPassed requirednumber

Next groupScanner