Skip to main content

Crypto Withdrawals

Create and follow crypto withdrawals. POST /api/v1/crypto-withdrawals creates a withdrawal request and sends a confirmation e-mail to the account holder. Funds leave your account only after you confirm the request from that e-mail. The link is valid for 1 hour; after that the request is cancelled automatically. Use Get Crypto Withdrawal by Id to follow its status.

statusMeaning
PendingForUserActionWaiting for you to confirm from the e-mail
PendingForAdminActionConfirmed; waiting for a review by BtcTurk Global before it is sent
ConfirmedConfirmed; being processed and sent
UserCancelledCancelled by you
AdminCancelledCancelled by BtcTurk Global
SystemCancelledNot confirmed within 1 hour, or stopped by an automatic check; cancelled automatically
warning

For all transactions related to the private endpoint, you must authorize before sending your request.

For more information you can check our Authentication V1 article. This endpoint requires the Crypto Asset Withdrawal API key permission group.

Headers​

NameTypeDescription
X-PCK*stringAPI public key.
X-Stamp*integerCurrent time in milliseconds since the Unix epoch (UTC).
X-Signature*stringHMAC-SHA256 signature. See Authentication V1.
X-NonceintegerOptional. Backward tolerance for X-Stamp in milliseconds. Default 5000, maximum 60000.

Create Crypto Withdrawal​

POST /api/v1/crypto-withdrawals

Request Body​

NameTypeDescription
asset*stringchannelSymbol from Get Currency Channels, case-sensitive. It selects both the asset and the network, e.g. TRC20USDT for USDT on Tron, USDT for USDT on Ethereum, BTC for Bitcoin.
amount*stringDecimal string, up to 12 integer digits and 16 decimal digits.
address*stringDestination address. Must be one of your withdrawal addresses for this currency and network, added in the BtcTurk Global app.
addressTagstringMemo/tag, required by some networks.
uniqueTransactionIdguidOptional idempotency key. A new GUID is generated if omitted or empty.
  • The address (and its tag, on networks that use one) must be saved as a withdrawal address for the same currency and network in the BtcTurk Global app; otherwise you receive 400 WITHDRAWAL_ADDRESS_NOT_WHITELISTED (1091).
  • Only one withdrawal per currency and network can be pending at a time. While one waits for your e-mail confirmation or for review, creating another returns 409 EXIST_PENDING_REQUEST (1059).
  • The fee is charged in addition to amount: your balance is debited amount plus fee. The fee is returned in fee when the request is created.
{
"success": true,
"message": "SUCCESS",
"code": 0,
"data": {
"id": 778899,
"timestamp": 1735866257711,
"type": "Withdrawal",
"amount": "-0.5",
"fee": "-0.0001",
"address": "bc1qxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"addressTag": null,
"asset": "BTC"
}
}
FieldTypeDescription
idlongWithdrawal id.
timestamplongCreation time, milliseconds since the Unix epoch.
typestringAlways Withdrawal.
amountstringAmount debited, as a negative decimal string.
feestringFee debited, as a negative decimal string; "0" when no fee is charged.
addressstringDestination address.
addressTagstringMemo/tag, or null.
assetstringCurrency symbol, e.g. BTC.

List Crypto Withdrawals​

GET /api/v1/crypto-withdrawals

Query Parameters​

NameTypeDescription
uniqueTransactionId*guidThe uniqueTransactionId used when creating the withdrawal.

Response is a raw JSON array.

[
{
"id": 778899,
"address": "bc1qxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"amount": -0.5,
"confirmationDate": null,
"confirmCount": 2,
"cryptoChannelId": 25,
"cryptoStatus": "PendingForUserAction",
"cryptoType": "Withdrawal",
"currencyId": 2,
"currencySymbol": "BTC",
"fee": -0.0001,
"feeCurrencyId": 2,
"pairLastPrice": null,
"remainingFunds": 0,
"tag": null,
"txHash": null,
"userId": 12345,
"uniqueTransactionId": "b1a2c3d4-e5f6-4789-0abc-def123456789",
"createdDate": "2025-08-24T10:00:00Z",
"updatedDate": "2025-08-24T10:00:05Z"
}
]

amount and fee are JSON numbers, negative for a withdrawal. cryptoStatus uses the same names as status (see the table above), and createdDate is an ISO-8601 date-time string.

Get Crypto Withdrawal by Id​

GET /api/v1/crypto-withdrawals/{id}

{
"id": 778899,
"address": "bc1qxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"balanceAmount": -0.5,
"feeBalanceAmount": -0.0001,
"createdAt": "2025-08-24T10:00:00Z",
"cryptoChannelId": 25,
"currencyId": 2,
"status": "PendingForUserAction"
}

balanceAmount (the amount) and feeBalanceAmount (the fee) are JSON numbers, negative for a withdrawal. createdAt is an ISO-8601 date-time string, and status is the withdrawal status (see the table above).

Code Example​

curl -X POST "https://api.global.btcturk.com/api/v1/crypto-withdrawals" \
-H "X-PCK: YOUR_API_PUBLIC_KEY" \
-H "X-Stamp: 1735866257711" \
-H "X-Signature: COMPUTED_SIGNATURE" \
-H "Content-Type: application/json" \
-d '{
"asset": "BTC",
"amount": "0.5",
"address": "bc1qxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}'

Expected Errors​

Create Crypto Withdrawal returns errors in the envelope format; handle them by code.

StatusCodeMessageMeaning
4001038INVALID_WITHDRAWAL_AMOUNTamount is zero, negative or malformed
4001038WITHDRAWAL_AMOUNT_EXCEEDEDamount is above the maximum for the asset
4001038INVALID_ADDRESS_TAGThe address tag is missing or invalid for the network
4001055BALANCE_NOT_ENOUGHNot enough free balance for amount plus fee
4001242BALANCE_NOT_ENOUGH_DUE_TO_OPEN_ORDERSThe balance is reserved by open orders; data holds the reserved amount
4001064CURRENCY_NOT_FOUNDThe currency does not exist
4001068AMOUNT_BELOW_MINIMUM_WITHDRAWAL_AMOUNTamount is below the minimum withdrawal
4001081CURRENCY_CHANNEL_NOT_FOUNDasset does not match a currency channel
4001091WITHDRAWAL_ADDRESS_NOT_WHITELISTEDThe address is not one of your saved withdrawal addresses
4001095ADDRESS_IS_NOT_VALIDThe address is not valid for the network
4001096ADDRESS_CAN_NOT_BE_INTERNALThe address belongs to BtcTurk and cannot be used
4001211GLVL1_CRYPTO_WTH_30D_LIMIT_EXCEED30-day withdrawal limit exceeded; data holds the remaining limit
4001212GLVL1_CRYPTO_WTH_24H_LIMIT_EXCEED24-hour withdrawal limit exceeded; data holds the remaining limit
4001218ACCESS_DENIEDWithdrawals are not available for this asset on your account
4001232CURRENCY_WITHDRAWAL_DISABLEDWithdrawals are disabled for this network
4008009SUSPICIOUS_ADDRESSThe address is flagged as suspicious
4031229BLOCKED_CRYPTO_WITHDRAWALCrypto withdrawals are blocked for your account; data holds the end date
4031240SUSPENDED_WITHDRAW_CRYPTOCrypto withdrawals are suspended for your account; data holds the end date
4038015CRYPTO_WITHDRAWAL_BLOCKED_ADDRESSWithdrawals to this address are blocked
4091059EXIST_PENDING_REQUESTAnother withdrawal for this currency and network is still pending
4091245DUPLICATE_WITHDRAWAL_TRANSACTIONuniqueTransactionId was already used
500500INTERNAL_ERRORUnexpected error; check List Crypto Withdrawals before retrying

Any other rejection keeps its HTTP status (400, 403 or 409), with code 1218 for 403 and 1038 otherwise, and gives the reason in message, for example CRYPTO_WITHDRAWAL_HOLDING_72_HOURS_RULE_RESTRICTION. Do not retry these without changing the request.

When a field is rejected, the response is a list of field / message pairs instead, for example [{ "field": "Address", "message": "MIN_LENGTH_10" }]. Messages are ADDRESS_REQUIRED, MIN_LENGTH_10, MAX_LENGTH_250 (address), MAX_LENGTH_200 (address tag), INVALID_WITHDRAWAL_AMOUNT, INVALID_ASSET and INVALID_VALUE.

If the withdrawals cannot be read, List Crypto Withdrawals returns a 500 internal-server-error problem document.