{
  "id": "OPS-026",
  "slug": "ops-026",
  "title": "The universal opt-out keyword set must be declared",
  "statement": "STOP, END, CANCEL, UNSUBSCRIBE and QUIT must all appear in the declared opt-out keyword set.",
  "rationale": "This five-word set is honoured at handset and carrier level regardless of what you configure, so a consumer using any of them has effectively opted out whether your platform noticed or not. Declaring them aligns your suppression list with what has already happened.",
  "layer": "OPERATIONAL",
  "layerSlug": "operational",
  "object": "campaign.optout_keywords",
  "severity": "BLOCKING",
  "detectability": [
    "DETERMINISTIC"
  ],
  "failureClass": "RETRY_FIELD",
  "authorities": [
    "CTIA",
    "FCC",
    "TCR"
  ],
  "applicabilityText": "Applies to every 10DLC registration.",
  "universal": true,
  "remediation": "Declare at least the universal five, and preferably the full seven-word FCC per-se set including REVOKE and OPTOUT.",
  "example": "STOP, QUIT, END, REVOKE, OPTOUT, CANCEL, UNSUBSCRIBE",
  "notes": "Discharges catalog CMP-184 (\"optoutKeywords is populated and retains STOP\") together with OPS-027, which owns the empty-list case. The split is deliberate: this rule returns UNCLEAR rather than FAIL on an empty list so that a campaign with no keywords yet is reported once, by OPS-027, instead of twice.",
  "catalogIds": [
    "CMP-184"
  ],
  "phase": "approval",
  "automated": true,
  "url": "https://ekas.io/rules/10dlc/operational/ops-026/",
  "markdown": "https://ekas.io/rules/10dlc/operational/ops-026.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
