# OPS-027 — Opt-out keyword handling must be declared, not assumed

> The campaign must declare an opt-out keyword set, and that set must be the one the sending platform is configured to honour.

- **Rule ID:** OPS-027
- **Layer:** Operational (`OPERATIONAL`)
- **Checks:** `campaign.optout_keywords`
- **Severity:** BLOCKING — Breaking this rule gets the submission rejected outright.
- **When it bites:** Gates approval — get this wrong and registration is refused
- **How it is detected:** Deterministic (settled in code from the submitted values)
- **Fix type:** Fix the field — a better value in the form clears it
- **Required by:** FCC, CTIA, TCR
- **Applies:** Applies to every 10DLC registration.
- **Canonical URL:** https://ekas.io/rules/10dlc/operational/ops-027/

## Why this rule exists

We cannot observe runtime STOP handling before a campaign exists, but we can observe whether anything was declared at all. An empty or single-keyword declaration is the reliable predictor of a platform that honours only STOP, which is narrower than the law now requires.

## How to fix it

Declare the full keyword set your platform honours, then verify in the platform that each one actually triggers an opt-out. The declaration and the configuration must match.

## Example of a compliant value

```text
STOP, QUIT, END, REVOKE, OPTOUT, CANCEL, UNSUBSCRIBE
```

## Notes

Registration-side twin of the runtime obligation. Verifies the declaration, never the behaviour.
