PUT
/v1/products/{id}Updates product details including name, description, price, images, options, and status flags. Use this endpoint to modify product information after creation. All fields are optional - only provided fields will be updated. Requires ProductWrite permission on the product's organization.
Parameters
Request parameters for this endpoint
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Required | Product ID to update |
Request Body
Fields in the request body
| Name | Type | Required | Description |
|---|---|---|---|
description | string | Optional | Description of the product |
discountPercentage | number | Optional | Discount percentage applied to this product (not updatable by ProductManager role) |
isActive | boolean | Optional | Whether this product is currently active |
isWaitlisted | boolean | Optional | Whether this product is currently waitlisted |
mainProductImage | string | Optional | URL to the main product image |
name | string | Optional | Name of the product |
options | Optional | Product options/variants configuration | |
price | number | Optional | Base price of the product (not updatable by ProductManager role) |
productCategoryId | ProductCategoryId | Optional | - |
productType | Optional | - | |
sku | string | Optional | Stock keeping unit (SKU) identifier |
Response Data
Fields returned in the response
| Name | Type | Required | Description |
|---|---|---|---|
createdAt | string (date-time) | Required | Timestamp when the product was created |
description | string | Required | Description of the product |
discountPercentage | number (double) | Required | Discount percentage applied to this product |
externalId | string | Optional | External ID from integrated systems (Shopify, etc.) |
hasCustomLeaseTerms | boolean | Required | Whether this product has custom lease terms (vs. organization defaults) |
id | ProductPubId | Required | Public-facing unique identifier for the product |
ignoreUpstreamUpdates | boolean | Required | Whether to ignore updates from upstream sources (Shopify, etc.) |
isActive | boolean | Required | Whether this product is currently active |
isWaitlisted | boolean | Required | Whether this product is currently waitlisted |
mainProductImage | string | Optional | URL to the main product image |
name | string | Required | Name of the product |
options | Required | Product options/variants configuration | |
organizationId | OrganizationId | Required | Organization that owns this product |
price | number (double) | Required | Base price of the product |
productCategoryId | ProductCategoryId | Required | Category this product belongs to |
productSource | Required | Source of the product (TSS or Shopify) | |
productType | Required | Type of product (leasable or add-on) | |
sku | string | Optional | Stock keeping unit (SKU) identifier |
stripeId | string | Required | Stripe product ID for payment processing |
updatedAt | string (date-time) | Required | Timestamp when the product was last updated |
PUT
/v1/products/{id}Request
curl https://api.thesweetspot.com/v1/products/id_123 \
-X PUT \
-H "Content-Type: application/json" \
-d '{
"description": null,
"discountPercentage": null,
"isActive": null,
"isWaitlisted": null,
"mainProductImage": null,
"name": null,
"options": null,
"price": null,
"productCategoryId": null,
"productType": null,
"sku": null
}'Response
{
"createdAt": "2025-12-10T18:00:53.177Z",
"description": "string",
"discountPercentage": 0,
"hasCustomLeaseTerms": false,
"id": null,
"ignoreUpstreamUpdates": false,
"isActive": false,
"isWaitlisted": false,
"name": "string",
"options": [
null
],
"organizationId": "string",
"price": 0,
"productCategoryId": "string",
"productSource": null,
"productType": null,
"stripeId": "string",
"updatedAt": "2025-12-10T18:00:53.177Z"
}