brand_update

Edit a brand's context, guarded by base_revision so a concurrent change can't be silently overwritten.

Updates a Brand. Only the fields you pass are changed, and the whole call is guarded by base_revision — the revision you last read via brand_get.

Input

Field Type Required Description
brand_name string yes The current slug identifying which brand to update.
base_revision number yes The revision you last read. Guards concurrent edits.
name string no New display name.
description string no New one-line summary.
identity string | null no New positioning; null clears the section.
voice string | null no New tone of voice; null clears the section.
guidelines string | null no New do’s and don’ts; null clears the section.
messaging string | null no New key messages; null clears the section.
logo_document_id string | null no Nominate a document as the logo; null clears it.
slug string no New handle — a deliberate rename.

Omitting a section is not the same as clearing it

This is the distinction worth internalising:

  • Omit a section and it is left exactly as it was.
  • Pass null and it is erased.

Without that split, editing only the voice would silently wipe the identity — so “I didn’t mention it” and “delete it” have to be different signals.

Output

The updated brand, with revision incremented.

Example

“Acme’s guidelines should say we never make medical claims.”

brand_update({
  brand_name: 'acme-running',
  base_revision: 3,
  guidelines: 'Never make medical or performance-injury claims.',
});
// → { slug: 'acme-running', revision: 4, … }  — voice and identity untouched

If the revision doesn't match

The call is rejected and nothing changes — someone edited the brand since you read it. Re-fetch with brand_get and retry with the new revision, so you’re editing what’s actually there.

Requires the brand:write scope.