Products
Products are the items in your online store and on invoices. Use these endpoints to sync a catalogue from your own system.
- Your own id: send
externalId;POST /v1/productswith the sameexternalIdupdates that product. - Stock:
POST /v1/products/{productId}/stockadds or removes stock and records it in the stock history. - Delete archives: the product is hidden and inactive, and kept for past orders and invoices.
- Plan: creating and changing products needs the Sales add-on.
api.whautomate.comList products
/v1/productsLists products (not archived), newest update first. searchText matches name and SKU; active is true or false.
x-api-keystringrequiredlocationIdstringsearchTextstringskustringexternalIdstringcategoryIdstringactivestringtrue or false.pageintegerlimitintegeridstringexternalIdstringnamestringskustringdescriptionstringlocationobjectcategoryobjectnull when the product has no category
pricenumberregularPricenumbercurrencystringtaxesobject[]manageStockbooleanavailableQuantitynumberactivebooleanavailableOnlinebooleancreatedAtstringupdatedAtstringcreatedbooleancurl -X GET "https://api.whautomate.com/v1/products?locationId=Le6dWjQF9K&searchText=oil&limit=2" \
-H "x-api-key: YOUR_API_KEY"
[
{
"id": "YgqKG43JUe",
"externalId": null,
"name": "Massage Oil Blend",
"sku": "OIL-MAS-50",
"description": "Massage Oil Blend from our studio shop.",
"location": {
"id": "Le6dWjQF9K",
"title": "Serene Wellness Studio"
},
"category": {
"id": "nBxlSyQQMw",
"name": "Aromatherapy"
},
"price": 35,
"currency": "SGD",
"taxes": [],
"manageStock": true,
"availableQuantity": 30,
"active": true,
"availableOnline": true,
"createdAt": "2026-10-29T11:42:38.721Z",
"updatedAt": "2026-10-29T11:43:38.543Z"
},
{
"id": "kZm9rbCRx6",
"externalId": null,
"name": "Lavender Essential Oil",
"sku": "OIL-LAV-10",
"description": "Lavender Essential Oil from our studio shop.",
"location": {
"id": "Le6dWjQF9K",
"title": "Serene Wellness Studio"
},
"category": {
"id": "nBxlSyQQMw",
"name": "Aromatherapy"
},
"price": 28,
"currency": "SGD",
"taxes": [],
"manageStock": true,
"availableQuantity": 38,
"active": true,
"availableOnline": true,
"createdAt": "2026-10-29T11:42:38.618Z",
"updatedAt": "2026-10-29T11:43:38.263Z"
}
]
Get a product
/v1/products/{productId}Gets a product by id (404 when unknown).
x-api-keystringrequiredproductIdstringrequiredidstringexternalIdstringnamestringskustringdescriptionstringlocationobjectcategoryobjectnull when the product has no category
pricenumberregularPricenumbercurrencystringtaxesobject[]manageStockbooleanavailableQuantitynumberactivebooleanavailableOnlinebooleancreatedAtstringupdatedAtstringcreatedbooleancurl -X GET "https://api.whautomate.com/v1/products/YgqKG43JUe" \
-H "x-api-key: YOUR_API_KEY"
{
"id": "YgqKG43JUe",
"externalId": null,
"name": "Massage Oil Blend",
"sku": "OIL-MAS-50",
"description": "Massage Oil Blend from our studio shop.",
"location": {
"id": "Le6dWjQF9K",
"title": "Serene Wellness Studio"
},
"category": {
"id": "nBxlSyQQMw",
"name": "Aromatherapy"
},
"price": 35,
"currency": "SGD",
"taxes": [],
"manageStock": true,
"availableQuantity": 30,
"active": true,
"availableOnline": true,
"createdAt": "2026-10-29T11:42:38.721Z",
"updatedAt": "2026-10-29T11:43:38.543Z"
}
Create or update a product
/v1/productsCreates a product, or updates the product with the same externalId (only the fields sent change). Response includes created. Needs the Sales module.
x-api-keystringrequiredproductIdstringexternalIdstringlocationIdstringnamestringskustringdescriptionstringpricenumberregularPricenumbercategoryIdstringtaxIdsstring[]activebooleanavailableOnlinebooleanmanageStockbooleanavailableQuantitynumberstockReasonstringidstringexternalIdstringnamestringskustringdescriptionstringlocationobjectcategoryobjectnull when the product has no category
pricenumberregularPricenumbercurrencystringtaxesobject[]manageStockbooleanavailableQuantitynumberactivebooleanavailableOnlinebooleancreatedAtstringupdatedAtstringcreatedbooleancurl -X POST "https://api.whautomate.com/v1/products" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Eucalyptus Bath Salts",
"sku": "SALT-EUC-20",
"price": 22,
"regularPrice": 26,
"locationId": "Le6dWjQF9K",
"externalId": "shop-prod-2201",
"manageStock": true,
"availableQuantity": 30,
"active": true,
"availableOnline": true
}'
{
"created": true,
"id": "3yNbb3VGB6",
"externalId": "shop-prod-2201",
"name": "Eucalyptus Bath Salts",
"sku": "SALT-EUC-20",
"description": "",
"location": {
"id": "Le6dWjQF9K",
"title": "Serene Wellness Studio"
},
"category": null,
"price": 22,
"regularPrice": 26,
"currency": "SGD",
"taxes": [],
"manageStock": true,
"availableQuantity": 30,
"active": true,
"availableOnline": true,
"createdAt": "2026-10-29T12:40:09.766Z",
"updatedAt": "2026-10-29T12:40:09.781Z"
}
Update a product
/v1/products/{productId}Updates a product; only the fields sent change. Needs the Sales module.
x-api-keystringrequiredproductIdstringrequiredproductIdstringexternalIdstringlocationIdstringnamestringskustringdescriptionstringpricenumberregularPricenumbercategoryIdstringtaxIdsstring[]activebooleanavailableOnlinebooleanmanageStockbooleanavailableQuantitynumberstockReasonstringidstringexternalIdstringnamestringskustringdescriptionstringlocationobjectcategoryobjectnull when the product has no category
pricenumberregularPricenumbercurrencystringtaxesobject[]manageStockbooleanavailableQuantitynumberactivebooleanavailableOnlinebooleancreatedAtstringupdatedAtstringcreatedbooleancurl -X PUT "https://api.whautomate.com/v1/products/3yNbb3VGB6" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"price": 24,
"regularPrice": 28
}'
{
"created": false,
"id": "3yNbb3VGB6",
"externalId": "shop-prod-2201",
"name": "Eucalyptus Bath Salts",
"sku": "SALT-EUC-20",
"description": "",
"location": {
"id": "Le6dWjQF9K",
"title": "Serene Wellness Studio"
},
"category": null,
"price": 24,
"regularPrice": 28,
"currency": "SGD",
"taxes": [],
"manageStock": true,
"availableQuantity": 30,
"active": true,
"availableOnline": true,
"createdAt": "2026-10-29T12:40:09.766Z",
"updatedAt": "2026-10-29T12:40:09.840Z"
}
Archive a product
/v1/products/{productId}Archives a product: hidden and inactive, kept for past orders and invoices.
x-api-keystringrequiredproductIdstringrequiredidstringarchivedbooleancurl -X DELETE "https://api.whautomate.com/v1/products/3yNbb3VGB6" \
-H "x-api-key: YOUR_API_KEY"
{
"id": "3yNbb3VGB6",
"archived": true
}
Adjust stock
/v1/products/{productId}/stockAdds (positive quantity) or removes (negative) stock, recorded in the stock history; turns on manageStock.
x-api-keystringrequiredproductIdstringrequiredquantitynumberrequiredreasonstringidstringexternalIdstringnamestringskustringdescriptionstringlocationobjectcategoryobjectnull when the product has no category
pricenumberregularPricenumbercurrencystringtaxesobject[]manageStockbooleanavailableQuantitynumberactivebooleanavailableOnlinebooleancreatedAtstringupdatedAtstringcreatedbooleancurl -X POST "https://api.whautomate.com/v1/products/3yNbb3VGB6/stock" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"quantity": 12,
"reason": "New delivery from supplier"
}'
{
"id": "3yNbb3VGB6",
"externalId": "shop-prod-2201",
"name": "Eucalyptus Bath Salts",
"sku": "SALT-EUC-20",
"description": "",
"location": {
"id": "Le6dWjQF9K",
"title": "Serene Wellness Studio"
},
"category": null,
"price": 24,
"regularPrice": 28,
"currency": "SGD",
"taxes": [],
"manageStock": true,
"availableQuantity": 42,
"active": true,
"availableOnline": true,
"createdAt": "2026-10-29T12:40:09.766Z",
"updatedAt": "2026-10-29T12:40:09.905Z"
}
Bulk
Each item runs on its own, so check every result.
Create or update products in bulk
/v1/products/bulkCreates or updates up to 100 products; items with productId or a known externalId update. Each item runs on its own. Needs the Sales module.
x-api-keystringrequireditemsobject[]requiredUp to 100. Items with productId or a known externalId update, others create.
createdintegerupdatedintegerfailedintegerresultsobject[]curl -X POST "https://api.whautomate.com/v1/products/bulk" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"items": [
{
"productId": "3yNbb3VGB6",
"price": 23
},
{
"productId": "doesNotExist1",
"price": 18
}
]
}'
{
"created": 0,
"updated": 1,
"failed": 1,
"results": [
{
"index": 0,
"ok": true,
"created": false,
"id": "3yNbb3VGB6",
"externalId": "shop-prod-2201"
},
{
"index": 1,
"ok": false,
"error": "Product not found in the account."
}
]
}
Archive products in bulk
/v1/products/bulk/archiveArchives up to 100 products by productIds and/or externalIds.
x-api-keystringrequiredproductIdsstring[]externalIdsstring[]succeededintegerfailedintegerresultsobject[]curl -X POST "https://api.whautomate.com/v1/products/bulk/archive" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"productIds": [
"esvaqfvsJ7"
]
}'
{
"succeeded": 1,
"failed": 0,
"results": [
{
"id": "esvaqfvsJ7",
"ok": true,
"archived": true
}
]
}