Personas

Update a Persona

Updates a Persona. Send the base_revision you read. Omit a section or an age bound to keep it. Send null to clear it. AdCrunch checks the age range on the result of the merge. Therefore a call that sends only age_min can still fail, if the result is inverted. The slug changes only when you send a slug: a new name alone never moves the handle. The answer is 409 with error=revision_mismatch if the Persona changed after you read it. It is 409 with error=slug_conflict if another Persona of this Brand already holds the slug you send.

patch/context/brands/{slug}/personas/{personaSlug}

Request

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

Path parameters

personaSlugstring required
slugstring required

Request body

age_maxinteger nullable

Upper age bound; null clears it ("and older").

age_mininteger nullable

Lower age bound; null clears it ("and younger").

base_revisioninteger required

The revision last read via GET — guards concurrent edits.

descriptionstring
frictionsstring nullable

Objections and barriers; null clears it.

languagestring nullable

The audience's own words — not a locale; null clears it.

motivationsstring nullable

Jobs, triggers, outcomes; null clears it.

namestring
profilestring nullable

Who they are; null clears it.

slugstring

Optional new slug handle (a deliberate rename).

Example request

{
  "base_revision": 2,
  "frictions": "They fear the new model is worse than the one they know. A change of sole or of last reads to them as a risk, not as progress.",
  "language": "They say \"my daily trainer\" and \"I got 900 out of the last pair\". They ask about the drop and the stack, never about the technology."
}

Response

The Persona as it now stands, at the next revision. Send that one back on your next edit.

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": "They fear the new model is worse than the one they know. A change of sole or of last reads to them as a risk, not as progress.",
  "id": "psn_8c4a20",
  "language": "They say \"my daily trainer\" and \"I got 900 out of the last pair\". They ask about the drop and the stack, never about the technology.",
  "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": 3,
  "slug": "loyalists",
  "updatedAt": 1790086400000
}

Changes

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