What happens between a USDC to BRL quote and reais landing over Pix: the locked quote, execution, the on-chain leg, review, and Pix delivery, step by step.
A USDC to Pix payout is five steps: quote, authorize, on-chain transfer, review, and Pix delivery. The quote locks the rate and every fee before any money moves. The on-chain leg confirms in seconds to a couple of minutes. Pix then delivers reais to the recipient's account instantly, any hour, any day.
This guide walks the path one step at a time, with the API field or webhook that tells you where a payout is.
expires_at, epoch milliseconds).pix) and PIX Safe (pix_safe) are instant and run 24/7. Pix payouts never wait for compliance documents.| Step | What happens | What you read |
|---|---|---|
| 1. Quote | Rate, fees, and the BRL receive amount are locked against a Pix bank account | Quote id, expires_at, receiver_amount |
| 2. Authorize and execute | You authorize the exact quoted amount and create the payout | Payout status: processing, payout.new webhook |
| 3. On-chain transfer | USDC moves from the funding wallet on the quoted network | tracking_transaction |
| 4. Review and conversion | Automatic screening runs; most payouts clear without a hold | tracking_payment, payout.update if the status changes |
| 5. Pix delivery | Reais land in the recipient's account over Pix | status: completed, payout.complete webhook |
The full field reference is in the payouts docs, and the quote fields are in payout quotes.
The quote is the only point where price is set. It is created against one approved Pix bank account and one network and token pair, and it returns:
commercial_quotation: the market exchange rate.blindpay_quotation: the rate net of BlindPay's fee.flat_fee and partner_fee_amount: the fixed and partner fees on this payout.sender_amount and receiver_amount: what leaves the funding wallet and what the Pix account receives, in minor units.cover_fees decides who pays. Leave it false and fees come out of the BRL the recipient gets. Set it true and fees are added on top of the USDC sent, so the recipient gets the full amount, which is the usual choice for payroll.
Because the fees are only fixed in the quote, this guide does not publish a rate card or a basis-point figure. To see the numbers for your volume, request a live quote on the USDC to BRL page or in the API, and see pricing for plans.
| Interval | What to expect |
|---|---|
| Quote to execute | Your choice, within the 5-minute quote window |
| Execute to on-chain confirmation | Seconds to a couple of minutes, by network |
| Confirmation to Pix credit | Pix is instant and runs 24/7 |
| Quote to settlement, end to end | Minutes |
Network choice changes the on-chain interval. On a production instance, USDC payouts run on Base, Polygon, Arbitrum, Ethereum, Stellar, and Solana. For every other rail, see stablecoin payout settlement times by country and rail.
BlindPay operates as a non-custodial payment processor for payout flows from customer-controlled wallets: you authorize the exact amount and BlindPay executes that single transaction. If a payout cannot be delivered after the stablecoins are collected, BlindPay refunds them to the quote's refund wallet, or to the sending wallet when none is set; on Pix and other non-USD local rails the refund is automatic, while USD payouts and payouts whose review times out are refunded after an operator review. Optional BlindPay-managed wallets (beta) are custodial when you choose that path.
On EVM networks the authorization is explicit: the quote returns a contract payload, and you call approve on the token contract for the exact quoted amount before executing the payout. BlindPay collects the USDC before it sends any reais, so a failed delivery is a refund of USDC already collected. Set refund_wallet_address on the quote to choose where that refund goes.
refund_wallet_address, or to the sending wallet if you did not set one. The payout stays processing until the refund confirms on-chain, then ends refunded.on_hold. Treat it as pending, not as an error, and do not retry. A review that times out ends the payout failed, and the refund goes through support@blindpay.com.A development instance runs the same API on testnets with the USDB test token and completes payouts on its own. Set the quote's request_amount to force an outcome:
request_amount | Payout ends |
|---|---|
66600 ($666.00) | failed |
77700 ($777.00) | refunded |
| Any other amount | completed |
The testing section of the payouts docs has the details, and stablecoin API sandbox vs production covers what a sandbox cannot show you before launch.