{
  "id": "WEB-107",
  "slug": "web-107",
  "title": "Age-restricted content on the site must sit behind a working age gate",
  "statement": "Where the site or the campaign carries age-restricted content, the site must present a functioning age gate in front of it.",
  "rationale": "The gate is what keeps a minor from reaching alcohol, tobacco, firearms or adult material through a link in a text message, and carriers charge per-message violation fees rather than merely rejecting, so the cost of getting it wrong keeps accruing. Businesses that gate their checkout often leave the marketing pages open, which is the version of this a compliance-minded operator is most likely to trip.",
  "layer": "WEBSITE",
  "layerSlug": "website",
  "object": "age-gate interstitial on the site",
  "severity": "BLOCKING",
  "detectability": [
    "CRAWL",
    "HUMAN"
  ],
  "failureClass": "TERMINAL_WEBSITE",
  "authorities": [
    "T-Mobile",
    "Twilio",
    "AWS",
    "CTIA"
  ],
  "codes": [
    {
      "provider": "Twilio",
      "code": "30956",
      "remediable": true,
      "generation": "gen2"
    },
    {
      "provider": "T-Mobile",
      "code": "706",
      "remediable": true
    }
  ],
  "applicabilityText": "Applies to every 10DLC registration.",
  "universal": true,
  "remediation": "Put a date-of-birth gate in front of every page carrying restricted content, enforced server-side so a direct link cannot skip it. Done when opening a product URL in a private window shows the gate before the product.",
  "pitfalls": [
    "Gating the checkout and leaving the catalog open fails: the reviewer opens a product page directly and never sees the gate."
  ],
  "notes": "Absorbs MSG-176, which states the requirement from the message-copy side, and BRD-280 from the brand-eligibility side. The gate's form is WEB-108 (a full date of birth), its position WEB-109, its threshold WEB-112, and whether it survives a determined visitor WEB-110 — that last one is why HUMAN is declared alongside CRAWL here: a crawl can see a gate and cannot tell whether it holds. The user has to try to bypass their own gate, by opening a restricted URL directly in a fresh browser, and confirm they are stopped.",
  "catalogIds": [
    "MSG-176",
    "BRD-280"
  ],
  "phase": "approval",
  "automated": true,
  "attestation": {
    "question": "Opening a restricted product URL directly, in a fresh private window, are you stopped by the gate before you see the product?",
    "howToCheck": [
      "Copy a deep link to a restricted page — not the homepage — and open it in a private window.",
      "Confirm the gate appears before any restricted content is rendered.",
      "Repeat for the marketing and catalog pages, not just the checkout."
    ],
    "failureLooksLike": "The checkout is gated and the catalog is open. The reviewer opens a product page directly, never sees the gate, and carriers charge per-message violation fees rather than merely rejecting."
  },
  "url": "https://ekas.io/rules/10dlc/website/web-107/",
  "markdown": "https://ekas.io/rules/10dlc/website/web-107.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
