Skip to main content

Capability → Module Map

What this covers / who it's for. The bridge between the product wiki and the code: for every product capability, the module(s) that own it, the engineering wiki page that explains the machinery, and the product page that describes the behavior. Use it to answer "who owns this?" and "where do I read more?" in one lookup.

Modules live in app-modules/<module>/; each README is the current source of specifics for its module. The engineering module catalog holds the full per-module engineering view.

Product capabilityOwning module(s)Engineering pageProduct page
Tenant workspaces & isolationtenancyTenancy & RLSTenant lifecycle
Registration, KYB/KYC onboardingonboarding, tenancyProvider integrationTenant lifecycle
Login, MFA, step-up, passkeysauthentication, identityAuth & RBACPersonas & access
Teams, invitations, client rolesteam, authorizationAuth & RBACPersonas & access
Permissions & roles (both guards)authorizationAuth & RBACPersonas & access
Plans, tiers, quotas, feesfeaturesModule catalogPlans & entitlements
Jurisdiction gatingjurisdictions, featuresModule catalogPlans & entitlements
Accounts, wallets, balancesaccountsProvider integrationMoney movement
Deposits & travel-rule RFIsfundingProvider integrationMoney movement
Payouts (maker/checker), orders, recipientspaymentsProvider integrationMoney movement
Exports & monthly statementspayments, async-requestsAsync platformsMoney movement, Async by design
Master balance & FX ratestreasuryModule catalogMoney movement
Compliance cases & SLAscomplianceModule catalogCompliance & trust
Account freeze / closurecomplianceThe CQRS busCompliance & trust
Custody approval quorum (N-eyes consensus)custody-controlsModule catalogCompliance & trust
SAR / CTR / travel-rule filingscomplianceModule catalogCompliance & trust
Tamper-evident audit trailauditThe CQRS bus, Observability & opsCompliance & trust
Encrypted document vaultdocumentsData modelCompliance & trust, Where data lives
Data classification & DLPdlpData modelData lifecycle guarantees
Fraud / device-intelligence screening (login, sign-up, payout)fraudProvider integrationProviders & rails, Dependencies & failure modes
In-app inbox, email, comms lognotificationModule catalogNotifications & comms, Communications delivery
Operator staff / roles / invitationsbackofficeAuth & RBACOperator backoffice
Operator support lookupssupportModule catalogOperator backoffice
Background-work ledger (task runs)task-runnerAsync platformsOperator backoffice
Request-then-poll async requestsasync-requestsAsync platformsAsync by design
Finance-rail (provider) integrationrails, provider-mirror, webhooksProvider integrationProviders & rails
Shared conventions (bus, JSON:API, money)foundationThe CQRS bus, API conventions

One capability, more than one provider

A module owns a capability; the external provider that executes it is chosen per (capability group × jurisdiction), so the same capability can be served by different vendors in different regions (ADR D94). Three capabilities are no longer single-vendor:

CapabilityProvider(s) todayShip-state
Onboarding (KYB/KYC, UBO)Sumsub for GB/EU · Conduit for ZA/NG/KE/US (and everywhere as fallback)Sumsub live but pre-product, production-gated (D95)
Custody (wallets, signers)Utila (routed — all six jurisdictions) · Conduit override-only (permitted, not an automatic fallback)Utila live-in-code, deploy-gated, pre-product (D98)
Fraud / device intelligenceFingerprint (primary) · SEON (permitted) — all six jurisdictionsLive-in-code, deploy-gated, default-disabled (D102)

Every other money-rail capability resolves to Conduit. Fraud / device-risk is the odd one out — it sits off the money-rail umbrella entirely (a device-risk verdict never moves money), so it routes on its own Fingerprint/SEON seam rather than through the rails adapter. See Providers & rails for the product view and the engineering Provider integration page for the machinery. Decision rationale behind these boundaries lives in the decision log.


← Product wiki index