---
title: "Update repricer products"
method: PATCH
path: "/api/v1/sa/repricer/products"
tags: ["Repricer"]
---

# Update repricer products

`PATCH /api/v1/sa/repricer/products`

## Request

- Base URL: `https://app.sellerassistant.app` (the document declares no server; this is the origin it was published from)
- URL: `https://app.sellerassistant.app/api/v1/sa/repricer/products`
- Auth: one of:
  - API key in query parameter `api_key`
  - API key in header `X-Api-Key`

The only update of the repricer products. One call changes one row or a hundred. The body names the rows with `ids`, the ids the list answers, up to 100 of them. The fields beside the ids reach every named row, and at least one field must be there. `asin`, `marketplace_id` and `sku` are not taken: the ids name the rows already. The answer keeps the order of the rows.

## Request body

- object: The update sends only the fields it changes. Every field is optional, and a field that is not there keeps the value the product has.
  - `asin` string: Product ASIN.
  - `marketplace_id` string: Amazon marketplace ID for this product.
  - `sku` string: Seller SKU in the selected marketplace.
  - `strategy_id` integer, nullable: The strategy of this row. Null gives the row back to the strategy of the ASIN, which every row of that ASIN shares. The answer then shows that strategy under `strategy`, and `strategy_id` stays null.
  - `limits` object, nullable: Per-product pricing limits that override team/default limits.
    - `max_price` number, nullable: Absolute maximum allowed final price. A number, or the string of it.
    - `min_price` number, nullable: Absolute minimum allowed final price. A number, or the string of it.
    - `max_change` number, nullable: Maximum absolute price change per reprice operation.
    - `max_change_percent` number, nullable: Maximum relative price change (percent) per reprice operation.
    - `min_price_mode` 'manual' | 'break_even' | 'break_even_plus' | 'target_roi' | 'target_margin', nullable: How the minimum price is found.
    - `target_roi` number, nullable: The ROI the minimum price aims at, in percent.
    - `target_margin` number, nullable: The margin the minimum price aims at, in percent.
    - `min_price_markup` number, nullable: What the break even price adds to reach the minimum price.
    - `min_price_markup_type` 'amount' | 'percent', nullable
    - `missing_cost_fallback` 'error' | 'manual' | 'none', nullable: What happens when the cost of the SKU is not known.
  - `mode` 'off' | 'live': Repricing mode. An absent mode keeps the mode the product has. The values are `off` and `live`. Simulation is a setting of the system, not of a product.
  - `reprice_priority` 'fast' | 'regular', nullable: How often the product reprices.
  - `condition` 'new' | 'used_like_new' | 'used' | 'refurbished', nullable: The condition the offer sells in.
  - `ids` integer[], required: The ids of `GET /api/v1/sa/repricer/products`. They are not the ids of the inventory SKUs.

## Response `200`

One result for each row

- object
  - `data` object[]
  - `meta` object
    - `succeeded` integer
    - `failed` integer
  - `errors` ApiV1BatchError[]
    - `code` string
    - `message` string

## Other responses

- `400`: Bad request - validation failed or invalid parameters
- `403`: Access denied - insufficient permissions, invalid API key, or the API request limit is used up (`public_api_key_limit`)
- `422`: Business logic error - operation cannot be completed due to business rules
- `429`: Too many requests - rate limit exceeded
- `503`: A service of ours did not answer. The call is right, and it can run again later.

---

[API](https://skmtc.dev/sellerassistant/apis/seller-assistant-public-api.md) · [All operations](https://skmtc.dev/sellerassistant/apis/seller-assistant-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sellerassistant/apis/seller-assistant-public-api/revisions/5b3ecdbcadb6?raw)
