{
  "id": "OPS-027",
  "slug": "ops-027",
  "title": "Opt-out keyword handling must be declared, not assumed",
  "statement": "The campaign must declare an opt-out keyword set, and that set must be the one the sending platform is configured to honour.",
  "rationale": "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.",
  "layer": "OPERATIONAL",
  "layerSlug": "operational",
  "object": "campaign.optout_keywords",
  "severity": "BLOCKING",
  "detectability": [
    "DETERMINISTIC"
  ],
  "failureClass": "RETRY_FIELD",
  "authorities": [
    "FCC",
    "CTIA",
    "TCR"
  ],
  "applicabilityText": "Applies to every 10DLC registration.",
  "universal": true,
  "remediation": "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": "STOP, QUIT, END, REVOKE, OPTOUT, CANCEL, UNSUBSCRIBE",
  "notes": "Registration-side twin of the runtime obligation. Verifies the declaration, never the behaviour.",
  "phase": "approval",
  "automated": true,
  "url": "https://ekas.io/rules/10dlc/operational/ops-027/",
  "markdown": "https://ekas.io/rules/10dlc/operational/ops-027.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
