202 Accepted when the request is accepted; you are notified of completion on the transfer_updates WebSocket channel.
POST /accounts/transfer
Initiate a fund transfer between spot and perpetuals accounts. The request returns202 Accepted when accepted, and you are notified of completion on the transfer_updates WebSocket channel.
Authentication: Required (JWT or API Key)
Asset Restrictions:
- Only stablecoin assets can be transferred between spot and perps accounts.
- The asset must be active as a stablecoin on both the spot and perps sides.
- Use
GET /perpetual/transfer-assetsto fetch the list of transferable stablecoin assets.
transferable_max = max(0, min(total_balance - locked_balance, available_balance)) × 80%
available_balancefollows balance-query semantics (it includes unrealized PnL where applicable).- If
amountexceedstransferable_max, the transfer is rejected with an insufficient-balance error.
- After a successful transfer, both the source and destination accounts emit balance update events over WebSocket so clients can refresh displayed balances without polling.
- Spot balance updates are delivered on the
spot_account.balance_updatechannel. - Perps balance updates are delivered on the
perpetuals_account.balance_updatechannel.
Status Codes:
202- Transfer request accepted and queued for processing400- Invalid request parameters (non-stablecoin asset, invalid amount, etc.)401- Authentication failed (missing or invalid JWT/API key)500- Internal server error503- Transfer validation service temporarily unavailable
invalid_request_format- Malformed JSON or missing required fieldsinvalid_amount- Amount is zero, negative, or invalid decimalinvalid_source_type- Source account type must be ‘spot’ or ‘perps’invalid_dest_type- Destination account type must be ‘spot’ or ‘perps’same_account_type- Source and destination types cannot be the sameinvalid_asset- Asset is not supported for spot-perps transfer (not a stablecoin, not active, or not found)amount_below_minimum- Amount is below minimum transfer amount for the asset
- The request is validated and accepted, returning
202 Acceptedwith atransfer_id. - Funds are debited from the source account, then credited to the destination account.
- When the transfer completes (or fails), the client is notified in real time on the
transfer_updatesWebSocket channel.
WebSocket Notification:
When the transfer completes (or fails), you receive a real-time notification:
- Stablecoin Only: Only stablecoin assets that are active on both the spot and perps sides can be transferred
- Perp → Spot cap: Outgoing perpetuals transfers are limited per request to 80% of
min(total - locked, available)(see Perpetual → Spot above); planamountaccordingly or split into multiple transfers - Real-time Updates: Subscribe to WebSocket
transfer_updateschannel for completion notifications. Balance update notifications are also pushed tospot_account.balance_updateandperpetuals_account.balance_updatechannels. - Source and destination types must be different (cannot transfer within the same account type)