Skip to main content

Overview

The Inventory API provides comprehensive endpoints for managing inventory items, including CRUD operations, quantity updates, and analytics. All endpoints require authentication.

Get All Inventory

Retrieve all inventory items with pagination and filtering. Access: Private (all authenticated users)

Query Parameters

page
number
default:"1"
Page number for pagination
limit
number
default:"10"
Number of items per page
category
string
Filter by category (case-insensitive)
supplier
string
Filter by supplier (case-insensitive)
Search by product name or SKU
minQty
number
Minimum quantity filter
maxQty
number
Maximum quantity filter
sortBy
string
Field to sort by (e.g., quantity, expiryDate)
order
string
Sort order: asc or desc

Response

items
array
Array of inventory items
pagination
object
currentPage
number
Current page number
totalPages
number
Total number of pages
totalItems
number
Total number of items
limit
number
Items per page

Example Response

{
  "success": true,
  "message": "Inventory items fetched successfully",
  "data": {
    "items": [
      {
        "_id": "65a1234567890abcdef12345",
        "productName": "Organic Apples",
        "category": "Fruits",
        "sku": "FRT-001",
        "quantity": 150,
        "purchaseDate": "2024-01-15T00:00:00.000Z",
        "expiryDate": "2024-02-15T00:00:00.000Z",
        "supplier": "Fresh Farms Ltd",
        "createdBy": {
          "_id": "65a9876543210fedcba98765",
          "name": "Admin User",
          "email": "[email protected]"
        }
      }
    ],
    "pagination": {
      "currentPage": 1,
      "totalPages": 5,
      "totalItems": 50,
      "limit": 10
    }
  }
}

Get Inventory Item

Get a single inventory item by ID. Access: Private (all authenticated users)

Response

{
  "success": true,
  "message": "Inventory item fetched successfully",
  "data": {
    "item": {
      "_id": "65a1234567890abcdef12345",
      "productName": "Organic Apples",
      "category": "Fruits",
      "sku": "FRT-001",
      "quantity": 150,
      "purchaseDate": "2024-01-15T00:00:00.000Z",
      "expiryDate": "2024-02-15T00:00:00.000Z",
      "supplier": "Fresh Farms Ltd"
    }
  }
}

Create Inventory Item

Create a new inventory item. Access: Private (Admin/Manager only)

Request Body

productName
string
required
Name of the product
category
string
required
Product category
sku
string
required
Stock Keeping Unit (will be converted to uppercase)
quantity
number
required
Initial quantity in stock
purchaseDate
string
required
Purchase date (ISO 8601 format)
expiryDate
string
required
Expiry date (must be after purchase date)
supplier
string
required
Supplier name

Example Request

{
  "productName": "Organic Apples",
  "category": "Fruits",
  "sku": "FRT-001",
  "quantity": 150,
  "purchaseDate": "2024-01-15",
  "expiryDate": "2024-02-15",
  "supplier": "Fresh Farms Ltd"
}

Update Inventory Item

Update an existing inventory item. Access: Private (Admin/Manager only)

Request Body

All fields are optional. Only provided fields will be updated.
productName
string
Updated product name
category
string
Updated category
quantity
number
Updated quantity
purchaseDate
string
Updated purchase date
expiryDate
string
Updated expiry date
supplier
string
Updated supplier

Update Quantity

Quickly update inventory quantity with add, subtract, or set operations. Access: Private (Admin/Manager only)

Request Body

quantity
number
required
Quantity value
operation
string
required
Operation type: add, subtract, or set

Example Request

{
  "quantity": 50,
  "operation": "add"
}

Example Response

{
  "success": true,
  "message": "Inventory quantity updated successfully",
  "data": {
    "item": {
      "_id": "65a1234567890abcdef12345",
      "productName": "Organic Apples",
      "quantity": 200,
      "lastModifiedBy": {
        "name": "Manager User",
        "email": "[email protected]"
      }
    }
  }
}

Delete Inventory Item

Delete an inventory item. Access: Private (Admin/Manager only)

Response

{
  "success": true,
  "message": "Inventory item deleted successfully",
  "data": null
}

Analytics Endpoints

Get Inventory by Category

Get aggregated inventory data grouped by category. Access: Private (all authenticated users)

Response

{
  "success": true,
  "message": "Category analytics fetched successfully",
  "data": {
    "categories": [
      {
        "category": "Fruits",
        "totalQuantity": 500,
        "itemCount": 5,
        "avgQuantity": 100
      }
    ]
  }
}

Get Inventory by Supplier

Get aggregated inventory data grouped by supplier. Access: Private (all authenticated users)

Response

{
  "success": true,
  "message": "Supplier analytics fetched successfully",
  "data": {
    "suppliers": [
      {
        "supplier": "Fresh Farms Ltd",
        "totalQuantity": 750,
        "itemCount": 8,
        "categories": ["Fruits", "Vegetables"]
      }
    ]
  }
}

Get Inventory Summary

Get dashboard summary statistics. Access: Private (all authenticated users)

Response

{
  "success": true,
  "message": "Inventory summary fetched successfully",
  "data": {
    "summary": {
      "totalItems": 50,
      "totalQuantity": 2500,
      "categoriesCount": 8,
      "suppliersCount": 12,
      "lowStockCount": 5,
      "outOfStockCount": 2,
      "expiringSoonCount": 3,
      "expiredCount": 1
    }
  }
}

Build docs developers (and LLMs) love