Architecture
How It's Structured
Client Apps
Customer wallet app, agent app, and this admin web console — all talking to the same API layer.
API Gateway + Auth Service
Separate NestJS services: one handles authentication (OTP, PIN, tokens), the other exposes the wallet/agent/admin APIs.
Domain Modules
Wallet, transfers, bills, outlets, KYC, disputes, settlements, rewards — each a self-contained NestJS module.
Ledger & Data Layer
PostgreSQL via Prisma, with every balance change recorded as a double-entry ledger posting.
Technical Facts
What's Actually Implemented
REST APIs documented with OpenAPI/Swagger, live and browsableMulti-tenant data model — every record scoped to a tenantRole-based access control with staff hierarchy levelsPer-device HMAC request signing with replay protectionIdempotency keys required on every money-moving endpointAppend-only audit logging for admin/staff actionsRate limiting and Helmet/HSTS security headers by default
Try It
Browse the Live API Docs
Every endpoint is documented with Swagger, generated straight from the running backend — not a hand-written spec that drifts out of date.
Open API Reference →Get Started