POST
/v1/productsCreates a new product for an organization. Use this endpoint when adding products to your catalog. Requires ProductWrite permission on the target organization. The product will be created with the provided details including name, description, price, and product type.
Request Body
Fields in the request body
| Name | Type | Required | Description |
|---|---|---|---|
description | string | Required | Description of the product |
discountPercentage | number | Optional | Discount percentage applied to this product |
externalId | string | Optional | External ID from integrated systems (Shopify, Canyon, etc.) |
name | string | Required | Name of the product |
options | Required | Product options/variants configuration | |
organizationId | OrganizationPubId | Required | Public ID of the organization that owns this product |
price | number (double) | Required | Base price of the product |
productCategoryId | ProductCategoryPubId | Required | Public ID of the product category |
productSource | Required | Source system where the product originated (e.g., Shopify, Canyon, Manual) | |
productType | Required | Type of product (leasable or add-on) | |
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 |
POST
/v1/productsRequest
curl https://api.thesweetspot.com/v1/products \
-X POST \
-H "Content-Type: application/json" \
-d '{
"description": "string",
"discountPercentage": null,
"externalId": null,
"name": "string",
"options": [
{
"id": null,
"name": null,
"position": null,
"values": null
}
],
"organizationId": "string",
"price": 0,
"productCategoryId": "string",
"productSource": "tss",
"productType": "leasable",
"sku": null
}'Response
{
"createdAt": "2025-12-10T18:00:53.070Z",
"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.071Z"
}