{
  "id": "CON-048",
  "slug": "con-048",
  "title": "Every page that collects a number needs consent language",
  "statement": "SMS opt-in language and a consent control must appear on every page of the site that collects a mobile number, not only the page named in the registration.",
  "rationale": "Numbers reach the sending list from every form on the site — contact, booking, quote, donation, callback — and the ones collected on unlabelled forms carry no consent at all. Reviewers crawl for phone inputs rather than trusting the registered URL, which makes this the single highest-yield finding in the corpus, and the one brands are most surprised by: they fixed the signup page and never thought of the contact form.",
  "layer": "CONSENT_FLOW",
  "layerSlug": "consent-flow",
  "object": "all pages containing a phone input",
  "severity": "BLOCKING",
  "detectability": [
    "CRAWL"
  ],
  "failureClass": "TERMINAL_WEBSITE",
  "authorities": [
    "Telnyx",
    "Commio",
    "Bird"
  ],
  "codes": [
    {
      "provider": "Telnyx",
      "code": "803",
      "remediable": true
    }
  ],
  "applicabilityText": "Applies to every 10DLC registration.",
  "universal": true,
  "remediation": "Inventory every form on the site that takes a phone number, and add the consent control and disclosure to each one — or remove the phone field from the forms that do not need it, which is usually the cheaper fix. Done when a site-wide search for phone inputs returns nothing without a consent block beside it.",
  "pitfalls": [
    "Forms embedded from a booking or scheduling vendor are the ones most often missed, because nobody thinks of them as pages on the site."
  ],
  "notes": "Needs a whole-site crawl for phone inputs. The current crawler fetches the registered page only, so this rule will return UNCLEAR in production until that lands — recorded here rather than omitted, because the requirement is real and the gap is the crawler's.",
  "phase": "approval",
  "automated": true,
  "url": "https://ekas.io/rules/10dlc/consent-flow/con-048/",
  "markdown": "https://ekas.io/rules/10dlc/consent-flow/con-048.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
