API Reference

Products

Manage retail products and inventory for a business: the items sold at the till, attached to invoices, or listed online. Inventory adjustments are tracked so you can keep stock in sync from your own systems.

Scope and plan

Reads require products:read, mutations require products:write. API keys are available on the PRO and ENTERPRISE plans.

List products

GET/businesses/{businessId}/products
products:readPRO plan

Query parameters

NameTypeRequiredDescription
searchstringOptionalMatch product name, SKU, or EAN.
categoryIduuidOptionalFilter to a product category.
statusenumOptionalFilter by product status.
pageintegerOptionalPage number. Defaults to 1.
limitintegerOptionalItems per page (1-100). Defaults to 20.
curl "https://api.salonify.eu/api/v1/businesses/b_8f3a/products?limit=20" \
  -H "X-API-Key: sk_live_..."
{
  "data": [
    {
      "id": "pr_551",
      "name": "Hair Wax Matte Finish",
      "sku": "HW-MATTE-100",
      "ean": "5901234123457",
      "sellingPrice": 18.99,
      "purchasePrice": 8.5,
      "vatPercent": 17,
      "trackInventory": true,
      "stockQuantity": 50,
      "lowStockAlert": 5,
      "isForSale": true,
      "status": "ACTIVE"
    }
  ],
  "meta": { "total": 64, "page": 1, "limit": 20, "totalPages": 4 }
}

List low-stock products

GET/businesses/{businessId}/products/low-stock
products:readPRO plan

Returns inventory-tracked products at or below their lowStockAlert threshold.

curl "https://api.salonify.eu/api/v1/businesses/b_8f3a/products/low-stock" \
  -H "X-API-Key: sk_live_..."
[
  { "id": "pr_551", "name": "Hair Wax Matte Finish", "stockQuantity": 3, "lowStockAlert": 5 }
]

Retrieve a product

GET/businesses/{businessId}/products/{productId}
products:readPRO plan

Path parameters

NameTypeRequiredDescription
businessIduuidRequiredYour business id.
productIduuidRequiredThe product id.
curl "https://api.salonify.eu/api/v1/businesses/b_8f3a/products/pr_551" \
  -H "X-API-Key: sk_live_..."
{
  "id": "pr_551",
  "name": "Hair Wax Matte Finish",
  "description": "Professional hair wax, 100ml",
  "sku": "HW-MATTE-100",
  "sellingPrice": 18.99,
  "stockQuantity": 50,
  "status": "ACTIVE"
}

Create a product

POST/businesses/{businessId}/products
products:writePRO plan

Idempotency

Pass an Idempotency-Key header to safely retry a create without risk of a duplicate product.

Body parameters

NameTypeRequiredDescription
namestringRequiredProduct name (1-200 chars).
sellingPricenumberRequiredSale price (>= 0).
descriptionstringOptionalDescription (max 2000).
skustringOptionalStock keeping unit (max 100).
eanstringOptionalBarcode / EAN (max 50).
purchasePricenumberOptionalCost price (>= 0).
vatPercentnumberOptionalVAT rate percentage.
trackInventorybooleanOptionalEnable stock tracking.
stockQuantityintegerOptionalInitial stock (>= 0).
lowStockAlertintegerOptionalLow-stock threshold.
categoryIduuidOptionalProduct category.
imagesstring[]OptionalArray of image URLs.
isForSalebooleanOptionalSellable at the till.
curl -X POST "https://api.salonify.eu/api/v1/businesses/b_8f3a/products" \
  -H "X-API-Key: sk_live_..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 8b21..." \
  -d '{
    "name": "Hair Wax Matte Finish",
    "sellingPrice": 18.99,
    "sku": "HW-MATTE-100",
    "trackInventory": true,
    "stockQuantity": 50
  }'
{
  "id": "pr_902",
  "name": "Hair Wax Matte Finish",
  "sellingPrice": 18.99,
  "sku": "HW-MATTE-100",
  "stockQuantity": 50,
  "status": "ACTIVE"
}

Update a product

PATCH/businesses/{businessId}/products/{productId}
products:writePRO plan

All create fields are accepted and optional.

curl -X PATCH "https://api.salonify.eu/api/v1/businesses/b_8f3a/products/pr_902" \
  -H "X-API-Key: sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "sellingPrice": 19.99 }'
{ "id": "pr_902", "name": "Hair Wax Matte Finish", "sellingPrice": 19.99 }

Adjust inventory

POST/businesses/{businessId}/products/{productId}/inventory
products:writePRO plan

Body parameters

NameTypeRequiredDescription
changeQtyintegerRequiredStock change. Positive to add, negative to remove.
reasonstringOptionalReason for the adjustment (max 500).
curl -X POST "https://api.salonify.eu/api/v1/businesses/b_8f3a/products/pr_902/inventory" \
  -H "X-API-Key: sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "changeQty": 10, "reason": "Restocked from supplier" }'
{ "id": "pr_902", "stockQuantity": 60, "changeQty": 10 }

Delete a product

DELETE/businesses/{businessId}/products/{productId}
products:writePRO plan

Soft-deletes the product. Returns 204 No Content.

curl -X DELETE "https://api.salonify.eu/api/v1/businesses/b_8f3a/products/pr_902" \
  -H "X-API-Key: sk_live_..."