POST
/v1/productsCreates a new product for an organization.
Request Body
Fields in the request body
Required
| Name | Type | Description |
|---|---|---|
description | string | Description of the product |
name | string | Name of the product |
options | Product options/variants configuration | |
organizationId | OrganizationPubId | Public ID of the organization that owns this product |
price | number (double) | Base price of the product |
productSource | Source system where the product originated (e.g., Shopify, Manual) | |
productType | Type of product (leasable or add-on) |
Optional
| Name | Type | Description |
|---|---|---|
discountPercentage | number | Discount percentage applied to this product |
externalId | string | External ID from integrated systems (Shopify, etc.) |
productCategoryId | ProductCategoryPubId | - |
sku | string | Stock keeping unit (SKU) identifier |
Response Data
Fields returned in the response
Always Present
| Name | Type | Description |
|---|---|---|
createdAt | string (date-time) | Timestamp when the product was created |
description | string | Description of the product |
id | ProductPubId | Public-facing unique identifier for the product |
ignoreUpstreamUpdates | boolean | Whether to ignore updates from upstream sources (Shopify, etc.) |
isWaitlisted | boolean | Whether this product is currently waitlisted |
name | string | Name of the product |
options | Product options/variants configuration | |
organizationId | OrganizationId | Organization that owns this product |
price | string | Base price of the product |
productSource | Source of the product (Manual or Shopify) | |
productType | Type of product (leasable or add-on) | |
reviewStatus | Review status of the product | |
status | Status of the product (active, inactive, or archived) | |
stripeId | string | Stripe product ID for payment processing |
updatedAt | string (date-time) | Timestamp when the product was last updated |
Optional
| Name | Type | Description |
|---|---|---|
discountPercentage | string | Discount percentage applied to this product (None means inherit from organization) |
externalId | string | External ID from integrated systems (Shopify, etc.) |
mainProductImage | string | URL to the main product image |
productCategoryId | ProductCategoryId | - |
reviewNotes | string | Notes from the reviewer |
reviewedAt | string | Timestamp when the product was reviewed |
reviewedBy | UserId | - |
sku | string | Stock keeping unit (SKU) identifier |
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": null,
"productSource": "manual",
"productType": "leasable",
"sku": null
}'Response
{
"createdAt": "2026-02-04T02:27:22.198Z",
"description": "string",
"id": null,
"ignoreUpstreamUpdates": false,
"isWaitlisted": false,
"name": "string",
"options": [
null
],
"organizationId": "string",
"price": "string",
"productSource": null,
"productType": null,
"reviewStatus": null,
"status": null,
"stripeId": "string",
"updatedAt": "2026-02-04T02:27:22.198Z"
}