Appendix — Complete Backend Route Table

Source: backend/server.js — Mount order and middleware

CEO Summary

Routes are matched in order. Earlier mounts take precedence. Webhooks have no auth (external callers). Most API routes require session + tenant. If order changes: Requests may hit wrong handler.

Route Mount Order

#PathMiddlewareRouter
1/api/webhooks/stripe(none)stripeWebhook
2/api/webhooks/coinbase(none)coinbaseWebhook
3/api/webhooks/coinremitter(none)coinremitterWalletWebhook
4/api/usersrequireSessionAuth, tenantResolverusersRouter
5/api/file-structurerequireSessionAuth (dev) / 403 (prod)fileStructureRouter
6/api/public(none)publicTicketsRouter
7/api/public/appointments(none)publicAppointmentsRouter
8/api/public(none)publicSignupRouter
9/api/staff-auth(none)staffAuthRouter
10/api/employee-portal(none)employeePortalRouter
11/api/auth, /auth(none)authRouter
12/api/auth/oauth(none)oauthRouter
14/api/productsrequireSessionAuth, tenantResolverproductsRouter
15/api/categoriesrequireSessionAuth, tenantResolvercategoriesRouter
16/api/modifiersrequireSessionAuth, tenantResolvermodifiersRouter
17/api/ordersrequireSessionAuth, tenantResolverordersRouter
18/api/posrequireSessionAuth, tenantResolver, optionalDeviceAuthposRouter
19/api/posrequireSessionAuth, tenantResolverposRegisterRouter
20/api/pos-analyticsrequireSessionAuth, tenantResolverposAnalyticsRouter
21/api/transaction-trackingrequireSessionAuth, tenantResolvertransactionTrackingRouter
22/api/inventory-managementrequireSessionAuth, tenantResolver, checkFeatureAccess('inventory')inventoryManagementRouter
23/api/customersrequireSessionAuth, tenantResolvercustomersRouter
24/api/storefront(none)storefrontRouter
25/api/customer-analytics(none)customerAnalyticsRouter
26/api/profilesrequireSessionAuth, tenantResolverprofilesRouter
27/api/staffrequireFlexibleAuth, tenantResolver, checkFeatureAccess('staff_hr')staffRouter
28/api/timerequireFlexibleAuth, tenantResolver, checkFeatureAccess('staff_hr')timeRouter
29/api/tenant-staff-auth(none)tenantStaffAuthRouter
30/api/tenant-timetenantResolvertenantTimeRouter
31/api/team-hoursrequireSessionAuth, tenantResolverteamHoursRouter
32/api/staff-personal(none)staffPersonalRouter
33/api/core-invoicingrequireSessionAuth, tenantResolvercoreInvoicingRouter
34/api/business-hubrequireSessionAuth, tenantResolverbusinessHubRouter
35/api/dashboardrequireSessionAuth, tenantResolverdashboardRouter
36/api/master-admin(none)masterAdminRouter
37/api/payrollrequireSessionAuth, tenantResolver, checkFeatureAccess('staff_hr')payrollRouter
38–42/api/inventory/*requireSessionAuth, tenantResolver, checkFeatureAccess('inventory')inventoryRouter, items, domains, ledger, rules
43/api/emailrequireSessionAuth, tenantResolveremailRouter
44/api/catalog/permissionsrequireSessionAuth, tenantResolvercatalogPermissionsRouter
45/api/payments(none, if ENABLE_LEGACY_3P)legacyPaymentsRouter
46/api/v1/*(none)v1Payments, v1Invoices, v1Merchants, v1Locations, v1Webhooks, v1Ledger, v1Keys, v1Transactions, v1OrgRules, v1Recon, v1Utxo, v1Disputes
47/api/webhooks/generic(none)genericWebhooksRouter
48/api(none)dogeRouter, ltcRouter
49/api/rates(none)ratesRouter
50/api(none)cryptoConfigRouter, bridgeRouter (/bridge/* includes notify-signage)
51/api/crypto-walletrequireSessionAuth, tenantResolvercryptoWalletRouter
52/api(none)maintenanceRouter, biRouter, billingRouter, financialRouter
53/api/developerrequireSessionAuth, tenantResolverdeveloperRouter
54/api, /admin(none)adminRoutes
55/api/admin/payments(none)adminPaymentsRouter
56/api/admin/orgs(none)adminOrgsRouter
57/api/admin/programs, /admin/programsrequireSessionAuth, tenantResolver, checkFeatureAccess('gift_cards')adminProgramsRouter
58/api/admin/liability(none)adminLiabilityRouter
59/api/giftcardscheckFeatureAccess('gift_cards')giftCardsRouter
60/api/loyaltycheckFeatureAccess('loyalty')loyaltyRouter
61/api/payment-providersrequireSessionAuth, tenantResolverpaymentProvidersRouter
62/api/offline-transactionsrequireSessionAuth, tenantResolverofflineTransactionsRouter
63/api/device-catalogrequireSessionAuth, tenantResolverdeviceCatalogRouter
64/api/master-admin/tenants(none)tenantProvisioningRouter
65/api/tenantsrequireSessionAuthtenantsRouter
66/api/admin/system(none)systemRouter
67/api/plans(none)plansRouter
68/api/hr(none)hrRouter, hrSecurityRouter
69/api/invoices(none)invoicesRouter
70/api/simple(none)simpleTransactionsRouter, simpleCustomersRouter
71/api/unifiedrequireSessionAuth, tenantResolverunifiedTransactionsRouter
72/api/transactionsrequireSessionAuth, tenantResolvertransactionsListRouter
73/api/features(none)featuresRouter
74/api/tenant-database(none)tenantDatabaseRouter
75/customer(none)publicCustomerRouter
76/api/kioskoptionalSessionAuth, tenantResolver, deviceAuthkioskApiRouter
77/api/mobileoptionalSessionAuth, tenantResolver, deviceAuthmobileApiRouter
78/api/dashboardrequireSessionAuth, tenantResolverreportsDashboard
79/api/giftcardrequireSessionAuth, tenantResolvergiftCardRouter
80/api(none)apiRouter
81/api/admin/databaserequireSessionAuth, master_admin checkadminDatabaseRouter
82/api/admin/catalogrequireSessionAuth, tenantResolvercatalogRouter, adminCatalogAssignments
82b/api/admin/kdsrequireSessionAuth, tenantResolver, checkFeatureAccess('kds')adminKdsRouter (settings + category routing)
83/api/adminrequireSessionAuth, tenantResolverdevicesRouter
84/api/device-codes(none)deviceCodesRouter
85/api/tickets(none)ticketsRouter
86/api/admin/tickets(none)adminTicketsRouter
87/api/appointmentsrequireSessionAuth, tenantResolver, checkFeatureAccess('appointments')appointmentStaffRouter, appointmentsRouter
88/api/admin/ticket-settings(none)adminTicketSettingsRouter
89/api/admin/ticket-workflows(none)adminTicketWorkflowsRouter
90/api/admin/email-templates(none)adminEmailTemplatesRouter
91/api/assignees(none)assigneesRouter
92/api/receiptsrequireSessionAuth, tenantResolverreceiptsRouter
93/api/idempotencyrequireSessionAuth, tenantResolveridempotencyRouter
94/api/session-management(none)sessionManagementRouter
95/api/user-managementrequireSessionAuth, tenantResolveruserManagementRouter
96/api/crypto-prices(none)cryptoPricesRouter
97/api/reports, /reportsrequireSessionAuth, tenantResolverreportsRouter
98/api/auditrequireSessionAuth, tenantResolver; per-route requireScopesauditRouter
99/api/webhooks/doge(none)dogeWalletNotify
100/api/webhooks/ltc(none)ltcWalletNotify
101/api/menus, /api/menu-assignmentsrequireSessionAuth, tenantResolvercatalogRouter
102/api/kdsrequireSessionAuth, tenantResolver, checkFeatureAccess('kds')kdsRoutes
103/api/recipesrequireSessionAuth, tenantResolverrecipesRouter
104/api/seating-layoutsrequireSessionAuth, tenantResolverseatingLayoutsRouter
105/api/kitchen-domainsrequireSessionAuth, tenantResolverkitchenDomainsRouter
106/api/menu-itemsrequireSessionAuth, tenantResolvermenuItemsRouter
107/api(none)devMaintenance

Notable handlers on mounted routers (detail)

Many business endpoints sit under a single mount row above. Examples that are easy to miss when reading only the mount table:

MountRepresentative pathsNotes
/api/pos (posRouter)GET /api/pos/settings, cart CRUD, tender, finalize, catalogGET /settings returns device.posModules (posModules.js) and device.fuelSite (fuelSite.js) from Devices.metadata06, 13.
/api/admin (devicesRouter)Device CRUD, heartbeat-related admin flowsUI: /admin/devices/manager (DeviceManager.jsx) for register metadata including posModules.
/api/auditGET /taxonomy, GET /logs, POST /record, summaries, GET /exportVocabulary in backend/constants/auditTaxonomy.js; scopes audit:read / audit:write. Chapter 20.

Middleware Definitions

Public Routes (No Auth)