---
title: "Delete a Persona"
method: DELETE
path: "/context/brands/{slug}/personas/{personaSlug}"
tags: ["Personas"]
---

# Delete a Persona

`DELETE /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

Deletes a Persona. Send the `base_revision` you read, in the query string. The slug becomes free again in its Brand. The answer is `409` with `error=revision_mismatch` if the Persona changed after you read it. The row is soft-deleted: the Persona leaves every listing and every read, and only an operator can bring it back.

## Path parameters

- `personaSlug` string, required
- `slug` string, required

## Query parameters

- `base_revision` integer, required: The revision last read via GET — guards concurrent edits.

## Response `204`

Deleted. The slug is free to re-use within this Brand. Nothing hangs off a Persona, so nothing cascades — a Line Item that named it keeps its `personaId`.

## Other responses

- `400`: The request does not match the schema of this operation: a field is missing or has the wrong type, or the body is not valid JSON. `error` is `invalid_request`, and `issues` names each field. Nothing was changed.
- `401`: No API key, or one that does not resolve. See the security scheme. `error` is `unauthorized`.
- `402`: The organization has no active subscription. An owner subscribes at `paywallUrl`. `error` is `organization_unentitled`.
- `403`: The caller does not hold `brand:write`. `error` is `forbidden`.
- `404`: No such Brand, or no Persona with that slug inside it. `error` is `not_found`.
- `409`: The Persona moved since you read it. `error` is `revision_mismatch`.

---

[API](https://skmtc.dev/adcrunch/apis/adcrunch-api.md) · [All operations](https://skmtc.dev/adcrunch/apis/adcrunch-api/llms.txt) · [OpenAPI document](https://skmtc.dev/adcrunch/apis/adcrunch-api/revisions/a420ba80914f?raw)
