---
tags: [products, routes]
module: Products
---

# [Routes]Routes

## Connections
[[_Products]] · [[[Controller]ProductController]] · [[[Controller]CategoryController]] · [[[Controller]UnitController]] · [[[Controller]CostCenterController]] · [[[Controller]ApiControllers]]

## Source
`Modules/Products/Routes/web.php` · `Modules/Products/Routes/api.php`

## Web Routes
All: domain routing + localization + `company.auth` + `restrict-e-invoicing-package-features`

**Products** (`/products`)
- RESOURCE → ProductController (index, create, store, edit, update, destroy, show)
- GET `/list-products` → listProducts (DataTables JSON)
- GET `/print-products-list` → printProductsList
- GET `/exporting-pdf` + `/exporting-excel` → exports
- GET `/import` + POST `/import/store` → single import
- POST `/import/store-products-with-warehouses` → bulk import
- POST `/update/product/quantity` → quantity adjustment

**Units** `/units` → UnitController RESOURCE
**Categories** `/categories` → CategoryController RESOURCE
**Cost Centers** `/cost-centers` → CostCenterController RESOURCE + show
- GET `/cost-centers/generate-code/{parent}` → code generator

## Legacy API V1
Same resource routes under `auth:sanctum` + subdomain routing + GET `/units/zatca-unit-codes`

## API V2 Routes
Prefix: `/api/v2/products` · Middleware: `api.v2.auth`

| Prefix | Controller | Endpoints |
|---|---|---|
| / | ApiProductController | GET / · POST / · PUT /{product} |
| /units | ApiUnitController | Full CRUD + zatca-unit-codes |
| /categories | ApiCategoryController | Full CRUD |
| /cost-centers | ApiCostCenterController | Full CRUD |
