---
title: "Stablecoin on-ramp limits: payin minimums, maximums, and what caps a deposit"
seoTitle: "Stablecoin on-ramp limits: payin minimums and maximums"
description: "What caps a stablecoin on-ramp payin: per-currency minimums and maximums, the receiver's KYC limit, method caps, OTC floors, and how to check room left."
date: "2026-10-06"
updated: "2026-10-06"
category: "payments"
author: "BlindPay Team"
faq:
  - q: "What is the minimum amount for a stablecoin on-ramp payin?"
    a: "It depends on the currency. On BlindPay, payin quotes enforce a minimum per currency, about $10 or the local equivalent for USD, BRL, MXN, and ARS, while COP's minimum is $2,000.00 in pesos because each peso is worth so little. The thresholds can change, so read the LIMITS_AMOUNT_OUT_OF_RANGE error instead of hardcoding them."
  - q: "What is the maximum I can on-ramp in one payin?"
    a: "The lower of two numbers: the currency ceiling on the payin quote, and the receiving customer's per-transaction limit. The currency ceiling is about 100,000 units of the local currency, and default per-transaction limits run from $10,000 to $50,000 by KYC tier. For BRL, the R$100,000 ceiling can bind before a business customer's limit does."
  - q: "Do payin and payout limits share the same allowance?"
    a: "No. Each BlindPay customer has separate limits for payins and payouts, both counted on the stablecoin amount. Receiving a large deposit doesn't use any payout room, and the reverse. The remaining-limits endpoint returns the two side by side, as what is left today and this month in USD cents."
  - q: "Why was my MXN payin quote rejected for cents?"
    a: "MXN, COP, and ARS payins settle in whole currency units. A sender-denominated quote with a fractional amount, such as 100.50 pesos, fails with request_amount_must_be_a_whole_currency_unit. If you quote by the stablecoin amount instead, BlindPay rounds the computed peso amount down to a whole unit, so the payer-facing amount can come out slightly lower."
  - q: "Do virtual account deposits have a minimum?"
    a: "No quote minimum applies. Deposits into a BlindPay virtual account skip the payin quote thresholds, so any positive amount forms a payin, including a $0.01 account-verification micro-deposit, and every deposit delivers at least $0.01 of stablecoin. What changes with size is fee timing: below $100.00 the fee goes to your invoice."
  - q: "What is the minimum for an OTC on-ramp quote?"
    a: "On BlindPay, OTC payin quotes need at least $5,000 in USD equivalent and fail with PAYOUTS_AMOUNT_BELOW_MINIMUM below that. They are BRL only, deliver USDT only, and expire in 10 seconds instead of 5 minutes. If the Pix deposit for an OTC payin never arrives, a flat $100.00 penalty is added to the quote's billing fee."
---

A stablecoin on-ramp payin is capped by five things at once: a per-currency minimum and maximum, the receiving customer's per-transaction limit, their remaining daily and monthly room, payment method caps, and the payer's own rail. The tightest one wins. On BlindPay, the payin quote checks them before any money moves.

Off-ramp limits get all the attention because payouts are where teams feel them. On-ramps have their own set, and they're shaped differently: the payer is often a third party, the currency floors vary wildly, and some deposits skip quotes entirely. [Stablecoin off-ramp limits](/resources/more/stablecoin-off-ramp-limits) covers the KYC tiers and how to raise them. This page is the payin side.

**Key takeaways**

- The payin quote enforces a minimum and a maximum per currency. COP's floor is far higher in pesos than the others.
- The maximum that applies is the lower of the currency ceiling and the receiver's per-transaction limit.
- Payin and payout limits are separate, both counted on the stablecoin amount.
- Remaining room resets on UTC calendar days and months, and only completed payins count.
- MXN, COP, and ARS payins settle in whole pesos.
- OTC payins start at $5,000 and expire in 10 seconds. Virtual account deposits skip quote minimums.

## What limits apply to an on-ramp payin?

Five layers. Here's where each one lives and how it fails.

| Layer | Example on BlindPay | How it fails |
| --- | --- | --- |
| Currency minimum and maximum | About $10 to 100,000 units per quote; COP minimum $2,000.00 | Quote rejected with `LIMITS_AMOUNT_OUT_OF_RANGE` |
| Receiver's per-transaction limit | $10,000 to $50,000 by default, by KYC tier | Same error, naming the range that applied |
| Receiver's daily and monthly room | Remaining amounts from the limits endpoint | Quote rejected once room runs out |
| Payment method caps | `ach` and `wire` without a virtual account capped at $500,000; `rtp` always | Quote rejected |
| Payer's rail | Same Day ACH $1 million per payment; RTP up to $10 million | Payer's bank delays or blocks the transfer |

The first four are enforced by the quote ([cut-off times](/docs/kb/cut-off-times), [customers](/docs/learn/customers)). The fifth sits at the payer's bank, outside any provider. Nacha's Same Day ACH rule has "a $1 million per payment limit", and Nacha says it will "increase tenfold from $1 million to $10 million" on September 17, 2027 ([Nacha](https://www.nacha.org/content/abcs-ach)). RTP lets a bank "send up to $10 million per transaction" ([The Clearing House](https://www.theclearinghouse.org/payment-systems/rtp)). The payer's own bank can still apply a lower limit to its customers.

## What are the per-currency minimums and maximums?

BlindPay's payin quotes enforce these bounds, in the currency the payer sends ([cut-off times](/docs/kb/cut-off-times)):

| Currency | Minimum | Maximum |
| --- | --- | --- |
| USD | $10.00 | $100,000 |
| BRL | R$10.00 | R$100,000 |
| MXN | $10.00 | $100,000 |
| ARS | $10.00 | $100,000 |
| EUR | €10.00 | €100,000 |
| COP | $2,000.00 | $100,000 |

Two cautions. The docs say thresholds "can change", so treat the table as a reference, not constants for your code. And the indicative preview endpoint, `POST /payin-quotes/fx`, has its own lower floor of $5.00, so a preview can show a price for an amount the real quote will reject ([payin quotes](/docs/payin-quotes)). Validate against the quote.

Why is COP different? A peso is worth a fraction of a cent, so a floor that looks huge in pesos is small in dollars. Notice the maximum: 100,000 units in every currency. That's very different value depending on which currency you collect.

## Which maximum wins: the currency ceiling or the KYC limit?

The lower one. The docs are direct about it: the maximum that applies to a quote "is the receiver's per-transaction limit", which can sit below the currency ceiling.

Note whose limit it is. On a payin, the limit belongs to the receiving customer, the one whose wallet gets the stablecoins, not to whoever sends the bank transfer. A platform collecting from 300 payers into one customer's wallet hits that one customer's daily and monthly room 300 times.

Limits are counted on the stablecoin amount, and payins and payouts are separate allowances. A business that receives $90,000 on Monday still has its full payout room on Tuesday.

## How do you check how much payin room is left?

Call the remaining-limits endpoint before a large collection ([customers](/docs/learn/customers)):

```bash
GET /v1/instances/{instance_id}/limits/customers/{customer_id}
```

It returns `payin` and `payout`, each with `daily` and `monthly`, in USD cents. Four details matter:

1. **It's what's left, not what's used.** The limit minus completed volume in the window.
2. **Windows are UTC calendar days and months.** Not rolling 24 hours or 30 days.
3. **Only `completed` payins count.** A deposit still processing doesn't reduce the number yet.
4. **It can go negative.** For example, after a [limit increase](/docs/learn/limit-increase) is approved for less than the customer already used.

Point three is the trap. Ten payins in flight at once can each pass the quote check and together exceed the day. Check the remaining room, subtract what you already have processing, and then quote.

## Why does an MXN, COP, or ARS payin reject cents?

Because those rails settle in whole currency units. With `currency_type: "sender"`, the `request_amount` for MXN, COP, or ARS must be a multiple of 100 minor units. `10000` works. `10050` fails with `request_amount_must_be_a_whole_currency_unit` ([payin quotes](/docs/payin-quotes)).

If you quote by the stablecoin side instead, `currency_type: "receiver"`, the quote accepts any amount but rounds the computed peso amount down to a whole unit. The payer sees a whole-peso number, slightly lower than a straight conversion. Show that rounded `sender_amount` to the payer, not your own math. [How to on-ramp local currency in Latin America](/resources/more/how-to-on-ramp-local-currency-latin-america) covers what each rail shows the payer.

## What changes for OTC quotes and virtual account deposits?

Both change the floor, in opposite directions.

**OTC payins** raise it. On BlindPay, an OTC payin quote is BRL only, delivers USDT only, needs at least $5,000 in USD equivalent, and expires in 10 seconds. The Pix deposit window runs until 23:59 BRT that day, and if the deposit never arrives, a flat $100.00 penalty is added to the quote's billing fee ([payins](/docs/payins)). [OTC vs standard quotes](/resources/more/otc-quote-vs-standard-quote) explains when that trade is worth it.

**Virtual account deposits** remove it. They skip the quote minimums entirely: any positive amount forms a payin, including a $0.01 micro-deposit, and every deposit delivers at least $0.01 of stablecoin. Fees still apply. Below $100.00, BlindPay's fee is accrued to your invoice; at $100.00 or more, it's deducted at the time of the transaction ([virtual account fees](/resources/more/virtual-account-fees)).

## Illustrative example: which cap does a R$150,000 collection hit?

Illustrative example. A Brazilian customer of a marketplace, verified as KYB Standard, wants to on-ramp R$150,000 by Pix in one go. Assume an illustrative rate of 5.40 BRL per USD.

| Cap | Limit | In BRL at 5.40 | Binds? |
| --- | --- | --- | --- |
| BRL currency ceiling | R$100,000 | R$100,000 | Yes, first |
| KYB Standard per transaction | $30,000 | R$162,000 | Not for this amount |
| KYB Standard daily | $100,000 | R$540,000 | No |

The currency ceiling binds before the KYC limit. R$150,000 doesn't fit one standard quote. The options: two payins of R$75,000, each with its own quote, or an OTC quote if the size and the 10-second window suit the flow. Before sending the second payin, check remaining daily room, since the first one only counts once it completes.

Same marketplace, collecting in MXN instead: 100,000 pesos at an illustrative 18.50 MXN per USD is about $5,405. The per-currency ceiling bites much earlier in value terms. Plan collection sizes per currency, not as one dollar number.

## How do you keep limits from breaking a collection flow?

Three habits.

- **Validate before you show payment instructions.** Request the quote first. If it fails on range, tell the payer the allowed range from the error, then let them change the amount.
- **Pre-check large days.** Pull remaining room every morning for customers with big expected collections and file increases days ahead.
- **Split on purpose, not on failure.** If a currency ceiling binds, design the split into the flow instead of retrying after a rejection.

[Why crypto on-ramp deposits fail](/resources/more/why-crypto-on-ramp-deposits-fail) covers the failures that happen after the quote passes. And who earns what on the conversion itself is in [how on/off-ramp providers make money](/resources/more/how-onramp-offramp-providers-make-money).

## What to do next

On a development instance, request a payin quote one unit below and one unit above the bounds for each currency you collect, and log the error each returns. Then call the remaining-limits endpoint for a test customer. Ten minutes of that tells you exactly what your payment form must validate.
