OTC quotes vs standard quotes for large BRL on-ramps: how a 10-second quote works

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

  • OTC quotes at BlindPay: BRL over Pix in, USDT out, $5,000 USD equivalent minimum, 10-second window.
  • The 10 seconds are for accepting the price. The payer has until 23:59 Brasília time to send the Pix.
  • On an OTC quote, blindpay_quotation equals commercial_quotation. Fees live in flat_fee and partner_fee_amount.
  • If an OTC deposit never arrives, a flat $100.00 penalty is added to the quote's billing fee.
  • Compare an OTC quote and a standard quote by the USDT received for the same reais, never by the rate alone.

What is an OTC quote?

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.

How is a BlindPay OTC quote different from a standard payin quote?

Set is_otc: true on a payin quote and eight things change.

Standard payin quoteOTC payin quote
Payment methodAny supported payin methodBRL over Pix
Token deliveredUSDC or USDT, by networkUSDT
MinimumPer currency, R$10.00 for BRL$5,000 USD equivalent
Quote window5 minutes10 seconds
Rate shownblindpay_quotation is net of BlindPay's feeblindpay_quotation equals commercial_quotation
Fee settingAny currency_type and cover_feessender with cover_fees: false, or receiver with cover_fees: true
Pix deposit waitUp to 30 minutes, with a reconciliation checkUntil 23:59 Brasília time
Deposit never arrivesPayin marked failedPayin 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.

Why does an OTC quote last only 10 seconds?

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.

Why does the payer get until 23:59 when the quote lasts 10 seconds?

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.

When should you use an OTC quote instead of a standard one?

Use the decision rule below. Every condition in the first list should be true.

Use an OTC quote when:

  • The payer sends BRL over Pix and you want USDT delivered.
  • The deposit is $5,000 USD equivalent or more.
  • Your backend can create the payin within 10 seconds of the quote, with no human step in between.
  • The payer will reliably send the full amount the same day.
  • You prefer the fee as its own line rather than inside the rate.

Use a standard quote when:

  • You need USDC, or the payer uses SPEI, Transfers 3.0, PSE, ACH, or another rail.
  • The deposit is under $5,000 equivalent.
  • A person needs to review the amount before confirming. Five minutes covers that; ten seconds does not.
  • The payer's timing is uncertain, and a $100.00 penalty for a no-show is not acceptable.

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.

How do you compare an OTC quote with a standard quote?

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.

  • Standard quote: the fee is inside the rate. Say blindpay_quotation is 5.4270, a 0.5% margin. The wallet receives 100,000 / 5.4270 = 18,426.39 USDT.
  • OTC quote: the rate is the market rate, 5.40. Gross: 100,000 / 5.40 = 18,518.52 USDT, minus the fee lines.

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.

How do you build for a 10-second window?

Do everything that needs a person before you request the quote.

  1. Collect the amount and payer details first. Validate the payer, the amount, and the destination wallet before pricing anything.
  2. Request the OTC quote server-side.
  3. Create the payin immediately. Call 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.
  4. Show the Pix code. The payin response carries pix_code, as copyable text or a QR code.
  5. Re-quote on a miss. If creating the payin fails because the quote expired, request a new quote. Never retry with the old id.
  6. Track the deposit by webhook. 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:

JSON
{
  "blockchain_wallet_id": "bw_000000000000",
  "currency_type": "sender",
  "cover_fees": false,
  "request_amount": 10000000,
  "payment_method": "pix",
  "token": "USDT",
  "is_otc": true
}

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.

Is an OTC quote binding?

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.

What to do next

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.

FAQ