GET/api/v1/consignment/summaryJWT Summary
GET/api/v1/consignmentJWT List consignments
Customer AppSalesQuery: pagination / filters GET/api/v1/consignment/:idJWT Get a consignment by id
POST/api/v1/consignmentJWT Create a consignment
Customer AppSalesBody: CreateConsignmentDto PATCH/api/v1/consignment/:id/settleJWT Settle
Customer AppSalesBody: SettleConsignmentDto PATCH/api/v1/consignment/:idJWT Update a consignment
Customer AppSalesBody: UpdateConsignmentDto DELETE/api/v1/consignment/:idJWT Delete a consignment
GET/api/v1/delivery-notesJWT List delivery notes
Customer AppSalesQuery: pagination / filters GET/api/v1/delivery-notes/:idJWT Get a delivery note by id
POST/api/v1/delivery-notesJWT Create a delivery note
Customer AppSalesBody: CreateDeliveryNoteDto PATCH/api/v1/delivery-notes/:idJWT Update a delivery note
Customer AppSalesBody: UpdateDeliveryNoteDto PATCH/api/v1/delivery-notes/:id/statusJWT Set status
Customer AppSalesBody: JSON PATCH/api/v1/delivery-notes/:id/lockJWT Set lock
Customer AppSalesBody: JSON PATCH/api/v1/delivery-notes/:id/discountJWT Set discount
Customer AppSalesBody: JSON PATCH/api/v1/delivery-notes/:id/chargesJWT Set charges
Customer AppSalesBody: JSON PATCH/api/v1/delivery-notes/:id/reminderJWT Set reminder
Customer AppSalesBody: JSON POST/api/v1/delivery-notes/:id/duplicateJWT Duplicate
POST/api/v1/delivery-notes/:id/convert-to-sales-invoiceJWT Convert a DeliveryNote to a SalesInvoice (bill a dispatched shipment)
POST/api/v1/delivery-notes/:id/convert-to-proforma-invoiceJWT Convert a DeliveryNote to a ProformaInvoice (client docx #1: proforma should be able to follow the delivery note)
DELETE/api/v1/delivery-notes/:idJWT Delete a delivery note
GET/api/v1/proforma-invoices/:proformaInvoiceId/activitiesJWT List proforma-invoice activities
Customer AppSalesQuery: pagination / filters POST/api/v1/proforma-invoices/:proformaInvoiceId/activitiesJWT Create a proforma-invoice activity
Customer AppSalesBody: CreateActivityDto DELETE/api/v1/proforma-invoices/:proformaInvoiceId/activities/:activityIdJWT Delete a proforma-invoice activity
GET/api/v1/proforma-invoicesJWT List proforma invoices
Customer AppSalesQuery: pagination / filters GET/api/v1/proforma-invoices/:idJWT Get a proforma invoice by id
POST/api/v1/proforma-invoicesJWT Create a proforma invoice
Customer AppSalesBody: CreateProformaInvoiceDto PATCH/api/v1/proforma-invoices/:idJWT Update a proforma invoice
Customer AppSalesBody: UpdateProformaInvoiceDto PATCH/api/v1/proforma-invoices/:id/statusJWT Set status
Customer AppSalesBody: JSON POST/api/v1/proforma-invoices/:id/convert-to-sales-invoiceJWT Convert a Proforma Invoice directly to a SalesInvoice
DELETE/api/v1/proforma-invoices/:idJWT Delete a proforma invoice
GET/api/v1/quotations/:quotationId/activitiesJWT List quotation activities
Customer AppSalesQuery: pagination / filters POST/api/v1/quotations/:quotationId/activitiesJWT Create a quotation activity
Customer AppSalesBody: CreateActivityDto DELETE/api/v1/quotations/:quotationId/activities/:activityIdJWT Delete a quotation activity
GET/api/v1/quotations/:idJWT Get a quotation by id
POST/api/v1/quotationsJWT Create a quotation
Customer AppSalesBody: CreateQuotationDto PATCH/api/v1/quotations/:idJWT Update a quotation
Customer AppSalesBody: UpdateQuotationDto PATCH/api/v1/quotations/:id/statusJWT Set status
Customer AppSalesBody: JSON POST/api/v1/quotations/:id/convert-to-sales-orderJWT Convert a Quotation to a SalesOrder
POST/api/v1/quotations/:id/convert-to-sales-invoiceJWT Convert a Quotation directly to a SalesInvoice (skipping SO)
POST/api/v1/quotations/:id/convert-to-proforma-invoiceJWT Convert a Quotation to a ProformaInvoice (pre-invoice / advance payment request, before the tax invoice is issued)
POST/api/v1/quotations/:id/convert-to-delivery-noteJWT Convert a Quotation to a DeliveryNote (ship first, bill later)
POST/api/v1/quotations/:id/convert-to-sales-returnJWT Convert a Quotation to a SalesReturn (credit note)
DELETE/api/v1/quotations/:idJWT Delete a quotation
GET/api/v1/sales-invoicesJWT List sales invoices
Customer AppSalesQuery: pagination / filters GET/api/v1/sales-invoices/:idJWT Get a sales invoice by id
POST/api/v1/sales-invoicesJWT Create a sales invoice
Customer AppSalesBody: CreateSalesInvoiceDto PATCH/api/v1/sales-invoices/:idJWT Update a sales invoice
Customer AppSalesBody: UpdateSalesInvoiceDto PATCH/api/v1/sales-invoices/:id/statusJWT Set status
Customer AppSalesBody: JSON PATCH/api/v1/sales-invoices/:id/lockJWT Set lock
Customer AppSalesBody: JSON PATCH/api/v1/sales-invoices/:id/discountJWT Set discount
Customer AppSalesBody: JSON PATCH/api/v1/sales-invoices/:id/chargesJWT Set charges
Customer AppSalesBody: JSON PATCH/api/v1/sales-invoices/:id/reminderJWT Set reminder
Customer AppSalesBody: JSON POST/api/v1/sales-invoices/:id/record-paymentJWT Record payment
Customer AppSalesBody: RecordPaymentDto POST/api/v1/sales-invoices/:id/zatca-qrJWT issue the invoice: generate/attach its ZATCA QR and stamp `qrGeneratedAt`
Customer AppSalesBody: IssueZatcaQrDto POST/api/v1/sales-invoices/:id/duplicateJWT Duplicate
DELETE/api/v1/sales-invoices/:idJWT Delete a sales invoice
GET/api/v1/sales-ordersJWT List sales orders
Customer AppSalesQuery: pagination / filters GET/api/v1/sales-orders/:idJWT Get a sales order by id
POST/api/v1/sales-ordersJWT Create a sales order
Customer AppSalesBody: CreateSalesOrderDto PATCH/api/v1/sales-orders/:idJWT Update a sales order
Customer AppSalesBody: UpdateSalesOrderDto PATCH/api/v1/sales-orders/:id/statusJWT manual workflow status change
Customer AppSalesBody: UpdateSalesOrderStatusDto PATCH/api/v1/sales-orders/:id/lockJWT Set lock
Customer AppSalesBody: JSON PATCH/api/v1/sales-orders/:id/discountJWT Set discount
Customer AppSalesBody: JSON PATCH/api/v1/sales-orders/:id/chargesJWT Set charges
Customer AppSalesBody: JSON PATCH/api/v1/sales-orders/:id/reminderJWT Set reminder
Customer AppSalesBody: JSON POST/api/v1/sales-orders/:id/duplicateJWT Duplicate
POST/api/v1/sales-orders/:id/convertJWT Convert
Customer AppSalesBody: JSON POST/api/v1/sales-orders/:id/convert-to-sales-invoiceJWT Convert a SalesOrder into a real SalesInvoice (billing)
POST/api/v1/sales-orders/:id/convert-to-delivery-noteJWT Convert a SalesOrder into a real DeliveryNote (shipment)
DELETE/api/v1/sales-orders/:idJWT Delete a sales order
GET/api/v1/sales-returnsJWT List sales returns
Customer AppSalesQuery: pagination / filters GET/api/v1/sales-returns/:idJWT Get a sales return by id
POST/api/v1/sales-returnsJWT Create a sales return
Customer AppSalesBody: CreateSalesReturnDto POST/api/v1/sales-returns/from-invoice/:invoiceIdJWT Bugs (1).docx — Convert a Sales Invoice → Sales Return (credit note)
PATCH/api/v1/sales-returns/:idJWT Update a sales return
Customer AppSalesBody: UpdateSalesReturnDto PATCH/api/v1/sales-returns/:id/statusJWT Set status
Customer AppSalesBody: JSON PATCH/api/v1/sales-returns/:id/lockJWT Set lock
Customer AppSalesBody: JSON PATCH/api/v1/sales-returns/:id/discountJWT Set discount
Customer AppSalesBody: JSON PATCH/api/v1/sales-returns/:id/chargesJWT Set charges
Customer AppSalesBody: JSON PATCH/api/v1/sales-returns/:id/reminderJWT Set reminder
Customer AppSalesBody: JSON POST/api/v1/sales-returns/:id/approveJWT Approve
Customer AppSalesBody: ApproveReturnDto POST/api/v1/sales-returns/:id/inspectJWT Inspect
Customer AppSalesBody: InspectReturnDto POST/api/v1/sales-returns/:id/process-refundJWT Process refund
Customer AppSalesBody: ProcessRefundDto POST/api/v1/sales-returns/:id/zatca-qrJWT issue the credit note: generate/attach its ZATCA QR and stamp `qrGeneratedAt`
Customer AppSalesBody: IssueZatcaQrDto POST/api/v1/sales-returns/:id/duplicateJWT Duplicate
DELETE/api/v1/sales-returns/:idJWT Delete a sales return
GET/api/v1/salesman/:id/summaryJWT Summary
GET/api/v1/salesman/:idJWT Get a salesman by id
PATCH/api/v1/salesman/:idJWT Update a salesman
Customer AppSalesBody: UpdateSalesmanDto DELETE/api/v1/salesman/:idJWT Delete a salesman
GET/api/v1/van-sales/summaryJWT Summary
GET/api/v1/van-sales/routesJWT List routes
Customer AppSalesQuery: pagination / filters GET/api/v1/van-sales/routes/:idJWT Find route
POST/api/v1/van-sales/routesJWT Create route
Customer AppSalesBody: CreateSalesRouteDto PATCH/api/v1/van-sales/routes/:idJWT Update route
Customer AppSalesBody: UpdateSalesRouteDto DELETE/api/v1/van-sales/routes/:idJWT Remove route
GET/api/v1/van-sales/loadsJWT List loads
Customer AppSalesQuery: pagination / filters GET/api/v1/van-sales/loads/:idJWT Find load
POST/api/v1/van-sales/loadsJWT Create load
Customer AppSalesBody: CreateVanLoadDto PATCH/api/v1/van-sales/loads/:id/settleJWT Settle
Customer AppSalesBody: SettleVanLoadDto PATCH/api/v1/van-sales/loads/:idJWT Update load
Customer AppSalesBody: UpdateVanLoadDto DELETE/api/v1/van-sales/loads/:idJWT Remove load
GET/api/v1/goods-receiptsJWT List goods receipts
Customer AppPurchasingQuery: pagination / filters GET/api/v1/goods-receipts/:idJWT Get a goods receipt by id
POST/api/v1/goods-receiptsJWT Create a goods receipt
Customer AppPurchasingBody: CreateGoodsReceiptDto PATCH/api/v1/goods-receipts/:idJWT Update a goods receipt
Customer AppPurchasingBody: UpdateGoodsReceiptDto PATCH/api/v1/goods-receipts/:id/statusJWT Set status
Customer AppPurchasingBody: JSON PATCH/api/v1/goods-receipts/:id/lockJWT Set lock
Customer AppPurchasingBody: JSON PATCH/api/v1/goods-receipts/:id/discountJWT Set discount
Customer AppPurchasingBody: JSON PATCH/api/v1/goods-receipts/:id/chargesJWT Set charges
Customer AppPurchasingBody: JSON PATCH/api/v1/goods-receipts/:id/reminderJWT Set reminder
Customer AppPurchasingBody: JSON POST/api/v1/goods-receipts/:id/inspectJWT Inspect
Customer AppPurchasingBody: InspectDto POST/api/v1/goods-receipts/:id/duplicateJWT Duplicate
POST/api/v1/goods-receipts/:id/convert-to-purchase-invoiceJWT GoodsReceipt → PurchaseInvoice (see GoodsReceiptsService.convertToPurchaseInvoice)
DELETE/api/v1/goods-receipts/:idJWT Delete a goods receipt
GET/api/v1/payment-termsJWT List payment terms
Customer AppPurchasingQuery: status, search POST/api/v1/payment-termsJWT Create a payment term
Customer AppPurchasingBody: CreatePaymentTermDto PATCH/api/v1/payment-terms/:idJWT Update a payment term
Customer AppPurchasingBody: UpdatePaymentTermDto DELETE/api/v1/payment-terms/:idJWT Delete a payment term
GET/api/v1/purchase-invoicesJWT List purchase invoices
Customer AppPurchasingQuery: pagination / filters GET/api/v1/purchase-invoices/:idJWT Get a purchase invoice by id
POST/api/v1/purchase-invoicesJWT Create a purchase invoice
Customer AppPurchasingBody: CreatePurchaseInvoiceDto PATCH/api/v1/purchase-invoices/:idJWT Update a purchase invoice
Customer AppPurchasingBody: UpdatePurchaseInvoiceDto PATCH/api/v1/purchase-invoices/:id/statusJWT Set status
Customer AppPurchasingBody: JSON PATCH/api/v1/purchase-invoices/:id/lockJWT Set lock
Customer AppPurchasingBody: JSON PATCH/api/v1/purchase-invoices/:id/discountJWT Set discount
Customer AppPurchasingBody: JSON PATCH/api/v1/purchase-invoices/:id/chargesJWT Set charges
Customer AppPurchasingBody: JSON PATCH/api/v1/purchase-invoices/:id/reminderJWT Set reminder
Customer AppPurchasingBody: JSON POST/api/v1/purchase-invoices/:id/record-paymentJWT Record payment
Customer AppPurchasingBody: RecordPaymentDto POST/api/v1/purchase-invoices/:id/duplicateJWT Duplicate
DELETE/api/v1/purchase-invoices/:idJWT Delete a purchase invoice
GET/api/v1/purchase-ordersJWT List purchase orders
Customer AppPurchasingQuery: pagination / filters GET/api/v1/purchase-orders/:idJWT Get a purchase order by id
POST/api/v1/purchase-ordersJWT Create a purchase order
Customer AppPurchasingBody: CreatePurchaseOrderDto PATCH/api/v1/purchase-orders/:idJWT Update a purchase order
Customer AppPurchasingBody: UpdatePurchaseOrderDto PATCH/api/v1/purchase-orders/:id/statusJWT Set status
Customer AppPurchasingBody: JSON PATCH/api/v1/purchase-orders/:id/lockJWT Set lock
Customer AppPurchasingBody: JSON PATCH/api/v1/purchase-orders/:id/discountJWT Set discount
Customer AppPurchasingBody: JSON PATCH/api/v1/purchase-orders/:id/chargesJWT Set charges
Customer AppPurchasingBody: JSON PATCH/api/v1/purchase-orders/:id/reminderJWT Set reminder
Customer AppPurchasingBody: JSON POST/api/v1/purchase-orders/:id/duplicateJWT Duplicate
POST/api/v1/purchase-orders/:id/convert-to-goods-receiptJWT Convert a PurchaseOrder → GoodsReceipt (GRN)
POST/api/v1/purchase-orders/:id/convert-to-purchase-invoiceJWT Convert a PurchaseOrder → PurchaseInvoice (vendor bill / AP)
DELETE/api/v1/purchase-orders/:idJWT Delete a purchase order
GET/api/v1/purchase-requestsJWT List purchase requests
Customer AppPurchasingQuery: pagination / filters GET/api/v1/purchase-requests/:idJWT Get a purchase request by id
POST/api/v1/purchase-requestsJWT Create a purchase request
Customer AppPurchasingBody: CreatePurchaseRequestDto PATCH/api/v1/purchase-requests/:idJWT Update a purchase request
Customer AppPurchasingBody: UpdatePurchaseRequestDto PATCH/api/v1/purchase-requests/:id/statusJWT Set status
Customer AppPurchasingBody: JSON PATCH/api/v1/purchase-requests/:id/lockJWT Set lock
Customer AppPurchasingBody: JSON PATCH/api/v1/purchase-requests/:id/discountJWT Set discount
Customer AppPurchasingBody: JSON PATCH/api/v1/purchase-requests/:id/chargesJWT Set charges
Customer AppPurchasingBody: JSON PATCH/api/v1/purchase-requests/:id/reminderJWT Set reminder
Customer AppPurchasingBody: JSON POST/api/v1/purchase-requests/:id/duplicateJWT Duplicate
POST/api/v1/purchase-requests/:id/convert-to-purchase-orderJWT Convert to purchase order
DELETE/api/v1/purchase-requests/:idJWT Delete a purchase request
GET/api/v1/purchase-returnsJWT List purchase returns
Customer AppPurchasingQuery: pagination / filters GET/api/v1/purchase-returns/:idJWT Get a purchase return by id
POST/api/v1/purchase-returnsJWT Create a purchase return
Customer AppPurchasingBody: CreatePurchaseReturnDto POST/api/v1/purchase-returns/from-invoice/:invoiceIdJWT Bugs (1).docx — Convert a Purchase Invoice → Purchase Return (debit note)
PATCH/api/v1/purchase-returns/:idJWT Update a purchase return
Customer AppPurchasingBody: UpdatePurchaseReturnDto PATCH/api/v1/purchase-returns/:id/statusJWT Set status
Customer AppPurchasingBody: JSON PATCH/api/v1/purchase-returns/:id/lockJWT Set lock
Customer AppPurchasingBody: JSON PATCH/api/v1/purchase-returns/:id/discountJWT Set discount
Customer AppPurchasingBody: JSON PATCH/api/v1/purchase-returns/:id/chargesJWT Set charges
Customer AppPurchasingBody: JSON PATCH/api/v1/purchase-returns/:id/reminderJWT Set reminder
Customer AppPurchasingBody: JSON POST/api/v1/purchase-returns/:id/approveJWT Approve
Customer AppPurchasingBody: ApproveDto POST/api/v1/purchase-returns/:id/inspectJWT Inspect
Customer AppPurchasingBody: InspectDto POST/api/v1/purchase-returns/:id/process-refundJWT Process refund
Customer AppPurchasingBody: ProcessRefundDto POST/api/v1/purchase-returns/:id/duplicateJWT Duplicate
DELETE/api/v1/purchase-returns/:idJWT Delete a purchase return
List vendors
Customer AppPurchasingQuery: pagination / filters GET/api/v1/vendors/check-duplicateJWT Declared BEFORE @Get(':id') so `/vendors/check-duplicate` is not captured by the :id param route
Customer AppPurchasingQuery: pagination / filters GET/api/v1/vendors/:idJWT Get a vendor by id
PATCH/api/v1/vendors/:idJWT Update a vendor
Customer AppPurchasingBody: UpdateVendorDto DELETE/api/v1/vendors/:idJWT Delete a vendor
GET/api/v1/customer-branchesJWT List customer branches
Customer AppCustomers & ContactsQuery: customerId GET/api/v1/customer-branches/:idJWT Get a customer branch by id
Customer AppCustomers & Contacts POST/api/v1/customer-branchesJWT Create a customer branch
Customer AppCustomers & ContactsBody: CreateCustomerBranchDto PATCH/api/v1/customer-branches/:idJWT Update a customer branch
Customer AppCustomers & ContactsBody: UpdateCustomerBranchDto DELETE/api/v1/customer-branches/:idJWT Delete a customer branch
Customer AppCustomers & Contacts GET/api/v1/customer-categoriesJWT List customer categories
Customer AppCustomers & Contacts GET/api/v1/customer-categories/:idJWT Get a customer category by id
Customer AppCustomers & Contacts POST/api/v1/customer-categoriesJWT Create a customer category
Customer AppCustomers & ContactsBody: CreateCustomerCategoryDto PATCH/api/v1/customer-categories/:idJWT Update a customer category
Customer AppCustomers & ContactsBody: UpdateCustomerCategoryDto DELETE/api/v1/customer-categories/:idJWT Delete a customer category
Customer AppCustomers & Contacts GET/api/v1/customer-contactsJWT List customer contacts
Customer AppCustomers & ContactsQuery: customerId GET/api/v1/customer-contacts/:idJWT Get a customer contact by id
Customer AppCustomers & Contacts POST/api/v1/customer-contactsJWT Create a customer contact
Customer AppCustomers & ContactsBody: CreateCustomerContactDto PATCH/api/v1/customer-contacts/:idJWT Update a customer contact
Customer AppCustomers & ContactsBody: UpdateCustomerContactDto DELETE/api/v1/customer-contacts/:idJWT Delete a customer contact
Customer AppCustomers & Contacts GET/api/v1/customer-groupsJWT List customer groups
Customer AppCustomers & Contacts GET/api/v1/customer-groups/:idJWT Get a customer group by id
Customer AppCustomers & Contacts POST/api/v1/customer-groupsJWT Create a customer group
Customer AppCustomers & ContactsBody: CreateCustomerGroupDto PATCH/api/v1/customer-groups/:idJWT Update a customer group
Customer AppCustomers & ContactsBody: UpdateCustomerGroupDto DELETE/api/v1/customer-groups/:idJWT Delete a customer group
Customer AppCustomers & Contacts List customers
Customer AppCustomers & ContactsQuery: pagination / filters GET/api/v1/customers/check-duplicateJWT Declared BEFORE @Get(':id') so `/customers/check-duplicate` is not captured by the :id param route
Customer AppCustomers & ContactsQuery: pagination / filters GET/api/v1/customers/:id/financialsJWT Declared BEFORE @Get(':id') so `/customers/:id/financials` resolves to this handler (Review #18 — real Customer-360 aggregates), not the detail route
Customer AppCustomers & Contacts GET/api/v1/customers/:idJWT Get a customer by id
Customer AppCustomers & Contacts Create a customer
Customer AppCustomers & ContactsBody: CreateCustomerDto PATCH/api/v1/customers/:idJWT Update a customer
Customer AppCustomers & ContactsBody: UpdateCustomerDto DELETE/api/v1/customers/:idJWT Delete a customer
Customer AppCustomers & Contacts List items
Customer AppItems & PricingQuery: pagination / filters GET/api/v1/items/check-duplicateJWT NOTE: declared BEFORE @Get(':id') so the literal `/items/check-duplicate` path is matched here and never captured by the :id param route
Customer AppItems & PricingQuery: pagination / filters Create an item
Customer AppItems & PricingBody: CreateItemDto PATCH/api/v1/items/:idJWT Update an item
Customer AppItems & PricingBody: UpdateItemDto DELETE/api/v1/items/:idJWT Delete an item
Customer AppItems & Pricing POST/api/v1/items/:id/imageJWT Upload image
Customer AppItems & Pricing GET/api/v1/items/:id/imagePublic Get image
Customer AppItems & Pricing DELETE/api/v1/items/:id/imageJWT Delete image
Customer AppItems & Pricing GET/api/v1/price-historyJWT Get a price record
Customer AppItems & PricingQuery: itemId, sku, customerId, vendorId, limit, allParties Batch
Customer AppInventory & WarehousesBody: BatchRequestDto GET/api/v1/inventory-categoriesJWT List inventory categories
Customer AppInventory & WarehousesQuery: pagination / filters GET/api/v1/inventory-categories/statsJWT REAL per-category rollups (item count + on-hand stock value), company-scoped
Customer AppInventory & Warehouses GET/api/v1/inventory-categories/code/:codeJWT Find by code
Customer AppInventory & Warehouses GET/api/v1/inventory-categories/:idJWT Get an inventory category by id
Customer AppInventory & Warehouses POST/api/v1/inventory-categoriesJWT Create an inventory category
Customer AppInventory & WarehousesBody: CreateInventoryCategoryDto PATCH/api/v1/inventory-categories/:idJWT Update an inventory category
Customer AppInventory & WarehousesBody: UpdateInventoryCategoryDto DELETE/api/v1/inventory-categories/:idJWT Delete an inventory category
Customer AppInventory & Warehouses GET/api/v1/inventory-transfersJWT List stock transfers
Customer AppInventory & WarehousesQuery: pagination / filters GET/api/v1/inventory-transfers/:idJWT Get a stock transfer by id
Customer AppInventory & Warehouses POST/api/v1/inventory-transfersJWT Create a stock transfer
Customer AppInventory & WarehousesBody: CreateInventoryTransferDto POST/api/v1/inventory-transfers/:id/postJWT Post
Customer AppInventory & Warehouses DELETE/api/v1/inventory-transfers/:idJWT Delete a stock transfer
Customer AppInventory & Warehouses GET/api/v1/inventory-unitsJWT List units of measure
Customer AppInventory & WarehousesQuery: pagination / filters GET/api/v1/inventory-units/usageJWT REAL per-unit usage counts (items using each unit symbol), company-scoped
Customer AppInventory & Warehouses GET/api/v1/inventory-units/symbol/:symbolJWT Find by symbol
Customer AppInventory & Warehouses GET/api/v1/inventory-units/:idJWT Get an unit of measure by id
Customer AppInventory & Warehouses POST/api/v1/inventory-unitsJWT Create an unit of measure
Customer AppInventory & WarehousesBody: CreateInventoryUnitDto PATCH/api/v1/inventory-units/:idJWT Update an unit of measure
Customer AppInventory & WarehousesBody: UpdateInventoryUnitDto DELETE/api/v1/inventory-units/:idJWT Delete an unit of measure
Customer AppInventory & Warehouses GET/api/v1/inventory-warehousesJWT List warehouses
Customer AppInventory & WarehousesQuery: pagination / filters GET/api/v1/inventory-warehouses/statsJWT REAL stock-by-warehouse rollups (item count + value + movements), company-scoped
Customer AppInventory & Warehouses GET/api/v1/inventory-warehouses/code/:codeJWT Find by code
Customer AppInventory & Warehouses GET/api/v1/inventory-warehouses/:id/movementsJWT REAL recent movements for one warehouse (company-scoped), newest first
Customer AppInventory & WarehousesQuery: limit GET/api/v1/inventory-warehouses/:idJWT Get a warehouse by id
Customer AppInventory & Warehouses POST/api/v1/inventory-warehousesJWT Create a warehouse
Customer AppInventory & WarehousesBody: CreateInventoryWarehouseDto PATCH/api/v1/inventory-warehouses/:idJWT Update a warehouse
Customer AppInventory & WarehousesBody: UpdateInventoryWarehouseDto DELETE/api/v1/inventory-warehouses/:idJWT Delete a warehouse
Customer AppInventory & Warehouses GET/api/v1/inventory/stock-movementsJWT List stock movements
Customer AppInventory & WarehousesQuery: pagination / filters GET/api/v1/inventory/warehouse-stockJWT per-item on-hand at one warehouse (from the ledger)
Customer AppInventory & WarehousesQuery: warehouseId GET/api/v1/stock-adjustmentsJWT List stock adjustments
Customer AppInventory & WarehousesQuery: pagination / filters GET/api/v1/stock-adjustments/:idJWT Get a stock adjustment by id
Customer AppInventory & Warehouses POST/api/v1/stock-adjustmentsJWT Create a stock adjustment
Customer AppInventory & WarehousesBody: CreateStockAdjustmentDto DELETE/api/v1/stock-adjustments/:idJWT Delete a stock adjustment
Customer AppInventory & Warehouses GET/api/v1/warehouse-management/binsJWT ─────────────────────────────── BINS ───────────────────────────────
Customer AppInventory & WarehousesQuery: pagination / filters GET/api/v1/warehouse-management/bins/:idJWT Find bin
Customer AppInventory & Warehouses POST/api/v1/warehouse-management/binsJWT Create bin
Customer AppInventory & WarehousesBody: CreateWarehouseBinDto PATCH/api/v1/warehouse-management/bins/:idJWT Update bin
Customer AppInventory & WarehousesBody: UpdateWarehouseBinDto DELETE/api/v1/warehouse-management/bins/:idJWT Remove bin
Customer AppInventory & Warehouses GET/api/v1/warehouse-management/movementsJWT ───────────────────────────── MOVEMENTS ─────────────────────────────
Customer AppInventory & WarehousesQuery: pagination / filters POST/api/v1/warehouse-management/movementsJWT Create movement
Customer AppInventory & WarehousesBody: CreateWmsMovementDto GET/api/v1/pos-security/permissionsJWT Permissions
Customer AppPoint of Sale GET/api/v1/pos-security/usersJWT Users
Customer AppPoint of Sale GET/api/v1/pos-security/rolesJWT List roles
Customer AppPoint of Sale POST/api/v1/pos-security/rolesJWT Create role
Customer AppPoint of SaleBody: CreatePosRoleDto PATCH/api/v1/pos-security/roles/:idJWT Update role
Customer AppPoint of SaleBody: UpdatePosRoleDto DELETE/api/v1/pos-security/roles/:idJWT Remove role
Customer AppPoint of Sale GET/api/v1/pos-security/assignmentsJWT List assignments
Customer AppPoint of Sale POST/api/v1/pos-security/assignmentsJWT Create assignment
Customer AppPoint of SaleBody: CreatePosAssignmentDto DELETE/api/v1/pos-security/assignments/:idJWT Remove assignment
Customer AppPoint of Sale GET/api/v1/pos/outletsJWT List outlets
Customer AppPoint of Sale POST/api/v1/pos/outletsJWT Create outlet
Customer AppPoint of SaleBody: CreateOutletDto PATCH/api/v1/pos/outlets/:idJWT Update outlet
Customer AppPoint of SaleBody: UpdateOutletDto GET/api/v1/pos/terminalsJWT List terminals
Customer AppPoint of SaleQuery: outletId POST/api/v1/pos/terminalsJWT Create terminal
Customer AppPoint of SaleBody: CreateTerminalDto PATCH/api/v1/pos/terminals/:idJWT Update terminal
Customer AppPoint of SaleBody: UpdateTerminalDto List POS records
Customer AppPoint of SaleQuery: outletId, status GET/api/v1/pos/currentJWT Current
Customer AppPoint of SaleQuery: terminalId GET/api/v1/pos/:id/summaryJWT rich shift summary (reference images 6 & 8)
Customer AppPoint of Sale POST/api/v1/pos/:id/closeJWT Close
Customer AppPoint of SaleBody: CloseShiftDto POST/api/v1/pos/:id/pauseJWT Pause / Resume / Handover / Expense (reference images 6 & 8)
Customer AppPoint of Sale POST/api/v1/pos/:id/resumeJWT Resume
Customer AppPoint of Sale POST/api/v1/pos/:id/handoverJWT Handover
Customer AppPoint of SaleBody: HandoverShiftDto POST/api/v1/pos/:id/expenseJWT Expense
Customer AppPoint of SaleBody: ShiftExpenseDto List POS records
Customer AppPoint of SaleQuery: pagination / filters Create a POS record
Customer AppPoint of SaleBody: CreatePosSaleDto List POS records
Customer AppPoint of SaleQuery: outletId, search Create a POS record
Customer AppPoint of SaleBody: CreateHeldBillDto GET/api/v1/pos/currentJWT Current
Customer AppPoint of SaleQuery: terminalId, shiftId Create a POS record
Customer AppPoint of SaleBody: CashDrawerTxnDto List POS records
Customer AppPoint of SaleQuery: shiftId, outletId, from, to Create a POS record
Customer AppPoint of SaleBody: CreatePosReturnDto Today
Customer AppPoint of SaleQuery: from, to, shiftId, outletId GET/api/v1/pos/receiptsJWT Receipts
Customer AppPoint of SaleQuery: from, to, shiftId, outletId GET/api/v1/pos/cashier-salesJWT Cashier sales
Customer AppPoint of SaleQuery: from, to, shiftId, outletId GET/api/v1/pos/shift-reportJWT Shift report
Customer AppPoint of SaleQuery: from, to, shiftId, outletId GET/api/v1/pos/payment-modeJWT Payment mode
Customer AppPoint of SaleQuery: from, to, shiftId, outletId