{
  "id": "CMP-097",
  "slug": "cmp-097",
  "title": "A keyword opt-in must give the keyword and the number to text it to",
  "statement": "A keyword opt-in must state the exact keyword and the exact destination number in the message flow.",
  "rationale": "A reviewer verifies a keyword programme by texting the keyword to the number and seeing what comes back, and a flow missing either half makes that impossible. Both halves are usually known to everyone involved and written down nowhere, because the signage carries them and the form does not ask for them in so many words.",
  "layer": "CAMPAIGN",
  "layerSlug": "campaign",
  "object": "campaign.message_flow",
  "severity": "BLOCKING",
  "detectability": [
    "AI_FORM"
  ],
  "failureClass": "RETRY_FIELD",
  "authorities": [
    "Aerialink",
    "Telnyx"
  ],
  "codes": [
    {
      "provider": "Twilio",
      "code": "30909",
      "remediable": true
    }
  ],
  "applicability": {
    "consentMethods": [
      "keyword"
    ]
  },
  "applicabilityText": "Applies when consent was collected by text-to-join keyword.",
  "universal": false,
  "remediation": "Write the keyword and the destination number into the flow exactly as they appear on your signage, including the short code or long code digits. Done when someone holding only the flow text could join the programme from their own phone.",
  "example": "Supporters text SHELTER to 55512, as printed on the shelter posters.",
  "pitfalls": [
    "The keyword in the flow, the keyword on the signage and the keyword configured on the campaign have to be the same word — JOIN and JOINUS are different programmes to a reviewer comparing them."
  ],
  "phase": "approval",
  "automated": true,
  "url": "https://ekas.io/rules/10dlc/campaign/cmp-097/",
  "markdown": "https://ekas.io/rules/10dlc/campaign/cmp-097.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
