---
title: "Rename a brand or change its timezone"
method: PATCH
path: "/brands/{brandId}"
tags: ["brands"]
---

# Rename a brand or change its timezone

`PATCH /brands/{brandId}`

## Request

- Base URL: `https://shruwd.io/api/v1`
- URL: `https://shruwd.io/api/v1/brands/{brandId}`
- Auth: HTTP bearer

`name` is the display name; matching uses the self entity's aliases,
edited on the entity. `timezone` moves the day boundary for cycles and
rollups from the next cycle on; history is not recomputed. The domain
cannot change — it defines the self entity — so a new domain is a new
brand.

## Request body

- UpdateBrandRequest: At least one field. `400 empty_patch` otherwise.
  - `name` string
  - `timezone` string: IANA zone.

## Response `200`

The brand.

- BrandSummary
  - `brandId` string, required
  - `role` 'viewer' | 'editor' | 'admin' | 'owner', required: The caller's role on this brand: `owner` for the workspace's owner, else the role they were given on it. Reads need `viewer`, writes `editor`.
  - `slug` string, required: The URL handle: the dashboard is at /brands/{slug}. From the name at creation; stable across renames; accepted wherever `{brandId}` is.
  - `name` string, required
  - `domain` string, required: Registrable domain, lowercase.
  - `timezone` string, required: IANA zone; day boundaries for cycles and rollups.
  - `createdAt` string, date-time, required
  - `activePrompts` integer, required
  - `competitors` integer, required
  - `stats` BrandStats
    - `openFindings` integer, required: Open and acknowledged findings, suppressed ones excluded.
    - `lastCycle` object, nullable, required
      - `cycleId` string, required
      - `kind` string, required
      - `state` string, required
      - `completedAt` string, date-time, nullable, required
    - `nextCycle` object, nullable, required
      - `cycleId` string, required
      - `kind` string, required
      - `scheduledFor` string, date-time, required
    - `nextAnswersAt` string, date-time, nullable, required: While a cycle runs, when the brand's next answer is expected on any engine (as `nextAnswers` in the health block); null when no run is waiting. A cycle's repetitions are hours apart, so `nextCycle` alone reads as if nothing more is coming this week.
    - `mentionRate` object, required: Self mention rate over the last 30 days, keyed by entitled engine.
    - `trend` object, required: Daily self mention rate for the primary engine over the last 56 days, rollup days only.
      - `engine` 'google_aio' | 'google_ai_mode' | 'chatgpt', required: `google_aio` — Google AI Overviews. `google_ai_mode` — Google AI Mode, tracked since 2026-10-15. `chatgpt` — ChatGPT.
      - `points` object[], required
        - `day` string, date, required
        - `rate` number, nullable, required: Null when the day's n is below ten. A gap, not a zero.
        - `n` integer, required

## Other responses

- `404`: `not_found`: no such resource in this workspace.
- `default`: Every failure has this body.

---

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