---
title: "Edit Brand Perception Attribute Clusters"
method: POST
path: "/brand-perception/attribute-clusters/edit"
tags: ["Brand Perception"]
---

# Edit Brand Perception Attribute Clusters

`POST /brand-perception/attribute-clusters/edit`

## Request

- Base URL: `https://api.peec.ai/customer/v1`
- URL: `https://api.peec.ai/customer/v1/brand-perception/attribute-clusters/edit`
- Auth: one of:
  - API key in header `X-API-Key`
  - API key in query parameter `api_key`
  - HTTP bearer

Rename and delete the project's brand-perception attributes, move terms between attributes and unassign terms from theirs — the same edits the Manage attributes screen makes. The whole call is one transaction: if any edit is rejected nothing is applied. Edits apply in the order reassign, rename, unassign_terms, delete_cluster_ids regardless of how they are listed. Neither deleting an attribute nor unassign_terms permanently removes a term — both unassign it, so it stays visible under `unassigned` and can be moved into an attribute later. Scores re-aggregate on the next read, so no new scraping run is needed. Naming one term or attribute twice in a call is rejected, since the two edits would race. To add an attribute, use the create endpoint. Errors: 400 when a target is repeated, 404 when an attribute or term does not exist, 409 when a new name collides with another attribute.

## Request body

- object
  - `project_id` string: Required if using a company api key
  - `renames` object[]: Attributes to rename.
    - `cluster_id` string, required: Attribute to rename, from the attribute-clusters listing.
    - `name` string, required: New name. Must be unique within the project, case-insensitively.
  - `delete_cluster_ids` string[]: Attributes to remove, even ones that still hold terms — their terms become unassigned rather than being deleted.
  - `unassign_terms` string[]: Terms to unassign from their attribute, spelled exactly as the listing returns them (in `members`). A no-op for a term already in `unassigned`.
  - `reassignments` object[]: Terms to move into a different attribute.
    - `attribute` string, required: Term to move, spelled exactly as the listing returns it (in `members` or `unassigned`).
    - `cluster_id` string, required: Attribute the term moves into.

## Response `200`

Success — every edit in the call was applied. Counts echo what was requested.

- object: Success — every edit in the call was applied. Counts echo what was requested.
  - `renamed_count` number, required
  - `deleted_count` number, required
  - `unassigned_terms_count` number, required
  - `reassigned_count` number, required

## Changes

- **2026-11-03** `9fdffdff48a5`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/peec/apis/peec-ai-customer-api/changes/brand-perception/attribute-clusters/edit/post.md)

---

[API](https://skmtc.dev/peec/apis/peec-ai-customer-api.md) - [All operations](https://skmtc.dev/peec/apis/peec-ai-customer-api/llms.txt) - [OpenAPI document](https://skmtc.dev/peec/apis/peec-ai-customer-api/revisions/9d774600c8eb?raw)
