---
title: "How to evaluate an on/off-ramp provider's liquidity: a 10-point scorecard"
seoTitle: "On/off-ramp liquidity scorecard: 10 checks for providers"
description: "Score any on/off-ramp provider's liquidity from 0 to 20: binding quotes, lock length, expiry, fees, depth, pre-funding, custody, and pricing."
date: "2026-10-09"
updated: "2026-10-09"
category: "payments"
author: "BlindPay Team"
faq:
  - q: "How do I evaluate an on-ramp or off-ramp provider's liquidity?"
    a: "Score ten things from 0 to 2: binding quotes, rate lock length, slippage, settlement estimates, expiry behavior, itemized fees, rate stability across sizes, pre-funding, custody model, and pricing transparency. Collect evidence from docs, a real quote response, and a test, not from a sales deck. A total of 16 or more out of 20 is production ready."
  - q: "What is a good score on the liquidity scorecard?"
    a: "16 to 20 means the provider can carry production payouts. 12 to 15 means pilot it on one corridor with a volume cap while you close the gaps. Under 12, keep production volume elsewhere. A 0 on binding quotes or on expiry behavior disqualifies a provider regardless of the total, because both mean the rate you see is not the rate you get."
  - q: "How can I test an off-ramp's liquidity depth myself?"
    a: "Request quotes for the same corridor at four sizes, such as $500, $5,000, $50,000, and $250,000, within the same minute, and compare the effective rate after fees. Repeat at three times of day. A spread that stays flat across sizes shows real depth. A spread that widens fast shows inventory running out early."
  - q: "Why do itemized fees matter for liquidity?"
    a: "Because a provider can hide a thin market inside the rate. If the quote shows the market rate, the provider's rate, and each fee line separately, you can see whether a worse price comes from the market or from a wider margin. A single all-in number makes depth problems invisible until you compare delivered amounts."
  - q: "Does the custody model affect liquidity?"
    a: "It affects who holds funds while liquidity is being sourced. A custodial provider holds your balance before and after conversion. A non-custodial payout flow leaves stablecoins in your wallet until execution and pulls only the quoted amount. The second keeps provider failure risk away from idle balances, which is why custody is a scorecard row."
---

To evaluate an on/off-ramp provider's liquidity, score ten things from 0 to 2: binding quotes, lock length, slippage, settlement estimates, expiry behavior, itemized fees, rate stability across sizes, pre-funding, custody, and pricing transparency. A total of 16 or more out of 20 means the provider is ready for production payouts.

Liquidity is hard to see from outside. Every provider says it has deep books. The scorecard turns that claim into evidence you can collect in a week: docs, one real quote response, and a quote-ladder test.

**Key takeaways**

- Ten rows, 0 to 2 points each, 20 maximum.
- 16 or more: production. 12 to 15: pilot one corridor with a cap. Under 12: keep production volume elsewhere.
- A 0 on binding quotes (row 1) or expiry behavior (row 5) disqualifies a provider, whatever the total.
- Score from evidence: a docs page, an API response, or a test you ran. Never from a sales claim.
- Run the scorecard on every provider yourself, BlindPay included. The rows below are designed to be checked.

## What does the 10-point liquidity scorecard measure?

It measures whether the rate you see is the rate you get, at the size you need, without parking money first. Each row is one observable behavior.

| # | Question | 2 points | 1 point | 0 points |
| --- | --- | --- | --- | --- |
| 1 | Are quotes binding? | Executes at the quoted rate and fees, documented | Binding only on some corridors | Indicative only, settles at market |
| 2 | How long is the rate locked? | Minutes, stated per product | Seconds, or unstated but consistent | No lock |
| 3 | Is there slippage inside the window? | Zero by design, documented | Tolerance band you must accept | Settles at whatever the market does |
| 4 | Is settlement time published per rail? | Estimate per rail, plus failure and refund rules | Vague ranges | Nothing published |
| 5 | What happens after expiry? | Rejected with a distinct error, nothing moves | Re-priced, but only with your consent | Silently executed at a new rate |
| 6 | Are fees itemized in the quote? | Market rate, provider rate, and every fee line | All-in amount plus a total fee | Only the final amount |
| 7 | Does the rate hold across sizes? | Spread flat from $500 to $250,000 | Widens gradually | Widens fast or quotes fail |
| 8 | Is pre-funding required? | No, each payout funds at execution | Partial buffer or collateral | Local balances per corridor |
| 9 | Who holds funds between steps? | Funds stay in your wallet until execution | Custodial with segregation evidence | Custodial with no detail |
| 10 | Is pricing transparent, with no volume floor? | Plans published, fees shown per quote, no floor | Published but with a minimum volume | Negotiated only |

A few definitions, so every scorer reads the rows the same way. A **binding quote** is a price you can execute at, with an id and an expiry. **Slippage** is the gap between the quoted rate and the settled rate. **Depth** is how much volume a provider can convert before its price gets worse. The [on/off-ramp liquidity glossary](/resources/more/onramp-offramp-liquidity-glossary) has the full set.

## How do you score each row without taking the provider's word for it?

Collect one piece of evidence per row, and write down where it came from. Three sources cover all ten rows.

**Docs (rows 2, 4, 8, 9, 10).** Look for stated quote windows, per-rail settlement estimates, how payouts are funded, who holds keys, and a public pricing page. "Contact sales" is not evidence.

**One real quote response (rows 1, 3, 5, 6).** Request a quote through the API and read the fields. You want an id, an expiry timestamp, the market rate next to the provider's rate, and each fee line. Then execute one quote after it expires and record the exact error. [Indicative rate vs binding quote](/resources/more/indicative-rate-vs-binding-quote-api) shows how to tell the two apart in a response.

**A test (row 7).** Run the quote ladder: $500, $5,000, $50,000, and $250,000 on the same corridor within the same minute, at three times of day. [How to test an off-ramp's liquidity depth](/resources/more/test-offramp-liquidity-depth) has the protocol and the logging table.

Public rules are a useful template for row 6. The US CFPB's remittance rule lists what a pre-payment disclosure must show: transfer amount, fees, total, exchange rate, and total to recipient ([12 CFR 1005.31](https://www.law.cornell.edu/cfr/text/12/1005.31)). The Financial Stability Board's 2027 transparency target asks for the same core list, total cost including the FX rate, expected time to deliver, payment tracking, and terms of service ([FSB targets](https://www.fsb.org/uploads/P131021-2.pdf)). A quote that shows less than a consumer remittance receipt should not score 2.

## What total should you require before routing production payouts?

Require 16 or more, with no 0 on rows 1 or 5.

- **16 to 20: production.** The provider binds its prices, shows its costs, and holds up at size.
- **12 to 15: pilot.** Route one corridor with a monthly volume cap, close the gaps in writing, and re-score in 30 days.
- **Under 12: not yet.** Keep production volume elsewhere.

Rows 1 and 5 are hard gates because both decide whether the confirmation screen tells the truth. If quotes are indicative, or an expired quote executes at a new price, your user can confirm one amount and receive another. No total makes up for that.

## Illustrative example: how do two providers compare on the scorecard?

Illustrative example. Two anonymous providers, scored by a payments team after a one-week evaluation.

| Row | Provider A | Provider B |
| --- | --- | --- |
| 1. Binding quotes | 2 | 1 |
| 2. Lock length | 2 | 1 |
| 3. Slippage | 2 | 1 |
| 4. Settlement published | 2 | 1 |
| 5. Expiry behavior | 2 | 2 |
| 6. Itemized fees | 2 | 0 |
| 7. Rate across sizes | 1 | 2 |
| 8. Pre-funding | 2 | 0 |
| 9. Custody | 2 | 1 |
| 10. Pricing | 2 | 1 |
| **Total** | **19** | **10** |

Provider A: 2 + 2 + 2 + 2 + 2 + 2 + 1 + 2 + 2 + 2 = 19. Production ready. The spread widened from 0.48% at $5,000 to 0.62% at $250,000, so it lost one point on row 7. Worth a note in the contract, not a blocker.

Provider B: 1 + 1 + 1 + 1 + 2 + 0 + 2 + 0 + 1 + 1 = 10. Its depth was excellent, flat across all four sizes. But it only returned an all-in amount, and it required a local balance per corridor. Deep liquidity you have to pre-fund and cannot see the price of is still a 10.

That's the useful part of a scorecard. It stops one strong row from carrying a weak provider.

## How does BlindPay score on each row?

Here is what BlindPay documents for each row, so you can check it yourself. Score it with the same rules as everyone else.

| # | What BlindPay documents | Where |
| --- | --- | --- |
| 1 | A payout quote locks the exchange rate and fee, and a payout can only execute against a valid, unexpired quote | [Payout quotes](/docs/payout-quotes) |
| 2 | Quotes expire 5 minutes after creation by default; OTC payin quotes expire in 10 seconds; some payout rails can return a shorter window, so `expires_at` is the source of truth | [Cut-off times](/docs/kb/cut-off-times) |
| 3 | The fee is locked at quote creation, so nothing changes between quote and execution | [Billing](/docs/learn/billing) |
| 4 | Estimated arrival per rail, for example Pix and SPEI instant, ACH about 2 business days, SWIFT about 5 | [Bank accounts](/docs/bank-accounts) |
| 5 | An expired quote is rejected with 400 `QUOTES_EXPIRED`, and nothing moves | [API reference](https://api.blindpay.com/reference) |
| 6 | `commercial_quotation` (market rate), `blindpay_quotation` (rate net of BlindPay's fee), `flat_fee`, `partner_fee_amount`, `billing_fee_amount`, `sender_amount`, `receiver_amount` | [Payout quotes](/docs/payout-quotes) |
| 7 | Measure it: run the quote ladder on your corridor | [Depth test](/resources/more/test-offramp-liquidity-depth) |
| 8 | No pre-funding: the quote is funded when you execute it, from the funding wallet | [Payouts](/docs/payouts) |
| 9 | See the custody note below | [Payouts: funding source](/docs/payouts) |
| 10 | Published plans, no volume floor; per-transaction fees vary by rail and network and are disclosed in the live quote, with no static rate card | [Pricing](/pricing) |

On row 9, the exact wording matters. 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.

Row 7 is the one no docs page can answer for you. Depth is a property of a corridor at a moment, so run the ladder on the corridors you actually pay into.

## Where do providers usually lose points?

Five patterns cost the most points in practice:

- **Indicative rates on the screen, market rates at settlement.** Rows 1, 3, and 5 all drop. [Stablecoin FX slippage and live quotes](/resources/more/stablecoin-fx-slippage-live-quotes) shows how to spot it after the fact.
- **The margin inside one number.** Row 6. If you cannot compare the provider's rate with the market rate in the same response, use a public reference such as the ECB's euro reference rates, published around 16:00 CET on working days and "for information purposes only" ([ECB](https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html)).
- **A depth cliff.** Row 7. Fine at $5,000, broken at $250,000.
- **A local balance per corridor.** Row 8. [What no pre-funding means](/resources/more/no-pre-funding-stablecoin-payouts) covers the cost of that capital.
- **"Contact us" pricing.** Row 10.

A broader buyer checklist, covering corridors, licensing, and API quality, lives in [how to choose an on/off-ramp provider](/resources/more/how-to-choose-on-off-ramp-provider). This scorecard is the liquidity slice of it. When you write the result into an evaluation, the [30-day stablecoin API evaluation plan](/resources/more/stablecoin-api-30-day-evaluation-plan) gives you the week-by-week structure, and [handling expired quotes in code](/resources/more/handle-expired-quotes-typescript-python) helps you run the row 5 test.

## What to do next

Copy the table above into a sheet, request one live quote from each provider you are considering, and score rows 1, 3, 5, and 6 from the response alone. For BlindPay, the [payout quotes docs](/docs/payout-quotes) show every field you need for those four rows.
