---
title: "Update a business product"
method: PATCH
path: "/v3/products/{id}"
tags: ["Business Products"]
---

# Update a business product

`PATCH /v3/products/{id}`

Requires the `product:update` scope. Updates the details of a product. Variant creation, updates, and deletion must use the dedicated variant endpoints. Product update may change `is_multiple` only through guarded single-active-variant transitions: true to false clears product option names and active variant option values; false to true requires `option1_name` and `option1_value`. Product update may also change option names through `option1_name`, `option2_name`, and `option3_name`; setting an option name to null removes that slot only when active variants have at most one unique value for that option, then moves any higher option names and variant values left to keep option slots contiguous.

## Request body

- UpdateRequestProduct
  - `description` string — Description
  - `is_inventory` boolean — Is Inventory
  - `is_product_sharing` boolean — Is Product Sharing
  - `item_type` 'physical' | 'digital' | 'course' | 'license' | 'subscription', required — Type of the product item
  - `meta_thumbnail` string, uri — Meta Thumbnail
  - `name` string, required — Product Name
  - `option1_name` string, nullable — Product option 1 name. Set to null to remove this option. Removal is allowed only when active variants have at most one unique option1_value, then higher option names and variant values move left. Required with option1_value when setting is_multiple from false to true.
  - `option1_value` string, nullable — Initial option 1 value applied to the only active variant when setting is_multiple from false to true.
  - `option2_name` string, nullable — Product option 2 name. Set to null to remove this option. Removal is allowed only when active variants have at most one unique option2_value, then option3_name and option3_value move into option2.
  - `option3_name` string, nullable — Product option 3 name. Set to null to remove this option. Removal clears option3_value on all variants only when active variants have at most one unique option3_value.
  - `partnership_sales_letter` string — Partnership sales letter for affiliate/reseller promotion
  - `public_name` string — Product Public Name
  - `rich_description` string — Rich Description
  - `slug` string — Product Slug
  - `taxonomy_id` integer — Taxonomy ID

## Response `200`

Product updated successfully

- Product
  - `variants_count` integer — Variants Count
  - `display` string — Product name for display
  - `option1_name` string — Option 1 Name
  - `variants` object[]
    - `cogs` number — Cost of Goods Sold
    - `price_bt` number — Price Before Tax
    - `validity_period_unit` 'day' | 'week' | 'month' | 'year' — Unit of the period
    - `option1_value` string — Option 1 Value
    - `reseller_price_bt` number — Reseller Price Before Tax
    - `option2_value` string — Option 2 Value
    - `reseller_price` number — Reseller Price
    - `fullname` string — Variant Fullname
    - `validity_period` integer — Validity period for one time variants
    - `uuid` string — Variant UUID
    - `rich_description` string — Variant Rich Description
    - `sku` string — SKU
    - `digital_product_files` object[]
      - `content_type` string — MIME type of the digital product file
      - `id` integer — Digital product file primary key
      - `name` string — File name of the digital product file
      - `size_in_bytes` integer — Size of the digital product file in bytes
      - `url` string, uri — URL to access the digital product file
    - `product_name` string — Product Name
    - `item_type` 'physical' | 'digital' | 'course' | 'license' | 'subscription' — Type of the product item
    - `pricing_type` 'one_time' | 'recurring' — Type of the product pricing
    - `upsell_form_displays` object[]
      - `id` integer — Form Display ID
      - `page_display` object
        - `id` integer — Page Display ID
    - `description` string — Variant Description
    - `self_file_urls` string[]
    - `name` string — Variant Name
    - `id` integer — Variant ID
    - `unique_id` string — Variant Unique ID
    - `cogs_bt` number — Cost of Goods Sold Before Tax
    - `currency` 'IDR' — The currency code for the subscription item price.
    - `price` number — Price
    - `images` string[]
    - `weight` integer — Weight
    - `form_displays` object[]
      - `id` integer — Form Display ID
      - `page_display` object
        - `id` integer — Page Display ID
    - `is_checked` boolean — Mark variant as sellable
    - `is_discussion_active` boolean — Variant discussion capability flag
    - `is_email_notification_active` boolean — Variant email notification capability flag
    - `is_file_enabled` boolean — Variant file delivery capability flag
    - `is_license_enabled` boolean — Variant license capability flag
    - `is_lms_enabled` boolean — Variant LMS capability flag
    - `interval_count` integer — Interval count for recurring variants
    - `last_updated_at` string, date-time
    - `product_id` integer — Product ID
    - `option3_value` string — Option 3 Value
    - `interval` 'day' | 'week' | 'month' | 'year' — Unit of the period
    - `metadata` object
    - `created_at` string, date-time
    - `is_editable` boolean — Is Editable
  - `business` object
    - `account_holder` string — Name of the account holder
    - `email` string, email — Email address of the business
    - `id` integer — Business ID
    - `is_banned` boolean — Is the business banned?
    - `logo` string, uri — URL to the business logo
    - `unique_id` string — Unique identifier for the business
    - `username` string — Username of the business
  - `is_inventory` boolean — Is Inventory
  - `uuid` string — Product UUID
  - `last_updated_by` object
    - `aff_code` string — Affiliate code of the user
    - `avatar` string, uri — URL to user avatar
    - `email` string, email — User email
    - `fullname` string — User full name
    - `id` integer — User ID
    - `phone` string — User phone number
  - `rich_description` string — Rich Description
  - `affiliate_pro_commission_rate` string — Affiliate Pro Commission Rate (%)
  - `taxonomy` object
    - `full_path` string — Full Path
    - `id` integer — Taxonomy ID
    - `level_1` string — Level 1
    - `level_2` string — Level 2
    - `level_3` string — Level 3
    - `level_4` string — Level 4
    - `level_5` string — Level 5
    - `level_6` string — Level 6
    - `level_7` string — Level 7
  - `created_by` object
    - `aff_code` string — Affiliate code of the user
    - `avatar` string, uri — URL to user avatar
    - `email` string, email — User email
    - `fullname` string — User full name
    - `id` integer — User ID
    - `phone` string — User phone number
  - `item_type` 'physical' | 'digital' | 'course' | 'license' | 'subscription' — Type of the product item
  - `is_affiliate_pro_enabled` boolean — Is Affiliate Pro Enabled
  - `item_type_name` string — Item Type Name
  - `description` string — Description
  - `name` string — Product Name
  - `id` integer — Product ID
  - `option2_name` string — Option 2 Name
  - `is_product_sharing` boolean — Is Product Sharing
  - `warehouses` object[]
    - `id` integer — Warehouse ID
    - `name` string — Name of the warehouse
  - `is_affiliate_auto_accept` boolean — Is Affiliate Auto Accept
  - `meta_thumbnail` string, uri — Meta Thumbnail
  - `product_mailketing_lists` object[]
    - `mailketing_list` object
      - `id` integer — Mailketing List ID
      - `list` string — Mailketing List Name
      - `list_name` string — Mailketing List Name
    - `order_status` 'draft' | 'pending' | 'confirmed' | 'in_process' | 'ready' | 'shipped' | 'completed' | 'canceled' | 'rts' | 'closed' — Order status
  - `is_affiliate_enabled` boolean — Is Affiliate Enabled
  - `images` string[]
  - `is_multiple` boolean — Is Multiple
  - `labels` object[]
    - `name` string — Label name
  - `option3_name` string — Option 3 Name
  - `last_updated_at` string, date-time
  - `stores` object[]
    - `custom_domain` object
      - `full_url` string, uri — Full URL
      - `id` integer — Custom Domain ID
      - `is_verified` boolean — Is Verified
    - `id` integer — Store ID
    - `name` string — Store name
  - `partnership_sales_letter` string — Partnership sales letter for affiliate/reseller promotion
  - `slug` string — Product Slug
  - `affiliate_commission_rate` string — Affiliate Commission Rate (%)
  - `product_birdsend_sequences` object[]
    - `birdsend_sequence` object
      - `active` boolean — Indicates if the Birdsend sequence is active
      - `form_id` integer — Identifier of the associated form
      - `id` integer — Birdsend sequence primary key
      - `name` string — Name of the Birdsend sequence
      - `sequence_id` integer — Identifier of the associated sequence
      - `type` 'sequence' | 'form' — Type of the Birdsend sequence (either 'sequence' or 'form')
    - `order_status` 'draft' | 'pending' | 'confirmed' | 'in_process' | 'ready' | 'shipped' | 'completed' | 'canceled' | 'rts' | 'closed' — Order status
  - `public_name` string — Product Public Name
  - `created_at` string, date-time

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found

---

[API](https://skmtc.net/scalev/apis/nexus-commerce-api.md) · [All operations](https://skmtc.net/scalev/apis/nexus-commerce-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/scalev/nexus-commerce-api/versions/4354959d76dc/schema)
