Products API

Inventory and product management

GET/api/products

List products

Query Parameters

locationIdcategoryIdsearchisActiveis86dproductTypepagelimit

Response

{
  "data": [
    {
      "id": "uuid",
      "name": "Espresso",
      "price": 3.5,
      "categoryId": "uuid",
      "sku": "ESP-001",
      "isActive": true,
      "is86d": false
    }
  ],
  "total": 45,
  "page": 1,
  "limit": 20
}
GET/api/products/{id}

Get product details

Response

{
  "id": "uuid",
  "name": "Espresso",
  "price": 3.5,
  "cost": 0.85,
  "categoryId": "uuid",
  "description": "Double shot espresso",
  "sku": "ESP-001",
  "barcode": "1234567890",
  "taxRate": 0.07,
  "isActive": true,
  "is86d": false,
  "trackInventory": true,
  "lowStockThreshold": 10,
  "productType": "ITEM"
}
GET/api/products/barcode/{barcode}

Find product by barcode

Query Parameters

locationId

Response

{
  "id": "uuid",
  "name": "Espresso",
  "price": 3.5,
  "barcode": "1234567890"
}
POST/api/products

Create a new product

Request Body

{
  "name": "string",
  "price": "number",
  "categoryId": "uuid (optional)",
  "description": "string (optional)",
  "sku": "string (optional)",
  "barcode": "string (optional)",
  "cost": "number (optional)",
  "taxRate": "number (optional)",
  "imageUrl": "string (url, optional)",
  "trackInventory": "boolean (optional)",
  "lowStockThreshold": "number (optional)",
  "productType": "ITEM | MODIFIER | BUNDLE (optional)"
}

Response

{
  "id": "uuid",
  "name": "New Product",
  "price": 9.99,
  "isActive": true,
  "createdAt": "2026-03-21T00:00:00Z"
}
PUT/api/products/{id}

Update a product

Request Body

{
  "name": "string (optional)",
  "price": "number (optional)",
  "isActive": "boolean (optional)",
  "is86d": "boolean (optional)",
  "categoryId": "uuid (optional)",
  "description": "string (optional)",
  "sku": "string (optional)",
  "barcode": "string (optional)"
}

Response

{
  "id": "uuid",
  "name": "Updated Product",
  "price": 12.99,
  "updatedAt": "2026-03-21T00:00:00Z"
}
POST/api/products/bulk-update

Bulk update products

Request Body

{
  "updates": "array of { id: uuid, data: ProductUpdateObject }"
}

Response

{
  "updated": 5,
  "failed": 0
}
POST/api/products/{id}/86

Mark product as 86'd (Unavailable)

Response

{
  "id": "uuid",
  "is86d": true,
  "updatedAt": "2026-03-21T00:00:00Z"
}
DELETE/api/products/{id}/86

Unmark product as 86'd (Available)

Response

{
  "id": "uuid",
  "is86d": false,
  "updatedAt": "2026-03-21T00:00:00Z"
}
DELETE/api/products/{id}

Delete a product

Response

{
  "success": true,
  "message": "Product deleted"
}