What eight swap providers charge
Every provider this site talks to, asked for a price on the same transfer at the same moment. What each pays out, what it keeps against the open market, the smallest and largest it will accept — and, further down, what each one says when a transfer is below its floor, which turns out to be eight different sentences for the same word.
0.05 BTC into USDT (TRC-20)
| Provider | Pays out | Keeps | Takes from | Up to |
|---|---|---|---|---|
| Changelly | 4,140.087801 | 0.80% | 0.00035943 | 539.13036778 |
| LetsExchange | 4,130.919224 | 1.02% | 0.00100000 | 510.00 |
| StealthEX | 4,129.621993 | 1.05% | 0.00014790 | no stated limit |
| SimpleSwap | 4,126.062041 | 1.13% | 0.00015910 | no stated limit |
| ChangeNOW | 4,119.300861 | 1.30% | 0.00015610 | no stated limit |
| GhostSwap | 4,116.205552 | 1.37% | 0.00035943 | 539.13036778 |
| SideShift | 4,074.25245814 | 2.38% | 0.00034217 | 0.71883612 |
“Keeps” is the gap between what a provider pays and what the same amount is worth at mid-market, taken from the public ticker endpoints of several large exchanges. Every provider builds a margin into its rate; none of them states it. The point of this column is that it is stated.
Would not price it at all
- fixedfloatFixedFloat price: HTTP 401 {"code":"501","msg":"Not have permission","data":null}
A provider refusing a perfectly ordinary transfer is worth publishing rather than quietly dropping. It is the difference between a list of who is available and a list of who answers.
The same refusal, in eight vocabularies
The same request again at 0.00002 BTC — far below every provider’s minimum. Each one refuses, and no two refuse alike. Some name the floor, some name the pair, one answers with a JSON-RPC error code and one with a status that has nothing to do with amounts.
- fixedfloatFixedFloat price: HTTP 401 {"code":"501","msg":"Not have permission","data":null}
- ghostswapGhostSwap quote: HTTP 400 Amount is below the minimum for btc → usdtrx. Minimum: 0.00035943 btc.
- changellyChangelly getExchangeAmount [-32602]: Invalid amount for pair btc->usdtrx. Minimal amount is 0.00035943 btc
- changenowChangeNOW estimate: HTTP 400 Out of min amount
- simpleswapSimpleSwap /estimates?tickerFrom=btc&networkFrom=btc&tickerTo=usdt&networkTo=trx&amount=0.00002&fixed=false: HTTP 422 Amount does not fall within the range. Min: 0.0001591, max: null — Unprocessable Entity
- stealthexStealthEX /rates/estimated-amount: HTTP 400 InvalidAmount: Amount is out of range
- letsexchangeLetsExchange estimate: amount below the pair's floor. Minimum: 0.001
This matters to anybody integrating more than one of them. A router has to tell “too small” apart from “wrong coin” apart from “not authorised”, and these eight give it no common shape to work from — no shared code, no shared status, and in one case a success status carrying a failure in prose. The network names page is the same problem in a different register.
How to read these numbers
The table shows what answered, which is not the same as what exists. A provider can be absent from it for three quite different reasons, and they are kept apart above: it refused the request, it has no key configured here, or it quoted and simply sits lower down. Only the first is a statement about the provider.
They are a reading rather than a constant. Minimums here are recalculated by each provider continuously and drift between one request and the next — the same pair measured twice in an hour returned floors differing in the fourth decimal. Margins move with the market. What holds across readings is the shape: which providers are cheap, which are dear, which state a ceiling and which do not, and which cannot be relied on to answer at all.
Nothing here is an endorsement or a partnership. These are the services this router queries, priced against each other because that is the only way to know what any of them costs. Checked 28 September 2026.