{
  "id": "MSG-120",
  "slug": "msg-120",
  "title": "Declared attributes must match sample content generally",
  "statement": "Every declared campaign attribute must be consistent with what the sample messages actually contain.",
  "rationale": "Attributes are self-declared and drive filtering, so a mismatch either over-restricts your own traffic or under-declares something carriers screen for. The link and phone pairs are checked individually; this catches the rest as a set.",
  "layer": "MESSAGE_CONTENT",
  "layerSlug": "message-content",
  "object": "campaign attributes + campaign.sample[]",
  "severity": "HIGH",
  "detectability": [
    "AI_FORM"
  ],
  "failureClass": "RETRY_FIELD",
  "authorities": [
    "TCR",
    "Twilio",
    "AWS"
  ],
  "applicabilityText": "Applies to every 10DLC registration.",
  "universal": true,
  "remediation": "Walk each attribute against the samples and correct whichever side is wrong.",
  "example": "Samples mention financing → direct lending: true.",
  "phase": "approval",
  "automated": true,
  "url": "https://ekas.io/rules/10dlc/message-content/msg-120/",
  "markdown": "https://ekas.io/rules/10dlc/message-content/msg-120.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
