A dollar account app for Latin America is an app that lets people hold US dollars as USDC, add money by local bank transfer or US wire, and withdraw to a local bank. It needs verified users, wallets, money flows in and out, and a provider running the rails, for example Pix (Brazil's instant payments) through BRL to USDC.
The app owns the screens, the pricing and the support. The provider owns identity checks, the accounts, and the conversion and payout rails. The conversion on the way in is explained in the on-ramp explainer.
What does a dollar account app actually hold for the user?
A stablecoin balance, shown in dollars. The user sees "USD 412.50". Underneath, that is USDC (a stablecoin that tracks the US dollar one to one) in a custodial wallet, with deposit details attached so money can arrive from a local bank or from abroad.
Call it a dollar balance, never a bank account, in the interface and in your terms. Where the money legally sits is in what stablecoin banking is.
What the user sees against what exists underneath
What the user calls it | What exists underneath | Where the deposit lands |
My dollar balance | USDC or USDT in a custodial wallet | The user's wallet at the provider, in USDC or USDT |
My US account details | A USD account in the user's name, reached by ACH, FEDWIRE and SWIFT | An account provisioned with a banking partner, converted to USDC on receipt |
My Brazil deposit code | A BRL account in the user's name, paid by Pix | Converted to USDC on receipt, credited to the user's wallet |
My Mexico deposit details | An MXN account in the user's name, paid by SPEI | Converted to USDC on receipt, credited to the user's wallet |
My Colombia account details | A COP account, in the user's name for Colombian users and in the banking partner's name for everyone else | Converted to USDC on receipt, credited to the user's wallet |
On Lumx, creating the user as a customer provisions a wallet on every supported network, and the accounts list on the same request asks for the currencies the user needs. A named account is one whose number resolves to the user rather than to your company (what a named virtual account is).
The launch sequence, step by step
Six steps take a user from download to first withdrawal, each a screen, an API call and an event.
The six steps, with the call and the event behind each
Step | What the user does | What your backend calls | Event to listen for |
1. Create the user | Signs up in your app | Create a customer, with the currencies they need |
|
2. Accept terms | Accepts the provider's terms on a hosted page | Generate the terms link, with a return URL | requirement moves to approved |
3. Verify identity | Sends ID, selfie and address | Send additional information, upload documents, start verification |
|
4. Wait for accounts | Sees "setting up your details" | Read the customer's accounts |
|
5. Add money | Pays a code, a CLABE or a wire, then sees dollars first | Create an on-ramp or a standing conversion rule, then read the wallet |
|
6. Withdraw | Picks a saved bank account and confirms a quote | Register a destination, quote, off-ramp |
|
Two details save rework. The terms page cannot sit in an iframe, so open it as a redirect or in-app browser sheet. And wallets only appear in the customer response after approval, so read them on the approval event.
Plan the wait screen around time: the KYC (know your customer) target is 1 business day once all documents are in, a target and not a promise, and a USD account takes up to one business day after approval, though for an individual it usually opens well within that.
No SDK is needed: Lumx is a REST API with an OpenAPI spec.
How does money get into the app?
Through a local rail, converted to USDC at the end. Brazil uses Pix (Brazil's instant payment system, run by the Central Bank). Mexico uses SPEI (Mexico's interbank transfer system, run by Banxico), paid to a CLABE (the 18-digit Mexican bank account number). Colombia uses Bre-B (Colombia's instant payment system), paid to the Bre-B key of the user's COP account, or PSE (Colombia's online bank-transfer network). Money from abroad arrives by US wire.
Add money by source
Source | What the user does | What the app shows | Timing | Corridor |
Brazil | Pays a Pix code from a bank app | A Pix code with the amount | Pix runs 24/7, every day | |
Mexico | Sends a SPEI transfer to a CLABE | The CLABE and a reference memo | SPEI runs 24/7, every day | |
Colombia, Bre-B | Sends a Bre-B transfer to a key | The Bre-B key of the user's COP account | Instant | Bre-B collection |
Colombia, PSE | Authorizes a debit at their bank | The amount due and the status of the payment | Authorized by the payer | PSE collection |
Abroad | Wires dollars to a US account | Routing number, account number, bank name | ACH 1 to 2 business days, FEDWIRE same business day, SWIFT 1 to 5 | USD account |
The US rails have cut-off times: 2:00 PM ET for ACH, 3:00 PM ET for FEDWIRE and SWIFT, and a later request goes out the next business day.
There are two ways to take a deposit. One is an on-ramp per deposit, created for the exact amount the user will pay. A floating one over Pix or SPEI expires after one day, and a late deposit is refunded to the sender on the same rail. The other is a standing conversion rule on the user's account: share one Pix code or CLABE, and every deposit paid through it converts. A savings app fits the rule, because users pay whenever they like. A fixed-amount purchase fits the on-ramp. On Lumx, the converted USDC lands in the user's wallet and the app hears about it through onramp.success.
How does money get out to a local bank?
By a payout from the dollar balance to a bank account the user registered, over the rail of the user's country. Colombia has Bre-B and ACH Colombia.
Withdraw by country
Country | Rail | What the destination needs | Timing | Guide |
Brazil | Pix | The user's Pix key or bank details | 24/7, every day | |
Mexico | SPEI | The user's CLABE | 24/7, every day | |
Colombia | Bre-B or ACH Colombia | A Bre-B key, or holder and bank account details | Bre-B instant, ACH Colombia about 1 business day | |
United States | ACH, FEDWIRE or SWIFT | US bank details | ACH 1 to 2 business days, FEDWIRE same business day | USD account |
A withdrawal to the user's own account uses the holder relationship SELF, and the purpose PERSONAL_ACCOUNT is allowed only for that kind of destination. Register the destination when the user saves the bank account, because it is verified before it can receive a payout. In Colombia the rail is fixed at registration, and a Bre-B payout above the cap of 1,000 UVB per operation (COP 12,110,000 in 2026), set in section 3.2 of the Banco de la República's Circular Reglamentaria Externa DSP-465 of March 31, 2026, is refused rather than split.
Compare the rails in Latin America payout rails compared and the providers in best stablecoin APIs for Latin America.
On Lumx, a destination must reach destinations.approved before it can receive a payout, the off-ramp debits the user's own wallet, and no fee comes out of the amount that reaches the recipient on a Pix, SPEI or Bre-B payout. Only the recipient's bank can charge them.
Screen states for Add money and Withdraw
Screen states mapped to the event that triggers them
Flow | Screen state | Event | What the screen says |
Add money | Waiting for payment |
| Pay this code before it expires |
Add money | Processing |
| Payment received, processing |
Add money | Converting |
| Converting to dollars |
Add money | Crediting |
| Adding the dollars to the balance |
Add money | Credited |
| Your dollar balance is updated |
Add money | Expired |
| This code expired, create a new one |
Add money | Failed |
| The deposit did not complete, with the reason |
Withdraw | Confirm the quote | Locked quote timer | You will receive this amount, confirm within 30 seconds |
Withdraw | Sending |
| Preparing your withdrawal |
Withdraw | Converting |
| Converting to local currency |
Withdraw | On its way |
| Sent to your bank |
Withdraw | Sent |
| Done, with a receipt |
Withdraw | Failed |
| The withdrawal did not complete, with the reason |
A deposit through a standing conversion rule starts at onramp.transferring_fiat, so a savings app has no "Waiting for payment" state. A late Pix or SPEI deposit goes back to the sender on the same rail, so say that on the Expired screen.
Two more states need copy. An RFI (request for information, a compliance hold that asks for a document before a transaction clears) should show which document is missing. A withdrawal over the limit is rejected with TRANSACTION_LIMIT_EXCEEDED, so show the remaining room first. A withdrawal larger than the balance fails with an insufficient balance error, so check the amount against the balance before the user confirms. On Lumx each state above arrives as a webhook event, and the locked quote carries the amounts the screen shows.
Start with one corridor
I recommend launching with one country and one way in, and adding the second only after the first has produced a clean month of reconciliations. I would pick Brazil over Pix, because Pix runs every day of the year and a deposit that lands on a Sunday still converts, which removes the weekend support ticket before it exists. Unless your strategy needs all three countries on day one, I would add them one at a time: every added rail is another set of deposit instructions, another failure message and another reconciliation path for support to learn.
What does a balance cost, and how does the app earn on it?
A user pays the rate, the quote's fees and your markup, so show the amount received, not only the rate.
Lumx offers a floating rate, a live reference with no lock and no fee, good for an estimate, and a locked rate that fixes the conversion for 30 seconds, 1 minute or 5 minutes, of which only the 30-second lock is free.
Your own revenue is a partner fee: a rate in basis points (hundredths of a percent), a flat dollar amount, or both, set separately for on-ramps and off-ramps. On a locked rate the fee is part of the quote.
Illustrative withdrawal of 300 USDC to Mexico, with invented numbers and before any spread
Line | Value |
User sends | 300.00 USD (held as USDC) |
Your partner fee, 75 bps | 2.25 USD |
Converted | 297.75 USD |
Locked rate | 18.00 MXN per USD |
User receives | 5,359.50 MXN |
The formula is (amount minus fees) times the locked rate, and the API quote decides how each fee applies. The locked-rate response carries baseTargetAmount, finalTargetAmount and finalExchangeRate, and those are the figures to show. More is in how stablecoin payout pricing works.
Verification, limits and who is regulated
Every user is verified before moving money. An individual goes through KYC, with a tax ID, an identity document, a liveness check and a proof of address. A business user goes through KYB (know your business, the verification of a company and its owners), covered in what KYB is and onboarding business users.
If you would rather not build the form, share the verification link returned on the customer. Where the user lives decides the review, per the supported countries list. Brazil and Mexico users get standard checks, and some countries are restricted. On Lumx, every Colombian customer goes through enhanced due diligence, so plan for extra documents and a longer wait, and anything missing comes back as an RFI on customer.rfi.
Published default limits by verification tier, in USD, read November 1, 2026
Limit | KYC standard | KYC enhanced | KYB standard | KYB enhanced |
Per transaction | 7,500 | 25,000 and above | 50,000 | 50,000 and above |
Daily | 15,000 | 50,000 and above | 100,000 | 100,000 and above |
Monthly | 15,000 | 50,000 and above | 100,000 | 100,000 and above |
A saver with a large balance will meet the standard KYC limit, so send users who need more to enhanced verification. On Lumx a request above the tier's limit is rejected, not held.
The provider holds the regime for custody and the rails; the app shows the balance but does not hold the money. Whether your app needs its own authorization in a country depends on how you describe and charge for the service, so take that to counsel in each country before launch. On Lumx, Lumx US OP LLC is a FinCEN-registered Money Services Business, and regulated money transmission runs through licensed financial-institution partners. In Brazil, services are provided by Lumx Sociedade Prestadora de Serviços de Ativos Virtuais Ltda, which is adapting to the SPSAV regime under Central Bank of Brazil Resolution 520/2025, under the Article 88 transition regime.
When a dollar account app is the wrong product
Users who expect a bank deposit. A stablecoin balance is not insured like one, so "your savings are insured" cannot be your promise.
A pooled balance for many people. Each user has to be a customer of their own.
What this looks like on Lumx
Lumx is stablecoin payments infrastructure for businesses that move money between Latin America and the rest of the world: one API to collect, hold, convert, and pay out in BRL, MXN, COP, USD, EUR, and GBP or in USDC and USDT, over local rails such as PIX, SPEI, PSE, Bre-B, ACH, FEDWIRE, SEPA, and Faster Payments, with SWIFT and on-behalf-of payments and collections (POBO and COBO) in USD, EUR, and GBP, plus named virtual accounts, custodial wallets, and KYB/KYC built in.
Each user is a Lumx customer who accepts Lumx's terms on a hosted page and passes Lumx's verification. The named virtual accounts page describes the account type, and global payments shows how collections and payouts compose.
Because every user is a customer, the app never pools, which is the structure the nested payments rules require.
The coverage page lists the current rails and settlement times.
Verified on November 1, 2026. Operational context, not legal, tax, or investment advice.
Cover photo: NordWood Themes on Unsplash.
How do you launch a dollar account app in Latin America?
Verify each user, give each one a wallet that holds USDC, let them add money over local rails or a US wire, and let them withdraw to a local bank account. Your app owns the screens and the pricing, and a provider runs the rails. On Lumx, each user is a customer with a wallet and the accounts you request, and the sequence runs end to end in the sandbox.
Is a USDC balance the same as a bank deposit?
No. A USDC balance is a stablecoin that tracks the US dollar, not a bank deposit or a bank account. Say so on the balance screen and in your terms, and let counsel decide what you can promise. Lumx is not a bank, and the balance sits in a custodial wallet in the user's name at Lumx.
How long does user verification take?
A standard KYC review targets 1 business day once all documents are in, and an enhanced one targets 2. These are targets, not contractual guarantees. On Lumx, Colombian customers always go through enhanced due diligence, so budget extra time for an RFI there.
Does the app need its own licence?
That depends on the country and on how you describe and charge for the service, so ask counsel. The provider holds the regime for custody and the rails. On Lumx, regulated money transmission runs through licensed financial-institution partners, and in Brazil services are provided by Lumx's SPSAV entity.
How long does it take to build and launch the app?
The money movement is a handful of API calls, and the screens and support scripts around it are the part you design. On Lumx, an API integration takes two to three weeks to go-live, and a white-label setup through the dashboard takes days.





