Skip to content

persona_update

Edit a persona's sections, age range or handle, guarded against overwriting someone else's concurrent change.

On this page

Updates a Persona. Only the fields you pass are changed, and the write is guarded by base_revision — read it with persona_get first.

Input

Field Type Required Description
brand_name string yes The slug of the brand that owns the persona.
persona_name string yes The current persona slug.
base_revision integer yes The revision you last read. Guards against overwriting a concurrent edit.
name string no New display name.
description string no New one-line summary.
profile / motivations / frictions / language string | null no New section text; null clears it.
age_min / age_max integer | null no New age bound; null clears it.
slug string no New handle (a deliberate rename).

Omit versus null

The distinction is load-bearing for every nullable field:

  • Omit a field to leave it exactly as it is.
  • Pass null to clear it.

So editing only frictions cannot silently erase profile, and clearing age_max is how a persona becomes “35 and older”.

Example

persona_update({
  brand_name: 'acme-running',
  persona_name: 'marathon-maya',
  base_revision: 3,
  language: '“My knees are shot by mile 18” — never “joint fatigue”.',
  age_max: null, // now 30 and older
});

Warning

The age range is checked after your change is applied

Passing one bound can conflict with the stored other: sending age_min: 50 against a stored age_max: 40 is rejected as inverted even though the input alone looks fine. Send both when moving the range across the other bound.

Note

A stale base_revision is rejected, not merged

If the persona changed since you read it, the update fails and tells you the current revision. Re-fetch with persona_get and decide what to keep — the write is never applied on top of a row you have not seen.

Renaming via slug changes the handle: anything referencing the old one, including authored Skills, needs updating.

Requires the brand:write scope.