How Apache Fineract credit bureau integration works
Loan officers need bureau data while they assess an application, so the integration has to put the credit check inside the Fineract workflow rather than in a separate portal. Fineract supports this through its credit bureau configuration APIs, documented in the Fineract legacy API documentation. These APIs maintain three kinds of settings: the integrated credit bureaus themselves, *organisation aliases* that map your institution's identifiers to the bureau's view of it, and *credit bureau to loan product mappings* that decide which bureau check applies to which loan product. Before any build work, the team should confirm in that documentation which bureau settings exist in the Fineract version it plans to run, and who in the institution owns each mapping decision.
The built-in ThitsaWorks integration is the supported path in the supplied documentation. It fetches credit reports using an NRC parameter, the national registration card number used in Myanmar, and can save the returned credit report information to a client record. The practical check is to run a test lookup against the bureau's sandbox or test access in a non-production tenant, confirm which fields come back, and verify that the saved report attaches to the correct client. Access credentials, the bureau's contractual terms and any data-sharing approvals sit with the institution and the bureau, so the project plan should name who obtains them and when.
Any other bureau needs custom work. The documentation supplied for this topic does not describe the request formats, authentication, response mapping or report storage for other bureaus, so the team should not assume the ThitsaWorks pattern carries over. Scope the adapter as a separate deliverable, obtain the bureau's technical specification first, and confirm how the response will be stored and mapped to client records and loan decisions. Ask the bureau, and the DeployOpen team scoping the work, to document the error handling and retry behavior before go-live, because a failed lookup at application time needs a defined outcome.
What you need before configuring a credit bureau in Fineract
Credit bureau integration touches the Fineract deployment, the bureau's contract, the network path to the bureau, client data and lending products. Settle these five areas before you touch the configuration APIs, because each one decides what the integration can actually return.
Fineract 1.x deployment and tenant
Confirm which Fineract 1.x release runs in your environment and which tenant will hold bureau settings. Fineract 1.15.0 is the current stable release, but the legacy API documentation should be checked against the version you run, since endpoint names and payloads can differ between releases. Each tenant is configured separately through the Fineract-Platform-TenantId header, so decide whether bureau settings are needed in one tenant or several before building anything.
Bureau agreement and credentials
Confirm the commercial agreement with the bureau before planning the build. Ask who issues credentials, which environments (test and production) are provided, how access is revoked when staff leave, and what usage terms govern storing report data inside your lending system. Store issued credentials in your secrets manager, never in Fineract configuration files or source control.
Outbound network and certificates
Fineract must reach the bureau endpoint over HTTPS from the write instance that runs the lookups. Map the egress path through your firewall, proxy and any NAT, and confirm the bureau's certificate chain is trusted by the Fineract runtime. Ask the bureau for its endpoint list per environment and a change process for certificate rotation, so a renewal does not silently stop report retrieval.
Client records holding NRC values
The ThitsaWorks integration fetches reports using an NRC parameter, so client records must carry accurate NRC values before any request is made. Audit existing client data for missing, malformed or duplicated NRC entries, and decide who may correct them. Review how NRC data is captured in onboarding, since a bad identifier produces a wrong or empty report and a weak audit trail.
Loan products that will use bureau data
Credit bureau configuration maps bureau settings to loan products, so list every product that will consult a report and the decision point in its lifecycle. Document which products require a report, which only record one, and how a missing or stale report is handled. Agree these rules with credit risk before configuration, because the product mapping is where bureau data starts to influence lending decisions.
Configuring the ThitsaWorks credit bureau integration step by step
This sequence takes Fineract from a signed bureau agreement to a tested integration in which saved bureau reports are available to loan products. Each step closes with a read-back or test-record check so the configuration can be verified before any customer data flows through it.
Confirm the bureau agreement and test access
Compliance and vendor management confirm the agreement with ThitsaWorks, including the test environment, the request format for NRC lookups, and who holds the credentials. Store those credentials in your secrets manager, not in configuration files or tickets. Done means you hold written confirmation of test access and a named owner for credential rotation, and you have confirmed the terms that govern storing bureau reports in Fineract.
Register the integrated bureau in configuration
A Fineract administrator adds ThitsaWorks as an integrated credit bureau through the credit bureau configuration in the legacy API documentation. Enter only the non-secret settings in this step and reference the credentials from your secrets store. Done means a read-back of the configuration returns the bureau entry with the name and settings you agreed with the bureau, and no secret values appear in the response or the change log.
Set organisation aliases for the bureau
Set the organisation alias that identifies your institution to the bureau, using the value the bureau gave you in writing. Ask the bureau to confirm the exact identifier, since a mismatch can route requests incorrectly or return empty results. Done means a read-back of the alias configuration shows the value you confirmed with the bureau, and the bureau has acknowledged that value on its test environment.
Map bureau settings to loan products
Link the configured bureau to each loan product that should use bureau data, through the credit bureau to loan product mapping. Products without a mapping should be listed in your design so their lending behavior is an explicit decision and not an accident. Done means a read-back shows each mapped product, and a reviewer has checked the list against the product catalogue and approved which products consume bureau data.
Test a report fetch with a non-production NRC
Run a report fetch using an NRC value that the bureau provides for testing, never a real borrower's identifier in a non-production system. Confirm the response is parsed and that the request and response logs do not expose the NRC or report contents in plain text. Done means the test fetch returns the expected test report, and your log review confirms that identifiers are masked and that failures produce a clear error.
Enable saving reports to clients
Turn on saving of bureau report information against client records, then run the fetch again for a test client. Confirm which users can view saved reports and how long your policy keeps them, since saved reports become personal data held by Fineract. Done means the test client record shows the saved report with its retrieval details, and access to that record matches the role model you approved.
Verify product rules use saved data
Submit test loan applications for the mapped products to confirm that the lending process reads the saved report. Run cases with a report present, with no report, and with a report your policy treats as stale, and record the outcome of each. Confirm how your rules consume the data with the product owner, because the bureau integration does not decide lending outcomes on its own. Done means each test case produces the outcome in your signed-off test matrix.
Mapping NRC, client records and loan products to bureau data
This table lists each data point that moves between Fineract and the bureau integration, the Fineract object it maps to, and what the team must confirm against a live response. Read it as a build checklist: rows marked as confirm items should be tested with a sample request before the mapping is locked. The main takeaway is that the NRC parameter, organisation aliases and product mappings are configuration decisions, while the report fields saved to clients depend on what the bureau actually returns.
| Data point | Fineract object or setting | Confirm before build |
|---|---|---|
| NRC parameter | Client identifier used as the bureau query key | Confirm the exact client identifier field that holds the NRC and its format rules in your deployment |
| Organisation alias | Bureau account or subscriber reference for each lending organisation | Confirm which alias the ThitsaWorks integration expects and whether one alias serves several branches |
| Bureau settings | Integrated credit bureau configuration record | Confirm the endpoint, credentials and environment values with the bureau before storing them |
| Loan product mapping | Credit bureau to loan product link | Confirm which products trigger a fetch and whether mapping is one bureau per product |
| Report fields saved | Credit report information attached to the client record | Confirm field names and nesting in a sample live response before writing any mapping |
| Missing or mismatched NRC | Lookup result returned for the client | Confirm how the integration responds when no record matches and plan a manual review path |
| Other bureaus | Additional bureau settings and product mappings | Confirm each bureau's query key, account model and response schema separately |
Choosing between the built-in ThitsaWorks path and another bureau
The ThitsaWorks integration is the bureau connection that Fineract's legacy API documentation describes. It fetches credit reports using an NRC parameter and can save the report information against the client record. Because the connector already exists in the platform, the main work is configuration: registering the bureau under credit bureau configuration, setting an organisation alias, and mapping the bureau to the loan products that should request reports. Effort depends less on code and more on confirming the scope of access your bureau agreement grants and on testing the data path end to end.
- Configuration scope: credit bureau settings, organisation aliases and loan product mappings are set through the API rather than custom code.
- Identifier handling: the NRC parameter must match the national identifier stored on client records, so data capture rules come first.
- Storage of results: confirm how saved report data is retained, who can view it and how long it stays on the client record.
- Contract and access: confirm with the bureau and ThitsaWorks which products, fields and environments your agreement covers.
Before you commit, check the bureau agreement, the NRC data quality on existing clients and whether the saved report format meets your credit policy.
A different bureau has no built-in connector in the platform, so it means building one. The work covers the bureau's request and response formats, mapping its fields into the Fineract credit bureau model, handling its errors and timeouts, and securing the credentials used to call it. Most of the effort sits in the mapping and in the bureau's own certification process, which may require test cases, sandbox access and sign-off before production use. The effort repeats whenever the bureau changes its interface.
- Request and response mapping: each bureau field must map to a Fineract field, with rules for missing or mismatched values.
- Custom integration code: the connector is built, tested and reviewed like any other custom component.
- Bureau certification: ask the bureau what testing, sandbox access and approval steps apply before go-live.
- Ongoing maintenance: budget for interface changes, credential rotation and monitoring of failed requests.
- Credential and data handling: bureau keys and consumer data need storage, access and logging controls in your infrastructure.
Ask for a written mapping specification and a list of the bureau's certification and change-notice obligations before estimating the work.
Effort on either path is set by a small number of factors that are easy to underestimate at the start. The first is data quality: client identifiers, names and dates must be consistent before any bureau call succeeds. The second is product design: each loan product that requests a report needs a deliberate mapping, and products with different approval rules may need different bureaus or thresholds. The third is the number of environments and the test evidence your credit and audit teams expect. Consider these drivers separately for each path, because a built-in connector can still take substantial time if the data is weak.
- Client data quality: missing or duplicated national identifiers cause failed or wrong lookups.
- Product count: every mapped product adds configuration and test cases.
- Environments: sandbox, test and production bureau access each need their own setup and credentials.
- Evidence: credit policy and audit reviews may require documented test results and change records.
- Change frequency: bureau interface changes drive recurring work on any custom connector.
Ask any partner to show how they will test identifier matching and product mapping before they quote.
After go-live, the two paths carry different operating loads. A built-in connector still needs monitoring of request failures, access reviews of who can see saved reports, and checks that the bureau account remains valid. A custom connector adds the operation of its own code, including deployment, logging, secret rotation and handling of bureau outages. Decide early who owns each part: the credit team for policy and product mapping, the platform team for the connector and secrets, and the security team for data access and retention. Clear ownership prevents a working integration from drifting after the people who built it move on.
- Failure monitoring: track failed bureau requests and timeouts with alerts that reach the owning team.
- Secret management: bureau credentials need rotation, scoped access and recorded changes.
- Access reviews: check who can view saved report data on client records at a set interval.
- Retention: define how long report data is kept and how it is deleted.
- Vendor changes: track bureau notices and ThitsaWorks or Fineract version changes that affect the connector.
Confirm the operating owner and the review cadence for each path before the integration is approved for production.
Securing bureau credentials, personal data and outbound calls
A credit bureau integration moves national identity numbers, credit histories and bureau credentials between Fineract and an external party. The cards below cover the controls that protect that flow, from transport and secret storage to access, logging and network egress.
Enforce HTTPS only
The Fineract documentation strongly encourages HTTPS only and documents SSL settings through environment variables such as FINERACT_SERVER_SSL_ENABLED. Confirm that every path into Fineract that carries NRC lookups and report responses uses TLS, including traffic from the Mifos web app, internal services and any gateway in front of the API. Check that plain HTTP is not reachable on any listener, including health endpoints that could be misconfigured.
Keep bureau credentials out of config
Bureau account credentials are the key that unlocks report retrieval, so they should not sit in plain configuration files, images or source control. Decide where the ThitsaWorks and any other bureau secrets live, such as an external secrets manager or Kubernetes secrets with encryption at rest, and who can read them. Ask the bureau how credentials are issued, rotated and revoked, and rehearse a rotation before go-live.
Restrict who views and saves reports
Viewing a credit report and saving it to a client record are separate actions with different risks, so they should be separate permissions in your access model. Map Fineract roles and permissions to branch, credit and compliance staff, and confirm which roles can trigger a fetch by NRC, read stored reports and save them. Test the restriction with a non-privileged user, since the default administrative account is not a suitable test identity.
Treat NRC and reports as personal data
The NRC is a national identifier and a credit report is sensitive financial personal data, so both fall under your data protection obligations. Document why each is collected, how long saved reports are kept on the client record, and who can export them. Ask your privacy and legal teams to confirm the lawful basis, the retention schedule and any consent wording the bureau requires before the first live fetch.
Log access without report content
Audit trails need to show who fetched or viewed a report, for which client and when, but the log should not repeat the report body or the NRC in plain text. Configure application and gateway logs to record identifiers such as the client ID, user and request outcome, and mask NRC values. Verify that exceptions and debug output from the bureau client do not dump response payloads, and check log retention and access.
Limit egress to bureau endpoints
Fineract should reach only the bureau endpoints it needs, so restrict outbound traffic from the Fineract network segment to the named hosts and ports. Use firewall or egress policy rules, and confirm the bureau's exact hostnames, IP ranges and any certificate pinning or mutual TLS requirements with the bureau. Test that connections to other destinations fail, and record the change in your change management process.
Testing the bureau integration before go-live
Can we test bureau report fetches in a sandbox before using live bureau data?
Yes, but only if the bureau gives you a test or sandbox environment with its own credentials and test NRC values. Confirm with the bureau whether its sandbox returns the same report structure as production, because the Fineract ThitsaWorks integration parses what the bureau returns. Run the fetch against the sandbox endpoint configured in the credit bureau settings, record the raw responses, and compare the saved report fields with what the bureau documents. Keep sandbox credentials out of production configuration, and confirm with the bureau what it charges for test calls and whether production calls are billed per fetch. Test data should never contain real client NRC numbers.
What should happen when a Fineract credit check uses an unknown NRC?
The integration should return a clear no-match or error result that staff can act on, and it should not create an empty or misleading report record. Build negative test cases for malformed NRC values, NRCs with the wrong format, and NRCs the bureau does not hold. For each case, confirm the exact response Fineract returns, whether anything is saved to the client, and whether the loan workflow stops or continues. Check this with the bureau's own documentation for no-match responses, since Fineract's handling depends on what the bureau returns. Log the outcome so that a later audit can show what was checked and why.
How do we test timeouts and bureau outages without affecting loan processing?
Test timeouts and bureau errors by pointing the integration at a stub or a deliberately unreachable test endpoint, then observe what Fineract does. Cover slow responses, HTTP error codes, malformed bodies and connection failures. Confirm that loan application APIs remain responsive, that failed fetches are reported to the user with a usable message, and that a retry does not create duplicate reports. Agree with your credit risk team whether a loan can proceed without a bureau result and document that rule before testing, so the test checks the configured behavior rather than an assumed one. Measure the outcome with your monitoring setup, not only from the application screen.
How do we confirm duplicate credit reports are not saved twice?
Submit the same fetch more than once for the same client and confirm how many report records exist afterward and whether each one is linked to the right client. Repeat the test with retries that follow a timeout, because a timed-out call may still have been completed by the bureau. Check whether the bureau charges for each call, since repeated fetches may also increase cost. Verify the saved record contents in the database for each run, and document the expected behavior, such as keeping one record per fetch or updating an existing one. Ask the bureau whether it returns a reference that you can use to match reports.
How do we confirm one tenant cannot read another tenant's credit reports?
Send every credit bureau request with the Fineract-Platform-TenantId header set to one tenant, then repeat the same request with a different tenant and confirm that the reports and configuration returned belong only to the tenant in the header. Test the bureau configuration, organisation aliases and product mappings separately, because each is tenant-scoped data that could leak. Also confirm that a report saved under one tenant does not appear in another tenant's client record. Run these checks against a deployment configured as it will be in production, including the tenants database connections, and keep the results as evidence for your security review.
How do we test loan product rules with and without a credit report?
Create test clients in two groups: one with a saved bureau report and one without, then apply for the same loan product to each. Confirm that the credit bureau to loan product mapping produces the outcome you designed, whether that is a rule applied, a warning, a block, or no change. Test the boundary values in the rule, such as scores or fields that just pass or just fail, and confirm which report fields the rule reads. Include a case where the report exists but is older than your policy allows, if your process uses report age. Record each outcome against the written credit policy so the business owner can sign off.
Who should sign off the bureau integration test results?
The credit risk owner should sign off the product rule outcomes, the compliance lead should sign off data handling and tenant isolation, and the platform owner should sign off the technical behavior under failure. Each sign-off should refer to a written test plan that lists the cases, expected results and actual results with dates. If you use an outside partner for the build or testing, agree in the written scope which test cases they run, which they support, and who keeps the evidence. Keep the test records with the configuration version that was tested, so that any later change to the bureau settings can be retested against the same cases.
Common credit bureau integration failures and fixes
This table pairs each common failure in a Fineract credit bureau integration with its likely cause and the fix to try first. Read it in order when a report fetch or saved report misbehaves, because several symptoms share one root cause. Most failures trace back to the bureau configuration, the product mapping, the tenant context or outbound network access, so check those before changing code.
| Failure | Likely cause | Fix |
|---|---|---|
| Report fetch returns nothing for an NRC | The NRC was entered in a different format than the bureau expects, or the bureau record does not hold data for that person | Confirm the NRC format with the bureau, re-run the fetch with a known test record, and check the bureau response for a no-match result |
| Bureau not offered on the loan product | The credit bureau to loan product mapping was never created or points to a different product | Open the credit bureau configuration and add or correct the mapping for the affected loan product, then retest a new application |
| Saved reports missing on the client | The fetch succeeded but the save option was not enabled, or the report was fetched under a different client record | Confirm the save setting in the bureau configuration, then fetch again for the correct client and check the client's stored records |
| Credentials rejected by the bureau | The bureau user, password or organization alias in the Fineract configuration does not match what the bureau issued, or they were rotated | Confirm the credential set with the bureau, update the configuration entry, and store the secret outside plain text in your secrets process |
| Outbound connection blocked | The Fineract host cannot reach the bureau endpoint because of firewall rules, a proxy requirement, or DNS resolution from the container or pod | Test outbound access from the same runtime as Fineract, open the required egress path to the bureau endpoint your agreement names, and confirm the TLS trust chain |
| Reports appear under the wrong client or tenant | The request omitted or mismatched the Fineract-Platform-TenantId header, so the call ran against another tenant's data | Set the tenant header on every bureau call, verify the tenant in test scripts, and review tenant-scoped records after go-live |
How much effort does a Fineract credit bureau integration take?
What is the main cost driver for a Fineract credit bureau integration?
The largest cost driver is how many bureaus you connect and how much each one differs from the built-in path. Fineract ships a credit bureau configuration area that stores integrated bureaus, organisation aliases and mappings from bureaus to loan products, and a ThitsaWorks integration that fetches reports by NRC. Connecting the built-in path is mostly configuration and testing. Each additional bureau adds its own request format, response parsing, credentials, mapping work and test cycles. Ask any partner to price each bureau separately and to state which parts of the work they assume you will supply.
Can our own team build the ThitsaWorks credit bureau path in-house?
A team with Fineract and Java experience can configure the built-in ThitsaWorks path in-house if it has access to the bureau's test environment and the bureau's technical documentation. The Fineract legacy API documentation describes the credit bureau configuration and the NRC-based report fetch, which gives your engineers a starting point. The harder parts are usually outside the code: obtaining bureau credentials, agreeing on permitted uses of the data, and proving that personal data is handled correctly. If your team lacks any of these, a fixed-scope engagement can cover the parts you do not want to staff.
What must our team provide before an integration project starts?
Start by assembling the inputs that are hardest to obtain later. Ask your team to provide:
- Bureau contacts with technical and commercial authority, plus the agreement or onboarding status for each bureau
- Sample NRCs and matching expected report outcomes from the bureau's test environment
- Loan product rules that determine which products require a bureau check and which report fields the credit decision uses
- Access to non-production and production-like Fineract environments, with network paths to each bureau
Missing inputs in these four areas are the most common reason a scope grows after it is agreed.
How does the number of bureaus change the project timeline?
Timelines grow with the number of bureaus, the number of loan products that use each bureau, and how many distinct request and response formats you must map. Bureau onboarding is often the slowest step because it depends on another organization's approval and test access, so it can run in parallel with development but cannot be shortened by the implementer alone. Ask for a timeline that lists bureau onboarding as a separate milestone with dependencies, and for the assumptions behind each duration. No duration is given here because the supplied information does not establish one.
What does testing with a credit bureau involve?
Testing covers more than a successful API call. You need to confirm that each NRC returns the expected report, that missing or malformed identifiers fail safely, and that the saved report is attached to the correct client and reviewed in the loan workflow. Bureau test environments often return limited or sample data, so plan a short list of test cases that map to real decisions, such as a clean report, a report with adverse history, and a no-record result. Ask the implementer to show the test cases and results in writing before go-live.
What compliance review does personal data handling require?
A credit bureau integration moves national identity numbers and credit histories, so it needs a documented review of lawful basis, data minimization, retention and access. DeployOpen prepares systems, controls and evidence for compliance assessments, but it does not issue audit reports or certifications, and independent auditors or certification bodies make those determinations. Ask your privacy and compliance lead to define retention rules for saved reports, the roles allowed to view them, and how requests for deletion or correction are handled. Those decisions shape the build, so they should be made before the mapping work starts.
What should a quote for this integration include?
A useful quote lists the bureaus in scope, the built-in ThitsaWorks path versus custom bureau connectors, the loan products whose mappings are configured, the test cases and environments, and the compliance evidence to be prepared. It should separate one-time work (design, build, testing, documentation) from recurring costs (bureau fees, hosting, support retainer, and changes when a bureau changes its interface). Bureau fees are billed by the bureau and are not part of implementation pricing, so confirm them separately. Every quote is based on the written scope, which is agreed before work starts.
How DeployOpen scopes and delivers a credit bureau integration
DeployOpen approaches a Fineract credit bureau integration as a written, fixed-scope engagement inside your own infrastructure. We confirm which bureaus, product mappings and report-saving behavior apply to your lending operation before any build starts, then deliver, test and document the work for your team to run.
How we scope
- Confirm which credit bureaus your lending operation must query and whether ThitsaWorks applies to your market.
- Map each credit bureau configuration to the loan products that will require a report before approval.
- Agree in writing which report fields, saved report records and client-facing outputs are in scope.
How we build
- Configure bureau settings, organisation aliases and product mappings through the Fineract credit bureau APIs in a non-production tenant.
- Test the NRC lookup path with approved sample identifiers and confirm how fetched reports are saved to client records.
- Where a required bureau has no built-in integration, design and build the adapter against its documented interface and test it the same way.
How we hand over
- Deliver configuration records, API call sequences, test results and a runbook describing each bureau connection.
- Document credentials, certificate handling and where bureau responses are stored, so your team can audit them.
- Walk your operations and credit teams through the loan approval flow and the known failure responses.
How we support
- Offer ongoing support, upgrades and continuous testing for the bureau integration as a retainer.
- Retest the integration when Fineract, the bureau's interface or your product catalogue changes.
- Confirm with each bureau and your compliance team which data-sharing agreements and consent records apply before go-live.

