TwelveAI logoTwelveAI
← All posts

What runs underneath: the money rails behind the conversation

A conversational banking layer is only as honest as the ledger beneath it. Here is what the TwelveAI rails actually are: wallets, account numbers, one double-entry ledger, and a sandbox from day one.

Sep 23, 2026 · 4 min read · By The TwelveAI Team

AI INFRASTRUCTURETWELVEAI BLOG
What runs underneath: the money rails behind the conversation

Most conversational banking demos are a thin layer over someone else's API. The assistant sounds confident, the numbers come from a mock, and the first real transfer is the first time anyone finds out whether the thing works.

We took the other route. The conversation sits on rails we run, so when an agent says a balance, the number comes from a ledger we can prove. And we are not selling a road we have not driven: our own consumer banking app runs on these rails end to end, with real customers and real money, on the same ledger and the same API key any workspace gets.

This post is what those rails are.

A wallet, an account number, and one ledger

Each of your customers can hold a wallet on the rails. Once their BVN verifies, they get a dedicated account number in their own name, at our licensed banking partner. Money paid to that number lands in their wallet. Money leaving it goes out as a real bank transfer with the recipient's name checked first.

Every movement is a double-entry line on one ledger: the amount, the direction, the reference, and the balance after it. A transfer writes the transfer, the fee, and any markup as separate lines, so the customer's statement reads the way a bank statement reads rather than as one lump with a footnote.

The important word there is one. The ledger understands five currencies, and they are not five systems stapled together. A balance, a transfer and a swap are the same shape of record whichever currency they are in, which is why reconciliation is a query rather than a weekend. Naira and dollars are live today; sterling, euros and cedis are built and waiting on our banking partner to hold them.

The money is not ours to hold

TwelveAI is not a bank and does not hold customer funds. They sit with our licensed, NDIC-insured banking partner. We keep the ledger, the records and the audit trail.

That separation is worth stating plainly because it decides what happens on a bad day. Our ledger says what each customer is owed. The partner holds the money. A nightly coverage check compares the two and shouts if the partner's balance ever falls below the sum of what our wallets claim. That alert goes to us, not to you, and not to your customers.

Nothing moves without a decision

An agent cannot quietly send money. A transfer produces a confirmation the customer has to accept, and on the apps built on this, a PIN behind it. Policy runs before any of that: limits by tier, a daily cap, a rule that escalates anything unusual to a person instead of executing it.

The agent is a client of the rails, not a privileged path into them. It can do exactly what your own code could do, under exactly the same checks.

A sandbox from the first minute

Every workspace has the whole thing in sandbox before signing anything: its own test key, its own ledger, from day one, with nothing to enrol in and nobody to email. Sandbox account numbers start with 99, a range no Nigerian bank issues, so one can never collide with a real account. Deposits are simulated, transfers settle off a timer, swaps clear at a fixed rate.

What is not faked is the arithmetic. The ledger maths, the fees and the refunds are the same code paths as live. A sandbox that behaves differently from production is a sandbox that teaches you the wrong lessons, and we know that because we learned it on ourselves: our sandbox now opens with a balance in it, because an empty one told us nothing about whether anything worked.

What this buys you

An agent that can act instead of only answer. "Send twenty thousand to my landlord" becomes a real transfer with a real confirmation, not a handoff to a form. "What did I spend on transport?" reads the same ledger the transfer wrote to, so the answer and the action never disagree.

That is the whole argument for owning the rails: the conversation is only as trustworthy as the thing underneath it, and we would rather that thing be ours.

It is also why we run on them ourselves. Every rough edge in this system is one we meet on the same morning you would, in our own app, with our own customers' money. We are not guessing at your problems from the outside. We have them too, and we fix them for both of us at once.

Related reading