Your Bank Is Now an API Gateway (Whether You Like It or Not)
Why this matters right now
Fintech infrastructure used to be a specialized niche. Now it’s the substrate under a non-trivial share of global commerce. If you’re building or running any system that moves money, you’re slowly becoming:
- A mini payment processor
- A partial fraud vendor
- An informal regtech shop
…whether or not you have the headcount or appetite for it.
Three pressures are converging:
-
Regulatory pressure is shifting from institutions to systems.
Regulators increasingly expect that your software enforces Anti-Money Laundering (AML), Know Your Customer (KYC), sanctions, and risk controls. “We trusted our vendor” is no longer a defense when your system happily wires funds to a sanctioned entity at scale. -
Open banking is turning banks into commodity pipes.
APIs for account access, payment initiation, and transaction data mean your product is often the primary UX and risk surface. The “real bank” is in the background; they’ll share upside but not downside. -
Fraud and abuse adapt faster than your quarterly roadmap.
Once you cross modest volume, you’re in an arms race with people who treat your system as a programmable money printer. They iterate with the same rigor you apply to system performance.
This isn’t just a “fintech startup” problem. You’re exposed if you:
- Let users store cards or bank accounts
- Move money between users, wallets, or merchants
- Offer BNPL, credits, or instant payouts
- Operate in multiple jurisdictions with meaningful volume
Ignoring this means your system is already making legal, financial, and ethical decisions—just implicitly and poorly.
What’s actually changed (not the press release)
The press releases talk about “embedded finance”, “regtech innovation”, and “seamless compliance”. Underneath the buzzwords, several real shifts matter to engineers and tech leaders.
1. The risk perimeter moved from institutions to apps
Historically, banks absorbed most risk engineering: they owned KYC, AML, fraud models, and transaction monitoring. Your app was a “dumb front-end” to a regulated entity.
Now:
- You can initiate payments directly via open banking APIs or instant rails.
- You can onboard customers via third-party KYC providers, then control their money movement.
- You can layer virtual accounts, cards, and wallets on top of partner banks.
Regulators are responding by informally treating you as a de facto financial institution if you exercise meaningful control. That means expectations around:
- Auditability of decision flows
- Explicit risk ownership
- Ability to freeze, reverse, or halt flows under investigation
2. Data exhaust is now legally sensitive
It’s not just about PII and card numbers. In 2025 reality:
- Transaction graphs (who pays whom, how often, for what) are sensitive from both privacy and AML perspectives.
- Behavioral signals (device fingerprints, velocity metrics, geolocation) are increasingly considered in investigations.
- Risk scores and model features can be requested in regulatory exams or legal discovery.
So your logging and observability stack is now part of your regulatory story. Keeping “everything forever in one big log bucket” is now both a privacy risk and a legal discovery trap.
3. Real-time expectations, offline liability
Payment rails are getting faster (RTP, FedNow, SEPA Instant, UPI, etc.) while your compliance obligations remain deliberative:
- Users expect instant deposits and withdrawals.
- Regulators expect careful, explainable monitoring and possible manual review.
That tension creates the worst class of bugs: ones that feel like UX friction to product, but like legal survival to compliance.
4. Infrastructure vendors reduced boilerplate, not responsibility
Vendors for:
- KYC/AML
- Fraud scoring
- Sanctions screening
- Open banking connectivity
…have dramatically lowered the barrier to entry. But they did not remove your obligation to:
- Integrate them coherently
- Tune thresholds and business logic
- Handle edge cases and overrides
- Document and prove that your setup is effective
If anything, they increase the combinatorial complexity of your risk surface.
How it works (simple mental model)
You can model modern fintech infrastructure as a policy engine wrapped around payment rails and identity.
Three core loops:
-
Identity Loop (KYC/KYB)
- Input: user/business attributes, documents, device info, geography.
- Process: verification (e.g., ID checks, database lookups, biometric match, business registry).
- Output: identity confidence, risk tier, allowed capabilities.
-
Transaction Loop (Payments & Fraud)
- Input: proposed transaction (amount, counterparty, method, channel).
- Context: user risk tier, historical behavior, device fingerprint, network graph.
- Process: fraud scoring, velocity checks, sanctions, rule engine evaluation.
- Output: allow, block, step-up authentication, manual review queue.
-
Monitoring Loop (AML & Compliance)
- Input: stream of completed and attempted transactions, user updates.
- Process: scenario detection (structuring, rapid movement, high-risk regions), anomaly detection, periodic screening, watchlist updates.
- Output: alerts, case management, Suspicious Activity Reports (SARs), tuning of rules.
Cross-cutting mechanisms:
- Policy: codified as rules + model thresholds + workflow configs.
- Explainability: enough traceability to show “why” for any decision.
- Override paths: human-in-the-loop for tricky cases.
- Kill switches & rate limits: system-level backstops.
If you don’t design consciously for these loops, you’ll end up re-implementing them ad hoc in controller code, feature flags, and custom cron jobs.
Where teams get burned (failure modes + anti-patterns)
1. Treating fraud, AML, and KYC as one blob
Pattern: “We have a fraud vendor, so we’re covered for AML and compliance.”
Reality:
- Fraud: protect you from being stolen from.
- AML/KYC: protect the financial system from being misused (from a regulator’s view).
They partially overlap (same signals, same payment rails) but have different objectives and thresholds. Anti-patterns:
- Using fraud declines as your only AML control.
- Letting KYC vendor pass = “we’re safe to move any amount anywhere.”
- No separate monitoring for patterns like structuring small transfers.
2. Building a beautiful UX on top of brittle settlement reality
Example: A consumer app offered “instant payouts” to bank accounts based on a third-party open banking provider. They modeled everything as final in their ledger, assuming:
- “If the API says success, it’s done.”
They didn’t handle:
- ACH returns and chargebacks
- Failed settlement at the partner bank
- Reconciliation delays and partial failures
They ended up “creating money” in their internal ledger several times under edge conditions. Fixing it required a major rewrite and painful user clawbacks.
3. Black-box vendor dependence without internal models
Pattern: “We’ll just trust Vendor X’s score; they’re the experts.”
Issues:
- Vendors change models, thresholds, and data sources over time.
- You often can’t explain to a regulator why a particular transaction was approved beyond “the vendor said so”.
- When false positives spike (e.g., after a new model release), your customer support and operational teams bear the cost.
You want vendor models as inputs to your own policy engine, not as the policy engine itself.
4. “MVP now, compliance later”
Example: A B2B SaaS platform enabled cross-border payouts. MVP code paths:
- Skipped KYC for “test” accounts that later went to production.
- Lacked basic IP/geolocation checks.
- Disabled sanctions screening “temporarily” for sandbox accounts that weren’t really sandboxed.
They crossed a volume threshold, got attention from a partner bank, and had to:
- Freeze a large number of users abruptly.
- Re-onboard entities with proper KYC.
- Retrofitting transaction monitoring under scrutiny from multiple counterparties.
The remediation cost dwarfed the initial build cost.
5. No unified risk view
Pattern: different teams own:
- KYC flows (Growth or Ops)
- Fraud checks (Payments or Risk)
- AML monitoring (Compliance)
- Payment integration (Core Engineering)
But there is:
- No unified user risk profile
- No single place to see all decisions and overrides
- Conflicting rules between systems
This leads to absurd outcomes: a user cleared by KYC but constantly blocked by fraud; a user flagged by AML but still getting increasing credit limits.
Practical playbook (what to do in the next 7 days)
These actions assume you already move or plan to move money. Adjust depth to your scale, but don’t skip the thought process.
1. Draw the actual money and data flow
On a whiteboard or shared doc:
- From: user funding source
- Through: your systems, vendors, partner banks, payment processors
- To: final recipient
Mark:
- Which decisions happen where (KYC, fraud, AML, sanctions, credit, limits).
- Which events are reversible vs final at each step.
- Where you rely on a vendor’s black-box decision instead of your own policy.
This usually reveals surprising blind spots fast.
2. Define a minimal policy engine boundary
You don’t need a full-blown DSL, but you should have:
- A single internal service/function where decisions like “allow/deny/step-up/manual review” are made based on:
- User profile + risk tier
- Transaction attributes
- Vendor signals (scores, matches)
- Versioned policies and thresholds in config, not hard-coded.
- Structured decision logs: decision, inputs, scores, reasons.
If today these decisions are scattered across controllers and front-end conditionals, create a ticket to centralize them.
3. Implement two kill switches and one guardrail
The minimum set:
-
Global transaction kill switch
Ability to halt all outgoing payments while still allowing sign-ins and basic UX. This must be:- Quickly accessible to on-call
- Tested in a staging and then prod drill
-
Per-rail or per-partner throttle
E.g., “cap RTP payouts to X per minute/hour/day” so a misconfiguration or exploit doesn’t empty your accounts overnight. -
Max exposure per user/entity
Aggregate outstanding not-yet-settled exposure per user (pending deposits, unsettled payouts, credit) and hard-cap it.
These are crude, but they mitigate catastrophic failures.
4. Baseline logging and explainability
Within your existing observability stack, ensure that for every high-risk event (e.g., payouts, large deposits):
- You log:
- user ID and key attributes (risk tier, region)
- transaction ID and method
- relevant vendor scores
- final decision + reason codes
- You can reconstruct a timeline for a single user or transaction within minutes.
This is not just for debugging; it’s for audits, disputes, and regulator questions.
5. Calibrate responsibilities with legal/compliance
Have a 60–90 minute working session with:
- Engineering / architecture
- Product
- Legal/compliance or external counsel (if you have one)
Goals:
- Clarify which activities make you a “financial institution” or equivalent in your jurisdictions.
- Identify mandatory controls vs “risk appetite” choices.
- Agree on:
- Who owns which policies
- How changes are reviewed
- How incidents are handled and reported
If you don’t have internal compliance, you still need a named owner for this, even if it’s a tech lead coordinating external experts.
6. Vendor review with a specific checklist
For each critical vendor (KYC, fraud, open banking, processor):
- Document:
- What decisions they make vs what signals they provide.
- How they version and communicate model or rule changes.
- SLAs for uptime and latency.
- What audit artifacts you can get (logs, reports, case exports).
- Identify at least one “plan B” per vendor: either alternates or fallback logic if they are unavailable.
You’re not trying to multi-home everything immediately, but you’re avoiding single points of opaque failure.
Bottom line
If your product touches money, your system is part of the financial infrastructure, regardless of your marketing category.
The societal angle is simple: as fintech infrastructure fragments across apps and APIs, the stability and integrity of the financial system is increasingly a property of software engineering practices—your practices.
You don’t need to become a bank, but you do need to:
- Treat payments, fraud, and AML/KYC as core system design concerns, not plug-ins.
- Build a minimal but explicit policy engine and logging layer.
- Accept that UX, growth, and compliance are now tightly coupled, and build cross-functional ownership accordingly.
If you don’t, you’re not avoiding complexity; you’re just letting it express itself as latent legal risk, quiet data leaks, and occasionally, very loud outages with regulators listening.
