{
  "id": "BRD-189",
  "slug": "brd-189",
  "title": "A failed brand can be updated by API and not in the console",
  "statement": "Remediating a failed brand differs by interface: the API permits an update in place, while the console requires delete and recreate.",
  "rationale": "The same brand, the same fix, and two different procedures depending on where you are standing — so a team that reads the API documentation and works in the console concludes the update is broken. Deleting and recreating is also the more expensive of the two, because a new brand starts its verification from the beginning and takes its campaigns with it.",
  "layer": "BRAND",
  "layerSlug": "brand",
  "object": "the remediation path",
  "severity": "BLOCKING",
  "detectability": [
    "DETERMINISTIC"
  ],
  "failureClass": "TERMINAL_EXTERNAL",
  "authorities": [
    "Twilio"
  ],
  "codes": [
    {
      "provider": "Twilio",
      "code": "30793",
      "remediable": true
    }
  ],
  "applicabilityText": "Applies to every 10DLC registration.",
  "universal": true,
  "remediation": "Fix a failed brand through the API, where an update in place is accepted, rather than deleting and recreating it in the console. Note that the update is accepted only while the brand is in a failed state — a brand that has not failed cannot be updated this way at all.",
  "notes": "Absorbs OPS-345, which states which brand states accept an update at all. Conditional on the interface rather than on the provider, so it is not `providers`-tagged. What the user has to know is that the console path is not the only one available: an API update avoids the rebuild entirely.",
  "catalogIds": [
    "OPS-345"
  ],
  "phase": "approval",
  "automated": true,
  "attestation": {
    "question": "If this brand has failed, are you fixing it through the API rather than deleting and recreating it in the console?",
    "howToCheck": [
      "Use the API update in place — the console path requires delete and recreate, which restarts verification and takes the campaigns with it.",
      "Note the update is accepted only while the brand is in a failed state; a brand that has not failed cannot be updated this way at all."
    ],
    "failureLooksLike": "A team reads the API documentation, works in the console, and concludes the update is broken — then rebuilds a brand that could have been edited."
  },
  "url": "https://ekas.io/rules/10dlc/brand/brd-189/",
  "markdown": "https://ekas.io/rules/10dlc/brand/brd-189.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
