Personas

Create a Persona

Creates a Persona on a Brand. A Persona describes one audience that the brand speaks to. Every section and both ends of the age range are optional, because you write a Persona one part at a time. The slug is unique in the Brand, not in your organization. The answer is 409 if the slug already exists on this Brand.

post/context/brands/{slug}/personas

Request

  • Base URL: https://api.adcrunch.dev
  • URL: https://api.adcrunch.dev/context/brands/{slug}/personas
  • Auth: HTTP bearer

Path parameters

slugstring required

Request body

age_maxinteger

Upper age bound. Omit for "and older".

age_mininteger

Lower age bound. Omit for "and younger".

descriptionstring required

One-line summary — what agents read to pick this Persona.

frictionsstring

What stops them: objections, doubts, inertia (markdown).

languagestring

The words the audience itself uses for the problem — verbatims and vocabulary, in their own register (markdown). Not a locale.

motivationsstring

What they want: jobs to be done, triggers, outcomes (markdown).

namestring required

Display name.

profilestring

Who they are: life stage, situation, role, context (markdown).

slugstring

Optional explicit slug handle; normalized to kebab-case. Unique within this Brand, so two Brands may each hold the same one. Defaults to one derived from the name.

Example request

{
  "age_max": 45,
  "age_min": 28,
  "description": "Runners who already own a pair, and who buy the next one without looking at another brand.",
  "motivations": "They want the same shoe again, and proof that it is the same. A resole keeps them running on a pair they trust.",
  "name": "Loyalists",
  "profile": "Runners of 40 to 80 kilometres a week, ten years in, with one pair in rotation and one on the shelf.",
  "slug": "loyalists"
}

Response

The Persona as created, at revision 1. Every unwritten section comes back null, which is a normal state rather than an error.

ageMaxnumber nullable required
ageMinnumber nullable required

Each bound is independently optional, so "35+" is expressible.

brandIdstring required
createdAtnumber required

Milliseconds since the Unix epoch, UTC.

createdBystring required
descriptionstring required
frictionsstring nullable required

Objections, doubts, what stops them.

idstring required
languagestring nullable required

The words they use for the problem, in their own register. Not a locale, despite the name.

motivationsstring nullable required

What they want, and what triggers them.

namestring required
profilestring nullable required

Who they are, and their situation.

revisionnumber required

Increments on every write. Send it back as base_revision to edit; a stale one answers 409.

slugstring required
updatedAtnumber nullable required

Milliseconds since the Unix epoch, UTC.

Example response

{
  "ageMax": 45,
  "ageMin": 28,
  "brandId": "brd_6a9c33",
  "createdAt": 1790000000000,
  "createdBy": "usr_4d8b12",
  "description": "Runners who already own a pair, and who buy the next one without looking at another brand.",
  "frictions": null,
  "id": "psn_8c4a20",
  "language": null,
  "motivations": "They want the same shoe again, and proof that it is the same. A resole keeps them running on a pair they trust.",
  "name": "Loyalists",
  "profile": "Runners of 40 to 80 kilometres a week, ten years in, with one pair in rotation and one on the shelf.",
  "revision": 1,
  "slug": "loyalists",
  "updatedAt": null
}

Changes

No recorded changes to this operation across all 1 revision of this API.