{"application":"VendroX.Api","status":"ok","version":"0.1.0","endpoints":[{"method":"GET","path":"/health","description":"Health check"},{"method":"GET","path":"/api/health","description":"Health check for API clients"},{"method":"GET","path":"/swagger","description":"Interactive Swagger UI"},{"method":"GET","path":"/swagger/v1/swagger.json","description":"OpenAPI JSON document"},{"method":"POST","path":"/api/auth/bootstrap-admin","description":"Create first API admin when no users exist"},{"method":"POST","path":"/api/auth/login","description":"Create API session token"},{"method":"GET","path":"/api/auth/me","description":"Resolve session token to current user"},{"method":"POST","path":"/api/platform/onboarding/requests","description":"Create onboarding request from website or CRM"},{"method":"GET","path":"/api/platform/onboarding/requests","description":"List onboarding requests, platform admin only"},{"method":"POST","path":"/api/platform/onboarding/requests/{id}/approve","description":"Approve onboarding request and provision tenant"},{"method":"POST","path":"/api/platform/onboarding/requests/{id}/reject","description":"Reject onboarding request with notes"},{"method":"GET","path":"/api/platform/subscription-plans","description":"List subscription plans, platform admin only"},{"method":"POST","path":"/api/platform/subscription-plans","description":"Create subscription plan, platform admin only"},{"method":"PUT","path":"/api/platform/subscription-plans/{id}","description":"Update subscription plan, platform admin only"},{"method":"GET","path":"/api/platform/tenants","description":"List tenant subscriptions, platform admin only"},{"method":"GET","path":"/api/platform/tenants/{tenantId}","description":"Get tenant subscription summary, platform admin only"},{"method":"POST","path":"/api/platform/tenants/{tenantId}/subscription","description":"Create or replace tenant subscription, platform admin only"},{"method":"PUT","path":"/api/platform/tenants/{tenantId}/status","description":"Change tenant status, platform admin only"},{"method":"POST","path":"/api/platform/tenants/{tenantId}/renew","description":"Renew tenant subscription, platform admin only"},{"method":"GET","path":"/api/platform/license/{tenantId}","description":"Read effective tenant license for CRM or runtime checks"},{"method":"GET","path":"/api/accounts?accountType=Bank&search=sample","description":"List/search unified accounts across customer/supplier/employee/cash/bank/P&L types"},{"method":"GET","path":"/api/accounts/{accountId}","description":"Get one unified account"},{"method":"POST","path":"/api/accounts","description":"Create unified account for bank/P&L/expense/fixed/misc and other account types"},{"method":"PUT","path":"/api/accounts/{accountId}","description":"Update unified account"},{"method":"DELETE","path":"/api/accounts/{accountId}","description":"Soft-delete unified account"},{"method":"GET","path":"/api/tenants","description":"List the authenticated user's tenant"},{"method":"POST","path":"/api/tenants","description":"Create tenant, authenticated setup endpoint"},{"method":"GET","path":"/api/tenants/{tenantId}/branches","description":"List branches only for the authenticated user's tenant"},{"method":"POST","path":"/api/tenants/{tenantId}/branches","description":"Create branch only under the authenticated user's tenant"},{"method":"PUT","path":"/api/tenants/{tenantId}/branches/{branchId}/settings","description":"Update legacy branch rules including sales stock restriction"},{"method":"GET","path":"/api/tenants/{tenantId}/profile","description":"Read enterprise profile and communication settings"},{"method":"PUT","path":"/api/tenants/{tenantId}/profile","description":"Update enterprise profile and API communication settings"},{"method":"GET","path":"/api/customers?search=sample","description":"List/search customers scoped to authenticated tenant and branch"},{"method":"GET","path":"/api/customers/{customerId}","description":"Get one customer scoped to authenticated tenant and branch"},{"method":"POST","path":"/api/customers","description":"Create customer scoped to authenticated tenant and branch"},{"method":"PUT","path":"/api/customers/{customerId}","description":"Update customer scoped to authenticated tenant and branch"},{"method":"DELETE","path":"/api/customers/{customerId}","description":"Soft-delete customer scoped to authenticated tenant and branch"},{"method":"GET","path":"/api/suppliers?search=sample","description":"List/search suppliers from unified accounts scoped to authenticated tenant and branch"},{"method":"GET","path":"/api/suppliers/{supplierId}","description":"Get one supplier from unified accounts scoped to authenticated tenant and branch"},{"method":"POST","path":"/api/suppliers","description":"Create supplier as unified account scoped to authenticated tenant and branch"},{"method":"PUT","path":"/api/suppliers/{supplierId}","description":"Update supplier unified account scoped to authenticated tenant and branch"},{"method":"DELETE","path":"/api/suppliers/{supplierId}","description":"Soft-delete supplier unified account scoped to authenticated tenant and branch"},{"method":"GET","path":"/api/employees?search=sample","description":"List/search employees from unified accounts scoped to authenticated tenant and branch"},{"method":"GET","path":"/api/employees/{employeeId}","description":"Get one employee from unified accounts scoped to authenticated tenant and branch"},{"method":"POST","path":"/api/employees","description":"Create employee as unified account scoped to authenticated tenant and branch"},{"method":"PUT","path":"/api/employees/{employeeId}","description":"Update employee unified account scoped to authenticated tenant and branch"},{"method":"DELETE","path":"/api/employees/{employeeId}","description":"Soft-delete employee unified account scoped to authenticated tenant and branch"},{"method":"GET","path":"/api/cash-accounts?search=sample&salesPaymentOnly=false","description":"List/search cash accounts from unified accounts scoped to authenticated tenant and branch"},{"method":"GET","path":"/api/cash-accounts/{cashAccountId}","description":"Get one cash account from unified accounts scoped to authenticated tenant and branch"},{"method":"POST","path":"/api/cash-accounts","description":"Create cash account as unified account scoped to authenticated tenant and branch"},{"method":"PUT","path":"/api/cash-accounts/{cashAccountId}","description":"Update cash account unified account scoped to authenticated tenant and branch"},{"method":"DELETE","path":"/api/cash-accounts/{cashAccountId}","description":"Soft-delete cash account when not used by invoices"},{"method":"GET","path":"/api/cash-sessions","description":"List cash sessions with legacy expected-closing calculation"},{"method":"GET","path":"/api/cash-sessions/open","description":"Get the authenticated user's open cash session"},{"method":"GET","path":"/api/cash-sessions/{sessionId}","description":"Get one cash session with deposits"},{"method":"POST","path":"/api/cash-sessions/open","description":"Open cash session for one assigned user"},{"method":"PUT","path":"/api/cash-sessions/{sessionId}","description":"Update open cash session opening details"},{"method":"POST","path":"/api/cash-sessions/{sessionId}/close","description":"Close cash session with actual closing amount"},{"method":"DELETE","path":"/api/cash-sessions/{sessionId}","description":"Soft-delete open cash session"},{"method":"GET","path":"/api/cash-sessions/{sessionId}/deposits","description":"List cash session deposits"},{"method":"POST","path":"/api/cash-sessions/{sessionId}/deposits","description":"Add cash session deposit to bank or another cash account"},{"method":"DELETE","path":"/api/cash-sessions/{sessionId}/deposits/{depositId}","description":"Soft-delete cash session deposit"},{"method":"GET","path":"/api/account-categories?appliesTo=customer&includeInactive=false","description":"List/search account categories scoped to authenticated tenant and branch"},{"method":"GET","path":"/api/account-categories/{categoryId}","description":"Get one account category scoped to authenticated tenant and branch"},{"method":"POST","path":"/api/account-categories","description":"Create account category using legacy applicability flags"},{"method":"PUT","path":"/api/account-categories/{categoryId}","description":"Update account category using legacy applicability flags"},{"method":"DELETE","path":"/api/account-categories/{categoryId}","description":"Soft-delete account category scoped to authenticated tenant and branch"},{"method":"GET","path":"/api/master-data/definitions","description":"List supported legacy master-data definitions"},{"method":"GET","path":"/api/master-data/{key}","description":"List/search setup master data by legacy key"},{"method":"GET","path":"/api/master-data/{key}/{id}","description":"Get one setup master-data record"},{"method":"POST","path":"/api/master-data/{key}","description":"Create setup master-data record"},{"method":"PUT","path":"/api/master-data/{key}/{id}","description":"Update setup master-data record"},{"method":"DELETE","path":"/api/master-data/{key}/{id}","description":"Soft-delete setup master-data record"},{"method":"GET","path":"/api/price-lists?includeInactive=false","description":"List price lists scoped to authenticated tenant"},{"method":"GET","path":"/api/price-lists/{priceListId}","description":"Get one price list scoped to authenticated tenant"},{"method":"POST","path":"/api/price-lists","description":"Create price list with legacy pricing rule validation"},{"method":"PUT","path":"/api/price-lists/{priceListId}","description":"Update price list and default flag"},{"method":"DELETE","path":"/api/price-lists/{priceListId}","description":"Soft-delete non-default price list and remove product rates"},{"method":"GET","path":"/api/setup/sales-discount-policy","description":"Get legacy sales discount and auto-barcode policy"},{"method":"PUT","path":"/api/setup/sales-discount-policy","description":"Save legacy sales discount and auto-barcode policy"},{"method":"GET","path":"/api/setup/shipping-carriers","description":"List tenant shipping carriers"},{"method":"POST","path":"/api/setup/shipping-carriers","description":"Create tenant shipping carrier"},{"method":"PUT","path":"/api/setup/shipping-carriers/{carrierId}","description":"Update tenant shipping carrier"},{"method":"GET","path":"/api/products/{productId}/price-list-rates","description":"List active price-list rates for a product"},{"method":"PUT","path":"/api/products/{productId}/price-list-rates","description":"Replace product price-list rates"},{"method":"GET","path":"/api/invoices?invoiceType=4","description":"List unified invoices for purchase/sale/return transaction types"},{"method":"GET","path":"/api/invoices/{invoiceId}","description":"Get unified invoice with items"},{"method":"POST","path":"/api/invoices","description":"Create unified invoice using legacy invoice_type values 1-5"},{"method":"DELETE","path":"/api/invoices/{invoiceId}","description":"Soft-delete unified invoice and items"},{"method":"GET","path":"/api/vouchers?voucherType=1","description":"List vouchers preserving debit/credit account references"},{"method":"GET","path":"/api/vouchers/{voucherId}","description":"Get one voucher"},{"method":"POST","path":"/api/vouchers","description":"Create voucher with debit/credit account references"},{"method":"DELETE","path":"/api/vouchers/{voucherId}","description":"Soft-delete voucher"},{"method":"GET","path":"/api/inventory-transfers","description":"List inventory transfers touching the current branch"},{"method":"GET","path":"/api/inventory-transfers/{transferId}","description":"Get inventory transfer with lines"},{"method":"POST","path":"/api/inventory-transfers","description":"Create inventory transfer header and lines"},{"method":"DELETE","path":"/api/inventory-transfers/{transferId}","description":"Soft-delete inventory transfer"},{"method":"GET","path":"/api/damage-items","description":"List damage item headers"},{"method":"GET","path":"/api/damage-items/{damageId}","description":"Get damage item with lines"},{"method":"POST","path":"/api/damage-items","description":"Create damage item header and lines"},{"method":"DELETE","path":"/api/damage-items/{damageId}","description":"Soft-delete damage item"},{"method":"GET","path":"/api/inventory-audits","description":"List inventory audits"},{"method":"GET","path":"/api/inventory-audits/{auditId}","description":"Get inventory audit with lines"},{"method":"POST","path":"/api/inventory-audits","description":"Create inventory audit with increase/decrease lines"},{"method":"DELETE","path":"/api/inventory-audits/{auditId}","description":"Soft-delete inventory audit"},{"method":"GET","path":"/api/scheduled-payments/plans","description":"List scheduled payment plans"},{"method":"GET","path":"/api/scheduled-payments/plans/{planId}","description":"Get one scheduled payment plan"},{"method":"POST","path":"/api/scheduled-payments/plans","description":"Create scheduled payment plan"},{"method":"PUT","path":"/api/scheduled-payments/plans/{planId}","description":"Update scheduled payment plan"},{"method":"DELETE","path":"/api/scheduled-payments/plans/{planId}","description":"Soft-delete scheduled payment plan"},{"method":"GET","path":"/api/scheduled-payments/runs","description":"List scheduled payment generated runs"},{"method":"POST","path":"/api/scheduled-payments/process-due","description":"Generate draft-ready runs for due scheduled payment plans"},{"method":"GET","path":"/api/adjustment-vouchers","description":"List adjustment vouchers backed by voucher type 7"},{"method":"GET","path":"/api/adjustment-vouchers/{voucherId}","description":"Get one adjustment voucher"},{"method":"POST","path":"/api/adjustment-vouchers","description":"Create customer/supplier adjustment voucher"},{"method":"PUT","path":"/api/adjustment-vouchers/{voucherId}","description":"Update adjustment voucher"},{"method":"DELETE","path":"/api/adjustment-vouchers/{voucherId}","description":"Soft-delete adjustment voucher"},{"method":"GET","path":"/api/customer-investments/benchmarks","description":"List customer investment benchmarks"},{"method":"POST","path":"/api/customer-investments/benchmarks","description":"Create customer investment benchmark"},{"method":"PUT","path":"/api/customer-investments/benchmarks/{benchmarkId}","description":"Update customer investment benchmark"},{"method":"GET","path":"/api/customer-investments","description":"List customer investments"},{"method":"GET","path":"/api/customer-investments/{investmentId}","description":"Get one customer investment"},{"method":"POST","path":"/api/customer-investments","description":"Create customer investment"},{"method":"PUT","path":"/api/customer-investments/{investmentId}","description":"Update customer investment"},{"method":"DELETE","path":"/api/customer-investments/{investmentId}","description":"Soft-delete customer investment"},{"method":"GET","path":"/api/customer-investments/analysis","description":"Analyze customer investment sales return"},{"method":"GET","path":"/api/loyalty/rule","description":"Get active branch loyalty rule or legacy default"},{"method":"PUT","path":"/api/loyalty/rule","description":"Save loyalty rule and replace branch tiers"},{"method":"GET","path":"/api/loyalty/tiers","description":"List loyalty tiers"},{"method":"GET","path":"/api/loyalty/balances","description":"List customer loyalty balances derived from ledger"},{"method":"GET","path":"/api/loyalty/ledger","description":"List loyalty ledger entries"},{"method":"GET","path":"/api/loyalty/activity-summary","description":"Get loyalty activity totals and liability"},{"method":"GET","path":"/api/loyalty/redemption-quote","description":"Quote approved loyalty points and amount for an invoice"},{"method":"POST","path":"/api/loyalty/adjustments","description":"Post manual loyalty adjustment"},{"method":"POST","path":"/api/loyalty/process-invoice/{invoiceId}","description":"Post earn/redeem ledger lines for sales invoice"},{"method":"POST","path":"/api/loyalty/process-return/{returnInvoiceId}","description":"Post loyalty reversal/restoration for sales return"},{"method":"POST","path":"/api/loyalty/process-expiry","description":"Expire eligible loyalty point buckets"},{"method":"GET","path":"/api/products?search=sample","description":"List/search products scoped to authenticated tenant and branch"},{"method":"GET","path":"/api/products/next-barcode","description":"Get next auto barcode from product barcode policy"},{"method":"GET","path":"/api/products/families?search=sample","description":"List product family summaries from flattened products"},{"method":"GET","path":"/api/products/families/{familyName}/variants","description":"List variants for a product family"},{"method":"GET","path":"/api/products/{productId}","description":"Get one product scoped to authenticated tenant and branch"},{"method":"POST","path":"/api/products","description":"Create product scoped to authenticated tenant and branch"},{"method":"PUT","path":"/api/products/{productId}","description":"Update product scoped to authenticated tenant and branch"},{"method":"DELETE","path":"/api/products/{productId}","description":"Soft-delete product scoped to authenticated tenant and branch"},{"method":"GET","path":"/api/sales-invoices","description":"List sales invoices scoped to authenticated tenant and branch"},{"method":"POST","path":"/api/sales-invoices","description":"Create sales invoice scoped to authenticated tenant and branch"}]}