Update a product
Edits catalog metadata. Scope: products:write.
pos_refis never editable - POS mappings are owned by the synclocation_idis immutable - create a separate entry at the other location- No DELETE: archive with
is_active: false(historical line items keep resolving)
Editing a POS-synced product’s name/category is allowed but the next full POS sync may overwrite them - prefer editing at the POS for synced entries.
Authorizations
Your secret API key as a Bearer token: Authorization: Bearer vxn_sk_.... Keys are created and scoped in the dashboard - see Authentication.
Headers
Body
Editable fields. pos_ref is never editable (owned by the sync); location_id is immutable (create a new entry at the other location). Archive with is_active: false - there is no DELETE.
Response
Updated product.
A catalog entry for correlating transaction line items to real products. Catalogs are per-location (each location can run a different POS with a different menu), unified under the organization: list org-wide, filter by location_id.
This is a loyalty correlation catalog, not an inventory system - no variants, modifiers, or stock levels.
Display name - plain string or per-language object, the same localization pattern as Card.name. POS-synced entries arrive with the till's single-language name; supply per-language names on manual/API entries when your audience is multilingual (border stores, tourist areas). Notifications and future product-facing surfaces resolve the name in the customer's language.
1 - 200"Flat White"
Merchant-owned filing aid, and part of the search haystack alongside the name. NEVER populated by POS sync: no POS system sends tags, so a source: "pos" entry arrives untagged. You can tag one yourself with PATCH /v1/products/{id} (tags are an overlay field, unlike pos_ref and source, which sync owns), and it becomes findable by that tag immediately. Sending [] clears them and removes them from the search haystack.