Collect BRL, pay MXN: how a cross-rate payout through USDC is priced

Collect reais by Pix and pay pesos by SPEI through USDC: two chained quotes, the implied BRL/MXN rate, the all-in cost, and the gap between legs.

To collect reais and pay pesos through USDC, you chain two quotes: a Pix payin quote turns BRL into stablecoins in a wallet, then a SPEI payout quote turns those stablecoins into MXN. Payout rate divided by payin rate is the implied BRL/MXN cross rate. You pay two spreads plus fees, and carry risk between the legs.

This comes up whenever a business earns in one Latin American currency and spends in another: a Brazilian marketplace paying Mexican sellers, or a company collecting subscriptions in Brazil and paying a team in Mexico. Why each leg has its own price is covered in why on-ramp and off-ramp rates differ, and who earns what along the way is in how on/off-ramp providers make money.

Key takeaways

  • Two legs, two quotes. The Pix payin locks BRL to USDC. The SPEI payout locks USDC to MXN.
  • Implied cross rate = payout rate / payin rate. Compare it with the cross of the two commercial quotations.
  • You pay both legs' spreads and fees. In the illustrative example below, that comes to about 1.38%.
  • Between the legs you hold dollars. Execute the payout right after the payin completes, or pay from a float.
  • The payin's destination wallet decides who holds the stablecoins and which network the payout uses.

Why does BRL to MXN go through dollars?

Because the dollar sits in the middle of almost every currency trade. The BIS 2025 Triennial Survey found FX trading "reached $9.6 trillion per day in April 2025," with the dollar "on one side of 89% of all FX trades." Direct BRL/MXN trading is thin by comparison, so most quotes for that pair are built from USD/BRL and USD/MXN anyway.

Central banks publish their reference rates against the dollar too. Banxico's FIX, released "a partir de las 12:00 horas" on banking business days, is a USD/MXN rate used to convert dollar obligations payable in Mexico into pesos (Banxico). There is no official BRL/MXN fixing to anchor against. You calculate the cross yourself.

A stablecoin route makes that dollar leg visible. Instead of one opaque BRL/MXN price, you get two quotes with their own market rate and fee lines. Which currencies are most liquid explains why each USD leg prices tighter than a direct pair usually would.

How do the two quotes chain together?

Payin first, payout second, with the stablecoins landing in a wallet in between.

Leg 1, the Pix payin. Create a payin quote with payment_method: pix, the wallet that will receive the stablecoins, and the payer's CPF or CNPJ in payer_rules.pix_allowed_tax_ids (payin quotes). The quote locks the numbers and holds for 5 minutes. Create the payin from it, show the payer the Pix code from the payin response, and wait for the payin to reach completed, which means the stablecoins arrived in the destination wallet. Pix payins settle in up to 5 minutes, per BlindPay's cut-off times.

Leg 2, the SPEI payout. Create a payout quote against the recipient's CLABE bank account, passing the network and token the wallet holds (payout quotes). It also holds for 5 minutes. Execute the payout before it expires. SPEI payouts settle in up to 10 minutes.

Leg 1: payinLeg 2: payout
DirectionBRL to USDC or USDTUSDC or USDT to MXN
RailPixSPEI
Quote window5 minutes5 minutes
Rate conventionBRL per stablecoinMXN per stablecoin
Settles inUp to 5 minutesUp to 10 minutes
currency_type: sender meansThe reais the payer sendsThe stablecoins you send

Watch the last row. currency_type flips meaning between payin and payout quotes, and a chained flow uses both. The Mexico payout guide covers the CLABE details for leg 2.

For large BRL collections, BlindPay also offers OTC payin quotes: BRL only, settled in USDT, from a $5,000 USD-equivalent minimum, with a 10-second quote window. USDT then funds the SPEI payout on the networks where it is deployed, such as Polygon, Ethereum, Solana, and Tron.

What does the full conversion cost?

Both spreads plus both sets of fees. The cleanest way to see it is to compute two cross rates: one from the rates after fees, one from the market rates, and compare them.

Illustrative example. A company collects R$ 10,000 by Pix and pays the proceeds by SPEI.

Payin (BRL per USDC)Payout (MXN per USDC)
commercial_quotation (market)5.4218.42
blindpay_quotation (after fee)5.4618.30
  1. Leg 1: 10,000 / 5.46 = 1,831.50 USDC lands in the wallet.
  2. Leg 2: 1,831.50 x 18.30 = MX$ 33,516.45 reaches the recipient.
  3. All-in cross rate: 33,516.45 / 10,000 = 3.3516 MXN per BRL.
  4. Market cross rate: 18.42 / 5.42 = 3.3985 MXN per BRL.
  5. All-in cost: 1 - 3.3516 / 3.3985 = about 1.38%.

That 1.38% is roughly the two legs stacked: 0.73% on the payin and 0.65% on the payout in this example. Real numbers come from your own quotes, because fees are per transaction, vary by rail and network, and are disclosed in the live quote before execute. Flat fee lines add on top, so small amounts cost more in percentage terms.

To compare with a direct BRL to MXN offer from a bank or broker, ask for the all-in pesos per real on the same amount at the same minute, then compare it with your step 3.

What happens in the gap between the legs?

You hold dollars. The payin quote fixed how many stablecoins R$ 10,000 buys. The payout rate isn't fixed until you create the payout quote. If the peso strengthens from 18.30 to 18.10 per USDC in that gap, the same 1,831.50 USDC buys 1,831.50 x 18.10 = MX$ 33,150.15, or MX$ 366.30 less.

Three ways to handle it:

  • Execute immediately. Listen for the payin's completion webhook and request the payout quote right away. The gap shrinks to the minutes Pix and the blockchain need.
  • Pay from a float. Hold a stablecoin balance, pay the pesos first, and let the BRL collection refill it. The cross rate is still two legs, but the recipient never waits. How much stablecoin float to hold has the sizing method.
  • Fix the peso amount. Use currency_type: receiver on the payout so the recipient gets an exact MXN amount, and treat any leftover or shortfall in USDC as treasury, not as the recipient's problem.

Who holds the stablecoins between legs?

Whoever controls the payin's destination wallet. With a customer-controlled blockchain wallet, BlindPay operates as a non-custodial payment processor for the payout: you authorize the exact amount and BlindPay executes that single transaction. With a BlindPay-managed wallet (beta), the flow is simpler, and it is custodial when you choose that path.

Pick the wallet before the first quote. The payin delivers to the network the wallet lives on, and the payout quote has to match it. The Latin America on-ramp guide covers the Pix collection side in more depth.

What to do next

Run both legs on a development instance with USDB: a Pix payin quote and payin, then a SPEI payout quote and payout from the same wallet. Log both quotations and compute your own cross rate with the five steps above.

FAQ