Prerequisites
- A WhiteBIT account with completed KYC (register)
- An API key with Trade permission and sub-account management capability (create key)
- Funds in Main balance (sub-account transfers draw from Main balance)
- HMAC-SHA512 signing configured (authentication guide)
curlandjqinstalled (for command-line examples)
1
Create a sub-account
Create a new sub-account with an alias and permissions.For TypeScript and Python SDK examples, see SDKs.Required fields: Save the
- cURL
- Python
alias (display name), permissions (object with spotEnabled and collateralEnabled). When shareKyc is false or omitted, email is also required.Expected response:id value for subsequent steps.2
Transfer funds to the sub-account
Move assets from the main account to the newly created sub-account.Required fields:
- cURL
- Python
id (sub-account UUID), direction (main_to_sub or sub_to_main), ticker, amount. Transfers are instant and fee-free.Expected response:3
Create an API key for the sub-account
Generate a dedicated API key for the sub-account to enable independent trading.Required fields:
- cURL
- Python
subAccountId (UUID), type (1 = info and trading, 2 = info, trading, deposits, withdrawals). Optional: title (custom name for the key).To receive crypto deposits directly, the sub-account needs a
type: 2 key (deposits and
withdrawals) and the account must have deposits enabled. Crypto deposits are disabled by
default — to enable crypto deposits for the account and its sub-accounts, contact the assigned Account
Manager or email institutional@whitebit.com. Once enabled, generate the address via the
standard deposit-address endpoint
signed with the sub-account’s own key.4
Check sub-account balances
Verify that the transferred funds appear in the sub-account balance.Expected response:The response keys ticker symbols to an array of balance objects.
- cURL
- Python
main, spot, and collateral show available funds in each balance type for the sub-account.POST /api/v4/sub-account/api-key/ip-address/create with the whitelist.
Sub-account withdrawal approval
When the sub-account withdrawal feature is enabled, a withdrawal created with a sub-account key does not settle immediately. The transaction entersunconfirmed_by_main_account status and waits for main account approval, giving the main account a control point over every sub-account withdrawal.
The sub-account withdrawal endpoints are not available by default. To request access, contact
institutional@whitebit.com. Without main account confirmation, an unconfirmed withdrawal
expires after a retention period.
1
Enable the withdrawal endpoint on the sub-account key
A newly created
type: 2 key lists the withdraw and deposit groups in accessEndpoints,
but each URL defaults to enable: false. Until the withdraw URL is enabled, POST /api/v4/main-account/withdraw
returns 401 with {"code":4,"message":"This API Key is not authorized to perform this action."}.
Enable it from the main account with Edit Sub-Account API Key
(POST /api/v4/sub-account/api-key/edit):title is required; reuse the key’s current title to avoid renaming it. The urls array is
merged into the key’s existing settings, so enabling the withdraw URLs leaves other endpoints
untouched. Verify with List Sub-Account API Keys:
the withdraw URLs under accessEndpoints now show enable: true.2
Initiate the withdrawal from the sub-account
The sub-account creates the withdrawal with the sub-account’s own
type: 2 API key (deposits
and withdrawals) on the standard Create withdraw request
endpoint (POST /api/v4/main-account/withdraw). No main-account-side initiation endpoint
exists — the request is signed with the sub-account key. The resulting transaction enters
unconfirmed_by_main_account status.3
List pending withdrawals from the main account
Using a main-account key, list the sub-account withdrawals awaiting approval. Capture the
Each item includes the transaction
id of each transaction to confirm.- cURL
- Python
id, subAccountId, currency, amount, and createdAt.4
Confirm the withdrawal from the main account
Approve a listed withdrawal by external Confirmation is the only main-account action on an unconfirmed withdrawal — no reject endpoint
exists, and an unconfirmed withdrawal that is never confirmed expires automatically.
id. A successful call returns an empty object and
releases the withdrawal for processing.- cURL
- Python
What’s Next
Sub-Accounts Overview
Integration patterns for fund managers, account operators, and prop trading firms.
Sub-account integration
Fee share up to 40%, sub-account-per-customer onboarding, KYC URL generation, and per-customer API keys with dedicated IP whitelists.