DEV Community

Payout Rail
Payout Rail

Posted on

Why ACH Integration UX Matters More Than API Documentation

Why ACH Integration UX Matters More Than API Documentation

Why ACH Integration UX Matters More Than API Documentation

Payment integrations often fail not because the API is broken, but because users don't understand what they're supposed to do with it. This gap between technical capability and user intuition is where payment friction lives—and it's costing fintech teams real conversions.

Laurence Davies, Head of Engineering at SpritzFinance, discovered this the hard way. His team built a perfectly functional ACH credit system to fund virtual accounts. The API worked. The backend scaled. But users weren't using it.

The problem wasn't technical. It was mental.

The ACH Familiarity Gap

Most developers assume ACH transfers are self-explanatory. Wire money from bank A to bank B. Done.

But for many users—especially those new to fintech products—ACH credits to virtual accounts feel abstract. They don't see a physical account number. They don't receive a confirmation email with routing numbers. The mental model breaks down.

In traditional banking, you send money to someone's bank account. In modern fintech, you're sending money to a virtual container that exists in an app. That conceptual leap isn't intuitive, even though the underlying mechanics are identical.

SpritzFinance's solution focused on reducing cognitive load through interface design, not through better documentation. This is a critical distinction for developers building payment flows.

Making the Invisible Visible

The fix involved three key changes:

1. Explicit Account Visualization

Instead of hiding virtual account details behind tabs, the team displayed them prominently:

  • Show the actual bank account number
  • Display the routing number
  • Include the account holder name
  • Add a "copy" button for each field

This transforms an abstract concept into concrete banking information users recognize.

2. Contextual Guidance

Add explanatory text at the moment of confusion, not in a separate help section:

"Fund your account using ACH transfer
This is like sending money to a regular bank account.
Your bank will process this within 1-3 business days."
Enter fullscreen mode Exit fullscreen mode

Notice the comparison to familiar behavior. You're not explaining ACH. You're explaining what ACH feels like.

3. Progress Indication

When users initiate an ACH transfer, they need to know:

  • What they just did
  • What happens next
  • When they'll see the money
Status: Transfer Initiated
├─ Submitted to your bank (immediate)
├─ Processing (24-48 hours)
└─ Funds available (1-3 business days)
Enter fullscreen mode Exit fullscreen mode

The Developer Angle

Here's what this means for your integration:

Your API documentation might be perfect, but your user experience might be broken.

Consider these metrics:

  • Completion rate: What percentage of users who start funding actually complete it?
  • Support tickets: How many "where's my money" emails are you getting?
  • Time to first transaction: How long between signup and first successful deposit?

If these numbers are weak, the problem likely isn't your API. It's your UX.

Practical Implementation

When building ACH integrations, separate concerns:

  1. Backend: Handle the actual ACH processing (Stripe, Plaid, Dwolla)
  2. Frontend: Handle the user's mental model

Your API might return a response like:

{
  "virtual_account": {
    "account_number": "123456789",
    "routing_number": "021000021",
    "account_holder": "User Name",
    "account_type": "checking"
  }
}
Enter fullscreen mode Exit fullscreen mode

But your UI should present this as:

"Send money here like you would to any bank account"

Not:

"Use these credentials to fund your virtual account"

The Takeaway

Payment friction isn't always about speed or cost. Sometimes it's about clarity.

Before optimizing your API response times, audit your onboarding flow. Ask users to explain what they're about to do. If they hesitate, you've found your friction point.

The gap between what's possible and what's intuitive is where conversions die. Close that gap first.

Top comments (1)

Collapse
 
johnfrandsen profile image
John Frandsen

Really sharp framing — "the API works, but users don't know what to do with it" is one of the most underdiagnosed failure modes in fintech, and your contextual-guidance principle generalizes well.

One wrinkle from the EU open banking side that makes this UX problem even sharper: PSD2 flows bounce the user out of your app to their bank's own SCA (strong customer authentication) screen, then back. That redirect round-trip is where a meaningful chunk of users drop off — not because your API or UX is broken, but because the mental model ("why am I suddenly logging into my bank inside this app?") breaks mid-flow. The cheapest fix is exactly what you describe: a one-line "your bank will ask you to confirm this — that's normal" cue in the instant before the redirect, not on a help page.

Worth flagging for anyone scoping an EU bank-data integration: the friction often starts before the first API call. Getting an eIDAS qualified certificate plus going through KYB as an AISP is the part that quietly eats weeks. A common shortcut for read-only use cases (balances, transactions, account verification) is routing through an aggregator that's already a licensed AIS provider, so your team only owns the UX layer this post describes.

(Full disclosure: I maintain open-banking.io, a cert-free EU bank-data API — but the SCA-redirect-abandonment point and your "integration UX beats docs" thesis hold regardless of provider.)