The API supports:
- USDC deposits and withdrawals on Arbitrum One (
ARBITRUM_ONE) - USDT deposits and withdrawals on TRON (
TRON) - USD deposits by ACH push, wire, or FedNow
- USD withdrawals by ACH or wire
Before you start
Complete account verification and accept the QFEX terms before using the funding API. You can authenticate with either a wallet session or an API key. For a wallet session, complete wallet authentication and send the returned access token on every request:
Create a key with
view_balance to read deposit and registered withdrawal addresses. The deposit_withdraw permission requires All accounts access.
Funding applies to the primary account. To fund a subaccount, fund the primary account first and then transfer funds to the subaccount.
Authenticate with an API key
Every request requires these headers:- Generate a cryptographically secure, hex-encoded nonce of at most 100 characters.
- Read the current Unix time in seconds.
- Sign the UTF-8 string
${nonce}:${timestamp}with HMAC-SHA256, using the secret API key as the key. - Hex-encode the signature and send all four headers.
Deposit crypto
Request the deposit address for the network you intend to use:network=TRON. The response will contain "asset": "USDT" and "network": "TRON".
GET /address requires view_balance for API keys. It returns the account’s existing address or provisions one on the first call, without rotating an existing address. After receiving it, submit the blockchain transfer from your wallet or custody provider. Address retrieval does not initiate a transfer.
Check the QFEX funding screen for the current minimum deposit and required
confirmation count. A deposit is credited only after it has been detected
and confirmed.
List registered withdrawal addresses
UseGET /withdrawal-addresses with view_balance to list the authenticated user’s registered crypto withdrawal addresses across networks. The user is resolved from authentication; there is no user-ID query parameter.
200 OK response:
nickname can be null. Users with no registered addresses receive {"addresses": []}. This endpoint lists addresses; it does not register, change, or delete them. Register the destination in QFEX before requesting a withdrawal.
Withdraw crypto
POST /withdraw requires deposit_withdraw for API keys created in Developer Settings. Keys issued through builder wallet registration also support crypto withdrawals to registered destinations. view_balance or execute_orders alone cannot authorize a withdrawal.
Every crypto withdrawal must use an address registered by the authenticated user on the requested network. This applies to all API keys and wallet-session JWTs. QFEX checks the destination before debiting funds and returns 403 if it is not registered for that user and network. If QFEX cannot check the registered addresses, it rejects the request without debiting funds. Arbitrum addresses match without regard to letter case; TRON addresses must match exactly.
Submit the gross amount to debit, a destination from GET /withdrawal-addresses, and its network:
200 OK with an empty body. amount is the gross amount debited from the QFEX account. QFEX deducts the applicable withdrawal fees and sends the remainder; check Deposit / Withdraw in QFEX for the current fees before submitting the request.
For a TRON withdrawal, send a valid TRON address and set network to TRON. Always specify the network explicitly even though the API currently defaults to ARBITRUM_ONE when it is omitted.
A successful response means QFEX accepted and debited the withdrawal request. It does not guarantee that the on-chain transfer is already complete; a request may still be queued for submission or manual review.
Deposit USD
Fetch the required transfer reference before initiating a bank transfer:ach_push, wire, and fednow.
deposit_message exactly in the transfer’s reference, message, or note field.
Withdraw USD
USD withdrawals require a linked destination bank account. Create it once and store the returned QFEX bank-account ID.1. Link a bank account
type must be checking or savings. country is an ISO 3166-1 alpha-3 code, and state is required for US addresses. The street address must include a street number.
201 Created:
2. Request the withdrawal
amount must be at least 10. Use ach_push or wire as the withdrawal rail.
200 OK with an empty body. As with crypto withdrawals, acceptance is not final settlement and the request may require manual review. Fiat fees are deducted from the requested amount before settlement.
To remove a linked bank account, send DELETE /bank-account/{id} with a fresh set of authentication headers.
Handle errors safely
Most structured errors include
title, status, and detail; validation and provider errors may also include an errors array. Log the HTTP status and response body, but never log API secrets or full bank-account details.