Skip to content

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)
RailPixSPEI
OperatorBanco Central do BrasilBanxico
Typical speed in BlindPay docsUp to 5 minutesUp to 10 minutes
Payer experienceScan a QR code or paste a Pix code in the bank appEnter an 18-digit CLABE in the bank app
What BlindPay returnsA pix_codeA clabe
Key checksPayer's CPF or CNPJ in payer_rules, validated against check digitsCLABE must match the payin; whole-peso amounts on quotes
Proof of paymentPix receipt from the payer's bankBanxico 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:

CountryRailCurrencyWhat the payer receivesSettlement window in docs
BrazilPixBRLPix codeTypically minutes; up to 30 minutes before marked failed
BrazilTEDBRLMemo code plus bank details (feature-gated)Up to 7 days
MexicoSPEIMXNCLABETypically minutes; up to 30 minutes before marked failed
MexicoSPEI CLABE virtual accountMXNPermanent CLABE per customerInstant
ArgentinaTransfersARSCBU numberTypically minutes; up to 30 minutes before marked failed
ColombiaPSECOPPayment linkTypically minutes; up to 30 minutes before marked failed
ColombiaBre-B virtual accountCOPPermanent Bre-B keyFinal 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.

StageWhat happensWho actsSignal
1. QuoteLock the method, amount, fees, and destinationYou, by APIQuote id (qu_...), expires_at
2. CreateCreate the payin from the quoteYou, by APIPayin id (pi_...), status processing
3. InstructShow the Pix code or CLABEYou, in your apppix_code or clabe
4. PayThe payer sends the transferThe payer, in their bankDeposit lands
5. Convert and deliverBlindPay converts and sends stablecoinsBlindPaypayin.update, then payin.complete

A Pix quote looks like this:

JSON
{
  "blockchain_wallet_id": "bw_000000000000",
  "currency_type": "sender",
  "cover_fees": false,
  "request_amount": 10000,
  "payment_method": "pix",
  "token": "USDC",
  "payer_rules": { "pix_allowed_tax_ids": ["12345678909"] }
}

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:

  1. Creating the payin after the 5-minute quote expired. Generate a new quote.
  2. 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.
  3. Leaving the payer's CPF or CNPJ out of a Pix quote.
  4. Assuming a payin can be cancelled. Once created, it stays processing until it resolves.
  5. 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.
  6. Forgetting that TED needs the ted_payin feature, or that a Bre-B payin comes only from a Bre-B virtual account.
  7. 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.

ProviderWhat its public pages list (checked on 2026-11-05)Source
SpherePix among its listed rails; MXN listed without a named railspherepay.co
ConduitPix, SPEI, and TED among its listed railsconduitpay.com
BridgePix, SPEI, and Bre-B in its payment routesapidocs.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

This article is for general information only and is not legal, tax, or financial advice.

FAQ

One API.
Multiple payment rails.

Blind Pay, Inc. (“BlindPay”) is a United States-based financial technology and payments infrastructure company, incorporated in the State of Delaware on May 2, 2024. BlindPay is duly registered as a Money Services Business (“MSB”) with the Financial Crimes Enforcement Network (“FinCEN”) under registration number 31000277566153. BlindPay is not a state-licensed money transmitter and does not, in its own capacity, engage in regulated money transmission services. All such regulated activities are conducted exclusively through, and under the licenses of, duly authorized financial institution partners. BlindPay's role is limited to providing financial technology, virtual account management, payment processing, and related payments infrastructure services that facilitate payment flows and account functionalities. These services are provided in coordination with its licensed partners and in compliance with applicable federal MSB requirements and relevant state regulatory frameworks.

Blind Pay, LLC (“BlindPay”) is a Delaware limited liability company formed on June 24, 2025. BlindPay is duly registered as a Money Services Business (“MSB”) with the Financial Crimes Enforcement Network (“FinCEN”) under registration number 31000318334247 and is listed in the Nationwide Multistate Licensing System (“NMLS”) under NMLS ID #2745309.

BLIND PAY SOCIEDADE PRESTADORA DE SERVIÇOS DE ATIVOS VIRTUAIS LTDA. (“BlindPay”) is a Virtual Asset Service Provider (“VASP”) operating in Brazil. The company is presently completing the regulatory adaptation process required of Virtual Asset Service Provider Companies (SPSAV) under Central Bank of Brazil Resolution No. 520/2025, and remains subject to the transitional regime set forth in Article 88 of that Resolution. Registered address: Avenida Princesa Isabel, nº 15, Sala 1405, Edifício Martinho de Freitas, Centro, Vitória/ES, 29010-361.

BlindPay is a stablecoin API that enables individuals and businesses to move money worldwide.