> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gateway.connexease.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Update Business Profile

> Update the Meta Business Profile information linked to an application using partial (PATCH) semantics.

## What it does

Updates the WhatsApp business profile (PATCH = partial update; only the fields you send are changed). The change is written directly to Meta — no caching. With `Prefer: return=representation` the updated profile is returned; with `return=minimal` no body is returned.

<Tip>
  **Profile update is partial:** send only the fields you want to change; the rest are preserved.
</Tip>

***

## Endpoint

```text theme={null}
PATCH /public/api/v1/wa/{app_id}/profile
```

### Headers

<ParamField header="Authorization" type="string" required>
  Secret key in `Bearer sk_...` format. See [Secret Key authentication](/essentials/authentication#secret-key).
</ParamField>

<ParamField header="Content-Type" type="string" required>
  Always `application/json`.
</ParamField>

<ParamField header="Prefer" type="string">
  `return=representation` (default) returns the updated profile; `return=minimal` returns no body. The applied preference is reported via the `Preference-Applied: return=...` header.

  <Tip>
    **No body needed?** On updates, use `Prefer: return=minimal` for a faster call that returns `data: null`.
  </Tip>
</ParamField>

### Path parameters

<ParamField path="app_id" type="string" required>
  Application ID. Must belong to the organization (otherwise `404`).
</ParamField>

***

## Request Body

All fields are optional; only the fields you send are updated. Fields you do not send remain as they are on Meta.

<ParamField body="about" type="string">
  "About" text (max 139 chars).
</ParamField>

<ParamField body="address" type="string">
  Business address (max 256 chars).
</ParamField>

<ParamField body="description" type="string">
  Business description (max 512 chars).
</ParamField>

<ParamField body="email" type="string">
  Contact email (valid email).
</ParamField>

<ParamField body="category" type="string">
  Business category (mapped to Meta's `vertical`). See [Business Profile Category](/public-api-reference/application/reference/enums#business-profile-category) for the full list of values.
</ParamField>

<ParamField body="websites" type="string[]">
  Business websites (max 2, `http(s)://`).
</ParamField>

***

## Response

With `Prefer: return=representation` (default), the response is `{ "data": {...}, "isSuccess": true }` — the full profile re-fetched from Meta after the update. With `return=minimal`, the response is `{ "isSuccess": true }`.

<ResponseField name="isSuccess" type="boolean">
  `true` when the update was accepted.
</ResponseField>

<ResponseField name="data" type="object | null">
  The updated profile (same shape as [Get Business Profile](/public-api-reference/application/get-business-profile): `about`, `address`, `description`, `email`, `profilePictureUrl`, `websites`, `category` — all optional; unset fields are dropped). `null` when `Prefer: return=minimal`.
</ResponseField>

***

## Examples

<AccordionGroup>
  <Accordion title="Demo 1 — update a single field (representation)">
    ```text theme={null}
    PATCH /public/api/v1/wa/app_7poyXj8GXuv76e/profile
    Authorization: Bearer sk_...
    Prefer: return=representation
    Content-Type: application/json
    ```

    ```json theme={null}
    { "about": "Open 09:00-18:00" }
    ```

    Response (`Preference-Applied: return=representation`) — full updated profile:

    ```json theme={null}
    {
      "data": {
        "about": "Open 09:00-18:00",
        "address": "Levent, Istanbul",
        "email": "hello@acme.com",
        "websites": ["https://acme.com"],
        "category": "RETAIL"
      },
      "isSuccess": true
    }
    ```
  </Accordion>

  <Accordion title="Demo 2 — update multiple fields">
    ```text theme={null}
    PATCH /public/api/v1/wa/app_7poyXj8GXuv76e/profile
    Authorization: Bearer sk_...
    Prefer: return=representation
    Content-Type: application/json
    ```

    ```json theme={null}
    {
      "about": "Premium support 7/24",
      "email": "support@acme.com",
      "websites": ["https://acme.com", "https://shop.acme.com"],
      "category": "RETAIL"
    }
    ```

    ```json theme={null}
    {
      "data": {
        "about": "Premium support 7/24",
        "email": "support@acme.com",
        "websites": ["https://acme.com", "https://shop.acme.com"],
        "category": "RETAIL"
      },
      "isSuccess": true
    }
    ```
  </Accordion>

  <Accordion title="Demo 3 — minimal (no body wanted)">
    ```text theme={null}
    PATCH /public/api/v1/wa/app_7poyXj8GXuv76e/profile
    Authorization: Bearer sk_...
    Prefer: return=minimal
    Content-Type: application/json
    ```

    ```json theme={null}
    { "description": "We sell quality goods." }
    ```

    Response (`Preference-Applied: return=minimal`):

    ```json theme={null}
    { "data": null, "isSuccess": true }
    ```
  </Accordion>

  <Accordion title="Demo 4 — update category (vertical)">
    ```text theme={null}
    PATCH /public/api/v1/wa/app_7poyXj8GXuv76e/profile
    Authorization: Bearer sk_...
    Content-Type: application/json
    ```

    ```json theme={null}
    { "category": "HEALTH" }
    ```

    ```json theme={null}
    {
      "data": { "about": "Open 09:00-18:00", "email": "hello@acme.com", "category": "HEALTH" },
      "isSuccess": true
    }
    ```
  </Accordion>

  <Accordion title="Demo 5 — error: more than 2 websites → 422">
    ```text theme={null}
    PATCH /public/api/v1/wa/app_7poyXj8GXuv76e/profile
    Authorization: Bearer sk_...
    Content-Type: application/json
    ```

    ```json theme={null}
    { "websites": ["https://a.com", "https://b.com", "https://c.com"] }
    ```

    Because `websites` exceeds 2, a `422` (validation) is returned without reaching Meta.
  </Accordion>
</AccordionGroup>

***

## Errors

<ResponseField name="errors" type="object">
  Error details with `code`, `group`, and `description`; `isSuccess` is `false`.
</ResponseField>

| HTTP | Code                                                  | Group                 | When                                                                                                                   |
| ---- | ----------------------------------------------------- | --------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| 401  | `ORGANIZATION_SECRET_010`                             | `NOT_FOUND`           | Authorization / secret key is missing.                                                                                 |
| 401  | `ORGANIZATION_SECRET_011`                             | `NOT_FOUND`           | Secret key is invalid.                                                                                                 |
| 404  | `APPLICATION_004`                                     | `NOT_FOUND`           | `app_id` does not belong to the organization.                                                                          |
| 422  | `WA_VAL_*` (e.g. `MAX_WEBSITES`) / FastAPI validation | `VALIDATION`          | `websites` > 2, `about` > 139, `address` > 256, `description` > 512, invalid email/URL, invalid `category` enum value. |
| 401  | `META_030`                                            | `AUTHENTICATION`      | Meta access token invalid/expired (190).                                                                               |
| 403  | `META_031`                                            | `NOT_ALLOWED`         | Meta permission denied (10 / 200–299).                                                                                 |
| 429  | `META_032`                                            | …                     | Meta rate limit (4 / 80007).                                                                                           |
| 400  | `META_033`                                            | `VALIDATION`          | Meta invalid parameter (100).                                                                                          |
| 502  | `META_002`                                            | `SERVICE_UNAVAILABLE` | Meta did not confirm the update / general update error.                                                                |

Example error responses:

```json theme={null}
{ "errors": { "code": "WA_VAL_MAX_WEBSITES", "group": "VALIDATION", "description": "Maximum 2 websites allowed." }, "isSuccess": false }
```

```json theme={null}
{ "errors": { "code": "META_033", "group": "VALIDATION", "description": "Failed to update business profile. Details: ..." }, "isSuccess": false }
```

```json theme={null}
{ "errors": { "code": "META_002", "group": "SERVICE_UNAVAILABLE", "description": "Failed to update business profile." }, "isSuccess": false }
```

<Note>
  The `category` value must be one of the [Business Profile Category](/public-api-reference/application/reference/enums#business-profile-category) values (otherwise `422`). Update is PATCH/partial; fields you do not send remain as they are on Meta.
</Note>
