{
  "id": "OPS-098",
  "slug": "ops-098",
  "title": "There is a per-recipient daily ceiling even without a state rule",
  "statement": "No more than ten messages should reach one recipient in any 24-hour period without two-way engagement or explicit high-frequency consent.",
  "rationale": "Providers apply this as an acceptable-use limit regardless of state law, and crossing it reads as a malfunction rather than a campaign — which is usually what it is. The classic cause is a loop: an automation that fires on a status change, and a status that flaps.",
  "layer": "OPERATIONAL",
  "layerSlug": "operational",
  "object": "per-recipient 24-hour send count",
  "severity": "HIGH",
  "detectability": [
    "UNDETECTABLE_PRE_SUBMISSION"
  ],
  "failureClass": "TERMINAL_EXTERNAL",
  "authorities": [
    "Telnyx"
  ],
  "applicabilityText": "Applies to every 10DLC registration.",
  "universal": true,
  "remediation": "Cap per-recipient daily volume across all automations and alarm when the cap is hit, since hitting it usually means something is looping. Done when a runaway automation is stopped by the cap rather than by a complaint.",
  "example": "Per-recipient limit 10 per 24h across every campaign; breach pauses the automation and pages the owner.",
  "notes": "A counter across the whole account. What the user has to check is that the cap spans campaigns rather than sitting inside one — per-campaign caps are the common implementation and they do not catch the loop.",
  "phase": "post",
  "automated": false,
  "attestation": {
    "question": "Does your per-recipient daily cap span every campaign in the account, or sit inside one?",
    "howToCheck": [
      "Check where the counter lives. Per-campaign caps are the common implementation and they do not catch a loop.",
      "Cap per-recipient daily volume across all automations at ten, and alarm when it is hit — hitting it usually means something is looping."
    ],
    "failureLooksLike": "An automation fires on a status change and the status flaps. Crossing the ceiling reads as a malfunction rather than a campaign, which is usually exactly what it is."
  },
  "url": "https://ekas.io/rules/10dlc/operational/ops-098/",
  "markdown": "https://ekas.io/rules/10dlc/operational/ops-098.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
