{
  "id": "CON-013",
  "slug": "con-013",
  "title": "Subscriber attributes must agree with the message bodies supplied",
  "statement": "A campaign must not declare a subscriber attribute that its supplied opt-in, STOP and HELP message bodies contradict.",
  "rationale": "The attributes and the reply bodies are two accounts of the same programme, and a reviewer reads them together: declaring that you honour opt-outs while supplying no STOP reply says the declaration was ticked rather than meant. The contradiction usually comes from an integration that sets the flags from a template and leaves the bodies to a human who never filled them in, so the submitter believes both halves are done.",
  "layer": "CONSENT_FLOW",
  "layerSlug": "consent-flow",
  "object": "campaign attributes vs optin/optout/help message bodies",
  "severity": "BLOCKING",
  "detectability": [
    "DETERMINISTIC"
  ],
  "failureClass": "RETRY_FIELD",
  "authorities": [
    "AWS",
    "Twilio"
  ],
  "codes": [
    {
      "provider": "Twilio",
      "code": "30887",
      "remediable": true,
      "generation": "gen2"
    }
  ],
  "applicabilityText": "Applies to every 10DLC registration.",
  "universal": true,
  "remediation": "Write the reply body for every attribute you declared true, and turn the attribute on for every body you supplied. Done when each of the three pairs agrees: opt-out declared and a STOP confirmation written, HELP declared and a HELP reply written.",
  "example": "subscriberOptout: true · optout_message: \"Acme Coffee Rewards: you are unsubscribed and will receive no further messages. Reply HELP for help.\"",
  "pitfalls": [
    "Supplying a STOP or HELP reply while leaving the matching attribute false is the same mismatch in the other direction, and providers reject it just as readily."
  ],
  "notes": "Judges only the pairs where both facts are known: an attribute that has not been declared yet leaves this UNCLEAR rather than failing, because the missing declaration is already CON-010's finding and reporting it twice tells the user nothing new. The opt-in confirmation body is deliberately not required by the true-attribute direction — only keyword programmes must have one, which is CMP-096.",
  "phase": "approval",
  "automated": true,
  "url": "https://ekas.io/rules/10dlc/consent-flow/con-013/",
  "markdown": "https://ekas.io/rules/10dlc/consent-flow/con-013.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
