Skip to content

YeboMart Routes — Complete API Map

All API endpoints with methods, authentication requirements, and middleware.


Base URL

Production: https://api.yebomart.com/api/v1

Route Index

typescript
// src/routes/index.ts
router.use('/auth', authRoutes);
router.use('/shops', shopRoutes);
router.use('/products', productRoutes);
router.use('/sales', saleRoutes);
router.use('/stock', stockRoutes);
router.use('/users', userRoutes);
router.use('/staff', userRoutes);       // Alias
router.use('/reports', reportRoutes);
router.use('/ai', aiRoutes);
router.use('/license', licenseRoutes);
router.use('/expenses', expenseRoutes);
router.use('/customers', customerRoutes);
router.use('/audit', auditRoutes);
router.use('/admin', adminRoutes);
router.use('/upload', uploadRoutes);
router.use('/returns', returnRoutes);
router.use('/suppliers', supplierRoutes);
router.use('/pricing', pricingRoutes);
router.use('/billing', billingRoutes);

Authentication Routes

Base: /api/v1/auth

MethodEndpointAuthMiddlewareDescription
POST/registerauthLimiter, validateRequestRegister new shop
POST/loginauthLimiter, validateRequestOwner login
POST/login/userauthLimiter, validateRequestStaff PIN login
POST/refreshauthLimiter, validateRequestRefresh tokens
GET/meauthMiddlewareGet current user

Request/Response Examples

typescript
// POST /auth/register
{
  "name": "Best Tuckshop",
  "ownerName": "John Dlamini",
  "phone": "+26876123456",
  "password": "securepin",
  "businessType": "tuckshop",
  "assistantName": "Sibo"
}

// Response
{
  "success": true,
  "data": {
    "shop": { "id": "...", "name": "Best Tuckshop", "tier": "LITE" },
    "accessToken": "eyJ...",
    "refreshToken": "eyJ..."
  }
}

Shop Routes

Base: /api/v1/shops

MethodEndpointAuthMiddlewareDescription
GET/typesList business types
GET/configauthMiddlewareGet shop config
GET/:idauthMiddlewareGet shop details
PATCH/:idOwnerownerAuth, validateRequestUpdate shop
GET/:id/statsauthMiddlewareGet shop stats

Product Routes

Base: /api/v1/products

MethodEndpointAuthMiddlewareDescription
GET/authMiddleware, validateQueryList products
POST/ManagermanagerAuth, checkProductLimit, validateRequestCreate product
GET/categoriesauthMiddlewareList categories
GET/exportManagermanagerAuthExport CSV
POST/bulk/importManagermanagerAuth, validateRequestBulk import
POST/bulk/updateManagermanagerAuth, validateRequestBulk update
GET/barcode/:barcodeauthMiddlewareLookup by barcode
GET/:idauthMiddlewareGet product
PATCH/:idManagermanagerAuth, validateRequestUpdate product
DELETE/:idManagermanagerAuthSoft delete

Query Parameters

typescript
// GET /products
{
  page: number;       // Default: 1
  limit: number;      // Default: 20, max: 100
  search: string;     // Search name, barcode, SKU
  category: string;   // Filter by category
  lowStock: boolean;  // Only low stock items
  isActive: boolean;  // Default: true
}

Sales Routes

Base: /api/v1/sales

MethodEndpointAuthMiddlewareDescription
GET/authMiddleware, validateQueryList sales
POST/authMiddleware, posLimiter, trackUsage, validateRequestCreate sale
GET/daily-summaryauthMiddlewareToday's summary
GET/search/receiptauthMiddlewareFind by receipt
POST/email-receiptauthMiddlewareEmail receipt
GET/:idauthMiddlewareGet sale
POST/:id/voidManagermanagerAuth, validateRequestVoid sale

Create Sale Request

typescript
// POST /sales
{
  "items": [
    { "productId": "clx...", "quantity": 2, "discount": 0 },
    { "productId": "clx...", "quantity": 1 }
  ],
  "paymentMethod": "CASH",
  "amountPaid": 100,
  "discount": 5
}

Stock Routes

Base: /api/v1/stock

MethodEndpointAuthMiddlewareDescription
GET/authMiddlewareGet stock levels
GET/alertsauthMiddlewareLow stock alerts
GET/movementsauthMiddleware, validateQueryMovement history
POST/adjustManagermanagerAuth, trackUsage, validateRequestAdjust stock
POST/receiveManagermanagerAuth, trackUsage, validateRequestBulk restock

Stock Adjustment Request

typescript
// POST /stock/adjust
{
  "productId": "clx...",
  "type": "DAMAGED",
  "quantity": -3,
  "note": "Broken during delivery"
}

AI Routes

Base: /api/v1/ai

MethodEndpointAuthMiddlewareDescription
POST/chatauthMiddleware, requireFeature('ai_assistant'), checkAiUsage, aiLimiter, validateRequestChat with AI
POST/voiceauthMiddleware, requireFeature('ai_assistant'), checkAiUsage, aiLimiter, validateRequestVoice query
GET/insightsauthMiddleware, checkAiUsage, aiLimiterGet insights
GET/slow-moversauthMiddleware, checkAiUsage, aiLimiterSlow products
GET/summaryauthMiddleware, checkAiUsage, aiLimiterBusiness summary

AI Chat Request

typescript
// POST /ai/chat
{
  "message": "What products aren't selling?"
}

// Response
{
  "success": true,
  "data": {
    "message": "3 products are barely moving:\n• Old Chips - 2 sold...",
    "assistantName": "Yebo"
  }
}

Report Routes

Base: /api/v1/reports

MethodEndpointAuthMiddlewareDescription
GET/summaryManagerauthMiddleware, managerAuthOverview stats
GET/dailyManagerauthMiddleware, managerAuthDaily report
GET/weeklyManagerauthMiddleware, managerAuthWeekly report
GET/productsManagerauthMiddleware, managerAuthProduct performance
GET/staffManagerauthMiddleware, managerAuthStaff performance

User/Staff Routes

Base: /api/v1/users (aliased as /api/v1/staff)

MethodEndpointAuthMiddlewareDescription
GET/authMiddlewareList staff
POST/OwnerownerAuth, checkUserLimit, validateRequestCreate staff
GET/:idauthMiddlewareGet staff
GET/:id/statsauthMiddlewareStaff stats
GET/:id/detailauthMiddlewareStaff details
PATCH/:idauthMiddleware, validateRequestUpdate staff
DELETE/:idOwnerownerAuthDelete staff

Customer Routes

Base: /api/v1/customers

MethodEndpointAuthMiddlewareDescription
GET/authMiddlewareList customers
POST/authMiddleware, validateRequestCreate customer
GET/:idauthMiddlewareGet customer
PATCH/:idManagermanagerAuthUpdate customer
POST/:id/creditauthMiddleware, validateRequestAdd credit

Return Routes

Base: /api/v1/returns

MethodEndpointAuthMiddlewareDescription
GET/authMiddleware, validateQueryList returns
POST/authMiddleware, validateRequestCreate return
GET/:idauthMiddlewareGet return
POST/:id/processManagermanagerAuth, validateRequestProcess return

Supplier Routes

Base: /api/v1/suppliers

MethodEndpointAuthMiddlewareDescription
GET/authMiddlewareList suppliers
POST/ManagermanagerAuth, validateRequestCreate supplier
GET/:idauthMiddlewareGet supplier
PATCH/:idManagermanagerAuthUpdate supplier
DELETE/:idManagermanagerAuthDelete supplier
POST/:id/productsManagermanagerAuthLink product
GET/:id/ordersauthMiddlewareSupplier's POs

Billing Routes

Base: /api/v1/billing

MethodEndpointAuthMiddlewareDescription
GET/plansOptionaloptionalAuthGet pricing plans
POST/checkoutauthMiddlewareCreate checkout
POST/webhookexpress.rawStripe webhook

Checkout Request

typescript
// POST /billing/checkout
{
  "tier": "BUSINESS",
  "successUrl": "https://app.yebomart.com/billing/success",
  "cancelUrl": "https://app.yebomart.com/billing"
}

// Response
{
  "success": true,
  "data": {
    "sessionId": "cs_test_...",
    "url": "https://checkout.stripe.com/..."
  }
}

Admin Routes

Base: /api/v1/admin

MethodEndpointAuthMiddlewareDescription
POST/loginvalidateRequestAdmin login
GET/dashboardAdminauthenticateAdminDashboard stats
GET/shopsAdminauthenticateAdminList all shops
GET/shops/:idAdminauthenticateAdminGet shop
PATCH/shops/:id/statusAdminauthenticateAdminUpdate status
DELETE/shops/:idAdminauthenticateAdminDelete shop
PUT/subscriptions/:idAdminauthenticateAdminUpdate subscription
GET/usersAdminauthenticateAdminList all users
GET/users/:idAdminauthenticateAdminGet user
GET/subscriptionsAdminauthenticateAdminList subscriptions

License Routes

Base: /api/v1/license

MethodEndpointAuthMiddlewareDescription
GET/statusauthMiddlewareLicense status
POST/activateauthMiddlewareActivate license
POST/trialauthMiddlewareStart trial

Pricing Routes (Public)

Base: /api/v1/pricing

MethodEndpointAuthMiddlewareDescription
GET/countriesList supported countries
GET/plansAll pricing plans
GET/plans/:countryCountry-specific plans

Upload Routes

Base: /api/v1/upload

MethodEndpointAuthMiddlewareDescription
POST/imageauthMiddleware, multerUpload image
DELETE/image/:keyauthMiddlewareDelete image

Expense Routes

Base: /api/v1/expenses

MethodEndpointAuthMiddlewareDescription
GET/authMiddlewareList expenses
POST/ManagermanagerAuth, validateRequestCreate expense
GET/:idauthMiddlewareGet expense
PATCH/:idManagermanagerAuthUpdate expense
DELETE/:idManagermanagerAuthDelete expense

Audit Routes

Base: /api/v1/audit

MethodEndpointAuthMiddlewareDescription
GET/ManagerauthMiddleware, managerAuthList audit logs
GET/:idManagerauthMiddleware, managerAuthGet log entry

Rate Limits

typescript
// Different limits for different route types
const authLimiter = rateLimit({
  windowMs: 15 * 60 * 1000,  // 15 minutes
  max: 10,                    // 10 requests per window
  message: 'Too many auth attempts'
});

const posLimiter = rateLimit({
  windowMs: 60 * 1000,       // 1 minute
  max: 60,                    // 60 sales per minute
  message: 'POS rate limit exceeded'
});

const aiLimiter = rateLimit({
  windowMs: 60 * 1000,       // 1 minute
  max: 10,                    // 10 AI queries per minute
  message: 'AI rate limit exceeded'
});

Error Responses

All errors follow the standard format:

typescript
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Validation failed",
    "details": [
      { "field": "phone", "message": "Phone is required" }
    ]
  }
}

Common Error Codes

CodeHTTP StatusDescription
VALIDATION_ERROR400Request validation failed
UNAUTHORIZED401Missing or invalid token
FORBIDDEN403Insufficient permissions
NOT_FOUND404Resource not found
CONFLICT409Resource conflict (duplicate)
RATE_LIMITED429Too many requests
SERVER_ERROR500Internal server error

One chat. Everything done.