---
title: "Update Products"
method: POST
path: "/products/update"
tags: ["Products"]
---

# Update Products

`POST /products/update`

Update products (name, description, image, price overrides, categories). Each item is independent: items with nothing to apply (not found, no changes, duplicate id) are reported in `skipped`, and unsatisfiable changes (name conflict, unknown category) in `rejected`, so the batch never fails as a whole.

## Request body

- object
  - `project_id` string — Required if using a company api key
  - `products` object[], required
    - `product_id` string, uuid, required
    - `name` string
    - `description` string
    - `image_url` string, uri
    - `price_override` object
    - `category_ids` string[]

## Response `200`

Per-item update results

- object — Per-item update results
  - `updated` object[], required
    - `product_id` string, required
  - `skipped` object[], required
    - `product_id` string, required
    - `reason` 'not_found' | 'no_changes' | 'duplicate_id', required
  - `rejected` object[], required
    - `product_id` string, required
    - `reason` 'conflict' | 'category_not_found', required
    - `message` string, required

## Other responses

- `400` — Response for status 400

---

[API](https://skmtc.net/peec/apis/peec-ai-customer-api.md) · [All operations](https://skmtc.net/peec/apis/peec-ai-customer-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/peec/peec-ai-customer-api/versions/92840a1bffa7/schema)
