{
  "id": "CON-KEYWORD-CTA",
  "slug": "con-keyword-cta",
  "title": "Keyword opt-in requires the advertised call to action",
  "statement": "A text-to-join campaign must supply the advertisement wherever the keyword is promoted, carrying the full disclosure.",
  "rationale": "With text-to-join, the advertisement is the disclosure — by the time the consumer texts your keyword the decision is already made. Whatever the poster, page or ad said at that moment is the entire basis of their consent, so that is the artifact that has to be compliant.",
  "layer": "CONSENT_FLOW",
  "layerSlug": "consent-flow",
  "object": "campaign.message_flow + consent artifact",
  "severity": "BLOCKING",
  "detectability": [
    "AI_FORM"
  ],
  "failureClass": "TERMINAL_ARTIFACT",
  "artifact": "keyword_cta_copy",
  "authorities": [
    "CTIA",
    "TCR",
    "Twilio"
  ],
  "applicability": {
    "consentMethods": [
      "keyword"
    ]
  },
  "applicabilityText": "Applies when consent was collected by text-to-join keyword.",
  "universal": false,
  "remediation": "Supply a capture of the advertised CTA — the web page, sign, or print ad — showing the keyword, the number, and the disclosure elements together.",
  "example": "Text JOIN to 55512 to get offers from Acme Coffee. Msg frequency varies. Msg & data rates may apply. Reply STOP to cancel, HELP for help. Terms: acmecoffee.com/terms · Privacy: acmecoffee.com/privacy",
  "catalogIds": [
    "CMP-098",
    "CMP-099"
  ],
  "phase": "approval",
  "automated": true,
  "url": "https://ekas.io/rules/10dlc/consent-flow/con-keyword-cta/",
  "markdown": "https://ekas.io/rules/10dlc/consent-flow/con-keyword-cta.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
