---
title: "How to collect payments from Latin America in stablecoins (Pix and SPEI)"
seoTitle: "Pix stablecoin: collect payments from Brazil and Mexico"
description: "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."
date: "2026-11-05"
category: "payments"
author: "BlindPay Team"
howto:
  name: "How to collect a Pix or SPEI payment and receive stablecoins"
  steps:
    - name: "Verify the customer who will receive the stablecoins"
      text: "Create the customer and finish KYC or KYB so their status is approved. Add the destination wallet, either a blockchain wallet they control (bw_) or an optional BlindPay-managed wallet (bl_)."
    - name: "Create a payin quote"
      text: "Send the amount, the payment method (pix or spei), the token, and the destination wallet. For Pix, add the payer's CPF or CNPJ in payer_rules. The quote locks the rate and fees for 5 minutes."
    - name: "Create the payin from the quote"
      text: "Post the quote id to the payins endpoint within 5 minutes. The response carries the Pix code or the CLABE to show the payer."
    - name: "Show the payer the instructions"
      text: "Display the Pix code as copyable text or a QR code, or show the CLABE for a SPEI transfer. The payer pays from their own bank app and never touches a wallet."
    - name: "Wait for the webhook"
      text: "BlindPay detects the deposit, converts it, and delivers stablecoins to the wallet. Listen for payin.update and payin.complete, and read the status field in the payload."
    - name: "Reconcile and handle exceptions"
      text: "Match each completed payin to your invoice or order. Treat failed and refunded as terminal, and check on_hold payins for a manual review."
faq:
  - q: "Can I collect Pix payments and receive USDC?"
    a: "Yes. With BlindPay you create a payin quote with the pix payment method, create the payin, and show the payer a Pix code. BlindPay detects the deposit, converts the BRL, and delivers USDC or USDT to the destination wallet, depending on the chain. The payer only uses their Brazilian bank app."
  - q: "Can I collect SPEI payments and settle in stablecoins?"
    a: "Yes. You can create a spei payin from a quote, which returns a CLABE for the payer, or give a customer a permanent SPEI CLABE virtual account so any deposit creates a payin automatically. BlindPay converts the MXN at the live rate and delivers stablecoins to the linked wallet."
  - q: "Does the payer need a crypto wallet to pay by Pix or SPEI?"
    a: "No. The payer sends a normal bank transfer from their own app, using a Pix code or a CLABE. The wallet belongs to the business or customer receiving stablecoins. The payer never needs to buy, hold, or send any crypto."
  - q: "How long does a Pix or SPEI payin take to settle?"
    a: "BlindPay's cut-off times reference lists Pix as up to 5 minutes and SPEI as up to 10 minutes. The payins reference says BlindPay waits up to 30 minutes before marking a Pix or SPEI payin failed. TED, a Brazilian wire-style rail, can take up to 7 days."
  - q: "Which Latin American payin rails does BlindPay support?"
    a: "BlindPay payins cover Pix and TED in Brazil, SPEI in Mexico (including CLABE virtual accounts), Transfers in Argentina, and PSE and Bre-B in Colombia. TED needs a feature flag on your instance, and Bre-B payins are created when a deposit lands on a Bre-B virtual account, not from a quote."
  - q: "What are common mistakes when collecting from Brazil and Mexico?"
    a: "Common mistakes include creating the payin after the 5-minute quote expires, sending a non-whole peso amount on a MXN quote, leaving out the payer's CPF or CNPJ on Pix, and assuming a payin can be cancelled. Once created, a payin cannot be cancelled and stays processing until it resolves."
---

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](/resources/more/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](https://www.bcb.gov.br/en/financialstability/pix_en), and its [MED guide](https://www.bcb.gov.br/content/estabilidadefinanceira/pix/Guia_MED.pdf) covers the special returns mechanism (checked on 2026-11-05). Banxico describes SPEI on its [interbank electronic payments page](https://www.banxico.org.mx/services/interbanking-electronic-payme.html) and publishes proof of payment through its [CEP service](https://www.banxico.org.mx/cep/) (checked on 2026-11-05). For a rail-by-rail comparison, read [Pix vs SPEI](/resources/more/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](/docs/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](/docs/virtual-accounts) 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:

```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](/resources/more/accept-pix-payments-from-abroad) and [how to accept SPEI payments in Mexico](/resources/more/accept-spei-payments-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](/docs/payin-quotes) 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](/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](/resources/more/brl-to-mxn-cross-rate-payin-payout).

## 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.

| 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](https://spherepay.co) |
| Conduit | Pix, SPEI, and TED among its listed rails | [conduitpay.com](https://conduitpay.com) |
| Bridge | Pix, SPEI, and Bre-B in its payment routes | [apidocs.bridge.xyz](https://apidocs.bridge.xyz) |

For side-by-side detail, see the [best stablecoin payin APIs of 2026](/resources/more/best-stablecoin-payin-apis-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](https://www.bcb.gov.br/en/financialstability/pix_en)
- Banco Central do Brasil, Pix MED guide, checked on 2026-11-05: [Guia_MED.pdf](https://www.bcb.gov.br/content/estabilidadefinanceira/pix/Guia_MED.pdf)
- Banxico, SPEI, checked on 2026-11-05: [banxico.org.mx](https://www.banxico.org.mx/services/interbanking-electronic-payme.html)
- Banxico, CEP proof of payment, checked on 2026-11-05: [banxico.org.mx/cep](https://www.banxico.org.mx/cep/)
- BlindPay payins: [/docs/payins](/docs/payins)
- BlindPay payin quotes: [/docs/payin-quotes](/docs/payin-quotes)
- BlindPay virtual accounts: [/docs/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.*
