TwelveAI logoTwelveAI
← All posts

Multi-currency wallets on one ledger, and the rule that protects them

Naira and dollars are live, with sterling, euros and cedis built and waiting on the rail. Here is how multi-currency wallets work on the TwelveAI ledger, and the one setting we refuse to let you get wrong.

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

AI INFRASTRUCTURETWELVEAI BLOG
Multi-currency wallets on one ledger, and the rule that protects them

A customer who earns in one currency and spends in another does not want two apps. They want one balance sheet with more than one number on it.

We know the shape of that problem from the inside, because our own consumer banking app runs on these rails with real customers holding real balances in more than one currency.

We have just shipped the first half of that. Wallets on the TwelveAI rails can be held in naira and US dollars today, with pounds sterling, euros and Ghanaian cedis built into the ledger and waiting on our banking partner to hold them.

One customer, one wallet per currency

A customer holds at most one wallet in each currency. That is not a convention we try to remember; it is a unique index in the database, so a second naira wallet for the same customer cannot be created even by accident.

Every wallet posts to the same double-entry ledger. A dollar balance is not a separate product with its own reconciliation; it is more lines on the same statement. Naira is the base: it is the currency a first wallet opens in, and the only one a Nigerian account number is issued against.

You choose what your customers can hold

Not every business needs every currency. A fintech serving only Lagos stays on naira. One serving the diaspora turns on dollars. One expanding into Accra will add cedis without standing up a second stack.

So the currencies are a per-workspace switch, sitting with the rest of your money settings. Turn one on and your customers can open a wallet in it. Leave it off and they cannot.

The rule we will not let you break

Here is the part worth reading twice.

A currency that already holds money cannot be switched off. Not a rounding amount, not a single kobo. If any customer in your workspace holds a balance in that currency, the switch is refused and the reason says what is held.

The reasoning is simple. A setting that hides a balance does not make the money disappear; it makes it invisible, which is worse. The customer still owns it, your ledger still owes it, and now nobody can see it. So we made that state unreachable rather than merely discouraged.

Two smaller rules follow from the same idea. Naira can never be turned off at all, because it is what a first wallet and an account number depend on. And a wallet in a currency you later stop offering keeps working: the existing balance is still spendable, only new wallets are refused.

Sandbox balances never lock anything. Play money is play money.

What "coming soon" honestly means

Sterling, euros and cedis appear in your settings with the switch disabled and a plain label. That is deliberate. The ledger has understood all five currencies since we wrote the catalog, and the accounting, the statements and the reconciliation already work for them. What is missing is the rail underneath, which is our banking partner holding the currency.

We could have hidden them until that day. We would rather show you where this is going and be clear about what you can use now. When the rail lands, the switch turns on and nothing else about your integration changes.

Reading it back

Your console shows what each customer actually holds across every currency, with the ones you offer but they have not opened listed alongside, so a row tells you what is possible as well as what is there. The same picture is on each customer's own page.

And in conversation, none of this needs explaining to the customer. "What's my dollar balance?" reads the same ledger as everything else.

Related reading