Appearance
Withdraw crypto​
POST
/v1/wallet/crypto/{currency}/withdraw
Requires WITHDRAWALS_CREATE, granted by WITHDRAWALS_WRITE (bundles)
Sends crypto from the account the request acts on (your primary account, or the sub-account selected with X-VALR-SUB-ACCOUNT-ID) to address, or to the entry in that account's address book given by addressBookId. The network fee from GET /v1/wallet/crypto/{currency}/withdraw is charged on top of amount (sends to another VALR account are free), and if your business only allows withdrawals to address-book entries, the address must already be saved there and past its waiting period.
Parameters​
Path Parameters
currency*
Currency to withdraw, e.g. USDC.
Type
Requiredstring
Example
"USDC"Request Body​
application/json
JSON
{
"amount": "250",
"address": "0x8d3f2b6a91c04e7fa1b2c3d4e5f60718293a4b5c",
"networkType": "Ethereum",
"beneficiaryName": "Acme Treasury (Pty) Ltd",
"isCorporate": true,
"isSelfHosted": false,
"serviceProviderId": "676d1c189ef2fd542e5bbf33"
}
Responses​
Withdrawal accepted for processing. The body is {"id": "<withdrawal ID>"}, for example {"id": "7c1d9e42-5a3b-4f6e-9d8c-2b1a0f3e4d5c"}. The withdrawal can still fail later, so follow it with GET /v1/wallet/crypto/{currency}/withdraw/{id}.
Samples​
Errors
| HTTP | Error | When |
|---|---|---|
| 400 | -113INVALID_JSON | The body isn't valid JSON. |
| 400 | -11INVALID_REQUEST | The currency isn't recognised, or the body fails validation, for example amount isn't a positive decimal, both or neither of address and addressBookId are sent, or the recipient's details are missing; validationErrors lists each failing field. |
| 400 | -13427NON_ADDRESS_BOOK_WITHDRAWALS_DISABLED | Withdrawals are restricted to address-book entries, and the address isn't saved in the account's address book. |
| 400 | -13428ADDRESS_BOOK_ENTRY_STILL_WARMING_UP | Withdrawals are restricted to address-book entries, and this entry was added or changed too recently. Try again once its waiting period has passed. |
| 400 | -13415WITHDRAWALS_TEMPORARILY_SUSPENDED | Withdrawals are paused after a recent security change on your account; the message says when they resume. Withdrawals to address-book entries may still be allowed. |
| 400 | -112CURRENCY_NOT_SUPPORTED | The currency can't be withdrawn on a blockchain, for example a fiat currency. |
| 400 | -13018BLOCKCHAIN_INVALID_NETWORK_FOR_CURRENCY | The network isn't available for this currency. |
| 400 | -13402CURRENCY_DOES_NOT_SUPPORT_PAYMENT_REFERENCE | A paymentReference was sent, but this currency and network don't use one. |
| 400 | -13410PAYMENT_REFERENCE_MISSING | The address needs a payment reference, such as a memo or tag; send it in paymentReference. |
| 400 | -13405INVALID_WITHDRAW_TRANSACTION_REFERENCE | The paymentReference isn't valid for this network. |
| 400 | -50INVALID_WITHDRAW_ADDRESS | The address isn't valid for this currency and network. |
| 400 | -13411WITHDRAW_AMOUNT_BELOW_MINIMUM | The amount is below the network's minimum, which the message gives. |
| 400 | -13404INVALID_WITHDRAW_AMOUNT | The network rejected the amount, for example because it has too many decimal places. |
| 400 | -13419NETWORK_FEE_FOR_TRANSACTION_EXCEEDED | Sending to this address would need more network fee than is allowed, so it can't receive withdrawals. |
| 400 | -13017BLOCKCHAIN_SEND_TRUSTLINE_NOT_VALID | The destination address has no active trustline for this asset. |
| 400 | -13019BLOCKCHAIN_SEND_MISSING_KYC_PERMIT | The token issuer hasn't whitelisted the destination address. |
| 400 | -30071SERVICE_PROVIDER_NOT_FOUND | serviceProviderId isn't in the list from GET /v1/wallet/crypto/service-providers. |
| 400 | -6INSUFFICIENT_BALANCE | The account's available balance doesn't cover the amount plus the network fee. |
| 400 | -108WITHDRAW_LIMIT_REACHED | The withdrawal would exceed your business's withdrawal limit; see GET /v1/wallet/crypto/{currency}/withdraw/limits. |
| 400 | -32765WITHDRAWAL_RESTRICTION_APPLIED | Your business must keep a minimum portfolio value, and this withdrawal would take it below that. |
| 400 | -19213MARGIN_NOT_ENABLED_FOR_ACCOUNT | allowBorrow is true, but margin isn't enabled on the account. |
| 400 | -19243BORROW_FOR_WITHDRAWAL_NOT_AVAILABLE | allowBorrow is true, but borrowing for withdrawals is currently unavailable. |
| 400 | -19244BORROW_FOR_WITHDRAWAL_NOT_AVAILABLE_FOR_SELECTED_CURRENCY | allowBorrow is true, but this currency can't be borrowed for withdrawals. |
| 404 | -13422ADDRESS_BOOK_ENTRY_NOT_FOUND | No entry with this addressBookId exists in the account's address book. |
| 500 | -13423ADDRESS_BOOK_ENTRY_CURRENCY_WRONG | The address-book entry is saved for a different currency. |
| 500 | -19502CURRENCY_UNDER_MAINTENANCE | The currency is under maintenance. Try again in a few minutes. |
| 500 | -46WITHDRAW_UNAVAILABLE | Withdrawals of this currency on this network are currently disabled, or the withdrawal couldn't be recorded. Try again later. |
| 500 | -29BLOCKCHAIN_SEND_FAILURE | The withdrawal couldn't be checked with the network. Try again later. |
| 500 | -19202INSUFFICIENT_LIQUIDITY_FOR_BORROW | allowBorrow is true, but the amount can't be borrowed right now. Try again later. |
| 503 | -12015WITHDRAWALS_NOT_AVAILABLE | Withdrawals are temporarily unavailable. |
Plus the errors common to all signed endpoints.