Products

The product catalogue stores everything your POS can sell — items, prices, PLU codes, and categories. Products are scoped per tenant and can be shared across registers and self-checkout terminals.

List products

bash
GET /v1/slate/products
NameTypeRequiredDescription
filter[category]stringNoFilter by category name.
qstringNoSearch products by name (partial match).
pageintegerNoPage number.
per_pageintegerNoResults per page. Max 100.
json
{
  "data": [
    {
      "id": "3f2a...",
      "tenant_id": "ten_01hxyz",
      "name": "Flat White",
      "plu": "FW001",
      "price": 5.50,
      "category": "Coffee",
      "created_at": "2025-05-01T00:00:00Z",
      "updated_at": "2025-05-01T00:00:00Z"
    }
  ],
  "pagination": { "page": 1, "per_page": 20, "total": 47, "has_more": true }
}

Create a product

bash
POST /v1/slate/products
NameTypeRequiredDescription
namestringYesProduct display name.
pricenumberYesUnit price as a decimal.
plustringNoPrice look-up code for barcode scanners.
categorystringNoCategory label (e.g. Coffee, Food, Merchandise).

Update a product

bash
PATCH /v1/slate/products/:id

Send only the fields you want to change. All fields are optional in a PATCH request.

bash
curl -X PATCH https://api.hldgroup.org/v1/slate/products/3f2a... \
  -H "x-internal-secret: <key>" \
  -H "x-tenant-id: ten_01hxyz" \
  -H "x-user-id: usr_01hxyz" \
  -H "x-platform-role: tenant-system-admin" \
  -H "Content-Type: application/json" \
  -d '{ "price": 6.00 }'

Delete a product

bash
DELETE /v1/slate/products/:id

Permanently removes the product from the catalogue. Historical order lines that reference this product retain their product_name snapshot so reporting remains accurate.

Warning:Deleting a product does not cancel or modify existing orders. Sales history is preserved.