---
title: "Update a brand report"
method: PATCH
path: "/v1/reports/brand/{reportId}"
tags: ["Brand Reports"]
---

# Update a brand report

`PATCH /v1/reports/brand/{reportId}`

## Request

- Base URL: `https://data.otterly.ai`
- URL: `https://data.otterly.ai/v1/reports/brand/{reportId}`
- Auth: HTTP bearer

Changes only the fields you send; an array field you send replaces the stored one whole. A field sent with its stored value is left unchanged and is not re-validated, so a GET body can be sent back as is: its read-only fields (`workspaceId`, `id`, `countries`, `tags`, `createdDate`, `updatedDate`, `countryPromptsTotal`) are ignored, and the workspace of a report cannot be changed. Send `brandRegex: null` to clear the detection regex. Changing detection fields (brand, variations, domains, wildcard, regex or competitors) recalculates the report history for every past day, exactly like an edit in the UI, so updated numbers appear with a delay. Changing `promptIds` adds and removes prompts the same way as the prompt assignment endpoints.

## Path parameters

- `reportId` string, required: Brand report identifier.

## Request body

- PublicApiUpdateBrandReportRequest
  - `reportTitle` string: Optional. Report name shown in the app.
  - `brand` string: Optional. Brand name to track.
  - `brandVariations` string[]: Optional. Other names the brand goes by, at most 100. Cannot be combined with `brandRegex`.
  - `brandDomain` string: Optional. Brand website domain, e.g. `acme.com`. Protocol, `www.` and path are stripped.
  - `brandDomainVariations` string[]: Optional. Other domains the brand owns, at most 100. Each must differ from `brandDomain`.
  - `brandDomainWildcard` boolean: Optional. When true, subdomains of `brandDomain` also count as the brand domain.
  - `brandRegex` string, nullable: Optional. Regular expression used to detect the brand in AI answers, instead of the name and its variations (so it cannot be combined with `brandVariations`). Up to 1000 characters. Send `null` to clear it.
  - `promptIds` string[]: IDs of prompts that already exist in the report workspace — look them up with `GET /v1/workspaces/{id}/prompts`. The report tracks the countries of these prompts.
  - `competitors` object[]: Optional. Competitors to track, at most 100. Each competitor domain must be unique. `POST /v1/competitors/suggestions` returns items in this shape.
    - `brand` string, required: Competitor brand name.
    - `brandVariations` string[]
    - `brandDomain` string, required
    - `brandDomainVariations` string[]
    - `brandDomainWildcard` boolean
    - `brandRegex` string, nullable: Optional. Regular expression used to detect the brand in AI answers, instead of the name and its variations (so it cannot be combined with `brandVariations`). Up to 1000 characters. Send `null` to clear it.

## Response `200`

The updated brand report. Recalculation completes asynchronously.

- PublicApiBrandReport
  - `id` string, required
  - `workspaceId` string, required
  - `brand` string, required
  - `reportTitle` string
  - `brandVariations` string[]
  - `brandDomain` string, required
  - `brandDomainVariations` string[]
  - `brandDomainWildcard` boolean
  - `brandRegex` string, nullable, required: Regular expression used to detect the brand in AI answers, instead of `brand` and `brandVariations`. `null` when not set.
  - `countries` string[], required: Lowercase ISO 3166-1 alpha-2 country codes the report tracks (e.g. `us`, `de`), with `uk` used in place of `gb`.
  - `createdDate` string, required
  - `updatedDate` string, required
  - `promptIds` string[]
  - `countryPromptsTotal` object: Total prompt count keyed by country code (lowercase ISO 3166-1 alpha-2; `uk` instead of `gb`).
  - `competitors` PublicApiBrandCompetitor[]
    - `brand` string, required: Competitor brand name.
    - `brandVariations` string[], required
    - `brandDomain` string, required
    - `brandDomainVariations` string[], required
    - `brandDomainWildcard` boolean, required
    - `brandRegex` string, nullable, required: Regular expression used to detect the brand in AI answers, instead of `brand` and `brandVariations`. `null` when not set.
  - `tags` PublicApiBrandReportTag[]
    - `id` string, required
    - `name` string, required
    - `color` string, required: Tag color (Ant Design preset color name, e.g. 'gold', 'orange', 'magenta', 'green', 'blue').

## Other responses

- `400`: Validation failed.
- `401`: Unauthorized.
- `403`: Forbidden.
- `404`: Report not found.
- `429`: Quota exhausted.

## Changes

- **2026-11-03** `b5dc4bea6d45`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/otterly/apis/otterly-public-api/changes/v1/reports/brand/:reportId/patch.md)

---

[API](https://skmtc.dev/otterly/apis/otterly-public-api.md) - [All operations](https://skmtc.dev/otterly/apis/otterly-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/otterly/apis/otterly-public-api/revisions/333e3100f0b4?raw)
