An OTC quote prices a large BRL to USDT on-ramp through an OTC desk, locks for 10 seconds, and lists fees as lines. When to pick it over a standard quote.
An OTC quote prices a large on-ramp through an over-the-counter desk instead of the standard rate. At BlindPay it covers BRL paid over Pix into USDT, starts at $5,000 USD equivalent, and locks for 10 seconds instead of 5 minutes. The rate equals the market rate, and fees appear as separate lines.
That makes it a different tool, not a premium version of the standard quote. It fits a backend that can act in seconds and a payer who will send the same day. It does not fit a confirmation screen where a person reads the number first.
Key takeaways
blindpay_quotation equals commercial_quotation. Fees live in flat_fee and partner_fee_amount.An OTC quote is a price agreed directly between two parties for a specific size, instead of a rate taken from a screen or an exchange order book. "Over the counter" just means bilateral.
Most of the FX market already works this way. The BIS Triennial Survey, which measured global FX trading at $9.6 trillion per day in April 2025, is a survey of OTC markets: dealers quoting clients directly. An OTC desk in a ramp does the same for a block of local currency going into stablecoins. It prices the whole amount at once, which is why it exists for large tickets.
The wider family of off-ramp and on-ramp models, including standalone OTC desks, is compared in types of crypto off-ramps. This article is about one specific quote type inside an API.
Set is_otc: true on a payin quote and eight things change.
| Standard payin quote | OTC payin quote | |
|---|---|---|
| Payment method | Any supported payin method | BRL over Pix |
| Token delivered | USDC or USDT, by network | USDT |
| Minimum | Per currency, R$10.00 for BRL | $5,000 USD equivalent |
| Quote window | 5 minutes | 10 seconds |
| Rate shown | blindpay_quotation is net of BlindPay's fee | blindpay_quotation equals commercial_quotation |
| Fee setting | Any currency_type and cover_fees | sender with cover_fees: false, or receiver with cover_fees: true |
| Pix deposit wait | Up to 30 minutes, with a reconciliation check | Until 23:59 Brasília time |
| Deposit never arrives | Payin marked failed | Payin fails, plus a flat $100.00 penalty |
Anything outside the OTC scope fails with QUOTES_OTC_NOT_SUPPORTED. The deposit windows come from the payins reference and the cut-off times reference.
Because the desk carries the market move for a large block while the price stands. The longer the window, the more the rate can drift, and a big ticket turns a small drift into real money. Who carries FX risk in a stablecoin payout works through the math: at 1% daily volatility, a 5-minute window carries about 6 bps of typical move, a 10-second window about 1 bp.
Ten seconds is a machine window, not a human one. Network latency, a page render, and a person reading the number would use most of it. So the design assumption is that your server requests the quote and creates the payin in the same request handler.
Because there are two clocks. The quote window is the time you have to accept the price by creating the payin. The deposit window is the time the payer has to send the Pix.
For OTC Pix payins, BlindPay waits for the deposit until 23:59 Brasília time (America/Sao_Paulo) on the same day, or the next day if the quote was created after that time. The Pix code's own expiration is set to that same cutoff. Pix itself runs 24 hours a day, every day, so the payer can send any time before the cutoff.
The $100.00 penalty is the other half of that deal. A large price was held for most of a day. If the money never comes, the party that did not send pays for the held price.
Use the decision rule below. Every condition in the first list should be true.
Use an OTC quote when:
Use a standard quote when:
USDC vs USDT for payments covers the token choice, and how to on-ramp BRL, MXN, ARS, and COP covers the standard quote for each local rail.
By the stablecoin amount received for the same reais. The rates are not comparable, because one includes the fee and the other does not.
Illustrative example. A payer sends R$100,000. The market rate is 5.40 BRL per USDT.
blindpay_quotation is 5.4270, a 0.5% margin. The wallet receives 100,000 / 5.4270 = 18,426.39 USDT.Break-even: 18,518.52 - 18,426.39 = 92.13 USDT. With fee lines below about 92.13 USDT, the OTC quote delivers more; above it, the standard quote does. Every number here is illustrative. Pull both quotes at the same moment and compare receiver_amount.
Crypto on-ramp fees explained covers how to read each fee line on a payin quote.
Do everything that needs a person before you request the quote.
POST /v1/instances/{instance_id}/payins/evm with the quote's id as payin_quote_id, in the same handler. The path name is historical and covers Pix too.pix_code, as copyable text or a QR code.payin.new, payin.update, and payin.complete are listed in the webhook events reference.The quote request looks like this, with request_amount in minor units, so R$100,000.00 is 10000000:
Two more checks before you go live. First, limits: the maximum on any payin quote is the receiver's per-transaction limit, $10,000 to $50,000 by KYC tier by default, raised through a limit increase. Second, the payer's own bank applies its own Pix limits, so confirm a large payer can send the full amount in one transfer. Failed and late deposits are covered in why crypto on-ramp deposits fail.
Inside its window, yes: you accept it by creating the payin before expires_at. That is the opposite of an indicative price, which only previews a rate. Indicative rate vs binding quote explains when to show each one.
Wholesale FX has rules for this distinction. The FX Global Code asks market participants to make clear whether the prices they provide are firm or merely indicative, and to disclose practices such as last look. Ask any OTC provider the same question in writing: once I accept inside the window, can you still reject or reprice?
For depth at large sizes on the payout side, run the quote-ladder test. The terms used here are defined in the on/off-ramp liquidity glossary.
How we know: OTC scope, windows, cutoffs, and the penalty come from BlindPay's payin quotes, payins, and cut-off times documentation.
If your BRL deposits regularly clear $5,000, read the OTC section of the payin quotes docs and wire the quote and payin calls into one server handler before testing a live Pix.
This article is general information, not legal, tax, or financial advice.
The five risks of a stablecoin card: peg, program failure, custody, smart contracts, and fraud, with the August 2026 incident and a safety checklist.
Stablecoin payments are as safe as the issuer, the network, the provider, and your own controls. The seven risks to check, with real incidents and fixes.
Five stablecoin APIs compared for cross-border payments: primary use case, pre-funding requirement, payout regions, and developer experience, plus how to choose by buyer scenario.