Ledger to ledger transfers and the Interledger Protocol
What L2L really means, how banks move money between ledgers in practice, and where ILP does and does not fit.
Plain-English guide to banking APIs and JSON: what they really do, why they never touch the ledger, and why a JSON payload is never proof of payment.
Published
If you've spent any time around fintech, you've probably heard someone say "the API moved the money" or seen a screenshot of a JSON response treated as proof a transfer happened. Both are wrong — sometimes innocently, sometimes deliberately. This guide explains what APIs and JSON actually do in banking, where they sit in a bank's architecture, and where the real settlement happens. Glossary at the bottom so you can scan back when an acronym blurs together.
Many customers — and a few con artists — talk about banking APIs as if they were money pipes. They aren't.
An API is a messenger, not a vault. It carries requests, responses, and information between software systems. When you press "send" in your banking app, the API tells the bank "the customer wants to move $1,000 to account X." That's a message, not a transfer. The actual movement happens deeper inside the bank, through tightly regulated channels — and only after compliance checks, account-level validation, and reconciliation with correspondent banks, RTGS, or RTP systems.
API stands for Application Programming Interface. In plain English, it's a contract that says: "if you send me a request shaped like this, I'll respond with something shaped like that." It's how two pieces of software talk to each other.
In banking, that contract sits at the bank's digital edge. Mobile apps, internet banking portals, partner platforms, fintech aggregators — they all speak to the bank through APIs. The API authenticates them, validates the request, applies rate limits, and forwards the message inward. Crucially, it doesn't execute anything financial on its own.
Think of a banking API as a highly secure postal service:
What it does not do is open the safe and hand out cash. That's a different system, behind several more doors.
Modern banks are built in three deliberately separated layers, and the API lives only in the outermost one.
This is the bank's digital front door: API gateways, authentication servers, data transformation, rate limiting. It's flexible, frequently updated, and talks to the outside world. It's also not allowed to hold financial state. Every transaction it sees gets handed off inward.
The operational engine. The CBS holds customer accounts, applies product rules (limits, fees, interest), executes transactions, and updates balances. It does not accept connections from the public internet — only from the middle layer, through narrow internal APIs.
The authoritative double-entry record of every financial movement in the bank. Often physically separated, behind extra firewalls, with multi-factor authentication and hardware security modules. The ledger doesn't even talk to the middle layer — only to the core, and even then through tightly controlled interfaces. It is, by design, invisible from the outside.
This separation exists for six concrete reasons:
JSON — JavaScript Object Notation — is just a way of writing structured data so two computers can read it the same way. It looks like this:
{
"transactionRef": "TXN-2026-0515-AB12",
"sender": { "iban": "DE89370400440532013000", "name": "ACME Holdings" },
"beneficiary": { "iban": "FR1420041010050500013M02606", "name": "Globex SAS" },
"amount": 12500.00,
"currency": "EUR",
"valueDate": "2026-05-15"
}
That's a payment instruction, written in JSON. Crisp, machine-readable, easy to validate. It describes a transfer. It does not, in any way, perform one.
Because JSON is plain text, anyone with a keyboard can write a JSON document that looks like a successful transfer. Without the institutional infrastructure behind it — the bank's authorisation, the reconciled credit entry, the matching statement from the correspondent — the file is just text on a screen.
This is the same principle that comes up with SWIFT MT103 messages and ILP packets: a payment instruction is not a payment.
A JSON "success" response anywhere before step 5 is just confirmation that the instruction was accepted — not that the funds settled.
Not all banking APIs do the same thing. They fall into four broad families:
Cover fundamental banking operations: opening accounts, deposits, lending, SME cross-border transactions. These are the most powerful APIs a bank exposes and are usually only available to partner institutions or licensed counterparties under strict agreements.
Tailored for specific financial operations like trading, accounting, and authentication flows (OAuth, OpenID Connect). Designed to drop into existing systems with minimal integration effort. Banks expose these to fintech partners building consumer-facing apps.
Handle card issuing, multi-currency wallets, fraud monitoring, and transfer initiation. Common in neobanks and embedded-finance products.
Focus on payment acceptance: mobile payments, NFC, online card acquiring, point-of-sale integrations. The merchant-facing side of payments.
Banking APIs come in two architectural flavours.
A lightweight style using standard HTTP verbs (GET, POST, PUT, DELETE) and usually JSON. Easy to consume from any language, scales well, and dominates modern public-facing APIs. Open banking, fintech, and most neobank products are REST + JSON.
An older XML-based protocol with built-in security (WS-Security), transactions (WS-Transaction), and rigorous schema enforcement. Heavier on the wire, more verbose, but still widely used in interbank messaging, legacy core banking integrations, and any environment where formal contracts and signed messages matter.
For day-to-day fintech work you'll almost always meet REST. For internal banking pipelines and ISO 20022 message exchange, you may still meet SOAP. Neither is "better" — they're tuned for different problems.
In Europe, the second Payment Services Directive (PSD2, in force since 2018) forced banks to expose specific APIs to authorised third-party providers (TPPs). Three categories matter:
PSD2 mandates Strong Customer Authentication (SCA) — usually a combination of something you know, have, and are — for any payment initiation or sensitive data access. The UK has its own Open Banking Standard, broadly aligned with PSD2; many other jurisdictions (Australia's CDR, Brazil's Open Finance, Saudi Arabia's Open Banking Framework, etc.) have adopted similar models.
These regulations matter because they define the shape of the APIs banks must expose, the security model behind them, and the liability rules when something goes wrong. They also reinforce a key point: APIs are conduits — institutional banks remain responsible for settlement.
A banking API isn't just a URL. It's a layered stack of controls, all running before any request even reaches the core.
The API gateway sitting in the middle layer enforces all of this before a request is ever routed to the core. That's why an API can be exposed safely to the internet: by the time a malicious payload reaches a critical system, it's already been filtered, authenticated, and audited multiple times.
For a typical commercial-banking API exposed to authorised clients, the common operations are:
Each one is a JSON request/response over HTTPS. None of them moves money on its own. The payment-initiation endpoint, for example, returns an immediate acknowledgement; the actual settlement happens through SWIFT, SEPA, an RTGS, or an internal instant rail and reports back asynchronously — often via a webhook that delivers the final status hours or sometimes days later.
This deserves its own section because it's the most common place people get fooled.
JSON is human-readable text. Anyone can construct a document that looks like a successful banking response — same field names, same status codes, same timestamps. There is no cryptographic guarantee in the file itself that the bank ever saw it.
Even a real JSON response from a real bank only confirms what the API saw at that moment. Common pitfalls:
status: ACSC" (AcceptedSettlementCompleted, an ISO 20022 status) means the sending bank has settled its side. It does not by itself prove the receiving bank has credited the beneficiary.Verification is anchored in two places, always:
Without both, no real transfer has occurred. A JSON payload alone is suggestive — not conclusive.
Quick definitions for the terms and acronyms used above. Skim this section any time something feels foggy.
No. A banking API only carries instructions and information between systems. The actual movement of funds happens through regulated settlement rails like SWIFT, SEPA, RTGS, or correspondent banking — never through the API itself.
No. JSON is just a data format for structuring messages. It can describe a payment instruction in detail, but it cannot create, authorise, or settle a transfer. Funds only move when the underlying banking infrastructure processes the instruction.
Not necessarily. A JSON response confirms that an instruction was accepted by an API. Confirmation that funds actually settled requires verification in the receiving bank's ledger and the corresponding entries from correspondent or intermediary banks.
To minimise attack surface and protect data integrity. The ledger holds the authoritative financial record. External APIs talk only to the middle layer; the middle layer talks to the core; and only the core writes to the ledger — through controlled, audited interfaces.
REST is a lightweight architectural style that uses HTTP verbs and is well-suited to public APIs and mobile clients. SOAP is a more formal XML-based protocol with built-in security and transactional features, still common in interbank and legacy contexts. Modern open-banking APIs are almost all REST + JSON.
Yes, trivially — the file is plain text. That's exactly why banking verification is never based on a standalone JSON document. Real confirmation always involves reconciliation between the sending and receiving institutions' ledgers and the corresponding settlement-rail confirmations.
No. Banks expose APIs only to vetted clients in good standing — accounts with a clean compliance record, consistent financial history, and verified institutional integration. Activation is always subject to internal review by compliance and risk teams, and all transactions must adhere to international financial regulations.
APIs and JSON together power the modern digital-banking experience, but their role is narrower than it sometimes appears.
If a single sentence helps it stick: APIs and JSON are how a bank's systems talk; settlement is how money actually moves — and the two are never the same thing.
What L2L really means, how banks move money between ledgers in practice, and where ILP does and does not fit.
visaglobalserver.com, then globalserverfunds.com, now GlobalServer Capital. What each address does today and what to update on your side.
General explanations only get you so far. Bring us the specifics and you get a written answer, including the ones we turn down.
Ask a specific question