# 📦 Products

Product inventory and stock management

## List products

> Get a paginated list of products with optional filters

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Products","description":"Product inventory and stock management"}],"servers":[{"url":"https://skhokho.ai","description":"Production"},{"url":"http://102.209.118.152:8000/","description":"Local"},{"url":"https://dev.skhokho.ai","description":"Development"}],"security":[{"cookieAuth":[]},{"basicAuth":[]}],"components":{"securitySchemes":{"cookieAuth":{"type":"apiKey","in":"cookie","name":"sessionid"},"basicAuth":{"type":"http","scheme":"basic"}},"schemas":{"ProductList":{"type":"object","description":"Lightweight serializer for product lists.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"name":{"type":"string","readOnly":true},"short_description":{"type":"string","readOnly":true},"product_code":{"type":"string","nullable":true,"maxLength":100},"barcode":{"type":"string","nullable":true,"maxLength":100},"product_type":{"enum":["manufacture","buy"],"type":"string","description":"* `manufacture` - Manufacture\n* `buy` - Buy"},"category":{"type":"string","nullable":true,"maxLength":200},"brand":{"type":"string","nullable":true,"maxLength":200},"selling_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Selling price per unit"},"current_stock":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$"},"minimum_stock_level":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$"},"unit_of_measure":{"enum":["piece","kg","gram","liter","meter","square_meter","cubic_meter","hour","day","month","year","box","pack","dozen","other"],"type":"string","description":"* `piece` - Piece\n* `kg` - Kilogram\n* `gram` - Gram\n* `liter` - Liter\n* `meter` - Meter\n* `square_meter` - Square Meter\n* `cubic_meter` - Cubic Meter\n* `hour` - Hour\n* `day` - Day\n* `month` - Month\n* `year` - Year\n* `box` - Box\n* `pack` - Pack\n* `dozen` - Dozen\n* `other` - Other"},"status":{"enum":["active","inactive","discontinued","out_of_stock"],"type":"string","description":"* `active` - Active\n* `inactive` - Inactive\n* `discontinued` - Discontinued\n* `out_of_stock` - Out of Stock"},"is_low_stock":{"type":"boolean","readOnly":true},"image_url":{"type":"string","format":"uri","nullable":true,"readOnly":true},"date_created":{"type":"string","format":"date-time","nullable":true}},"required":["image_url","is_low_stock","name","short_description"]}}},"paths":{"/api/v1.0/organisation/{org_uid}/inventory/":{"get":{"operationId":"organisation_inventory_list","description":"Get a paginated list of products with optional filters","summary":"List products","parameters":[{"in":"query","name":"category","schema":{"type":"string"},"description":"Filter products by category"},{"in":"query","name":"low_stock","schema":{"type":"boolean"},"description":"Filter only low stock products (true/false)"},{"in":"query","name":"name","schema":{"type":"string"},"description":"Filter products by name/title (case-insensitive partial match)"},{"in":"path","name":"org_uid","schema":{"type":"string"},"required":true},{"in":"query","name":"product_type","schema":{"type":"string"},"description":"Filter products by product type"},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search products by name, product code, or barcode"},{"in":"query","name":"status","schema":{"type":"string"},"description":"Filter products by status (active, inactive, discontinued, out_of_stock)"}],"tags":["Products"],"responses":{"200":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProductList"}}}},"description":""},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"}}}}}}
```

## Create product

> Create a new product

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Products","description":"Product inventory and stock management"}],"servers":[{"url":"https://skhokho.ai","description":"Production"},{"url":"http://102.209.118.152:8000/","description":"Local"},{"url":"https://dev.skhokho.ai","description":"Development"}],"security":[{"cookieAuth":[]},{"basicAuth":[]}],"components":{"securitySchemes":{"cookieAuth":{"type":"apiKey","in":"cookie","name":"sessionid"},"basicAuth":{"type":"http","scheme":"basic"}},"schemas":{"ProductRequest":{"type":"object","description":"Full serializer for Product creation and updates.\nHandles translatable fields correctly.","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"description":{"type":"string","nullable":true},"short_description":{"type":"string","nullable":true,"maxLength":500},"product_code":{"type":"string","nullable":true,"maxLength":100},"barcode":{"type":"string","nullable":true,"maxLength":100},"product_type":{"enum":["manufacture","buy"],"type":"string","description":"Product type is required.\n\n* `manufacture` - Manufacture\n* `buy` - Buy"},"category":{"type":"string","nullable":true,"maxLength":200},"brand":{"type":"string","nullable":true,"maxLength":200},"model_number":{"type":"string","nullable":true,"maxLength":200},"unit_of_measure":{"enum":["piece","kg","gram","liter","meter","square_meter","cubic_meter","hour","day","month","year","box","pack","dozen","other"],"type":"string","description":"* `piece` - Piece\n* `kg` - Kilogram\n* `gram` - Gram\n* `liter` - Liter\n* `meter` - Meter\n* `square_meter` - Square Meter\n* `cubic_meter` - Cubic Meter\n* `hour` - Hour\n* `day` - Day\n* `month` - Month\n* `year` - Year\n* `box` - Box\n* `pack` - Pack\n* `dozen` - Dozen\n* `other` - Other"},"cost_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Cost price per unit"},"selling_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Selling price per unit"},"current_stock":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$"},"minimum_stock_level":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$"},"maximum_stock_level":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true},"status":{"enum":["active","inactive","discontinued","out_of_stock"],"type":"string","description":"* `active` - Active\n* `inactive` - Inactive\n* `discontinued` - Discontinued\n* `out_of_stock` - Out of Stock"},"image":{"type":"string","format":"binary","nullable":true,"title":"Product Image","description":"Product image for catalogs and invoices"},"supplier_name":{"type":"string","nullable":true,"maxLength":300}},"required":["name","product_type"]},"ProductDetail":{"type":"object","description":"Detailed serializer for single product retrieval.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"name":{"type":"string","readOnly":true},"description":{"type":"string","readOnly":true},"short_description":{"type":"string","readOnly":true},"product_code":{"type":"string","nullable":true,"maxLength":100},"barcode":{"type":"string","nullable":true,"maxLength":100},"product_type":{"enum":["manufacture","buy"],"type":"string","description":"* `manufacture` - Manufacture\n* `buy` - Buy"},"category":{"type":"string","nullable":true,"maxLength":200},"brand":{"type":"string","nullable":true,"maxLength":200},"model_number":{"type":"string","nullable":true,"maxLength":200},"unit_of_measure":{"enum":["piece","kg","gram","liter","meter","square_meter","cubic_meter","hour","day","month","year","box","pack","dozen","other"],"type":"string","description":"* `piece` - Piece\n* `kg` - Kilogram\n* `gram` - Gram\n* `liter` - Liter\n* `meter` - Meter\n* `square_meter` - Square Meter\n* `cubic_meter` - Cubic Meter\n* `hour` - Hour\n* `day` - Day\n* `month` - Month\n* `year` - Year\n* `box` - Box\n* `pack` - Pack\n* `dozen` - Dozen\n* `other` - Other"},"cost_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Cost price per unit"},"selling_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Selling price per unit"},"current_stock":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$"},"minimum_stock_level":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$"},"maximum_stock_level":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true},"status":{"enum":["active","inactive","discontinued","out_of_stock"],"type":"string","description":"* `active` - Active\n* `inactive` - Inactive\n* `discontinued` - Discontinued\n* `out_of_stock` - Out of Stock"},"image_url":{"type":"string","format":"uri","nullable":true,"readOnly":true},"supplier_name":{"type":"string","nullable":true,"maxLength":300},"created_by":{"allOf":[{"$ref":"#/components/schemas/ProductPersonMini"}],"readOnly":true},"is_low_stock":{"type":"boolean","readOnly":true},"profit_margin":{"type":"string","format":"decimal","pattern":"^-?\\d{0,8}(?:\\.\\d{0,2})?$","nullable":true,"readOnly":true},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["created_by","description","image_url","is_low_stock","name","profit_margin","short_description"]},"ProductPersonMini":{"type":"object","description":"Lightweight serializer for Person references.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"full_name":{"type":"string","nullable":true,"readOnly":true}},"required":["full_name"]}}},"paths":{"/api/v1.0/organisation/{org_uid}/inventory/create/":{"post":{"operationId":"organisation_inventory_create_create","description":"Create a new product","summary":"Create product","parameters":[{"in":"path","name":"org_uid","schema":{"type":"string"},"required":true}],"tags":["Products"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProductRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProductRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDetail"}}},"description":""},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"}}}}}}
```

## Retrieve product

> Get detailed information about a specific product

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Products","description":"Product inventory and stock management"}],"servers":[{"url":"https://skhokho.ai","description":"Production"},{"url":"http://102.209.118.152:8000/","description":"Local"},{"url":"https://dev.skhokho.ai","description":"Development"}],"security":[{"cookieAuth":[]},{"basicAuth":[]}],"components":{"securitySchemes":{"cookieAuth":{"type":"apiKey","in":"cookie","name":"sessionid"},"basicAuth":{"type":"http","scheme":"basic"}},"schemas":{"ProductDetail":{"type":"object","description":"Detailed serializer for single product retrieval.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"name":{"type":"string","readOnly":true},"description":{"type":"string","readOnly":true},"short_description":{"type":"string","readOnly":true},"product_code":{"type":"string","nullable":true,"maxLength":100},"barcode":{"type":"string","nullable":true,"maxLength":100},"product_type":{"enum":["manufacture","buy"],"type":"string","description":"* `manufacture` - Manufacture\n* `buy` - Buy"},"category":{"type":"string","nullable":true,"maxLength":200},"brand":{"type":"string","nullable":true,"maxLength":200},"model_number":{"type":"string","nullable":true,"maxLength":200},"unit_of_measure":{"enum":["piece","kg","gram","liter","meter","square_meter","cubic_meter","hour","day","month","year","box","pack","dozen","other"],"type":"string","description":"* `piece` - Piece\n* `kg` - Kilogram\n* `gram` - Gram\n* `liter` - Liter\n* `meter` - Meter\n* `square_meter` - Square Meter\n* `cubic_meter` - Cubic Meter\n* `hour` - Hour\n* `day` - Day\n* `month` - Month\n* `year` - Year\n* `box` - Box\n* `pack` - Pack\n* `dozen` - Dozen\n* `other` - Other"},"cost_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Cost price per unit"},"selling_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Selling price per unit"},"current_stock":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$"},"minimum_stock_level":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$"},"maximum_stock_level":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true},"status":{"enum":["active","inactive","discontinued","out_of_stock"],"type":"string","description":"* `active` - Active\n* `inactive` - Inactive\n* `discontinued` - Discontinued\n* `out_of_stock` - Out of Stock"},"image_url":{"type":"string","format":"uri","nullable":true,"readOnly":true},"supplier_name":{"type":"string","nullable":true,"maxLength":300},"created_by":{"allOf":[{"$ref":"#/components/schemas/ProductPersonMini"}],"readOnly":true},"is_low_stock":{"type":"boolean","readOnly":true},"profit_margin":{"type":"string","format":"decimal","pattern":"^-?\\d{0,8}(?:\\.\\d{0,2})?$","nullable":true,"readOnly":true},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["created_by","description","image_url","is_low_stock","name","profit_margin","short_description"]},"ProductPersonMini":{"type":"object","description":"Lightweight serializer for Person references.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"full_name":{"type":"string","nullable":true,"readOnly":true}},"required":["full_name"]}}},"paths":{"/api/v1.0/organisation/{org_uid}/inventory/{unique_id}/":{"get":{"operationId":"organisation_inventory_retrieve","description":"Get detailed information about a specific product","summary":"Retrieve product","parameters":[{"in":"path","name":"org_uid","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Products"],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDetail"}}},"description":""},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}}}}
```

## Update product

> Update product information (PUT for full update, PATCH for partial)

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Products","description":"Product inventory and stock management"}],"servers":[{"url":"https://skhokho.ai","description":"Production"},{"url":"http://102.209.118.152:8000/","description":"Local"},{"url":"https://dev.skhokho.ai","description":"Development"}],"security":[{"cookieAuth":[]},{"basicAuth":[]}],"components":{"securitySchemes":{"cookieAuth":{"type":"apiKey","in":"cookie","name":"sessionid"},"basicAuth":{"type":"http","scheme":"basic"}},"schemas":{"ProductRequest":{"type":"object","description":"Full serializer for Product creation and updates.\nHandles translatable fields correctly.","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"description":{"type":"string","nullable":true},"short_description":{"type":"string","nullable":true,"maxLength":500},"product_code":{"type":"string","nullable":true,"maxLength":100},"barcode":{"type":"string","nullable":true,"maxLength":100},"product_type":{"enum":["manufacture","buy"],"type":"string","description":"Product type is required.\n\n* `manufacture` - Manufacture\n* `buy` - Buy"},"category":{"type":"string","nullable":true,"maxLength":200},"brand":{"type":"string","nullable":true,"maxLength":200},"model_number":{"type":"string","nullable":true,"maxLength":200},"unit_of_measure":{"enum":["piece","kg","gram","liter","meter","square_meter","cubic_meter","hour","day","month","year","box","pack","dozen","other"],"type":"string","description":"* `piece` - Piece\n* `kg` - Kilogram\n* `gram` - Gram\n* `liter` - Liter\n* `meter` - Meter\n* `square_meter` - Square Meter\n* `cubic_meter` - Cubic Meter\n* `hour` - Hour\n* `day` - Day\n* `month` - Month\n* `year` - Year\n* `box` - Box\n* `pack` - Pack\n* `dozen` - Dozen\n* `other` - Other"},"cost_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Cost price per unit"},"selling_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Selling price per unit"},"current_stock":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$"},"minimum_stock_level":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$"},"maximum_stock_level":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true},"status":{"enum":["active","inactive","discontinued","out_of_stock"],"type":"string","description":"* `active` - Active\n* `inactive` - Inactive\n* `discontinued` - Discontinued\n* `out_of_stock` - Out of Stock"},"image":{"type":"string","format":"binary","nullable":true,"title":"Product Image","description":"Product image for catalogs and invoices"},"supplier_name":{"type":"string","nullable":true,"maxLength":300}},"required":["name","product_type"]},"ProductDetail":{"type":"object","description":"Detailed serializer for single product retrieval.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"name":{"type":"string","readOnly":true},"description":{"type":"string","readOnly":true},"short_description":{"type":"string","readOnly":true},"product_code":{"type":"string","nullable":true,"maxLength":100},"barcode":{"type":"string","nullable":true,"maxLength":100},"product_type":{"enum":["manufacture","buy"],"type":"string","description":"* `manufacture` - Manufacture\n* `buy` - Buy"},"category":{"type":"string","nullable":true,"maxLength":200},"brand":{"type":"string","nullable":true,"maxLength":200},"model_number":{"type":"string","nullable":true,"maxLength":200},"unit_of_measure":{"enum":["piece","kg","gram","liter","meter","square_meter","cubic_meter","hour","day","month","year","box","pack","dozen","other"],"type":"string","description":"* `piece` - Piece\n* `kg` - Kilogram\n* `gram` - Gram\n* `liter` - Liter\n* `meter` - Meter\n* `square_meter` - Square Meter\n* `cubic_meter` - Cubic Meter\n* `hour` - Hour\n* `day` - Day\n* `month` - Month\n* `year` - Year\n* `box` - Box\n* `pack` - Pack\n* `dozen` - Dozen\n* `other` - Other"},"cost_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Cost price per unit"},"selling_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Selling price per unit"},"current_stock":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$"},"minimum_stock_level":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$"},"maximum_stock_level":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true},"status":{"enum":["active","inactive","discontinued","out_of_stock"],"type":"string","description":"* `active` - Active\n* `inactive` - Inactive\n* `discontinued` - Discontinued\n* `out_of_stock` - Out of Stock"},"image_url":{"type":"string","format":"uri","nullable":true,"readOnly":true},"supplier_name":{"type":"string","nullable":true,"maxLength":300},"created_by":{"allOf":[{"$ref":"#/components/schemas/ProductPersonMini"}],"readOnly":true},"is_low_stock":{"type":"boolean","readOnly":true},"profit_margin":{"type":"string","format":"decimal","pattern":"^-?\\d{0,8}(?:\\.\\d{0,2})?$","nullable":true,"readOnly":true},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["created_by","description","image_url","is_low_stock","name","profit_margin","short_description"]},"ProductPersonMini":{"type":"object","description":"Lightweight serializer for Person references.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"full_name":{"type":"string","nullable":true,"readOnly":true}},"required":["full_name"]}}},"paths":{"/api/v1.0/organisation/{org_uid}/inventory/{unique_id}/update/":{"put":{"operationId":"organisation_inventory_update_update","description":"Update product information (PUT for full update, PATCH for partial)","summary":"Update product","parameters":[{"in":"path","name":"org_uid","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Products"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ProductRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProductRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDetail"}}},"description":""},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}}}}
```

## Update product

> Update product information (PUT for full update, PATCH for partial)

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Products","description":"Product inventory and stock management"}],"servers":[{"url":"https://skhokho.ai","description":"Production"},{"url":"http://102.209.118.152:8000/","description":"Local"},{"url":"https://dev.skhokho.ai","description":"Development"}],"security":[{"cookieAuth":[]},{"basicAuth":[]}],"components":{"securitySchemes":{"cookieAuth":{"type":"apiKey","in":"cookie","name":"sessionid"},"basicAuth":{"type":"http","scheme":"basic"}},"schemas":{"PatchedProductRequest":{"type":"object","description":"Full serializer for Product creation and updates.\nHandles translatable fields correctly.","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"description":{"type":"string","nullable":true},"short_description":{"type":"string","nullable":true,"maxLength":500},"product_code":{"type":"string","nullable":true,"maxLength":100},"barcode":{"type":"string","nullable":true,"maxLength":100},"product_type":{"enum":["manufacture","buy"],"type":"string","description":"Product type is required.\n\n* `manufacture` - Manufacture\n* `buy` - Buy"},"category":{"type":"string","nullable":true,"maxLength":200},"brand":{"type":"string","nullable":true,"maxLength":200},"model_number":{"type":"string","nullable":true,"maxLength":200},"unit_of_measure":{"enum":["piece","kg","gram","liter","meter","square_meter","cubic_meter","hour","day","month","year","box","pack","dozen","other"],"type":"string","description":"* `piece` - Piece\n* `kg` - Kilogram\n* `gram` - Gram\n* `liter` - Liter\n* `meter` - Meter\n* `square_meter` - Square Meter\n* `cubic_meter` - Cubic Meter\n* `hour` - Hour\n* `day` - Day\n* `month` - Month\n* `year` - Year\n* `box` - Box\n* `pack` - Pack\n* `dozen` - Dozen\n* `other` - Other"},"cost_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Cost price per unit"},"selling_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Selling price per unit"},"current_stock":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$"},"minimum_stock_level":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$"},"maximum_stock_level":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true},"status":{"enum":["active","inactive","discontinued","out_of_stock"],"type":"string","description":"* `active` - Active\n* `inactive` - Inactive\n* `discontinued` - Discontinued\n* `out_of_stock` - Out of Stock"},"image":{"type":"string","format":"binary","nullable":true,"title":"Product Image","description":"Product image for catalogs and invoices"},"supplier_name":{"type":"string","nullable":true,"maxLength":300}}},"ProductDetail":{"type":"object","description":"Detailed serializer for single product retrieval.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"name":{"type":"string","readOnly":true},"description":{"type":"string","readOnly":true},"short_description":{"type":"string","readOnly":true},"product_code":{"type":"string","nullable":true,"maxLength":100},"barcode":{"type":"string","nullable":true,"maxLength":100},"product_type":{"enum":["manufacture","buy"],"type":"string","description":"* `manufacture` - Manufacture\n* `buy` - Buy"},"category":{"type":"string","nullable":true,"maxLength":200},"brand":{"type":"string","nullable":true,"maxLength":200},"model_number":{"type":"string","nullable":true,"maxLength":200},"unit_of_measure":{"enum":["piece","kg","gram","liter","meter","square_meter","cubic_meter","hour","day","month","year","box","pack","dozen","other"],"type":"string","description":"* `piece` - Piece\n* `kg` - Kilogram\n* `gram` - Gram\n* `liter` - Liter\n* `meter` - Meter\n* `square_meter` - Square Meter\n* `cubic_meter` - Cubic Meter\n* `hour` - Hour\n* `day` - Day\n* `month` - Month\n* `year` - Year\n* `box` - Box\n* `pack` - Pack\n* `dozen` - Dozen\n* `other` - Other"},"cost_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Cost price per unit"},"selling_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Selling price per unit"},"current_stock":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$"},"minimum_stock_level":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$"},"maximum_stock_level":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true},"status":{"enum":["active","inactive","discontinued","out_of_stock"],"type":"string","description":"* `active` - Active\n* `inactive` - Inactive\n* `discontinued` - Discontinued\n* `out_of_stock` - Out of Stock"},"image_url":{"type":"string","format":"uri","nullable":true,"readOnly":true},"supplier_name":{"type":"string","nullable":true,"maxLength":300},"created_by":{"allOf":[{"$ref":"#/components/schemas/ProductPersonMini"}],"readOnly":true},"is_low_stock":{"type":"boolean","readOnly":true},"profit_margin":{"type":"string","format":"decimal","pattern":"^-?\\d{0,8}(?:\\.\\d{0,2})?$","nullable":true,"readOnly":true},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["created_by","description","image_url","is_low_stock","name","profit_margin","short_description"]},"ProductPersonMini":{"type":"object","description":"Lightweight serializer for Person references.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"full_name":{"type":"string","nullable":true,"readOnly":true}},"required":["full_name"]}}},"paths":{"/api/v1.0/organisation/{org_uid}/inventory/{unique_id}/update/":{"patch":{"operationId":"organisation_inventory_update_partial_update","description":"Update product information (PUT for full update, PATCH for partial)","summary":"Update product","parameters":[{"in":"path","name":"org_uid","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Products"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedProductRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedProductRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedProductRequest"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDetail"}}},"description":""},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}}}}
```

## Perform action on product

> Perform actions on a product (deactivate, mark\_out\_of\_stock). Uses query parameters.

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Products","description":"Product inventory and stock management"}],"servers":[{"url":"https://skhokho.ai","description":"Production"},{"url":"http://102.209.118.152:8000/","description":"Local"},{"url":"https://dev.skhokho.ai","description":"Development"}],"security":[{"cookieAuth":[]},{"basicAuth":[]}],"components":{"securitySchemes":{"cookieAuth":{"type":"apiKey","in":"cookie","name":"sessionid"},"basicAuth":{"type":"http","scheme":"basic"}},"schemas":{"ProductDetail":{"type":"object","description":"Detailed serializer for single product retrieval.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"name":{"type":"string","readOnly":true},"description":{"type":"string","readOnly":true},"short_description":{"type":"string","readOnly":true},"product_code":{"type":"string","nullable":true,"maxLength":100},"barcode":{"type":"string","nullable":true,"maxLength":100},"product_type":{"enum":["manufacture","buy"],"type":"string","description":"* `manufacture` - Manufacture\n* `buy` - Buy"},"category":{"type":"string","nullable":true,"maxLength":200},"brand":{"type":"string","nullable":true,"maxLength":200},"model_number":{"type":"string","nullable":true,"maxLength":200},"unit_of_measure":{"enum":["piece","kg","gram","liter","meter","square_meter","cubic_meter","hour","day","month","year","box","pack","dozen","other"],"type":"string","description":"* `piece` - Piece\n* `kg` - Kilogram\n* `gram` - Gram\n* `liter` - Liter\n* `meter` - Meter\n* `square_meter` - Square Meter\n* `cubic_meter` - Cubic Meter\n* `hour` - Hour\n* `day` - Day\n* `month` - Month\n* `year` - Year\n* `box` - Box\n* `pack` - Pack\n* `dozen` - Dozen\n* `other` - Other"},"cost_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Cost price per unit"},"selling_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Selling price per unit"},"current_stock":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$"},"minimum_stock_level":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$"},"maximum_stock_level":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true},"status":{"enum":["active","inactive","discontinued","out_of_stock"],"type":"string","description":"* `active` - Active\n* `inactive` - Inactive\n* `discontinued` - Discontinued\n* `out_of_stock` - Out of Stock"},"image_url":{"type":"string","format":"uri","nullable":true,"readOnly":true},"supplier_name":{"type":"string","nullable":true,"maxLength":300},"created_by":{"allOf":[{"$ref":"#/components/schemas/ProductPersonMini"}],"readOnly":true},"is_low_stock":{"type":"boolean","readOnly":true},"profit_margin":{"type":"string","format":"decimal","pattern":"^-?\\d{0,8}(?:\\.\\d{0,2})?$","nullable":true,"readOnly":true},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["created_by","description","image_url","is_low_stock","name","profit_margin","short_description"]},"ProductPersonMini":{"type":"object","description":"Lightweight serializer for Person references.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"full_name":{"type":"string","nullable":true,"readOnly":true}},"required":["full_name"]}}},"paths":{"/api/v1.0/organisation/{org_uid}/inventory/{unique_id}/action/":{"get":{"operationId":"organisation_inventory_action_retrieve","description":"Perform actions on a product (deactivate, mark_out_of_stock). Uses query parameters.","summary":"Perform action on product","parameters":[{"in":"query","name":"action","schema":{"type":"string","enum":["deactivate","mark_out_of_stock"]},"description":"Action to perform: deactivate or mark_out_of_stock","required":true},{"in":"path","name":"org_uid","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Products"],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDetail"}}},"description":""},"400":{"description":"Bad Request - Invalid action"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.skhokho.ai/assets/products.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
