---
title: "Collect BRL, pay MXN: how a cross-rate payout through USDC is priced"
seoTitle: "BRL to MXN through USDC: pricing a cross-rate payout"
description: "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."
date: "2026-10-14"
updated: "2026-10-14"
category: "payments"
author: "BlindPay Team"
howto:
  name: "How to collect BRL by Pix and pay MXN by SPEI through USDC"
  steps:
    - name: "Quote the BRL payin"
      text: "Create a Pix payin quote with the payer's CPF or CNPJ in pix_allowed_tax_ids and the wallet that should receive the stablecoins."
    - name: "Create the payin and collect"
      text: "Create the payin within 5 minutes, show the payer the Pix code, and wait for the payin to reach completed."
    - name: "Quote the MXN payout"
      text: "Once the stablecoins land, create a payout quote against the recipient's CLABE bank account with the network and token the wallet holds."
    - name: "Execute the payout"
      text: "Execute the payout before the quote expires and track it to completion over SPEI."
    - name: "Record the implied cross rate"
      text: "Divide the pesos delivered by the reais collected and compare it with the market cross rate from the two commercial quotations."
faq:
  - q: "Can I convert BRL to MXN through a stablecoin?"
    a: "Yes. Collect reais with a Pix payin that delivers USDC or USDT to a wallet, then pay pesos with a SPEI payout funded from that wallet. Each leg gets its own quote. The two locked rates multiply into an implied BRL/MXN cross rate, which is the number to compare against a direct BRL to MXN conversion from a bank or broker."
  - q: "How do I calculate the BRL to MXN rate from two quotes?"
    a: "Divide the payout rate by the payin rate. If the payin quote is 5.46 BRL per USDC and the payout quote is 18.30 MXN per USDC, the implied rate is 18.30 / 5.46 = 3.3516 MXN per BRL. Use the rates after fees for your all-in price, and the commercial quotations for the market reference, then compare the two."
  - q: "Why route BRL to MXN through dollars at all?"
    a: "Because that is how the market is built. The BIS Triennial Survey found the US dollar on one side of 89% of all FX trades in April 2025. Most BRL/MXN conversions already pass through USD somewhere. A stablecoin route makes the dollar leg explicit, gives you a quote for each step, and lets both legs run on rails that settle in minutes."
  - q: "What is the risk between the two legs?"
    a: "Dollar exposure while the stablecoins wait. Once the payin quote locks the BRL leg, you hold USDC or USDT until the payout quote locks the MXN leg. If the peso strengthens in that gap, the same stablecoins buy fewer pesos. Executing the payout as soon as the payin completes keeps the gap to minutes. A small stablecoin float lets you pay first and refill after."
  - q: "Who holds the stablecoins between the payin and the payout?"
    a: "Whoever controls the payin's destination wallet. With a customer-controlled blockchain wallet, your customer holds them, and the payout is authorized from that wallet. With a BlindPay-managed wallet, which is in beta, BlindPay custodies the balance, and that path is custodial. Pick the wallet before the first quote, because the payin's destination decides the network."
---

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](/resources/more/why-onramp-and-offramp-rates-differ), and who earns what along the way is in [how on/off-ramp providers make money](/resources/more/how-onramp-offramp-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](https://www.bis.org/press/p250930.htm) 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](https://www.banxico.org.mx/tipcamb/tipCamMIAction.do?idioma=sp)). 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](/resources/more/most-liquid-currency-pairs-payout-pricing) 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](/docs/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](/docs/kb/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](/docs/payout-quotes)). It also holds for 5 minutes. Execute the payout before it expires. SPEI payouts settle in up to 10 minutes.

| | Leg 1: payin | Leg 2: payout |
| --- | --- | --- |
| Direction | BRL to USDC or USDT | USDC or USDT to MXN |
| Rail | Pix | SPEI |
| Quote window | 5 minutes | 5 minutes |
| Rate convention | BRL per stablecoin | MXN per stablecoin |
| Settles in | Up to 5 minutes | Up to 10 minutes |
| `currency_type: sender` means | The reais the payer sends | The 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](/resources/more/how-to-send-usdc-to-bank-account-mexico) 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.42 | 18.42 |
| `blindpay_quotation` (after fee) | 5.46 | 18.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](/resources/more/how-much-stablecoin-float-for-payouts) 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](/resources/more/how-to-on-ramp-local-currency-latin-america) 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.
