Skip to main content
PUT
Update a product

Authorizations

Authorization
string
header
required

Workspace API key. The workspace is derived from the key.

Path Parameters

id
string<uuid>
required

Resource UUID.

Body

application/json

Full product update. For a non-variable product, price, cost and stock set the single default variant. tags replaces the tag set (omit to leave untouched, [] to clear). slug is only changed when supplied. medias adds/repositions media; remove_medias detaches by id.

name
string
required
type
enum<string>
required
Available options:
SIMPLE_PRODUCT,
VARIABLE_PRODUCT,
VIRTUAL_PRODUCT
status
enum<string>
Available options:
ACTIVE,
HIDDEN,
ARCHIVED
slug
string
category
object

Legacy single category — by id, or by name (created if missing). Prefer categories; if both are sent, categories wins.

categories
string[]

Ordered list of category ids or slugs (first = primary). Replaces the category set; [] clears all memberships. Wins over category. An unknown id/slug returns 422 unprocessable and nothing is applied.

Example:
tags
string[]
description
string
requires_shipping
boolean
can_preorder
boolean
preorder_stops_at
string<date-time>
max_cart_quantity
integer
low_stock_threshold
integer
tax_class
string<uuid>
purchase_note
string
sku
string
price
object

Currency code → amount in minor units (e.g. NGN 450000 = 4500.00).

Example:
cost
object

Currency code → amount in minor units (e.g. NGN 450000 = 4500.00).

Example:
stock
integer
medias
object[]
remove_medias
string<uuid>[]

Response

The updated product

id
string<uuid>
required
name
string
required
status
string
required
type
string
required
description
string
category
string

The primary category's name (the first of categories). Kept for backwards compatibility — prefer categories.

categories
object[]

The product's categories, ordered (first = primary). Each entry carries its parent/parent_slug, so a headless storefront can build /shop/{parent_slug}/{slug} links with no extra calls.

requires_shipping
boolean
can_preorder
boolean
total_stock
integer
price_range
object
options
object[]

The product's resolved options. Each variant's attributes is keyed by the option id here, so use this to map a variant back to option names/values.

media
object[]
variants
object[]

Created variants. Each variant's attributes maps an option id (see options) to the chosen value key.

created_at
string<date-time>
updated_at
string<date-time>