BTC withdraw function issues (but ETH & BNB are correct)

We have used API withdraw function to transfer ETH and BNB from a Binance wallet to any other wallet and everything is alright. The value transfered is accurate and corresponds to the value we ask.
But we have issues on withdraw BTC. When we try to withdraw BTC, the API returns strange values that are 2, 3, 4 times lower than the market value. There are no explanations, and we got no error. Just the value is not correct.
It seems that depending on the BTC value we want to withdraw, we have the same ratio.

For example if we try to convert a BTC the API use the same a/x where x is the same divider.

It is a very strange behaviour that is lasting from several months (from June 2022).

The same request applied to ETH and BNB returns good values.

Do you know whether or not this error is listed? I jnow that withdraw on Binance was bugged in 2022 until June. Do they fixed the issue?


Hello, unfortunately I wasn’t able to understand your situation with clarity.
Do you mean you’re having issues with this endpoint POST /sapi/v1/capital/withdraw/apply ?
Can you give an exact example of your steps, the expected behavior and what you got instead please?


Thank you for your answer.
Withdraw function executes transactions but amounts are mysteriously modified for BTC.

I explain.

Transactions are executed with the withdraw function for BNB & ETH with BSC protcol. When I say “executed” this is in fact a transfer of x ETH or x BNB from a Binance hot wallet to a metamask wallet/address.
For example, if we ask to transfer 0.1 ETH from one Binance wallet to a ETH metamask Wallet, the recipient receives exactly* the amount withdrawn that we ask in the code (0.1 ETH).
The same is true for BSC through BSC protocol: all is ok.

*NB: We use BSC protocole for both cryptos. With ETH protocole, amount received in ETH is slightly the same as the one we asked (I said exaclty but in fact they are differences). They are some little variations on the real amount that is transfered from an account to another but this is acceptable. The difference is not gas. When we check the Binance wallet there is 0.099 ETH that has been transfered instead of 0.1 asked by the code. But the amount is the same between sender’s wallet and recipient’s wallet.
What is received by metamask wallet is each time the same as what is withdrawn from the sender (Binance wallet).

Conclusion : That is ok for ETH and BNB, the differences are acceptable.

But for BTC the differences are huge.

For example : We call withdraw function for a withdraw of 0.0001 BTC from the Binance’s BTC wallet (hot wallet in Binance) to any external address (we tried all formats of BTC addresses). But in that case, the real amount transfered is 0.00003 BTC. We tried several times and every month, every day, every week, the amount is always x/y where x in the example is 0.0001 and y = a constant applied by Binance (or anything else) that lowers the requested value. There is a mysterious factor division made by something and the issue is not coming from our code (because the same code is working for ETH and BNB).

When we withdraw 0.0002 BTC then the real amount transfered is x/y’ where y’ is another constant.

y, y’ and so one… are constants which depend on the value of x.
This is weird behavior.

When we check, the amount that is withdrawn from the binance’s BTC address is exaclty what the recipient receives. The amounts are ALWAYS lesser than what we ask systematically in the code. But never the exact amount.

Thank you

Thank you the the further explanation!

Since this touches the withdrawal processing rules and not directly the with usage of the API endpoint, I’m afraid we can’t help much on this forum.

I think there’s preview on the received amount and maybe more details during the withdrawal request on website side, which you can try and maybe able to get more context on what’s happening.
Although, the best point of contact to understand better on the transfer calculation for BTC would really be the customer support, who can also analyze your account specifically (we don’t have access here).

Ok thank you
Anyway Here is the code we used

$client = new Binance();
$currency = “CHF”;
$amount = 20.0;
$eur = ($currency === “EUR”) ? $amount : $client->convertFiat($currency, “EUR”, $amount);
$cryptoAmount = $client->convertEurToCrypto($args[‘crypto’], $eur);
$result = $client->withdraw($args[‘crypto’], $args[‘address’], round($cryptoAmount, 8));
if (!$result[‘id’] ?? null || strlen($result[‘id’]) < 1) {
throw new \Error(“Cannot withdraw with binance”);

if it could help