---
title: persona_create
description: 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

```ts
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, … } }
```

:::info[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.

:::

:::tip[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.
