{
  "id": "OPS-035",
  "slug": "ops-035",
  "title": "The mandatory keywords must work over MMS too",
  "statement": "STOP, HELP and the rest of the mandatory keywords must be processed identically whether they arrive as SMS or MMS.",
  "rationale": "A consumer replying to a picture message often replies as MMS without knowing it, and many platforms route the two protocols through different inbound handlers — one of which was built for keywords and one of which was built for media. The opt-out then works or does not depending on what the consumer was replying to, which is invisible to everybody until the complaint.",
  "layer": "OPERATIONAL",
  "layerSlug": "operational",
  "object": "inbound handler, per protocol",
  "severity": "HIGH",
  "detectability": [
    "UNDETECTABLE_PRE_SUBMISSION"
  ],
  "failureClass": "TERMINAL_EXTERNAL",
  "authorities": [
    "CTIA"
  ],
  "applicability": {
    "attributes": {
      "mmsEnabled": true
    }
  },
  "applicabilityText": "Applies when `mmsEnabled` is true.",
  "universal": false,
  "remediation": "Point both inbound paths at the same keyword handler rather than duplicating the logic, and test an opt-out sent as a reply to an MMS. Done when the same reply suppresses whether or not it carries an attachment.",
  "example": "Reply STOP to an MMS promotion → same handler, same suppression, same confirmation as an SMS reply.",
  "notes": "Two code paths, neither of them visible here. The user has to send the test themselves: reply STOP to one of their own MMS sends and confirm the number is suppressed.",
  "phase": "post",
  "automated": false,
  "attestation": {
    "question": "Does replying STOP to one of your own MMS sends suppress the number?",
    "howToCheck": [
      "Send yourself an MMS from the programme and reply STOP to it.",
      "Confirm the same reply works with and without an attachment — many platforms route SMS and MMS through different inbound handlers."
    ],
    "failureLooksLike": "The opt-out works or does not depending on what the consumer was replying to. That is invisible to everybody until the complaint."
  },
  "url": "https://ekas.io/rules/10dlc/operational/ops-035/",
  "markdown": "https://ekas.io/rules/10dlc/operational/ops-035.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
