{
  "id": "MSG-SHAFT-ALCOHOL",
  "slug": "msg-shaft-alcohol",
  "title": "Alcohol content requires robust age gating",
  "statement": "Campaign content must not promote alcohol sales or promotion.",
  "rationale": "The A in SHAFT, and the letter that genuinely has a path. Alcohol sits in a contested band: Bandwidth, Bird and Telnyx accept it behind a date-of-birth age gate, Twilio kills the rejected campaign but takes a new one once the gate exists. Because the strictest authority treats the submitted campaign as terminal we surface it as blocking, but the fix is real, and telling an operator otherwise costs them a legitimate programme.",
  "layer": "MESSAGE_CONTENT",
  "layerSlug": "message-content",
  "object": "campaign.description + campaign.sample[] + campaign.message_flow",
  "severity": "BLOCKING",
  "detectability": [
    "AI_FORM"
  ],
  "failureClass": "TERMINAL_WEBSITE",
  "authorities": [
    "Twilio",
    "TCR",
    "T-Mobile",
    "AT&T",
    "CTIA"
  ],
  "codes": [
    {
      "provider": "Twilio",
      "code": "30955",
      "remediable": false,
      "generation": "gen2"
    },
    {
      "provider": "Twilio",
      "code": "30956",
      "remediable": false,
      "generation": "gen2"
    },
    {
      "provider": "Bandwidth",
      "code": "706",
      "remediable": true
    },
    {
      "provider": "Telnyx",
      "code": "706",
      "remediable": true
    },
    {
      "provider": "Bird",
      "code": "706",
      "remediable": true
    }
  ],
  "applicabilityText": "Applies to every 10DLC registration.",
  "universal": true,
  "remediation": "Build a 21+ age gate that collects a full date of birth — day, month and year typed in, not a yes/no prompt and not a tick-box — on the opt-in flow and on every website a message links to, then set the age-gated attribute on the campaign. Done when a visitor who enters an under-21 date is refused and cannot proceed by going back. Expect to file a NEW campaign rather than edit this one: Twilio treats the rejected campaign as spent even though it advises building exactly this gate.",
  "pitfalls": [
    "A gate that only appears on the home page does not settle it — the requirement runs to every linked destination, and reviewers test the deep link from the sample message rather than the site root.",
    "Age gating answers who may see the offer and nothing about what the offer says: copy that sells drinking to excess is judged separately by MSG-177 and the gate does not touch it."
  ],
  "notes": "Providers genuinely diverge, and the divergence is in the remediability rather than the prohibition: Twilio 30955/30956 are non-resubmittable for the rejected campaign while Bandwidth DCA2 706, Telnyx 706 and Bird 706 all accept a resubmission once a DOB gate exists, and Twilio toll-free 30456 is conditional on 21+ with full date-of-birth collection. Strictest reading kept for the verdict, the workable path kept in the remediation.",
  "catalogIds": [
    "MSG-178"
  ],
  "phase": "approval",
  "automated": true,
  "url": "https://ekas.io/rules/10dlc/message-content/msg-shaft-alcohol/",
  "markdown": "https://ekas.io/rules/10dlc/message-content/msg-shaft-alcohol.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
