Withdraw
Withdraw assets from your Bybit account. You can make an off-chain transfer if the target wallet address is from Bybit. This means that no blockchain fee will be charged.
Note that, although the API rate limit for this endpoint is 5 req/s, there is also a secondary limit: you can only withdraw once every 10 seconds per chain/coin combination.
tip
- Make sure you have whitelisted your wallet address here
- Request by the master UID's api key only
formula
feeType=0:
- withdrawPercentageFee != 0: handlingFee = inputAmount / (1 - withdrawPercentageFee) * withdrawPercentageFee + withdrawFee
- withdrawPercentageFee = 0: handlingFee = withdrawFee
feeType=1:
- withdrawPercentageFee != 0: handlingFee = withdrawFee + (inputAmount - withdrawFee) * withdrawPercentageFee
- withdrawPercentageFee = 0: handlingFee = withdrawFee
HTTP Request
POST/v5/asset/withdraw/createRequest Parameters
| Parameter | Required | Type | Comments |
|---|---|---|---|
| coin | true | string | Coin, uppercase only |
| chain | false | string | Chain
|
| address | true | string |
|
| tag | false | string | Tag
|
| amount | true | string | Withdraw amount |
| timestamp | true | integer | Current timestamp (ms). Used for preventing from withdraw replay |
| forceChain | false | integer | Whether or not to force an on-chain withdrawal
|
| accountType | true | string | Select the wallet to be withdrawn from
|
| feeType | false | integer | Handling fee option
|
| requestId | false | string | Customised ID, globally unique, it is used for idempotent verification
|
| transactionPurpose | false | string | Purpose of the withdrawal transaction, need at least 20 characters, Required for Bybit Turkey site users |
| questionnaire | false | string | Travel Rule questionnaire info, JSON string, ≤16384 bytes. Supersedes beneficiary and transactionPurpose when both are present. New integrations are always recommended to use this field to submit travel rule. See Questionnaire for field structure by compliance zone |
| beneficiary | false | Object | Travel rule info. It is required for kyc/kyb=KOR (Korean), kyc=IND (India) users, and users who registered in Bybit Turkey(TR), Bybit Kazakhstan(KZ), Bybit Indonesia (ID) |
| > beneficiaryTransactionPurpose | false | string | Purpose of the withdrawal transaction, Required when KR users withdraw funds to a company via Korean CODE channel |
| > beneficiaryRepresentativeFirstName | false | string | First name of the beneficiary company's representative, Required when KR users withdraw funds to a company via Korean CODE channel |
| > beneficiaryRepresentativeLastName | false | string | Last name of the beneficiary company's representative, Required when KR users withdraw funds to a company via Korean CODE channel |
| > vaspEntityId | false | string | Receiver exchange entity Id. Please call this endpoint to get this ID.
|
| > vaspEntityId | false | string | Receiver exchange entity Id. Please call this endpoint to get this ID.
|
| > beneficiaryName | false | string | Receiver exchange user KYC name Rules for Korean users:
|
| > beneficiaryLegalType | false | string | Beneficiary legal type, individual(default), company
|
| > beneficiaryWalletType | false | string | Beneficiary wallet type, 0: custodial/exchange wallet (default), 1: non custodial/exchane wallet
|
| > beneficiaryUnhostedWalletType | false | string | Beneficiary unhosted wallet type, 0: Your own wallet, 1: others' wallet
|
| > beneficiaryPoiNumber | false | string | Beneficiary ducument number
|
| > beneficiaryPoiType | false | string | Beneficiary ducument type
|
| > beneficiaryPoiIssuingCountry | false | string | Beneficiary ducument issuing country
|
| > beneficiaryPoiExpiredDate | false | string | Beneficiary ducument expiry date
|
| > beneficiaryAddressCountry | false | string | Beneficiary country
|
| > beneficiaryAddressState | false | string | Beneficiary state
|
| > beneficiaryAddressCity | false | string | Beneficiary city
|
| > beneficiaryAddressBuilding | false | string | Beneficiary building address
|
| > beneficiaryAddressStreet | false | string | Beneficiary street address
|
| > beneficiaryAddressPostalCode | false | string | Beneficiary address post code
|
| > beneficiaryDateOfBirth | false | string | Beneficiary date of birth
|
| > beneficiaryPlaceOfBirth | false | string | Beneficiary birth place
|
Response Parameters
| Parameter | Type | Comments |
|---|---|---|
| id | string | Withdrawal ID |
Request Example
- HTTP
- Python
- Node.js
POST /v5/asset/withdraw/create HTTP/1.1
Host: api-testnet.bybit.com
X-BAPI-API-KEY: xxxxxxxxxxxxxxxxxx
X-BAPI-TIMESTAMP: 1672196570254
X-BAPI-RECV-WINDOW: 5000
X-BAPI-SIGN: XXXXX
Content-Type: application/json
{
"coin": "USDT",
"chain": "ETH",
"address": "0x99ced129603abc771c0dabe935c326ff6c86645d",
"amount": "24",
"timestamp": 1672196561407,
"forceChain": 0,
"accountType": "FUND"
}
from pybit.unified_trading import HTTP
session = HTTP(
testnet=True,
api_key="xxxxxxxxxxxxxxxxxx",
api_secret="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
)
print(session.withdraw(
coin="USDT",
chain="ETH",
address="0x99ced129603abc771c0dabe935c326ff6c86645d",
amount="24",
timestamp=1672196561407,
forceChain=0,
accountType="FUND",
))
const { RestClientV5 } = require('bybit-api');
const client = new RestClientV5({
testnet: true,
key: 'xxxxxxxxxxxxxxxxxx',
secret: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
});
client
.submitWithdrawal({
coin: 'USDT',
chain: 'ETH',
address: '0x99ced129603abc771c0dabe935c326ff6c86645d',
amount: '24',
timestamp: 1672196561407,
forceChain: 0,
accountType: 'FUND',
})
.then((response) => {
console.log(response);
})
.catch((error) => {
console.error(error);
});
Response Example
{
"retCode": 0,
"retMsg": "success",
"result": {
"id": "10195"
},
"retExtInfo": {},
"time": 1672196571239
}