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

# Update a product

> Update the fields of an existing BrandWallet product. Only the fields you send are changed.

```http theme={null}
POST $BASE_URL/v1/products/{id}
```

**Updates an existing product; only the fields you send are changed (partial update).**

> **Auth:** `Authorization: Bearer <accessToken>` — an organization-scoped token from [Authentication](/api/authentication). Updating a product that belongs to another organization returns `auth_error` (400).

### Payload schema

All fields are optional.

```json theme={null}
{
  "name": { "TR": "…", "EN": "…" },
  "label": { "TR": "…", "EN": "…" },
  "description": "…",
  "details": { "TR": "…", "EN": "…" },
  "price": 120,
  "categories": ["category-uuid"],
  "tags": ["…"],
  "barcode": "…",
  "sku": "…",
  "opaqueId": "…",
  "assets": [{}],
  "defaultasset": {},
  "attributes": { "key": "value" },
  "status": 1
}
```

### Body

Field types and meanings match the [create endpoint](/api/create-product); the differences:

| Field | Type | Description |
| - | - | - |
| `status` | number | Unlike create, updatable: `1` published, `0` unpublished, `-1` archived. To delete a product use the [delete endpoint](/api/delete-product), not this field. |
| `organization` | string | Ignored when sent — a product cannot be moved to another organization. |
| `opaqueId` | string | Unique within the organization: changing it to another product's `opaqueId` returns `opaque_id_already_exists` (400); re-sending the product's own current value is fine. |

### Example

```bash theme={null}
curl --request POST \
  --url "$BASE_URL/v1/products/1f64ec1b-445e-4762-a8c3-0d1e6d75afe6" \
  --header 'Authorization: Bearer <accessToken>' \
  --header 'Content-Type: application/json' \
  --data '{ "price": 95, "barcode": "8690000009002" }'
```

### Response

Returns the full updated document.

```json theme={null}
{
  "id": "1f64ec1b-445e-4762-a8c3-0d1e6d75afe6",
  "name": { "TR": "Latte", "EN": "Latte" },
  "price": 95,
  "barcode": "8690000009002",
  "organization": "07f84834-1184-4eb6-82f5-7eda13231fc3",
  "status": 1,
  "createdAt": "2026-09-18T08:24:08.415Z",
  "updatedAt": "2026-09-18T08:25:01.072Z"
}
```

Notes:

* A successful update returns **HTTP 201** (not 200) — branch on the body, not the status code.
* An unknown id returns `entity_not_found` (400).
* Do not send `null` to clear a field; it fails type validation. Removing a field is not supported — only new values can be written.
