Contact Us

Payments Applications

The Customer Asks One Question.
Your Systems Hold Five Partial Answers.

Payments application engineering built around the state of a payment: modelled properly, including the state where nobody knows, with retries that cannot double-pay and exceptions treated as the real workload.
Did it go. That is the only question a customer asks about a payment, and it is harder to answer than it sounds. The channel accepted it, the account was debited, the message was submitted, the rail acknowledged it, value moved, and each of those is a different fact held in a different place.
The problem

Seven states, and one of them is unknown

A payment moves through a sequence of states that mean different things, are known by different systems at different times, and are routinely collapsed into two words on a screen.

Status is collapsed into sent or failed

So the customer is told something the system does not know.

Unknown is not a state in the model

And a timeout gets recorded as one of the other two.

Retries are not safe

Which turns a recoverable timeout into a duplicate payment.

Channels integrate to rails directly

So each new channel repeats the whole integration.

Exceptions are handled off-system

In a mailbox, a spreadsheet and somebody’s knowledge.

Reconciliation is end-of-day and manual

So a break is found hours after it could have been fixed.

Cut-off is not visible to the customer

They submit, and discover tomorrow that it was tomorrow.

Structured message data is truncated on arrival

Discarding the richness the migration was for.
Ask what your system does when a submission times out. Not what it displays, what it does. Does it mark the payment unknown, enquire, and resolve to a single outcome. Or does it mark it failed, leaving a payment that may have been made, and allow a retry that may duplicate it. The answer takes one conversation with an engineer, and it is the most consequential design property of a payments application. Everything else on this page is easier than fixing this one afterwards.
Our approach

Design the lifecycle and the exceptions before the happy path

A payments application is specified around successful payments and spends its operational life on the ones that are not. The returns, the rejects, the recalls, the duplicates, the misdirected and the unapplied are a small share of volume and most of the work, most of the support contact and most of the operational risk.
Designing them last means designing them into a system whose state model and data structures were built for success, which is why exception handling in most estates lives in a mailbox and a spreadsheet.

Step 1

Map the payment journeys and the rails in scope

Step 2

Design the state model first, including unknown

Step 3

Establish idempotency and reference discipline

Step 4

Design the exception taxonomy and its workflows

Step 5

Design cut-off, calendar and value dating explicitly

Step 6

Integrate rails, processors and hubs behind one orchestration layer

Step 7

Integrate the controls your risk functions require

Step 8

Build status enquiry and customer-visible status

Step 9

Build reconciliation as a continuous control

Step 10

Test the failure paths deliberately, including timeouts

Step 11

Deploy with observability on state transitions

Step 12

Monitor success, latency, exceptions and breaks separately
Ask for your payment exceptions grouped by root cause rather than by type. Type tells you what happened. Cause tells you what to fix. In most institutions exceptions are reported by type, the cause is held in free text or in an operator’s head, and the top few causes account for the large majority of volume. Categorising one month of exceptions by cause is a few days of work and it usually produces an engineering backlog that pays for itself within a quarter.
What we build

Initiation, orchestration, status and everything that goes wrong

Grouped by what each part is responsible for. The orchestration layer is what stops every channel having its own integration to every rail, which is the structural problem in most payments estates.

Initiation and experience

Payment initiation across channels, with the same validation, limits and controls applied wherever the instruction originates
Beneficiary management, verified, reused and maintained rather than retyped
Recurring and scheduled payments, including the amendment and cancellation paths that are usually underbuilt
Bulk and file-based payments, including partial failure handling, which is covered in section 5
Customer-visible payment status, which is the feature that removes the most contact

Orchestration and routing

A payment orchestration layer owning the lifecycle, so a channel integrates once and a new rail is an addition rather than a programme
Routing by rail, cost, speed and availability, under rules your payments function owns
Idempotency and reference management end to end, as described in section 2
Cut-off, calendar and value dating modelled as data, including non-working days per currency and market
Limit and entitlement enforcement, including the multi-user approval flows described on our Digital Banking Platforms page

Processing and exceptions

Transaction processing workflow with explicit state transitions and an audited history of each one
Exception management across returns, rejects, recalls, duplicates, misdirected and unapplied items, as cases rather than emails
Enquiry and investigation support, including status enquiry to every integrated party
Automated resolution where the category genuinely allows it, with the rest routed to a named owner

Reconciliation and visibility

Three-way reconciliation across your ledger, the rail or processor and the counterparty position, as a continuous control
Break investigation workflow with ageing and ownership, on the discipline described on our Operational & Financial Analytics page
Payment dashboards covering volume, success, latency, exceptions and breaks, by rail and by channel
An agent-facing view that can state plainly whether a payment is pending, failed, returned, repaired or complete, since the contact centre answers this question more often than anybody
Payment APIs for internal and partner consumption, versioned, on the API discipline described on our Digital Banking Platforms page
Where this gets used

Eight workloads, and the property that decides each one

The third column is the point of the table. These are usually served by one payments capability and each one is shaped by a different property of the rail or the instruction.
Workload What it depends on The property that decides the design
Domestic payments The rail and its cut-off behaviour Whether value movement is revocable
Real-time payments Immediate, irrevocable settlement Every control must be pre-submission
Cross-border payments Correspondents, currency, intermediaries Status is partial for longer, sometimes days
Business payments Multi-user approval and limits Entitlement and mandate, not the payment
Bulk and file payments A file with many instructions Partial failure within a single submission
Recurring payments A standing instruction over time Amendment, failure and the long tail of changes
Collections Pulling rather than pushing funds Mandates, returns and representment
Exception management Everything above, when it fails The taxonomy, and whether it is a case
How it is built

Reconciliation is three-way, and it is a control rather than a report

Payment reconciliation is usually described as matching the ledger to a statement. In practice three records of the same payment exist and all three have to agree: your own position, the rail or processor’s record, and what the counterparty or customer believes happened.
A difference between any pair is a different kind of problem with a different owner, which is why a single reconciliation report rarely resolves anything.
An orchestration layer owning payment state, with every transition recorded and queryable, which is the foundation for everything else here
Rail, processor and payment hub integration behind that layer rather than per channel
Core banking integration for the accounting entries, on the patterns described on our Banking Data Platform Engineering page
Message handling that retains the original message as received, including the structured content described in section 4
Event-driven propagation of state changes to channels, notifications and downstream systems, so status is pushed rather than polled
Three-way reconciliation running continuously rather than at end of day, because a break found at four in the afternoon can still be fixed
Screening and fraud controls integrated in the path your risk functions specify, in the position they specify
And observability on state transitions and ageing, so a stuck payment is detected before a customer reports it
Ask who notices first when a payment gets stuck. If the honest answer is the customer, then the institution has no state ageing and the first signal of any payments incident is a complaint. Expected durations per state are straightforward to define, the data is already there in the transitions, and the difference is between finding out at ten in the morning from a dashboard or at two in the afternoon from a contact centre escalation. On payments, those are very different days.
Governance

We integrate the controls. We do not design them.

Which payment regulations, scheme rules, operational resilience expectations and data protection requirements apply, where controls must sit in the payment path, and what authorisation is required are determined by your payments, compliance, legal, risk and security functions, based on your operating markets and your scheme memberships. We do not interpret those requirements and this page does not state which apply to you.
Technology supports a payments control framework. It does not independently establish one, and no platform makes a payment compliant.

Authorisation and integrity

Control integration

Data and audit

Resilience

Keeping it reliable

Success rate is not one number and latency is not an average

Payments reporting leads with a success rate and an average processing time. Both conceal the thing worth knowing: which rail, which channel, which payment type, and what the slowest few per cent looked like, because that is where the complaints come from.
Failure How it presents
A payment is stuck in a state Nothing fails, and nothing completes
A timeout became a duplicate Two payments, one instruction, one complaint
Unknown states accumulating Resolved manually, slowly, without a process
One rail degraded Aggregate success healthy, one route failing
Exception volume up on one cause Reported by type, so the cause stays hidden
Reconciliation breaks ageing Carried forward each day as normal
Beneficiary errors causing returns Avoidable failures validated too late
Structured message data truncated Migration complete, richness gone
Outcomes

Payments that resolve to one known outcome

The outcomes below follow from three choices: model payment state honestly including unknown, make every operation safe to retry, and design exception handling as the product rather than the edge case.
More reliable payment experiences, measured as payments that resolve to a single known outcome without human involvement
Transaction visibility for the customer, which removes the largest category of payment contact
Fewer manual exceptions, achieved by fixing the top root causes rather than by resourcing the queue
Duplicates prevented structurally rather than detected afterwards
Stronger integration, with one orchestration layer rather than a connection per channel per rail
Reconciliation breaks that are found early, aged and owned
Scalable payment operations, where a new rail or channel is an addition rather than a programme

Ask us what happens when a payment times out.

We will take one payment type and establish four things: whether the state model includes unknown and how it resolves, whether every operation is safe to retry, what the top three exception causes are, and whether anything downstream uses the structured content of your messages. You get the findings whether or not we build anything.

Why choose CaliberFocus for Payments Applications?

CaliberFocus builds payments applications that model the state of a payment honestly, including the state where nobody knows, make every operation safe to retry, and treat exceptions as the real workload. We put one orchestration layer between channels and rails, reconcile three ways continuously, and keep structured message data intact.

Security & Compliance

Ready to transform your business? Contact us today.

Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.