Integration of cryptocurrency purchases via bank transfer

Funding via bank fails at the last step — and the customer goes to a competitor. We set up a direct top-up channel turnkey: from flow design to handover for operation. The success rate of transactions grows, and support workload decreases.

Blockchain Development Services

Frequently Asked Questions

Latest works

  • Development of a web application for FEEDME
    Development of a web application for FEEDME
    1376
  • Development of an online store for the company FURNORO
    Development of an online store for the company FURNORO
    1350
  • B2B Advance company logo design
    B2B Advance company logo design
    798
  • Development of a web application for Enviok
    Development of a web application for Enviok
    1088
  • AIDER company logo development
    AIDER company logo development
    1034
  • CRM development for Chasseurs
    CRM development for Chasseurs
    1130

Why buying cryptocurrency through a bank breaks down at crediting

Buying cryptocurrency through a bank looks like a single operation: the client sends a transfer — the system credits the balance. In reality, between debiting and crediting there is a chain where each link runs on its own timer.

The client sees the debit within minutes, while the order is still awaiting confirmation — hence the crediting delay and support requests before the bank provides payment data.

Most often the chain breaks at matching the transfer to the order. The bank transmits the payment purpose as free text, some characters are truncated or reordered — the reference from the order does not match the statement.

Then manual payment reconciliation kicks in: an operator looks for the amount and date and manually links the entry to the request, while the payment is listed as a stuck transfer the whole time.

The ISO 20022 format removes part of the problem: the reference, payment purpose, and payer data arrive in separate fields, and matching becomes machine-based.

But if the bank provides only a periodic statement, the discrepancy remains: the order stays "awaiting payment" even though the money is already in the settlement account.

Polling the statement with idempotent record processing closes the gap — with deduplication by payment identifier.

A separate scenario is drop-off at payment. The bank accepts the transfer but does not process it: account limit, payer name mismatch, internal review. The money returns to the sender, the order remains open, and the client sees a rejection without a reason.

If refunds are not tracked automatically, the queue accumulates and every case goes to manual investigation.

Breakages occur at the junction of bank and internal accounting, not in the network itself. We'll examine how this is closed — from reference generation to automatic matching of incoming payments.

Measurable effect: successful operations, drop-off, support load

The first metric is the share of successful operations: how many transfers reach balance crediting without manual intervention. We calculate it across the entire funnel, not only at the entry point: request creation, awaiting transfer, matching the incoming payment, crediting.

We separately note the step where the most is lost — most often this is matching, when the payment purpose does not contain the request identifier.

The second is crediting speed: the median and 95th percentile of time from funds arrival to the balance appearing for the client. The median describes the typical experience, while the tail of the distribution describes those who ultimately write to support.

If the median is acceptable but the tail is stretched, the problem is not speed but rare scenarios that need separate investigation.

The third is support load: the number of requests per 100 operations and the share among them of complaints "the transfer went through, but there is no crediting." This is the most costly category: each such request requires manual reconciliation with the bank statement and rechecking the status.

It should be viewed together with the share of successful ones — growth in successful operations with the same support staff is the measurable effect.

The fourth is downtime cost: it is measured not in money but in volume. How many operations per hour pass through the channel, how many of them get stuck when the external service is unavailable, and how long the channel spends in degradation.

These figures provide a clear boundary: up to what point recovery is considered standard, and after which it requires manual investigation and client notification.

We take measurements before starting work: two to four weeks on the current channel, broken down by funnel steps. This provides a baseline against which we compare the result after integration — not "it got better," but a specific shift in each of the four metrics.

Integration modes: fiat gateway, payment provider, in-house infrastructure

The three modes differ not in interface but in where the money flows and who is responsible for reconciliation. A payment aggregator completes integration in a matter of days but adds an intermediary to every operation.

A direct bank channel removes the intermediary and opens account details for your flow, while an in-house infrastructure gives full control over the route and limits — at the cost of your own operational load.

The choice is dictated by the flow profile: one-off purchases in small amounts, a regular flow from legal entities, or large amounts with manual reconciliation. Below is a comparison by timelines, control, and limitations.

Option When it fits Limitations
Payment aggregator Fast launch, one-off purchases, demand validation Provider limits on amount and frequency of operations, fee for each purchase, outages and rules on its side
Direct bank channel Regular flow, large amounts, predictable reconciliation by account details Agreement and review on the bank's side, connection timelines depend on it, document requirements for operations
In-house infrastructure Full control over the route, your own account details, and limit logic is needed Your own support for availability and reconciliation, responsibility for disputed operations lies entirely with you
Hybrid: aggregator plus backup channel Fault tolerance is needed — if one channel fails, purchases do not stop Double accounting of operations, more difficult to reconcile statuses across both channels

In practice, we more often build a hybrid: the primary channel carries the flow, and the backup turns on during failures and when hitting limits.

In any mode, the operation status must be unified for the client and back office — otherwise the buyer sees "pending" where the money has already been credited.

Implementation stages: from flow diagram to handover to operations

The work proceeds sequentially: each next stage relies on artifacts from the previous one, not on agreements in chat. This way bottlenecks are visible before going into production, and the scheme does not have to be redone halfway through.

Below is what the path looks like from the first review to the moment when your team runs the integration.

  1. Integration audit. We look at how payments flow today: which acceptance channels are already connected, where operations are entered manually, how internal request accounting and reconciliation with the bank statement are structured. The output is a flow map with failure points and a list of what we will reuse and what will have to be built.
  2. Flow scheme design. We map bank statuses to request statuses on our side and describe behavior for a stuck transfer, partial crediting, cancellation, and resending. We separately define operation idempotency — a repeated request must not create a second payment.
  3. Setup in a test environment. We stand up an environment isolated from real money flows, with test keys and emulation of bank delays. We run all branches: success, rejection, refund, response timeout, amount discrepancy.
  4. Testing on real scenarios. We connect a small volume of live operations: reconcile each payment with the statement and observe how notifications and retries behave when connectivity breaks. We also check logging here — the payment must be reconstructable unambiguously from the logs.
  5. Acceptance. We agree on a checklist: share of operations processed without manual intervention, response time to a stuck request, completeness of reconciliation. Anything that does not pass the check is returned for rework before signing.
  6. Handover to operations. We give your team documentation on the scheme, incident investigation procedures, configured monitoring, and the rollback procedure to the previous scheme. We provide support during the first weeks until the on-call shift can handle incidents independently.

What we hand over: configurations, schemes, procedures

All artifacts are assembled during the work, not reconstructed at the end: every scheme and procedure is tested on a live environment, so the handover is not a folder of documents but a working kit that your team uses to process payments, investigate disputed operations, and add new acquiring banks without contacting us.

  • Payment scheme — the sequence of steps from the client's request to crediting cryptocurrency to their address: where the payment order is created, at what point the rate is fixed, which events confirm funds arrival, and what happens when the amount differs.
  • Role separation — an access matrix: who confirms a payment, who can change limits, who sees the payer's personal data, who initiates a refund. With an indication of which operations require two approvers.
  • Refund procedure — step-by-step scenarios for underpayment, overpayment, repeated transfer, bank rejection, and refund upon client claim: response timelines, responsible parties, notification templates, and the procedure for reconciliation with the statement.
  • Integration documentation — description of methods for accepting requests and status notifications, request and response formats, error codes with explanations and analysis of typical causes, and idempotency rules for resending.
  • Reconciliation scheme — a daily scenario for matching payments on the bank's side and operations in your system, control points, and a list of discrepancies that must be investigated manually.
  • Environment configurations — separate settings for test and production environments, a list of keys and accesses with owners, and the procedure for rotating secrets without payment acceptance downtime.
  • Support instructions — an incident log with analysis, a diagnostic checklist for a stuck payment, and the procedure for actions when the bank channel is unavailable.

We hand over the kit with a walkthrough on a call: we go through each item, your engineers ask questions, and we show where everything is and how to verify it.

After that, you support the integration yourselves — and if an extension is needed, describe the task, and we will return with an estimate and plan.

Case study: connecting a direct top-up channel for an exchange service

The exchange service BitBridge accepted top-ups by bank transfer and reconciled them manually: an operator opened the statement, searched for the payment by amount and sender, and matched it to the request.

Payments without a purpose or with an amount reduced by the bank fee settled in a queue — the client did not receive cryptocurrency and wrote to support, while operators handled such cases one by one, in order of arrival.

What was changed

Each request is assigned a short identifier that the client specifies in the payment purpose — this immediately links the incoming funds to the request.

The statement is parsed automatically on a schedule, and matching rules account for amount tolerance, sender match, and a time window.

Everything that does not pass the check unambiguously goes into a separate exceptions queue with context already gathered: amount, sender, request number, client history.

Metrics before and after

Metric Before After
Share of stuck payments 18% 1.2%
Manual investigation of one case 35–40 minutes 4–6 minutes
Support requests about crediting about 30 per day 4 per day

The exceptions queue stopped growing: disputed incoming payments are now a few per day, and the operator sees a complete picture for each one instead of searching for the payment across the entire statement.

What to do if the service already has a payment aggregator connected?

Yes, it can be layered on — and almost always without rewriting the checkout.

The payment aggregator stays in place, while a second payment channel is added alongside as another provider behind a common payment routing layer: payment creation and status processing move into your middleware, not into the code of a specific integration.

Flow splitting is defined by rules: traffic share, operation amount, payer jurisdiction, channel availability, risk profile.

The aggregator can remain primary, while bank transfer turns on where it goes faster and does not hit limits — during peak times this is visible in the share of successful operations.

Zero-downtime migration is done canary-style: the new channel takes a small share of operations, you reconcile discrepancies and increase the share.

A mandatory condition is to bring webhooks from both sources into a single status model and idempotency by payment key, otherwise a repeated event doubles the crediting.

With accounting, the question is procedural.

Keep a unified operations log with the provider identifier in each entry, but expose a single statement externally: bank confirmations via SWIFT and aggregator statuses converge in one report, while discrepancies go into a separate investigation queue rather than manual registry edits.

Rollback is switching routing rules: the channel is disabled by changing configuration, without a release or downtime.

That is why a second channel is launched as a controlled experiment with metrics on the share of successful payments and crediting time, not as a replacement for a working one.

Technical concerns: limits, refunds, discrepancies

Questions at acceptance arise not around the transfers themselves but at the junctions: where bank clearing ends and our operations accounting begins. Below are the ones the client's engineering teams raise most often.

How are operation limits structured?

Thresholds are set at three levels: acquiring bank rules, our processing, and platform restrictions. They are configurable — per user, per day, per payment method — and when triggered, the operation is not silently rejected but moves to a "requires confirmation" state.

How does a refund work?

A refund is linked to the original transfer and uses an idempotency key: a repeated request does not create a second refund.

If the source-of-funds check is not passed, the amount goes to the same account via the same route, and the network fee is not reimbursed — this is defined in the rules in advance.

How is the balance reconciled?

Reconciliation is done using the bank statement against the operations log: we match amounts, references, and crediting time. Discrepancies are not investigated manually but go into a report with classification — underpayment, duplicate, stuck payment.

Who is responsible for status discrepancies?

The status model is described by explicit transitions; updates arrive via callbacks with retries and duplicate discarding. If the bank did not send an event, a scheduled job requests it itself — the status in the dashboard does not diverge from the actual state of the transfer.

Let's discuss the task: where we start and what we need from you

So that the estimate is based on facts rather than assumptions, we capture the inputs during the first conversation.

Describe the scenario for buying cryptocurrency via bank transfer as it should work for you: who buys, in which fiat currencies and jurisdictions, what limits apply per operation, and how the rate is calculated.

What we need from you so that we can return with a work plan:

  • Problem statement: the service goal, user roles, and what happens for a successful, stuck, and rejected payment.
  • Business rules: fees, rate source and update frequency, limits, mandatory client identification, and operation checks.
  • Payment data: bank or payment provider, statement and notification formats, how crediting and refund statuses arrive.
  • Access: documentation for the bank's software interface, test environment and test account details; production keys — after the contract and confidentiality agreement.
  • Current landscape: what already exists — an external key storage service or in-house wallets, accounting system, database, processing queues.
  • Constraints: timelines, regulator requirements, expected operation volume, requirements for resilience and log completeness.
  • Acceptance criteria: which checks determine that the integration is ready and who on your side accepts them.

In response, we send a work plan: composition and order of stages, timeline estimates for each, a list of risks and points where your decision will be needed.

If part of the tasks is covered by an off-the-shelf bank or provider solution, we will say so directly — the scope and timelines will be reduced.