{
  "id": "OPS-105",
  "slug": "ops-105",
  "title": "The internal do-not-call list is checked on every send",
  "statement": "Every send must be scrubbed against the brand's own company-specific do-not-call list.",
  "rationale": "The internal list holds the people who told this brand directly to stop, which makes messaging them the most obviously indefensible version of the failure — and unlike the federal registry there is no exemption, no relationship carve-out and no argument available. It gets skipped because the internal list often lives in the CRM rather than in the sending platform, so the send pipeline never consults it.",
  "layer": "OPERATIONAL",
  "layerSlug": "operational",
  "object": "recipient list against the internal do-not-call list",
  "severity": "BLOCKING",
  "detectability": [
    "UNDETECTABLE_PRE_SUBMISSION"
  ],
  "failureClass": "TERMINAL_EXTERNAL",
  "authorities": [
    "FCC"
  ],
  "applicabilityText": "Applies to every 10DLC registration.",
  "universal": true,
  "remediation": "Put the internal list where the send pipeline can read it, and check it at send time on every campaign — not only on solicitations. Done when a number on the internal list cannot be reached by any campaign the brand runs.",
  "notes": "A list inside the brand, consulted by a pipeline we cannot see. What the user has to verify is that the internal list and the SMS suppression list are the same list, or are synchronised both ways — where they are separate, one of them is always stale. OPS-044 covers the brand-wide scope this depends on.",
  "phase": "post",
  "automated": false,
  "attestation": {
    "question": "Are the internal do-not-call list and the SMS suppression list the same list, or synchronised both ways?",
    "howToCheck": [
      "Find where the internal list lives. It is usually the CRM, which is why the send pipeline never consults it.",
      "Put it where the pipeline can read it and check it at send time on every campaign, not only on solicitations.",
      "Where the two lists are separate, establish which one is stale — one of them always is."
    ],
    "failureLooksLike": "These are the people who told this brand directly to stop. There is no exemption, no relationship carve-out and no argument available."
  },
  "url": "https://ekas.io/rules/10dlc/operational/ops-105/",
  "markdown": "https://ekas.io/rules/10dlc/operational/ops-105.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
