Guides

How to launch a dollar account app in Latin America

How to launch a dollar account app in Latin America: what users hold, how money gets in and out, screen states, pricing, limits and the launch sequence.

Caio Barbosa

Founder & CO-CEO

Forbes Under 30. One of the leading voices in Fintech & Crypto in Brazil. Writes weekly about stablecoins, payments, and the future of financial infrastructure in Latin America.

Cover image for Lumx blog article: How to launch a dollar account app in Latin America
Cover image for Lumx blog article: How to launch a dollar account app in Latin America

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

customer.created

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

customer.approved or customer.rfi

4. Wait for accounts

Sees "setting up your details"

Read the customer's accounts

account.active

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

onramp.success

6. Withdraw

Picks a saved bank account and confirms a quote

Register a destination, quote, off-ramp

offramp.success

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

BRL to USDC

Mexico

Sends a SPEI transfer to a CLABE

The CLABE and a reference memo

SPEI runs 24/7, every day

MXN to USDC

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

USDC to a bank in Brazil

Mexico

SPEI

The user's CLABE

24/7, every day

USDC to a bank in Mexico

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

USDC to a bank in Colombia

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

onramp.awaiting_funds

Pay this code before it expires

Add money

Processing

onramp.transferring_fiat

Payment received, processing

Add money

Converting

onramp.trading

Converting to dollars

Add money

Crediting

onramp.transferring_stablecoin

Adding the dollars to the balance

Add money

Credited

onramp.success

Your dollar balance is updated

Add money

Expired

onramp.expired

This code expired, create a new one

Add money

Failed

onramp.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

offramp.transferring_stablecoin

Preparing your withdrawal

Withdraw

Converting

offramp.trading

Converting to local currency

Withdraw

On its way

offramp.transferring_fiat

Sent to your bank

Withdraw

Sent

offramp.success

Done, with a receipt

Withdraw

Failed

offramp.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.

Stay up to date with what Lumx is developing.

Sign up to receive them by email.

Share on socials:

how-to-launch-dollar-account-app-latin-america

A

how-to-launch-dollar-account-app-latin-america

How to launch a dollar account app in Latin America

Copy link

Copied!

how-to-launch-dollar-account-app-latin-america

TALK TO OUR TEAM

Ready to transform your business with stablecoins?

Discover how our infrastructure can seamlessly integrate stablecoins into your financial operations quickly, securely, and efficiently.

Guides

In this page

©2026. All rights reserved.

Lumx US OP LLC ("Lumx") is a financial technology and payments infrastructure company. Lumx US OP LLC is a Money Service Business (MSB) registered with the Financial Crimes Enforcement Network (FinCEN) (MSB #31000316459619). Lumx is not a state-licensed money transmitter and does not, in its own capacity, engage in the provision of regulated money transmission services. All such regulated activities are conducted exclusively through, and under the licenses of, duly authorized financial-institution partners.


Lumx is not a bank, financial institution, payment institution, or custodian of client funds. Certain services made available through the Platform may be provided by duly authorized and regulated third-party partners, in accordance with applicable laws and regulations.

Please refer to Lumx’s Terms of Use and Privacy Notice for further information regarding the conditions governing the use of the Platform and the processing of your personal data.