Update Product
PUT/api/v2/products/:product
Update a product. Currently this endpoint carries one field — the product-level pricing sync profile, inherited by the product's listings on every channel unless a listing sets its own. Other product attributes are updated through their existing endpoints.
products:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Changing the profile re-prices the product's listings that follow it: inline when there are 25 or fewer (recompute.mode: "sync"), otherwise as a background job identified by recompute.tracked_job_log_id.
Authentication: Requires Bearer token.
Requires the products.update permission (API tokens: products:write scope).
Request body:
- pricing_sync_profile_id (integer|null, required — the key must be present): the profile to apply, or null so the product's listings follow each channel's default. An archived profile is refused (422).
Response data:
- id (integer): the product
- pricing_sync_profile_id (integer|null)
- profile (object|null):
{id, name} - recompute:
{mode, listings, tracked_job_log_id}— how many listings are being re-priced and whether that ran inline (sync) or was queued (job)
Request
Responses
- 200
- 401
- 403
- 404
- 422
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not found — no record with the given identifier (or the route does not exist). Verify the ID before retrying.
Unprocessable Entity
Response Headers
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.