{
  "id": "CMP-118",
  "slug": "cmp-118",
  "title": "A pop-up opt-in must be declared as one",
  "statement": "Where the opt-in is presented in a pop-up or modal, the message flow must say so.",
  "rationale": "A reviewer opening the page sees no consent control, because the modal fires on a timer, on exit intent, or only for new visitors — so a perfectly compliant pop-up opt-in looks like a page with no opt-in on it. Saying \"the opt-in appears in a modal after a few seconds on first visit\" is the difference between an approval and a rejection for a form that was there the whole time.",
  "layer": "CAMPAIGN",
  "layerSlug": "campaign",
  "object": "campaign.message_flow",
  "severity": "HIGH",
  "detectability": [
    "AI_FORM"
  ],
  "failureClass": "RETRY_FIELD",
  "authorities": [
    "Telnyx"
  ],
  "applicability": {
    "consentMethods": [
      "web_form",
      "checkout"
    ]
  },
  "applicabilityText": "Applies when consent was collected by web form and checkout.",
  "universal": false,
  "remediation": "State that the opt-in is a pop-up, what triggers it, and attach a screenshot of it open. Done when a reviewer who sees no form on the page has already been told why and has an image of it.",
  "example": "The opt-in appears in a pop-up shown to first-time visitors after 5 seconds on https://acmecoffee.com; screenshot attached: https://cdn.acmecoffee.com/compliance/popup-optin.png",
  "notes": "Tagged to the web methods because a modal is a web presentation; a spoken or paper opt-in cannot have one. The rule asks only that the presentation be declared — whether a pop-up is an acceptable surface at all is CON-DISC-NO-POPUP, which grades the disclosure inside it.",
  "catalogIds": [
    "CON-050"
  ],
  "phase": "approval",
  "automated": true,
  "url": "https://ekas.io/rules/10dlc/campaign/cmp-118/",
  "markdown": "https://ekas.io/rules/10dlc/campaign/cmp-118.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
