> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Compliance Readiness Summary

> How to read the four-pillar readiness summary behind Settings → Compliance: KYC, 10DLC, frequency caps, and keyword rules. What green, amber, and red mean per pillar, where the summary appears in the console, and which setting moves a red pillar.

# Compliance Readiness Summary

The readiness summary rolls the four pre-send posture checks — business
verification (KYC), US A2P sender registration (10DLC), frequency caps, and
keyword rules — into one colour-coded read, served by
`GET /api/v1/settings/compliance-health`. It answers "is this workspace
configured to send?" before you scale traffic, not after a carrier tells you.

This guide explains how to read each pillar, where the summary appears in the
console, and the exact setting that moves a pillar.

***

## What this summary is, and what it is not

The summary is a **configuration** read. Every field describes a setting or
registration state your organization controls: whether KYC has passed, whether a
TCR brand exists and in what status, how many frequency caps and keyword rules
are enabled.

It is not a **traffic** read. A separate surface, messaging compliance health
(`GET /api/v1/compliance/health`), scores what actually happened on your traffic:
consent coverage, opt-out velocity, STOP-reply rate, and carrier rejections. That
surface is documented in [Compliance Health Scores](https://docs.orbit.devotel.io/compliance/compliance-health.md).
The two answer different questions:

| | Readiness summary | Messaging health |
| - | - | - |
| Endpoint | `GET /api/v1/settings/compliance-health` | `GET /api/v1/compliance/health` |
| Reads | Settings and registrations | Sends, deliveries, opt-outs, STOP replies |
| Question | Are we configured to send? | How is our traffic behaving? |
| Fresh workspace, no sends yet | Can read red (KYC not started) | Reads "No data" |

Both surfaces are **read-only and never gate sends**. Nothing in Orbit blocks,
queues, or alters a message because of either read. Compliance posture is your
tenant's responsibility; the summary only reports it. It is visible to owner and
admin roles, like the rest of Settings → Compliance.

***

## Reading the four pillars

`overall_status` is derived from the pillars: red if any pillar blocks, amber if
any is pending, green otherwise. A pillar that reads "not configured" (frequency
caps or keyword rules with nothing enabled) does not move the overall status;
those are optional posture controls you turn on when you want them.

| `overall_status` | Condition |
| - | - |
| `red` | KYC is `not_started` or `rejected`, or a registered 10DLC brand is `suspended`. |
| `amber` | KYC is `pending` or `pending_review`, or a brand is `pending` / `pending_review`. |
| `green` | Nothing blocking and nothing pending. |

### KYC — `kyc`

| `health` | `status` values | Read |
| - | - | - |
| `green` | `approved` | Verification passed. Nothing to do. |
| `amber` | `pending`, `pending_review` | Documents submitted; review is in progress. |
| `red` | `not_started`, `rejected` | Verification has not started, or a submission was rejected. A rejection lists what to fix; resubmit from the same console. |

A brand-new workspace reads `not_started` (red) until onboarding begins. That is
the summary doing its job, not a penalty. Move it: submit your documents in
[KYC Documents](https://docs.orbit.devotel.io/compliance/documents-kyc.md); the end-to-end walkthrough is
[Organization KYC onboarding](https://docs.orbit.devotel.io/guides/organization-kyc-onboarding.md).

### 10DLC — `ten_dlc`

Fields: `brand_id` (null until you register a brand), `brand_status`,
`campaign_count`, `health`.

| `health` | Condition | Read |
| - | - | - |
| `none` | `brand_id` is `null` | No TCR brand registered yet. Not a failing grade, but US carriers filter A2P traffic from unregistered long codes; see the composer advisory below. |
| `green` | Brand registered and in good standing | The brand is approved; `campaign_count` is the number of campaigns on record under it. |
| `amber` | `brand_status` is `pending` / `pending_review` | The registration is under registry review. |
| `red` | `brand_status` is `suspended` | A registered brand was suspended. Expect US long-code traffic to filter until you resolve it. |

`campaign_count` is informational; the pillar colour derives from the brand
status. Move it: register your brand and campaigns per
[10DLC registration](https://docs.orbit.devotel.io/guides/10dlc-registration.md), then manage the records in
[10DLC brand & campaign profiles](https://docs.orbit.devotel.io/compliance/10dlc-brand-campaign-profiles.md).

### Frequency caps — `frequency_caps`

`active_count` is the number of enabled caps; `health` is `green` when at least
one is enabled and `none` otherwise. Caps limit how many messages a recipient
receives in a window. They are tenant-owned and default off, so `none` is a
posture choice, not a defect. Move it: [Frequency caps](https://docs.orbit.devotel.io/guides/frequency-caps.md),
with the console walkthrough at
[Frequency caps in the console](https://docs.orbit.devotel.io/guides/settings-frequency-caps-console.md).

### Keyword rules — `keyword_rules`

`active_count` is the number of active keyword rules; `health` is `green` when at
least one is active and `none` otherwise. Move it: write your rules per
[Opt-out rules](https://docs.orbit.devotel.io/guides/opt-out-rules.md); the default keyword set and its aliases
are listed in the
[Opt-out keyword alias table](https://docs.orbit.devotel.io/compliance/opt-out-keyword-alias-table.md).

***

## Where the summary appears in the console

**Settings → Compliance overview** renders the overall status and one tile per
pillar, so the hub's first screen is the posture read.

**The SMS composer's sender picker** reads the 10DLC pillar too. When you select
an owned US long code while `ten_dlc.health` is not `green`, the picker shows an
inline advisory that the number is not backed by an approved brand and campaign,
and that US carriers filter unregistered A2P traffic. The advisory is
informational: the number stays selectable and the send is not blocked. Whether
and when to register is your call; the platform reports posture, it does not
mandate it.

***

## Worked example

A fully populated response for an organization with approved KYC, a brand in
review, two enabled caps, and four active keyword rules:

```json theme={null}
{
  "data": {
    "overall_status": "amber",
    "kyc": {
      "status": "approved",
      "health": "green"
    },
    "ten_dlc": {
      "brand_id": "B102030",
      "brand_status": "pending_review",
      "campaign_count": 1,
      "health": "amber"
    },
    "frequency_caps": {
      "active_count": 2,
      "health": "green"
    },
    "keyword_rules": {
      "active_count": 4,
      "health": "green"
    }
  },
  "meta": {
    "request_id": "req_8f27ab1c",
    "timestamp": "2026-10-23T09:15:00.000Z"
  }
}
```

The endpoint's reference sample shows the four pillars as empty objects for
brevity; a live response always populates every field, with `brand_id` null and
counts of 0 where nothing is configured.

### Triage walkthrough: overall red on a suspended brand

```json theme={null}
{
  "data": {
    "overall_status": "red",
    "kyc": {
      "status": "approved",
      "health": "green"
    },
    "ten_dlc": {
      "brand_id": "B102030",
      "brand_status": "suspended",
      "campaign_count": 1,
      "health": "red"
    },
    "frequency_caps": {
      "active_count": 2,
      "health": "green"
    },
    "keyword_rules": {
      "active_count": 4,
      "health": "green"
    }
  },
  "meta": {
    "request_id": "req_5c91d204",
    "timestamp": "2026-10-23T10:02:00.000Z"
  }
}
```

1. `overall_status` is `red`, so find the blocking pillar: `kyc.health` is
   `green`, `ten_dlc.health` is `red`.
2. `brand_status: suspended` with a `brand_id` means a previously registered
   brand was suspended. `campaign_count: 1` tells you one campaign hangs under
   it; that campaign's US long-code traffic is the traffic at risk.
3. Open
   [10DLC brand & campaign profiles](https://docs.orbit.devotel.io/compliance/10dlc-brand-campaign-profiles.md),
   read the registry reason on the brand record, and correct what it flags. The
   registration and resubmission path is
   [10DLC registration](https://docs.orbit.devotel.io/guides/10dlc-registration.md).
4. After resubmission the brand moves to a pending state: the pillar reads
   `amber` and the overall status follows to `amber`. When the registry
   approves, both read `green`. The console refreshes the summary every couple
   of minutes, so allow one refresh after a change before you re-read the tile.

***

## Tenant-owned, read-only, safely degraded

* **Tenant-owned.** Every pillar reports a setting your organization configures;
  nothing is set on your behalf, and the switchable controls default off. The
  single platform-applied guard, the US federal TCPA voice dialing window, is not
  part of this summary; it lives with the voice controls and is covered in the
  [hub FAQ](https://docs.orbit.devotel.io/compliance/console-compliance-hub-faq.md).
* **Read-only.** The endpoint never blocks, queues, or alters a send. A red
  pillar is a report, not a gate.
* **Safely degraded.** If part of your workspace is still provisioning, the
  summary still responds: a pillar whose data is not ready yet reads as not
  configured (count 0, health `none`) instead of erroring the whole response.

***

## Related

* [Compliance Health Scores](https://docs.orbit.devotel.io/compliance/compliance-health.md) — the traffic score
  this summary is not.
* [Compliance hub console FAQ](https://docs.orbit.devotel.io/compliance/console-compliance-hub-faq.md) — hub
  panels, role gates, and the messaging health panel.
* [Settings endpoint reference](https://docs.orbit.devotel.io/api-reference/endpoints/settings.md) — request and
  response reference for `GET /api/v1/settings/compliance-health`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.