Read the current configuration
slug, url, can_register and can_rename; a missing slug or URL is null. Brand results include alias, primary_color, secondary_color, logo and voice. Missing or cleared brand values are null.
Register or rename a portal
For the first registration, a current member can sendPUT /teams/{id}/customer-portal with {"slug":"examplecompany"}. Use 1–128 ASCII letters or digits. The server normalizes the slug to lowercase and checks uniqueness against both API and dashboard registrations.
Renaming changes customer-facing links. Read the existing slug first and obtain approval for that change, then a current administrator can send:
expected_slug, missing confirmation or occupied slug returns 409; read the current state before deciding what to do next. An administrator resending the current slug receives the existing state. There is no unregister operation.
Update brand fields
A current administrator can send a partial update:null or an empty string to clear a supplied field. Limits are 200 characters for alias, 40 for each color and 20,000 for voice. Unknown fields are rejected. Read the brand afterward to confirm the stored values.
Upload or remove a logo
Upload one PNG or JPEG file, up to 10 MiB, as multipart fieldfile:
DELETE /teams/{id}/brand/logo to clear the current logo. Both actions require an administrator and return the brand plus storage_cleanup. removed confirms managed previous-object cleanup; retained means the previous object remains in storage. Historical paths and arbitrary URLs are retained. Do not interpret clearing the logo as confirmation that every old file was deleted. The returned logo URL grants access to the uploaded media; share it only as intended.
Analyze and review brand voice
SendPOST /teams/{id}/brand/analyze-voice with {"url":"https://example.com"}. This administrator action reads a public website and uses model compute. The response contains an analysis with tone, style, audience, vocabulary and examples, plus analyzedUrl, pagesAnalyzed and saved: false.
Review the suggested analysis and write the desired voice text separately through PATCH /brand with {"voice":"Your reviewed voice instructions"}. Analysis never updates the stored voice automatically.
Handle errors
401 requires a verified personal credential. For 403, check current administrator access; a blocked or removed seat cannot retain authority through an old token. 404 means the team was not found or is inaccessible. For 409, inspect the current portal and team state. After a timeout or 500 on a write, read the current state before retrying; these operations do not provide universal idempotency keys.
The routes and contracts have offline coverage. Their presence in a feature branch does not establish deployed availability.