Apache Fineract for banking-as-a-service platforms

Apache Fineract can serve as the headless ledger behind embedded finance and BaaS offerings, with one tenant per partner and business events to partner systems. This page covers the design decisions, controls and rollout it requires.

On this page

Apache Fineract for banking-as-a-service platforms: why a headless ledger fits

A banking-as-a-service operator usually holds one licensed core and sells products through several partners, each with its own brand, customers and rules. The ledger behind that arrangement has to be API-first, because partners will reach it through their own systems rather than through a screen operated by the core team. Apache Fineract fits this shape because it is headless: it exposes REST APIs and provides no user interface of its own. The project's README points to the Mifos X web application as a front end used in its Kubernetes example, but that is an optional choice, not part of the core. Before committing, confirm which APIs each partner flow will call, and whether those flows need batch requests or only single-resource calls.

Fineract is multi-tenant. Each API request carries a Fineract-Platform-TenantId header, and tenant database connections are configured from a tenants database, according to the README. For a BaaS operator this maps a partner onto a tenant, so partner onboarding becomes tenant provisioning rather than a new installation. The operator should confirm how tenant creation, configuration and retirement will be scripted and approved, and who holds the credentials for each tenant. Fineract also publishes external business events, such as ClientCreated, to ActiveMQ or other JMS brokers and to Apache Kafka. This feature is disabled by default, so the event design has to be enabled and tested deliberately before partners rely on it.

What changes is where responsibility sits. The operator owns the partner-facing front ends, including onboarding screens, statements, card or payment interfaces and support tooling, and must build or buy them. Fineract supplies the ledger, products and events, not the customer experience. Partners will expect service levels and data boundaries that the operator must write into contracts, so the design questions move to the operator's team: how partner front ends authenticate, how events reach partner systems without leaking another partner's data, and who runs the platform when a partner integration fails. Those questions shape the rest of this page.

Which BaaS requirements shape the Fineract build

This table maps the regulatory and contractual requirements most often raised by BaaS programs to what each one means for tenant design, hosting and contracts in a self-hosted Fineract platform. Read each row as a question to answer before the build starts, and confirm the applicability of each requirement with your legal and compliance teams. The main takeaway is that partner isolation, data return and exit planning are design inputs for Fineract tenants, not items to add after go-live.

RequirementTenant design and build consequenceHosting and contract consequence
Partner isolation (tenant boundaries)Fineract is multi-tenant and routes requests by the Fineract-Platform-TenantId header, so each partner's tenant, data and configuration must be defined and tested as a separate boundary.Document which partners share a database, cluster or batch job, and confirm how isolation is evidenced to each partner in writing.
Data location (DORA Article 30(2))Decide where each tenant's database, backups and logs sit, since the ICT contract must state where services are provided and data processed.Write data location and advance notice of changes into each partner and provider contract, and align them with the actual deployment regions.
Data return on termination (DORA Article 30(2))Plan an export of client, account and ledger data per tenant that can run without the vendor's help, and test it on a non-production copy.Contracts should cover data return on insolvency or termination of the provider, and name the format and timing the partner expects.
Exit strategy (DORA Article 28(8))Keep tenant configuration, product definitions and event contracts documented so a partner's workload can move to another ledger or to on-premises infrastructure.Exit plans should be tested and recorded in the register of information on ICT arrangements (DORA Article 28(3)).
Switching rules (EU Data Act)Design tenant exports and API contracts so a customer can move to another provider or to on-premises infrastructure without proprietary dependencies.Confirm with counsel which switching notice and transitional periods apply, and check whether switching charges are permitted under the rules in force for your contract date.
Cardholder data scope (PCI DSS)Keep card numbers and sensitive authentication data out of Fineract tenants where possible, and tokenize card references before they reach the ledger.PCI DSS applies by function, so confirm with your acquirer or payment brand whether the ledger could affect the cardholder data environment, and who validates it.
Multi-factor authentication (FTC Safeguards Rule)Plan MFA for every individual accessing Fineract administrative and API tooling, including partner-facing consoles, unless a written equivalent control is approved.The rule applies to non-bank financial institutions under FTC jurisdiction. Confirm applicability and record any approved equivalent control in writing.
Certification and attestationDesign evidence (access logs, tenant configuration history, backup test records) that an independent assessor can review.DeployOpen does not issue audit reports or certifications. Ask each partner which report, such as a SOC 2 Type 1 or Type 2 report, they expect from the platform operator.

Tenant, API and event settings that matter for BaaS

In a BaaS design, Fineract's tenant, API, instance and event settings decide how far one partner's data, traffic and failures can reach another. Each card below covers one setting, the partner-facing risk it creates, and what to verify before go-live.

Tenant model and tenants database

Fineract resolves each request's tenant from a tenants database, and each tenant has its own connection configuration. For a BaaS platform, this is the main isolation boundary between partners. Confirm which database and schema each partner tenant uses, who can create tenants, and how tenant connection settings are protected, since a misconfigured connection can route one partner's requests to another partner's data.

Fineract-Platform-TenantId on every call

Every API request must carry the Fineract-Platform-TenantId header to select the tenant that serves it. Your partner gateway should set this header from the authenticated partner identity rather than trusting a value supplied by the caller. Test that a token issued for one partner cannot be replayed with another partner's tenant identifier, and log the tenant selected for each request.

No UI and the front-end decision

Fineract is headless and ships no user interface, so every partner portal, back-office screen and staff workflow is built or chosen by you. The Mifos X web application is one documented option used in the project's Kubernetes example. Decide early which screens serve partners and which serve your operations team, and confirm each one enforces the same tenant and role checks as the API.

Read, write and batch instance separation

Fineract's documentation describes read, write and batch instance types set through environment variables, with one write instance, one batch instance and multiple read instances on database read replicas for high load. Partner-facing read traffic should not compete with the Close of Business batch job. Confirm replica lag is acceptable for partner balance queries, and that Liquibase migrations run only on the write instance.

Business events disabled by default

Fineract can publish external business events such as ClientCreated to ActiveMQ, other JMS brokers or Apache Kafka, but this is disabled by default. Enabling it is a deliberate design decision, because partner systems will then receive account data on your event topics. Define which events each partner may receive, how topics are scoped per tenant, and how consumers handle duplicate or out-of-order messages.

OAuth2 and the default development login

Fineract's README shows OAuth2 and HTTP basic authentication, and a default development login of mifos with a password that must be changed for any real deployment. A default credential left in a partner-facing environment gives anyone who knows the project defaults administrative access to every tenant. Remove or rotate default credentials before any partner connects, bind partner clients to scoped OAuth2 credentials, and enforce HTTPS only.

Tenant per partner or shared tenant: choosing the isolation model

Fineract is multi-tenant: each API request carries a Fineract-Platform-TenantId header, and tenant connections are configured from a tenants database. Giving each partner its own tenant places clients, accounts, products and ledger data in a separate logical boundary, which is the easiest model to explain to a partner's auditor. The trade-off is that every tenant carries its own configuration, and the platform team must operate all of them consistently.

  • Data separation: Ask whether the partner contract requires logical separation only, or separate databases. Confirm with the project documentation how tenant databases are provisioned in your environment.
  • Configuration drift: Each tenant can accumulate different products, charts and business rules. Ask who owns the release of configuration changes across tenants and how differences are detected.
  • Database and batch load: Each tenant adds connections, schema and Close of Business Day work. Ask the platform team to estimate load per tenant before agreeing how many partners share one database cluster.
  • Close of Business Day effects: Batch timing is per tenant, so one partner's large run can still share compute with others. Ask partners whether they accept a common daily window.
  • Administration: Define which partner administrators hold tenant-level rights and which operations stay with your platform team, including password and credential changes.

Before committing, ask the risk team how many tenants the operating model can support and what evidence each tenant needs for an audit.

Rollout phases for a BaaS ledger on Fineract

This sequence moves a BaaS ledger from partner and regulatory scoping to a staged first go-live, with each phase closing on a check that the next phase depends on. It keeps tenancy, batch operations and partner onboarding deliberately separate so that the second and later partners follow a repeatable path.

  1. Confirm partner and regulatory scope

    Start by listing the partner types, the regulated activities each one performs and the jurisdictions in which the ledger will hold customer balances. Your compliance lead, legal counsel and the partner's compliance team should agree which obligations sit with you and which sit with the partner, and whether any payment or card data will enter the environment. The step closes with a written scope note that names the regulated entity, the data categories and the controls each party owns. Ask each partner to confirm its own assessment status before design begins, since that answer changes the tenancy and logging requirements.

  2. Design tenancy and product catalog

    Decide how each partner maps to a Fineract tenant identified by the Fineract-Platform-TenantId header, and whether partners share offices, staff, products and chart of accounts or hold them separately. Define a baseline product catalog that partners can configure within limits you approve, and record which settings a partner may change. The output is a tenancy and catalog design document reviewed by finance, operations and security. Confirm with the vendor and your own testing how tenant-level administrative access and reporting are scoped before the design is signed off.

  3. Stand up instances on PostgreSQL

    Build the environment on PostgreSQL, the database the Fineract README recommends, using the write, batch and read instance types described in the documentation. Keep one write instance and one batch instance, then add read instances on database read replicas as load requires. Configure TLS through the documented SSL environment variables and remove the default development login before any shared environment is reachable. The step is complete when each instance role starts with its intended environment settings and the health checks pass from the networks where they should run.

  4. Run Liquibase migrations as a separate job

    Because Liquibase migrations run only on write instances, run them as a separate job using the liquibase-only Spring profile on Kubernetes, not during ordinary application startup. Take a verified database backup before each schema change and record the Fineract version and migration state. Run the same procedure in every non-production environment first, so that the production change is a repeat of a rehearsed run. The check is a clean migration log, a matching schema version across environments and a successful restart of the application instances afterwards.

  5. Integrate identity and business events

    Connect authentication for operator, partner and integration accounts, replacing basic credentials with the OAuth2 approach your identity platform supports. Decide which business events, such as ClientCreated, the partner needs, and enable external publishing to ActiveMQ, another JMS broker or Apache Kafka, which is disabled by default. Define topic naming, tenant identifiers in message payloads, consumer ownership and retry handling before partners connect. The step closes when each partner's test consumer receives events for its own tenant only and credentials for every integration account are stored in your secrets system.

  6. Test COB timing and tenant isolation

    Load a volume of accounts that reflects the expected first-year portfolio, then run the Close of Business Day job and measure how long it takes, including the effect of remote partitioning across worker nodes if you use it. The Fineract README notes that this job can run for several hours on deployments with millions of accounts, so confirm the window with the operations team before committing to a partner's service levels. Separately, test that requests with one tenant identifier cannot read or change another tenant's clients, accounts, events or reports. Record the results as the acceptance evidence for the next phase.

  7. Onboard the first partner in stages

    Bring the first partner through a staged go-live: a sandbox tenant with synthetic data, a limited pilot with a capped set of accounts, then general availability once the pilot's reconciliation and incident procedures have run cleanly. Document the onboarding runbook as you go, covering tenant creation, product configuration, credential issuance, event subscription and the partner's reconciliation feed. The step closes with a signed-off onboarding record and a retrospective that updates the runbook. Every later partner repeats this work, so the runbook should be treated as a deliverable, not an afterthought.

Isolation, support and who owns the partner relationship

The first question to settle is who answers when a partner's tenant fails. Fineract is one application with one deployment, and every tenant is selected per request through the Fineract-Platform-TenantId header, with connections resolved from a tenants database. A fault in a shared write instance, the batch instance or the Close of Business Day job can therefore reach every partner at once, even when only one partner reports it. Write the incident matrix before go-live: who triages a tenant-scoped error, who owns the platform layer, who can restart or drain batch work, and which partner-facing commitments apply to each. Confirm with the vendor and your own team how tenant-level data isolation is verified, since the README describes tenant routing but does not make isolation guarantees you can contract on.

Credentials and secrets need the same boundary. The README's default development login must be replaced before any real deployment, and each partner's tenant should have its own administrative identity, with OAuth2 or basic authentication configured at the platform level and tenant database credentials held separately from the application configuration. Ask who can read tenant connection settings and who can rotate them without touching other tenants. Upgrades are the point where the shared model bites hardest. Fineract's quarterly release cadence and end-of-life archiving under the ASF policy mean every partner moves on the same schedule, so a planned upgrade is a joint change that needs partner notice, a test window per tenant and an agreed rollback position. Put the upgrade calendar and notice terms into the partner contracts.

Partner consumers of business events raise the last set of questions. Events such as ClientCreated are disabled by default and, when enabled for Kafka, a partner's consumer group should only read the topics it is entitled to. In KRaft clusters, the StandardAuthorizer stores ACLs in the metadata log, and resources without ACLs are restricted to super users unless allow.everyone.if.no.acl.found is set to true. Keep that setting false, grant each partner principal read access to its own topics and consumer groups, and test that a partner principal is denied on a neighbor's topic. Decide who owns those ACLs, how partner identities are issued and revoked, and whether the partner or your platform team is paid to operate the broker side. Confirm each of these with the partner agreement before the first integration.

Compliance obligations a BaaS operator should map

A BaaS operator sits between its own regulated status and the controls its bank, fintech and card partners inherit from it. The cards below name the obligations most likely to reach a Fineract-based ledger, and the evidence each one will require. DeployOpen prepares systems, controls and evidence for these assessments, but independent auditors and certification bodies issue the reports.

PCI DSS scope when cardholder data is touched

PCI DSS applies to any entity that stores, processes or transmits cardholder data, or that could affect the security of the cardholder data environment. A Fineract ledger does not need card data to fall in scope, but card issuing, card-linked accounts or payment connectors can pull it in through shared networks, logs and integration services. Map every component that sees a primary account number before deciding which systems form the boundary. Confirm with your acquirer or assessor which validation route (Report on Compliance or Self-Assessment Questionnaire) applies to your role.

DORA register and exit strategy

DORA requires financial entities to keep a register of information on all contractual arrangements for ICT services. For services that support critical or important functions, it also requires documented, tested exit strategies and transition plans. A self-hosted Fineract ledger run for a partner bank should therefore appear in the register, with the hosting provider, the DeployOpen engagement and the data locations recorded. Check that each ICT contract states where services and data are processed and how data is returned on termination.

SOC 2 expectations from partners

Partner banks and fintechs often ask for a SOC 2 report before onboarding a BaaS operator. A Type 1 report describes the system and the design of controls as of one date, while a Type 2 report adds an opinion on operating effectiveness over a period. Because SOC 2 reports are generally restricted in use, the partner receives the full report under agreement, unlike a general-use SOC 3 report. Plan the observation window early, since a Type 2 report can only be issued after controls have run for that period.

Swift CSCF when Swift is used

If the BaaS platform connects to Swift for payment messaging, the Swift Customer Security Controls Framework applies. The v2026 framework has 32 controls, 26 mandatory and 6 advisory. Swift users must have these controls independently assessed and attest compliance annually in the KYC-SA application. Map the Fineract hosting environment, the connector servers and the administrator accounts to the relevant controls, and confirm with Swift which architecture components are in scope.

GDPR Article 28 processor contracts

When a BaaS operator processes personal data for partners, it usually acts as a processor. Article 28(3) requires the contract to bind the processor to process only on documented instructions, including for transfers, and to apply the security measures required by Article 32. For a Fineract deployment, this means the client and KYC data flows, the backup locations and any support access by DeployOpen or the hosting provider must be named in writing. Confirm which partner is the controller for each product line.

Cyber Resilience Act reporting duties for software

The Cyber Resilience Act covers software with digital elements. Its Article 14 reporting obligations have applied since 11 September 2026 to all in-scope products placed on the market, and the wider obligations apply from 11 December 2027. If your operator team ships custom Fineract modules, connectors or other software to partners or customers, check whether they count as products on the market and who must report actively exploited vulnerabilities. Most products follow self-assessment under module A, but a notified body is needed for some higher-class products.

What BaaS teams ask before hiring a Fineract partner

What drives the cost and effort of a Fineract BaaS implementation?

The main drivers are the number of tenants, the number and complexity of loan and savings products, the count of integrations with partner systems, and the compliance scope the platform must support. Each partner tenant multiplies configuration, testing and access design work, so a platform serving ten partners with shared products is different from one serving ten partners with custom products. Ask the partner to break the written scope into these four drivers so you can see which ones move the quote. DeployOpen does not publish a price list, and a quote follows from the written scope.

Can our engineering team build a Fineract BaaS platform without a partner?

Yes, many teams do, but the Fineract README states that a production deployment can be complex, costly and time-consuming, and that the project does not provide a comprehensive production deployment guide. Your team would need to design tenant isolation, database and instance topology, end-of-day batch processing, event publishing, authentication and backups before go-live. Assess whether you already have engineers with Java, PostgreSQL, Kubernetes and banking domain experience, and whether they can carry the work alongside existing duties. A partner can take part of the build, or review your design, without taking over the whole platform.

How long does a Fineract BaaS rollout take and what changes it?

Duration depends on the same drivers as cost: tenant count, product variety, integrations, data migration and the compliance evidence you must produce. The timeline also depends on how quickly your product owners approve products, rules and fee structures, and on how many test cycles your partners require. Ask for a timeline tied to named milestones in the written scope, and confirm which items depend on your partners or your own approvals. No fixed duration applies to every platform, so treat any single figure you hear as a starting point to test against your scope.

What does the work need from our own staff?

Expect to supply product owners who can define loan and savings products, finance staff who can confirm the ledger mapping, and operations staff who will run batch jobs and incident response. Your security team must approve tenant isolation, authentication and secrets handling, and your architects must confirm hosting, network and data residency choices. Your partners or their technical teams will need to agree on API usage and event contracts. Ask the partner to list each role, the hours or sessions expected from it, and the decisions your staff must make before each phase.

Which costs are one-time and which recur after go-live?

One-time costs usually cover design, configuration, custom development, integration build, data migration, testing and the initial security review. Recurring costs cover infrastructure you run in your own accounts or data centers, database and backup operations, monitoring, patching, upgrades and any support retainer. Infrastructure cost is paid to your cloud or data center provider and is not part of the partner quote. Ask for the quote to show one-time and recurring items on separate lines, and ask which items are optional, such as continuous testing.

How are upgrades and ongoing support handled through a retainer?

Ongoing support, upgrades and continuous testing are available as retainers, and the retainer scope should list which upgrades, incident hours and reviews it includes. Fineract publishes quarterly releases and archives end-of-life releases, so an upgrade plan should name the release line you run and how often you will move to a newer one. Ask the partner to state what happens when a release reaches end of life, how upgrades are tested against your tenants, and what response expectations are written into the retainer. Confirm each point in writing rather than relying on a general support statement.

What should a written scope for a Fineract BaaS engagement include?

A useful written scope names the tenants and their isolation model, the products and business rules, the ledger mapping to your chart of accounts, every integration with partner systems and the event contracts they consume, the data migration sources, and the compliance evidence to be prepared. It should also list the environments, the hosting model, the authentication design, backup and recovery targets you expect, and the handover deliverables such as documentation and runbooks. Ask which items are excluded, which depend on your decisions, and how change requests are priced. Fixed-scope engagements agree deliverables and timelines in writing before work starts, so the scope document is the basis for every later comparison.

How do compliance requirements from partners and regulators change the Fineract scope?

Compliance requirements add evidence work, access controls, logging and documentation, and they can extend the scope of a BaaS platform beyond the ledger itself. Payment card data, if it passes through the platform, brings PCI DSS scope, and PCI DSS v4.0.1 is the only active version. DORA requires contract terms on service location and data return for ICT services supporting important functions. Your partners may also ask for SOC 2 or ISO/IEC 27001 evidence. DeployOpen prepares systems, controls and evidence for assessments, but independent auditors and certification bodies issue reports and certifications, so ask which evidence the partner will produce and which assessor will review it.

How DeployOpen scopes and delivers a BaaS ledger

DeployOpen plans, implements, customizes, integrates, hardens, documents and supports self-hosted open-source platforms inside your own cloud accounts, data centers or air-gapped networks. For a banking-as-a-service ledger built on Apache Fineract, we start from a written scope covering tenant design, partner isolation, event delivery and the operating model before any build work begins.

How we scope

  • Map each partner program, product and tenant boundary before choosing how many Fineract tenants to run.
  • Agree in writing which APIs, business events and partner systems are in scope for the ledger.
  • Confirm the hosting model, database platform and operating responsibilities that the written scope will assume.

How we build

  • Configure products, ledger mappings and tenant connections on PostgreSQL, the database the project recommends.
  • Build partner-facing integrations, event consumers and idempotent API clients against your documented contracts.
  • Test tenant isolation, authentication, HTTPS-only access and batch end-of-day runs before any partner goes live.

How we hand over

  • Document tenant provisioning, instance layout, configuration keys and runbooks for your own operations team.
  • Deliver the evidence you need for partner due diligence, including access, change and backup records, without claiming any audit outcome.
  • Walk your engineers through the write, batch and read instance setup and the Liquibase migration approach.

How we support

  • Offer ongoing support, upgrades and continuous testing as a retainer aligned to your release schedule.
  • Plan Fineract 1.x upgrades and Kafka or ActiveMQ version moves as separate, scoped work with rollback steps.
  • Review tenant isolation, credentials and event routing whenever a new partner or product is added.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.