{
  "id": "OPS-031",
  "slug": "ops-031",
  "title": "A plainly-worded opt-out counts even with no keyword in it",
  "statement": "Revocations phrased in ordinary language — \"take me off your list\", \"please opt me out\" — must be honoured even though they contain no declared keyword.",
  "rationale": "The federal rule is that a revocation is effective if a reasonable person would understand it as one, not if it matches a word list. So a consumer who writes \"I never signed up for this, please remove me\" has revoked, and a keyword-only handler files the message as an ordinary reply and keeps sending. It is the most common route to a complaint that the brand genuinely did not see coming, because the operator can point at a suppression list that never received anything.",
  "layer": "OPERATIONAL",
  "layerSlug": "operational",
  "object": "inbound message intent classification",
  "severity": "BLOCKING",
  "detectability": [
    "UNDETECTABLE_PRE_SUBMISSION"
  ],
  "failureClass": "TERMINAL_EXTERNAL",
  "authorities": [
    "FCC",
    "CTIA",
    "T-Mobile",
    "AT&T",
    "Bandwidth"
  ],
  "applicabilityText": "Applies to every 10DLC registration.",
  "universal": true,
  "remediation": "Route every inbound message that did not match a keyword through an intent check — a classifier, or a human queue if the volume is small — and suppress on anything a reasonable person would read as \"stop\". Done when a message with no keyword in it can still remove somebody from the list without an agent deciding to be helpful.",
  "example": "Inbound \"hi, I never signed up for these, can you take me off?\" → no keyword match → intent = revocation → suppressed, and the raw text kept on the opt-out record.",
  "notes": "Undecidable before traffic exists and not settleable by configuration alone. What the user has to establish is who or what reads the non-keyword inbound messages, and how fast — an unread inbox is the same as no handler. OPS-056 covers keeping the raw text, which is what later shows the message was understood.",
  "phase": "post",
  "automated": false,
  "attestation": {
    "question": "Who or what reads the inbound messages that matched no keyword, and how quickly?",
    "howToCheck": [
      "Name the classifier or the human queue. An unread inbox is the same as no handler.",
      "Test it: send \"take me off your list\" with no keyword in it and confirm the number is suppressed without an agent deciding to be helpful."
    ],
    "failureLooksLike": "\"I never signed up for this, please remove me\" is filed as an ordinary reply. The operator can point at a suppression list that never received anything, and the complaint is the first anyone hears of it."
  },
  "url": "https://ekas.io/rules/10dlc/operational/ops-031/",
  "markdown": "https://ekas.io/rules/10dlc/operational/ops-031.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
