---
title: "Update a Brand"
method: PATCH
path: "/context/brands/{slug}"
tags: ["Brands"]
---

# Update a Brand

`PATCH /context/brands/{slug}`

## Request

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

Updates a Brand. Send the `base_revision` you read. Omit a narrative section to keep it. Send `null` to clear it. 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 Brand changed after you read it. It is `409` with `error=slug_conflict` if another Brand already holds the `slug` you send.

## Path parameters

- `slug` string, required

## Request body

- object
  - `base_revision` integer, required: The revision last read via GET — guards concurrent edits.
  - `description` string
  - `guidelines` string, nullable: Do's and don'ts; null clears the section.
  - `identity` string, nullable: Positioning and mission; null clears it.
  - `logo_document_id` string, nullable: Nominate one of the Brand's documents as its logo; null clears the nomination.
  - `messaging` string, nullable: Key messages; null clears the section.
  - `name` string
  - `slug` string: Optional new slug handle (a deliberate rename).
  - `voice` string, nullable: Tone of voice; null clears the section.
  - `website_url` string, uri, nullable: The Brand's public site; null clears it. Changing it starts no read.

## Response `200`

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

- object
  - `createdAt` number, required: Milliseconds since the Unix epoch, UTC.
  - `createdBy` string, required
  - `description` string, required
  - `guidelines` string, nullable, required: Do’s and don’ts, claims to avoid.
  - `id` string, required
  - `identity` string, nullable, required: Positioning, mission, what is on offer.
  - `logoDocumentId` string, nullable, required: The Document this Brand nominates as its logo.
  - `messaging` string, nullable, required: Key messages, value propositions, proof points.
  - `name` string, required
  - `revision` number, required: Increments on every write. Send it back as `base_revision` to edit; a stale one answers 409.
  - `slug` string, required
  - `updatedAt` number, nullable, required: Milliseconds since the Unix epoch, UTC.
  - `voice` string, nullable, required: Tone and personality.
  - `websiteUrl` string, nullable, required: The brand’s public site. A locator only — its contents are not stored.

## 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 Brand with that slug. `error` is `not_found`.
- `409`: `error` tells the two conflicts apart. `revision_mismatch` means somebody wrote first — re-read, re-apply, and send `currentRevision` back. `slug_conflict` means the rename collides.
- `422`: Two codes share this status. `invalid_slug`: the new slug has no letter or digit. `invalid_logo`: the nominated logo is not one of this Brand’s own finished documents.

---

[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)
