{
  "id": "OPS-075",
  "slug": "ops-075",
  "title": "Opt-out instructions must recur, not just appear at opt-in",
  "statement": "A recurring programme must carry opt-out instructions at opt-in and at regular intervals thereafter — at least monthly.",
  "rationale": "Subscribers forget what they joined and how to leave, and the reply that stops the programme is only obvious while the sign-up is recent. A programme that stops repeating the instruction converts would-be unsubscribers into complainants, because reporting the message as spam becomes the easiest available action.",
  "layer": "OPERATIONAL",
  "layerSlug": "operational",
  "object": "outbound message cadence",
  "severity": "HIGH",
  "detectability": [
    "UNDETECTABLE_PRE_SUBMISSION"
  ],
  "failureClass": "TERMINAL_EXTERNAL",
  "authorities": [
    "T-Mobile",
    "CTIA"
  ],
  "applicabilityText": "Applies to every 10DLC registration.",
  "universal": true,
  "remediation": "Carry \"Reply STOP to opt out\" in every message where the length allows, and at minimum in one message a month. Done when no subscriber goes a calendar month without being told how to leave.",
  "example": "Acme Coffee: 20% off beans this weekend. Shop acmecoffee.com/sale. Reply STOP to opt out.",
  "notes": "A cadence across live traffic. What the user has to check is the templates that dropped the line for length — those are the ones that go months without it, and they are usually the highest-volume ones.",
  "phase": "post",
  "automated": false,
  "attestation": {
    "question": "Does any subscriber go a calendar month without being told how to leave?",
    "howToCheck": [
      "Audit the templates that dropped the opt-out line for length — those are the ones that go months without it, and they are usually the highest-volume ones.",
      "Carry \"Reply STOP to opt out\" wherever the length allows, and at minimum in one message a month."
    ],
    "failureLooksLike": "Subscribers forget what they joined and how to leave, so reporting the message as spam becomes the easiest available action."
  },
  "url": "https://ekas.io/rules/10dlc/operational/ops-075/",
  "markdown": "https://ekas.io/rules/10dlc/operational/ops-075.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
