How to collect payments from Latin America in stablecoins (Pix and SPEI)
How to collect payments from Brazil and Mexico in stablecoins: Pix to USDC, SPEI to USDC, plus TED, Transfers, PSE, and Bre-B payin rails.
Payers in Brazil use Pix and payers in Mexico use SPEI, both local bank transfers. A stablecoin payin API accepts the local transfer, converts it, and delivers stablecoins, so the payer never touches a wallet. BlindPay offers this for Pix and SPEI, and for TED, Transfers in Argentina, and PSE and Bre-B in Colombia.
This guide is for a fintech, remittance, or payroll lead expanding into Brazil and Mexico. It explains how the two rails work, what the end-to-end flow looks like, and where teams trip up. For the concept, see how a stablecoin payin works step by step.
Key takeaways
- Pix is run by the Banco Central do Brasil. SPEI is run by Banxico. Payers use their normal bank app on both.
- A BlindPay payin turns the local transfer into stablecoins in a wallet you choose. Quotes lock the rate for 5 minutes.
- Pix needs the payer's CPF or CNPJ in the quote. SPEI returns a CLABE, and a permanent CLABE virtual account is also available.
- BlindPay's other Latin American payin rails are TED, Transfers (Argentina), PSE, and Bre-B (Colombia).
- Mistakes cluster around expired quotes, whole-peso amounts, missing tax IDs, and assuming a payin can be cancelled.
How do Pix and SPEI work?
Pix is Brazil's instant payment system, run by the Banco Central do Brasil. SPEI is Mexico's interbank electronic payment system, run by Banxico. Both move money between local bank accounts without a card network.
The Banco Central do Brasil describes Pix on its Pix page, and its MED guide covers the special returns mechanism (checked on 2026-11-05). Banxico describes SPEI on its interbank electronic payments page and publishes proof of payment through its CEP service (checked on 2026-11-05). For a rail-by-rail comparison, read Pix vs SPEI.
| Brazil (Pix) | Mexico (SPEI) | |
|---|---|---|
| Rail | Pix | SPEI |
| Operator | Banco Central do Brasil | Banxico |
| Typical speed in BlindPay docs | Up to 5 minutes | Up to 10 minutes |
| Payer experience | Scan a QR code or paste a Pix code in the bank app | Enter an 18-digit CLABE in the bank app |
| What BlindPay returns | A pix_code | A clabe |
| Key checks | Payer's CPF or CNPJ in payer_rules, validated against check digits | CLABE must match the payin; whole-peso amounts on quotes |
| Proof of payment | Pix receipt from the payer's bank | Banxico CEP |
Can I collect with Pix or SPEI and settle in stablecoins?
Yes. A stablecoin payin API takes the local transfer, converts the currency, and delivers stablecoins to a wallet. With BlindPay, the payin quote names the payment method and the destination, and the payer never needs a wallet.
The destination is a stablecoin wallet, never a bank account. A blockchain_wallet_id (prefix bw_) points to an external wallet your customer controls. A wallet_id (prefix bl_) points to a BlindPay-managed wallet, which BlindPay custodies and which is in beta. Deliveries go to Ethereum, Polygon, Base, Arbitrum, Stellar, or Solana. USDC is available on all six, and USDT on Ethereum, Polygon, and Solana. See payins for the full reference.
BlindPay supports these Latin American payin rails:
| Country | Rail | Currency | What the payer receives | Settlement window in docs |
|---|---|---|---|---|
| Brazil | Pix | BRL | Pix code | Typically minutes; up to 30 minutes before marked failed |
| Brazil | TED | BRL | Memo code plus bank details (feature-gated) | Up to 7 days |
| Mexico | SPEI | MXN | CLABE | Typically minutes; up to 30 minutes before marked failed |
| Mexico | SPEI CLABE virtual account | MXN | Permanent CLABE per customer | Instant |
| Argentina | Transfers | ARS | CBU number | Typically minutes; up to 30 minutes before marked failed |
| Colombia | PSE | COP | Payment link | Typically minutes; up to 30 minutes before marked failed |
| Colombia | Bre-B virtual account | COP | Permanent Bre-B key | Final in seconds |
Two of these work differently from a quote-based payin. A SPEI CLABE virtual account gives a customer a permanent 18-digit CLABE, and any deposit creates a spei payin with no quote, at the live MXN rate. A Bre-B virtual account works the same way for Colombia. Both are active as soon as they are created, with no compliance or bank review step, and payers see a pooled recipient name rather than your customer's name. Bre-B deposits cannot be reversed.
What does the flow look like?
The flow has five stages: quote, create, instruct, detect and convert, deliver. A quote locks the rate and fees for 5 minutes, and the payin must be created in that window.
| Stage | What happens | Who acts | Signal |
|---|---|---|---|
| 1. Quote | Lock the method, amount, fees, and destination | You, by API | Quote id (qu_...), expires_at |
| 2. Create | Create the payin from the quote | You, by API | Payin id (pi_...), status processing |
| 3. Instruct | Show the Pix code or CLABE | You, in your app | pix_code or clabe |
| 4. Pay | The payer sends the transfer | The payer, in their bank | Deposit lands |
| 5. Convert and deliver | BlindPay converts and sends stablecoins | BlindPay | payin.update, then payin.complete |
A Pix quote looks like this:
Amounts are in minor units, so 10000 is R$100.00. On development instances every payin completes automatically about 30 seconds after creation, and sentinel amounts force a failed (66600) or refunded (77700) result for testing. The pix_code on development is a placeholder, so test the real payer flow on production. For the pattern in more detail, see how to accept Pix payments from abroad and how to accept SPEI payments in Mexico.
What compliance applies?
The customer receiving stablecoins must complete KYC or KYB before the payin can run, and Pix requires the payer's CPF or CNPJ. The payer's identity is checked against the quote, so a mismatch is caught early.
BlindPay's docs say every customer completes KYC before sending or receiving funds. KYC Standard is automated and takes about 60 seconds. KYC Enhanced and KYB Standard are manually reviewed and take 3 hours to 1 business day. See the payin quotes reference for the quote rules. On Pix, pix_allowed_tax_ids takes CPF (11 digits) or CNPJ (14 digits) and is validated against the Receita Federal check digits at quote time, so a bad tax ID fails immediately instead of at the bank. For Argentina, transfers_allowed_tax_id takes a CUIT or CUIL. For PSE, the payer's name, document, email, phone, and bank code are required.
A payin can also land on_hold for manual review for risk or compliance reasons. The docs say such a hold can take up to 30 days, and that a timeout without a decision fails the transaction. Your process should treat on_hold as a non-terminal state.
How are exchange rates handled?
The quote locks an exchange rate for 5 minutes. It returns the market rate (commercial_quotation) and the rate including BlindPay's fee (blindpay_quotation), so you can see the spread. Virtual account deposits convert at the live rate instead.
For a quote, set cover_fees to choose who pays: false deducts fees from the stablecoins the customer receives, and true adds them on top of what the sender pays. To show a live price while a payer types, the FX preview endpoint returns an indicative rate without creating a quote. Fees on the quote vary by rail and network and appear in the quote's breakdown, so read it rather than assuming a number. See BlindPay pricing.
Amounts have limits. Most currencies allow quotes from about $10 equivalent, but COP has a much higher minimum in raw minor units. MXN, COP, and ARS sender amounts must be whole currency units. The receiver's per-transaction KYC limit can be lower than the currency ceiling. Treat the quote as the source of truth for the range. If you pay out in a different currency than you collect, see collecting BRL and paying MXN.
What are common mistakes?
Most mistakes are small. They are listed here as a checklist:
- Creating the payin after the 5-minute quote expired. Generate a new quote.
- Sending a non-whole amount on a MXN, COP, or ARS sender quote. It is rejected with
request_amount_must_be_a_whole_currency_unit. - Leaving the payer's CPF or CNPJ out of a Pix quote.
- Assuming a payin can be cancelled. Once created, it stays
processinguntil it resolves. - Using OTC Pix without reading the rules. OTC Pix quotes are BRL-only, expire in 10 seconds, and wait until 23:59 BRT. If the deposit never arrives, a flat $100.00 penalty is added to the billing fee.
- Forgetting that TED needs the
ted_payinfeature, or that a Bre-B payin comes only from a Bre-B virtual account. - Treating a webhook as the only source of truth. Reconcile against the API too.
How do other providers compare for Latin American payins?
Other providers also list Pix or Latin American rails. Check each for your country and direction, because payin and payout coverage differ.
| Provider | What its public pages list (checked on 2026-11-05) | Source |
|---|---|---|
| Sphere | Pix among its listed rails; MXN listed without a named rail | spherepay.co |
| Conduit | Pix, SPEI, and TED among its listed rails | conduitpay.com |
| Bridge | Pix, SPEI, and Bre-B in its payment routes | apidocs.bridge.xyz |
For side-by-side detail, see the best stablecoin payin APIs of 2026.
Where does BlindPay fit?
BlindPay's strongest fit is teams sending stablecoin payouts into Latin America over Pix or SPEI, and it also takes payins on those rails. Compliance runs in the same API, and BlindPay combines a monthly plan with per-transaction fees disclosed in the live quote before you execute. A payin delivers to a customer-controlled wallet or to an optional BlindPay-managed wallet (beta).
Sources
- Banco Central do Brasil, Pix, checked on 2026-11-05: bcb.gov.br/en/financialstability/pix_en
- Banco Central do Brasil, Pix MED guide, checked on 2026-11-05: Guia_MED.pdf
- Banxico, SPEI, checked on 2026-11-05: banxico.org.mx
- Banxico, CEP proof of payment, checked on 2026-11-05: banxico.org.mx/cep
- BlindPay payins: /docs/payins
- BlindPay payin quotes: /docs/payin-quotes
- BlindPay virtual accounts: /docs/virtual-accounts
- BlindPay cut-off times: /docs/kb/cut-off-times
This article is for general information only and is not legal, tax, or financial advice.
FAQ
More payments articles
See all payments articlesStablecoins plus local rails: how cross-border payments actually land in Latin America
A stablecoin crosses the border in seconds, but the payment lands over Pix, SPEI, or another local rail. How that last mile works in Brazil and Mexico.
Marketplace payouts in Latin America: stablecoin rails for sellers in Brazil, Mexico, Colombia, and Argentina
How marketplaces pay sellers, creators, and vendors across Latin America with stablecoin settlement: supported rails (Pix, SPEI, PSE, Argentine transfers), the end-to-end payout workflow, API integration, and what changes for speed, minimums, and FX cost.
USDC to MXN over SPEI: how stablecoin payouts to Mexico work (2026)
How a stablecoin payout reaches a Mexican bank account over SPEI: CLABE structure, a worked check digit example, other identifiers, and Mexico's rules.