Skip to main content
PUT
Update product
Updates a single product within a composed menu. Use this endpoint when your POS or RMS pushes item-level changes — pricing, availability, or bundled items — without replacing the entire menu payload. The request body uses the same menu product shape as products in Upsert menus. Send only the fields you want to change; omitted fields keep their current values.
Requires an access token with the menus:write scope. See Token to obtain a token.

Path parameters

Query parameters

Combine scope query parameters when a product needs different pricing or availability in one selling context — the same pattern as scoped menu upserts. Each composed menu is keyed by fulfillment_id + store_id + channel_id + brand_id + menu.id; see Menu sync.

Request body

Same shape as a product in the products array on Upsert menus. Every field is optional on update; omitted fields keep their current values. The product id is set in the path parameter — omit it from the request body.
Each product in the request body:Each availability object:Each bundled_items entry:
Example product
Product pricing in the request body:Each object in modifiers configures one modifier group referenced in modifier_group_ids. It accepts the same pricing fields as the parent product, plus modifier-specific fields:
Example modifiers entry

Response

Returns the updated product in data — the same shape as a product in List menus, including id, name, pricing, availability, bundled_items, and metadata.

Error responses

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

id
string
required

External product identifier.

Required string length: 1 - 64
Pattern: ^[a-zA-Z0-9_-]+$

Query Parameters

fulfillment_id
string

External fulfillment identifier. Omit for all fulfillment types.

Required string length: 1 - 64
Pattern: ^[a-zA-Z0-9_-]+$
store_id
string

External store identifier.

Required string length: 1 - 64
Pattern: ^[a-zA-Z0-9_-]+$
channel_id
string

External channel identifier.

Required string length: 1 - 64
Pattern: ^[a-zA-Z0-9_-]+$
brand_id
string

External brand identifier. Alphanumeric characters, _, and - only. 1–64 characters.

Required string length: 1 - 64
Pattern: ^[a-zA-Z0-9_-]+$
menu_id
string

External menu identifier. Omit to update every matching menu in the scope.

Required string length: 1 - 64
Pattern: ^[a-zA-Z0-9_-]+$

Body

application/json

Product fields to create or update.

Partial menu product update. Same fields as MenuProductUpsert except id (from path).

name
object
Example:
description
object | null
Example:
image_url
string<uri> | null
cms_template_id
string<uuid> | null
status
enum<string>
Available options:
ACTIVE,
INACTIVE
bundled_items
object[]
pricing
object
availability
object
metadata
object

Response

200 - application/json

Ok

data
object