How to on-ramp BRL, MXN, ARS, and COP into stablecoins: Pix, SPEI, Transfers 3.0, and PSE
How Latin American bank payments become USDC or USDT: what each rail shows the payer, the payer data it needs, how fast it lands, and the traps by country.
To on-ramp Latin American currency into stablecoins, the payer sends a local bank payment and the provider converts it: Pix in Brazil, SPEI in Mexico, Transfers 3.0 in Argentina, and PSE in Colombia. Each rail shows the payer something different, needs different payer data, and settles in seconds to minutes. Then USDC or USDT lands in a wallet.
Most writing about stablecoins in Latin America covers the other direction: paying out to a Pix key or a CLABE. This guide covers money coming in, which is where most integrations hit their first surprises.
Key takeaways
- Every rail hands the payer a different instruction: a Pix code, a CLABE, a CVU or CBU, or a payment link.
- Instant rails let the on-ramp check who's paying. Expect to collect the payer's tax ID, and for PSE, their full details.
- Mexican, Argentine, and Colombian pesos are often quoted in whole units only. Centavos can get a payin rejected.
- The on-ramp is funded by the payer's deposit, so there's nothing to pre-fund.
- Choose the token and network for where the money goes next, not for where it came from.
How does a local bank payment become a stablecoin?
The flow is the same in every country. Only step 3 changes.
- Quote. Your backend asks the on-ramp to convert an amount of local currency into USDC or USDT for a specific wallet. The quote locks the rate and fees for a few minutes and records who is allowed to pay.
- Create the payment. The on-ramp returns the payment instructions for the rail.
- The payer pays. From their own bank app, using the Pix code, CLABE, CVU, or link.
- Match. The on-ramp detects the deposit and matches it to the quote: amount, payer, reference.
- Convert and deliver. The on-ramp converts the currency and sends the stablecoins on-chain.
- Confirm. A webhook tells your backend the payment is complete.
Integrating a crypto on-ramp API covers the code for each step. The rest of this page is about step 3, rail by rail.
Which Latin American rails can fund an on-ramp?
Four rails cover BlindPay's payin side in Latin America.
| Country | Rail | What the payer gets | Payer data on the quote | Typical arrival on BlindPay |
|---|---|---|---|---|
| Brazil | Pix | A Pix code, as copyable text or a QR code | CPF or CNPJ of the allowed payers | Up to 5 minutes |
| Mexico | SPEI | A CLABE to transfer to | None | Up to 10 minutes |
| Argentina | Transfers 3.0 | A CVU, CBU, or alias | CUIT or CUIL (required) | Up to 10 minutes |
| Colombia | PSE | A payment link | Full name, document, email, phone, bank code (required) | Up to 10 minutes |
Brazil also has TED, a wire-style rail that's slower than Pix, which BlindPay enables per instance. And US payers have their own set: ACH, wire, and RTP, plus SWIFT into a US virtual account. Those are covered in accepting bank transfers in stablecoins.
How does on-ramping with Pix work in Brazil?
Pix is the Banco Central do Brasil instant payment system. It runs 24/7, settles in seconds, and nearly every Brazilian bank account and wallet app supports it.
For an on-ramp, the payer gets a Pix code: a "copia e cola" string or a QR code that already carries the amount and the recipient. They paste it into their bank app, confirm, and it's done.
What to know:
- Payer allowlist. BlindPay Pix quotes take
pix_allowed_tax_ids, the CPF or CNPJ numbers allowed to pay. They're validated against the Receita Federal check digits when the quote is created, so a mistyped CPF fails immediately instead of at the bank. - Waiting window. A Pix payin usually lands within minutes. BlindPay waits up to 30 minutes, runs a reconciliation check, and only then marks it
failed. - Large amounts. For BRL into USDT of $5,000 or more, you can request an OTC quote (
is_otc: true), priced through BlindPay's OTC desk. OTC quotes expire in 10 seconds and wait for the deposit until 23:59 São Paulo time. A deposit that never arrives adds a $100.00 penalty to the billing fee, so only quote OTC when the payer is ready.
How does on-ramping with SPEI work in Mexico?
SPEI is Mexico's interbank transfer system, run by Banxico. Like Pix, it runs around the clock and settles in seconds.
The payer gets an 18-digit CLABE and transfers to it like any other account. There's no QR code and no payer allowlist on the quote, which makes SPEI the simplest of the four to integrate.
The trap is centavos. On BlindPay, a sender-side SPEI quote must be a whole number of pesos: request_amount has to be a multiple of 100 in minor units, or the quote fails with request_amount_must_be_a_whole_currency_unit. If you quote from the stablecoin side instead, the peso amount is rounded down to a whole unit for you.
How does on-ramping with Transfers 3.0 work in Argentina?
Transfers 3.0 is the Banco Central de la República Argentina framework that made transfers interoperable between banks and wallet apps. The payer sends pesos to a CVU (a wallet account), a CBU (a bank account), or an alias.
On BlindPay, two rules apply:
- CUIT or CUIL is required.
transfers_allowed_tax_idnames the tax ID allowed to pay, in the20-12345678-6format. - Whole pesos only. Same rule as SPEI.
Argentina adds one forgiving behavior. If a Transfers 3.0 deposit arrives after the payin was already marked failed, and no stablecoins were sent yet, BlindPay revives the payin and completes it once the sender's tax ID and amount match. Late payers don't automatically mean a refund.
How does on-ramping with PSE work in Colombia?
PSE, Pagos Seguros en Línea, is Colombia's online bank debit, operated by ACH Colombia. Instead of pushing money to an account number, the payer opens a payment link, picks their bank, and approves the debit inside the bank's own site, usually with two-factor authentication.
That redirect means PSE needs more payer data up front. A BlindPay PSE quote requires:
| Field | Format |
|---|---|
pse_full_name | Up to 50 characters |
pse_document_type | CC (citizen ID) or NIT (tax ID) |
pse_document_number | The document number |
pse_email | The payer's email |
pse_phone | +573 followed by 9 digits |
pse_bank_code | The payer's bank |
Colombian pesos have a much smaller unit value than the other currencies, so the minimum in raw minor units is higher. Read the minimum from the quote error instead of hardcoding it. And quote whole pesos, as with SPEI and Transfers.
Which stablecoin and network should you deliver to?
Pick the token for the next step and the network for cost and compatibility.
Token. USDT is widely used across Latin America for savings and peer-to-peer trades. USDC is common for business treasury and for settling with US counterparties. USDC vs USDT for payments compares them in depth. Both are redeemable with their issuers: Circle for USDC and Tether for USDT.
Network. On BlindPay, payins can deliver to:
| Network | Tokens | Notes |
|---|---|---|
| Solana | USDC, USDT | Low fees, fast confirmation |
| Polygon, Ethereum | USDC, USDT | Ethereum fees rise when the network is busy |
| Tempo | USDC, USDT | EVM chain, same address format |
| Base, Arbitrum, Arc | USDC | No USDT |
| Stellar | USDC | No USDT |
| Tron | USDT | No USDC; external Tron wallets are in beta |
The network is read from the destination wallet, so you choose it when the wallet is registered, not on each quote.
Do you need to pre-fund a Latin American on-ramp?
No. The payer's deposit funds the on-ramp. The provider delivers stablecoins after the pesos or reais land, so neither you nor the provider parks a balance in each country in advance. Pre-funding is an off-ramp and payout question, covered in what no pre-funding means.
What does a full example look like?
A US fintech offers dollar balances to small businesses in Brazil, Mexico, Argentina, and Colombia. Each business tops up its balance from its own local bank account, and the balance is USDC on Solana.
- Each business onboards through the fintech's signup. The fintech passes the KYB data to the on-ramp API, which registers each business as its own customer.
- Each business's Solana wallet is registered once.
- When a business wants to top up, the fintech requests a quote in that business's currency, with payer rules naming the business's own tax ID.
- The business sees the right instruction inside the fintech's app: a Pix QR code, a CLABE, a CVU, or a PSE button.
- As each deposit lands, USDC arrives in that business's wallet, and a webhook updates the balance in the app.
Four countries, four rails, one integration, one token on one network. The fintech never opens a bank account in Latin America, and every business that moves money is a verified customer of the on-ramp.
How are fees handled?
Every payin quote shows the market rate, the rate with fees, and each fee line before the payer pays. The cover_fees flag decides who pays: false takes the fee out of the stablecoins delivered, and true adds it to the amount the payer sends. A platform can add its own partner fee on top. Crypto on-ramp fees explained shows how to compare quotes.
Where does BlindPay fit?
BlindPay collects payins over Pix, SPEI, Transfers 3.0, and PSE, plus TED in Brazil and ACH, ACH pull, domestic wire, RTP, and SWIFT in the US, converts them, and delivers USDC or USDT to the wallet on the quote. Delivery can go to an external wallet the customer controls, so the stablecoins never sit with BlindPay, or to a BlindPay-managed wallet (beta), which BlindPay custodies. Payer rules, whole-unit amounts, and waiting windows are enforced by the API, so most mistakes fail at quote time. The same API pays out over local rails when the money needs to go back to a bank.
When BlindPay is the right fit: you collect from businesses or individuals in Brazil, Mexico, Argentina, or Colombia and want stablecoins in a wallet, through one API, with KYC and KYB handled. When it isn't: you need local virtual accounts in Latin America today (BlindPay's virtual accounts are US accounts), or card checkout for retail crypto buyers. See payins and payment methods for the full reference.
What to do next
Pick the one country where most of your payers are and run a single payin end to end on a development instance. Then read why crypto on-ramp deposits fail before you launch, and check the compliance split in who owns on-ramp compliance. For the bigger picture, start at business vs consumer crypto on-ramps.
Funding a stablecoin card balance from local bank money follows the same payin flow; how to fund a stablecoin card with Pix or SPEI walks through the top-up and the cash-out of what is left.
Collecting in one country and paying in another chains a payin and a payout. Collect BRL, pay MXN shows how that cross rate is priced through USDC.
To collect from payers in Brazil and Mexico, read how to collect payments from Latin America in stablecoins with Pix and SPEI.
This article is general information, not legal, tax, or financial advice. Rails, payer requirements, and supported networks change; confirm current details in the docs.
FAQ
More payments articles
See all payments articlesHow to off-ramp USDT to local currency in Latin America
Converting USDT to BRL, MXN, ARS, or COP: which networks work, the payout rail in each country, weekend timing, fees, and the documents a business needs.
How long does a stablecoin on-ramp take? Timing by funding rail
On-ramp timing by funding rail: Pix, SPEI, Transfers 3.0, and PSE land in minutes, US ACH and wire can take days. Where the clock starts and what stops it.
Bridge and BlindPay: stablecoin cards plus local-currency payouts in one stack
How a card program runs Bridge for stablecoin cards and wallets and BlindPay for bank funding and local payouts: architecture, flows, and who owns what.