---
title: "Update a business"
method: PUT
path: "/api/v1/businesses/{id}"
tags: ["businesses"]
---

# Update a business

`PUT /api/v1/businesses/{id}`

## Request

- Base URL: `https://api.growomat.com`
- URL: `https://api.growomat.com/api/v1/businesses/{id}`
- Auth: HTTP bearer

Partial update. Send only the fields you want to change; omitted fields keep their values, and a field you do send replaces the stored value in full (arrays included).

**Errors**

- `404 NOT_FOUND`: no business with this id in the active Space.
- `400 VALIDATION_ERROR`: the body failed validation; `details.issues[]` names each field.

## Path parameters

- `id` string, required

## Headers

- `X-Space-Id` string

## Request body

- BusinessUpdate: Partial update of a business: any subset of `BusinessCreate` fields. Omitted fields keep their values.
  - `categoryId` string: The business category, an id from *Get the creative vocabulary* (`businessCategories`). Used to compare results with similar businesses.
  - `name` string: Business name.
  - `url` string, uri: The business's website: where its ads send people.
  - `description` string: What the business does. Used as context when Growomat writes copy for it.
  - `seoKeywords` union: Terms the business wants to be found for, as a comma-separated string or an array.
    - string
    - string[]
  - `targetGroups` union: Who the business sells to, as a comma-separated string or an array.
    - string
    - string[]
  - `status` 'ENABLED' | 'REMOVED': Set to `REMOVED` to archive the business.
  - `logoUrl` string, uri, nullable: The logo, by URL.
  - `logoSource` 'auto-detected' | 'uploaded' | 'null', nullable: Where the logo came from.
  - `siteLinks` SiteLinkEntry[]: Sitelinks the business offers to its ads.
    - `text` string: Link text.
    - `url` string: Where the link goes.
    - `description1` string: First description line.
    - `description2` string: Second description line.
  - `brand` Brand: The business's brand voice: tone dials, facts the writer may state, and phrases it must never use. It governs every ad and every social post Growomat writes for the business. Over-long values are shortened rather than rejected.
    - `tone` object: Two tone dials. Values between 34 and 66 mean "no strong preference" and are left out of the writing brief.
      - `formality` integer: 0 is formal, 100 is relaxed.
      - `energy` integer: 0 is matter-of-fact, 100 is enthusiastic.
    - `voiceNotes` string: Free text for anything the dials cannot say. Wins over the dials when they conflict.
    - `promises` string[]: Facts the writer may state without citing a source, for example "Founded in 1998".
    - `bannedPhrases` string[]: Words and phrases that must never appear in generated copy. Checked case-insensitively against the drafted text, in each language separately: banning "cure" does nothing about "Heilung".

## Response `200`

OK. The result is in `data`. List responses also carry `meta` with `nextCursor` and `total`.

- SuccessEnvelope: The shape of every successful response.
  - `data` unknown, required
  - `meta` object: Present on list responses.
    - `nextCursor` union: Pass as `cursor` to get the next page. `null` on the last page.
      - string
      - number
    - `total` integer: Number of items in this page.

## Other responses

- `400`: The request is malformed or fails validation. `error.code` is `VALIDATION_ERROR` (with `details.issues[]` naming each field), `INVALID_REQUEST` (the body is not valid JSON or has the wrong shape), or one of the specific codes listed in this operation's description.
- `401`: The bearer token is missing, invalid, expired or revoked (`INVALID_TOKEN`).
- `403`: The token lacks the scope this operation needs (`INSUFFICIENT_SCOPE`), the plan is read-only (`READ_ONLY_MODE`), or the caller is not a member of the Space named in `X-Space-Id` (`NOT_A_MEMBER`).
- `404`: No such resource in the active Space (`NOT_FOUND`), or `X-Space-Id` names a Space that does not exist (`SPACE_NOT_FOUND`).
- `409`: The request conflicts with the current state, for example a delete blocked by dependents or a sync already running. This operation's description names the `error.code` values it can return.
- `429`: Too many requests (`RATE_LIMITED`). Wait for the number of seconds in the `Retry-After` header, then retry.

---

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