{
  "id": "WEB-070",
  "slug": "web-070",
  "title": "The call to action described in the registration must exist on the site",
  "statement": "Where consent is collected on the site, the call to action the registration describes must be findable on the crawled site.",
  "rationale": "A described opt-in that cannot be found reads to a reviewer as consent that does not exist, which is the strongest possible reason to refuse a campaign — and it is usually true by accident: the page moved in a redesign, the form sits behind an interaction the crawler never triggers, or the description was written from the plan rather than from the site. The consumer-side stake is the same one: an opt-in nobody can locate is one nobody can audit.",
  "layer": "WEBSITE",
  "layerSlug": "website",
  "object": "live site vs campaign.message_flow",
  "severity": "BLOCKING",
  "detectability": [
    "CRAWL"
  ],
  "failureClass": "TERMINAL_WEBSITE",
  "authorities": [
    "Twilio",
    "Zoom"
  ],
  "codes": [
    {
      "provider": "Twilio",
      "code": "30891",
      "remediable": true,
      "generation": "gen1"
    }
  ],
  "applicability": {
    "consentMethods": [
      "web_form",
      "checkout",
      "qr"
    ]
  },
  "applicabilityText": "Applies when consent was collected by web form, checkout and QR code.",
  "universal": false,
  "remediation": "Give the exact URL of the page holding the consent control in the message flow, and confirm the control is present in the page source rather than injected after an interaction. Done when opening that URL in a private window shows the opt-in without clicking anything.",
  "pitfalls": [
    "A consent box that only appears after a product is added to the cart is invisible to a crawler that never adds one. Supply a screenshot of the checkout step as well, or the reviewer sees a page with no opt-in on it."
  ],
  "notes": "The twin of WEB-069, which audits the described and live opt-ins as two passes. This rule is the narrower question underneath it: does the described surface exist at all.",
  "phase": "approval",
  "automated": true,
  "url": "https://ekas.io/rules/10dlc/website/web-070/",
  "markdown": "https://ekas.io/rules/10dlc/website/web-070.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
