All transfers are gasless and carry zero fees - there is no cost to move tokens between accounts.
Transfer Types
BULK supports two kinds of transfers, distinguished by scope and recipient handling.Internal Transfer
Moves tokens between accounts that share the same owner. The signer must be the master account, and both the source and destination must be within the signer’s account tree (the master itself or any of its sub-accounts). Typical flows:- Master to sub-account (fund a sub-account)
- Sub-account to master (sweep profits back)
- Sub-account to sub-account (rebalance between sub-accounts)
External Transfer
Moves tokens from one account to any other account on the network, regardless of ownership. This is how you send funds to another trader or move tokens to a completely separate wallet. External transfers have a minimum amount threshold to prevent dust spam. If the destination account does not exist, the protocol auto-creates it as a new master account - but only if the destination public key is on-curve (a valid Solana wallet). Off-curve addresses that do not already exist as protocol accounts are rejected.Transfer Action
A transfer is submitted as a singletransfer action with the following fields:
The transaction signer is the authorizing account. For internal transfers, this must be the master account that owns both
from and to, or any agent wallet registered on it. For external transfers, this is the account that owns the source. See Transaction Signing for the canonical wincode message.
For full request/response shape and signing details, see Transfer (Signed).
Withdrawal Safety
Before executing a transfer, the protocol checks whether the source account can safely release the requested tokens. The withdrawable amount is bounded by: Where:- equity = position PnL + margin PnL (total account value)
- MM = maintenance margin (current risk requirement)
- The 1.05 multiplier provides a 5% safety buffer above maintenance
Sub-Accounts
Sub-accounts are the primary mechanism for internal transfers. Each master can have up to 64 sub-accounts, and tokens can be moved freely between them. See the Sub-Accounts page for full details on creating, managing, and removing sub-accounts.Error Handling
All error responses include the specific reason for rejection. Failed transfers do not modify any account state.