persona_create

Add an audience archetype to a brand — who it is talking to — with as much or as little written up front as you have.

Creates a Persona on a Brand: an audience archetype describing who the brand is talking to.

Everything except name and description is optional. A persona is authored incrementally — creating one with nothing but a name is a valid starting point, and sections get filled in as you learn them.

Input

Field Type Required Description
brand_name string yes The slug of the brand this persona belongs to.
name string yes Display name, e.g. "Time-poor Parent".
description string yes One-line summary used to pick this persona from a list.
slug string no Explicit handle; normalized to kebab-case. Defaults to one derived from the name.
profile string no Who they are: life stage, situation, role, context.
motivations string no What they want: jobs to be done, triggers, outcomes.
frictions string no What stops them: objections, doubts, perceived risk.
language string no The words they use for the problem — not a locale.
age_min integer no Lower age bound. Omit for “and younger”.
age_max integer no Upper age bound. Omit for “and older”.

Example

persona_create({
  brand_name: 'acme-running',
  name: 'Marathon Maya',
  description: 'Trains before work, races twice a year.',
  age_min: 30,
  age_max: 44,
  frictions: 'Thinks carbon plates are a gimmick sold on hype.',
});
// → { persona: { slug: 'marathon-maya', revision: 1, … } }

The slug is unique per brand, not per organization

Two brands may each have a loyalists. That is why every persona tool takes brand_name alongside persona_name — the pair is the handle. A collision within one brand returns an error rather than silently adding a suffix.

Age is the only structured field

Everything else is prose, deliberately. Location, interests and job titles are written into profile rather than typed, because they resolve differently on every ad platform — a persona describes an audience, it is not a targeting spec. Both age bounds are independently optional, so age_min: 35 on its own means “35 and older”.

Requires the brand:write scope.