Banking core integration layer for SFB | Intway
Home / Case studies / Financial services · regulated institution
Case study

An integration layer to evolve the channels without touching the core

A traceable service layer connected the institution's applications to its banking core, without pushing the core's complexity into every new build.

Industry Financial services · Institution Regulated · Core Market banking core · Connected channels Online banking web · Online banking mobile · Branch back office · Call centre · Internal systems · Third-party integrations · Model In-house integration layer · Coverage AR client withheld
Intway
Financial services · regulated institution
Integration architecture

An integration layer to evolve channels without touching the core

A traceable service layer connected the applications with the banking core, without passing its complexity on to every new development.

Core untouchedNew channels without touching it: the adaptation lives in the layer
TraceableEvery operation end to end, with a correlation identifier
No duplicatesRetries with verified state: the core is queried first
Channels
  • Mobile app
  • Online banking
  • Portals and back office
Every channel consumes the same API, without knowing the core protocol.
Service layer
  • REST API with versioned contracts
  • One adapter per operation
  • A correlation identifier per operation
  • Retries with verified state
Format translation, traceability and retry control all live here.
Banking core
  • Existing system, unchanged
  • State is checked before retrying
  • Rules and balances remain its own
The core does not absorb the complexity of every new channel.
REST API
Per-operation adapters
Versioned contracts
Observability

Your core works, but does every new channel restart the integration?

We can build a service layer that connects your applications to the existing banking system and reduces technical coupling.

Let's talk about your integration

The challenge

The banking core held the institution's essential data and operations, and there was no intention of replacing it: it did what it had to do. The problem was a different one. Every new channel integrated against it from scratch.

The team building an application had to learn the banking system's own formats, interpret its response codes and solve validation, error handling and operation tracking on its own. A change in the core forced a review of several consumers at once. A new application rebuilt integrations that already existed in another project, with different criteria.

The most delicate point appeared when an operation did not end with an immediate response. After a connection drop or a timeout, the channel was left without certainty: it did not know whether the request had been rejected, was still in progress, or had been recorded correctly by the core. In a financial environment, repeating an operation without knowing its state is as risky as losing it.

The solution

We built an integration layer between the core and the systems that need to query or record banking information. It works as a stable boundary: channels consume service contracts defined per operation, and specialized adapters translate those requests into the format the core expects.

Six channels are enabled: online banking web, online banking mobile, the branch back office, the call centre, internal systems and third-party integrations. The journey starts when a user initiates a query from any of them. The application sends the request to the service layer, which validates identity, permissions and the presence of mandatory data before touching anything. If the request is valid, the corresponding service applies the integration rules and hands it to the adapter.

The layer publishes twelve operations grouped into four families. Position: balance query, movement query, customer accounts query and receipt query. Transfers: new transfer, status query and operation reversal. Payments: new bill payment and payment query. Products: term deposit query, new term deposit and loan query. Each one has its own contract, version and execution mode, synchronous or deferred.

Catalogue of operations published by the integration layer and the detail of one contract
One contract per operationA new channel team consumes what is already published instead of integrating against the core again.

The adapter transforms the message without exposing that complexity to the channel: it converts fields, codes and structures into the core's model, executes the communication and receives the result. It then normalizes the response, so consuming applications always work with the same contract, regardless of how the core represents the information internally.

When the operation completes successfully, the channel receives a functional response it can show the user. When it is interrupted, the integration keeps the identifier and the state of the exchange. Instead of blindly repeating the request, the support team checks which stage it reached and verifies the result against the core before deciding whether a retry is warranted.

Operation without a response and its verification against the banking core before any retry
No blind retriesAfter a timeout, the first step is checking whether the core already recorded the operation.

Every operation is tied to a correlation identifier. From the tracking view, the authorized team can check the reception time, the originating channel, the invoked service, the state and the technical result. Sensitive data is protected: the trace exists to diagnose an incident, not to become a parallel copy of banking information.

Tracking view with the detailed trace of a banking operation
One operation, one traceThe identifier connects the channel request, its transformation and the core's response.

This design also changes how a channel is added. The team building an application does not implement communication with the core again: it consumes the services already published and focuses on the experience and the rules of its own product. If the core changes, the adaptation is resolved in one place instead of in every consumer.

Platform architecture

The architecture separates five responsibilities: consuming channels, the access and security point, the integration services, the specific adapter and the core. That division is what prevents external contracts from reproducing the banking system's internal structures, which is exactly the coupling the project set out to remove.

Synchronous operations traverse the layer and return a normalized response to the channel. Those requiring deferred processing keep a queryable state and a unique identifier. Treating each interaction according to its real behaviour is what makes it possible to avoid indiscriminate automatic retries on financial operations.

Observability follows the whole journey. Technical events record the request's progress and make it possible to relate what happened in the channel with the actual invocation against the core. Support can investigate a single operation without walking through the isolated logs of four different systems.

Architecture of the integration layer between digital channels and the banking core
The core stays behind the boundaryChannels talk to the services; only the adapter knows the banking system's format.

The core remains the system responsible for processing and confirming banking operations. The layer does not duplicate that responsibility: it controls the exchange, translates the contracts and presents a stable interface for everything that evolves around it.

The implementation

We started by identifying the priority operations and documenting, for each one, its inputs, responses, validations and possible error states. Before adding the first channel we defined the integration contracts and built reproducible test cases, to confirm that the new layer interpreted the core exactly as the existing processes did.

The rollout was progressive, and that was the design decision that mattered most. Each operation was validated end to end before the next one was added: correct responses, functional rejections, timeouts and recovery from communication failures. That allowed the integration to evolve without demanding a core replacement or a simultaneous migration of every channel.

The result is an architecture where the core keeps its transactional role and new developments rely on a controlled, traceable interface. The institution adds services around the core without turning every digital initiative into an integration project that starts over.

REST APIPer-operation adaptersVersioned contractsObservability

Frequently asked questions

How do you prevent a retry from duplicating a banking operation?

Each request carries its own identifier and the integration stores the state it reached. After a drop, the team first verifies against the core whether the operation was recorded, and only then decides whether to retry. Indiscriminate automatic retries are not applied to financial operations.

Does the core have to be replaced to add digital channels?

No. The core keeps processing and confirming banking operations. The layer handles contracts, input validation, transformation, communication and traceability, and publishes a stable interface for the applications built around it.

What happens when the core changes a format or a response code?

The change is absorbed by the adapter, the only component that knows the banking system's internal model. Channels keep consuming the same contract and need no new version or redeployment.

Can it be implemented in stages without disrupting operations?

Yes, and that is the recommended approach. Operations are prioritized by channel and by risk, and each circuit is validated end to end before the next one is added, including functional rejections and timeouts.

Does the integration layer store banking information?

It does not replicate the core's database. It records the technical data of the exchange so an incident can be diagnosed, with sensitive fields protected. The trace exists to reconstruct what happened to an operation, not to query balances or movements.

How is a rejected operation diagnosed?

Through the correlation identifier, which links the channel request, its transformation, the communication with the core and the result. A single view shows at which stage it stopped and with which technical response, without cross-checking logs from several systems.

Why you will not see the client name

We work under non-disclosure agreements: we do not publish company names, commercial data, or technical details that could compromise our clients' operations. The metrics in this case study are real and validated with them. Need more detail to evaluate us? We can expand on it under NDA.

Request more information