Transfers

Deposit, withdraw, and transfer funds

Deposit (Vault)

Deposits are made on-chain through the ZDEX Vault smart contract on BSC (BEP-20).

Step 1: Get Deposit Signature

POST /v1/deposit/signature
Authorization: Bearer <token>
Content-Type: application/json

{
  "amount": "100",
  "subAccountId": "34696153"
}

Response:

{
  "ok": true,
  "transferId": "clx...",
  "deposit": {
    "amount": "100000000000000000000",
    "deadline": 1711760400,
    "nonce": "5",
    "signature": "0xabc123...",
    "tokenAddress": "0x55d398326f99059fF775485246999027B3197955",
    "vaultAddress": "0x583d5DB7F3f5058f86A77c69E7C255E96aE0156E",
    "chainId": 56
  }
}

Step 2: Execute On-Chain Transaction

Use the returned signature to call the Vault contract's deposit function from your wallet. The frontend handles this automatically.

Step 3: Confirm Deposit

POST /v1/deposit/confirm
Authorization: Bearer <token>
Content-Type: application/json

{
  "transferId": "clx...",
  "txHash": "0xabc123..."
}

Withdraw

Withdraw USDT to your connected wallet address on BSC:

POST /v1/withdraw
Authorization: Bearer <token>
Content-Type: application/json

{
  "amount": "50"
}

Response:

{
  "ok": true,
  "transfer": {
    "id": "clx...",
    "amount": "50",
    "status": "SUBMITTED"
  }
}

Check Withdrawal Status

GET /v1/transfers/:id
Authorization: Bearer <token>

Statuses:

StatusDescription
SUBMITTEDWithdrawal request received
PROCESSINGBeing processed by the exchange
CONFIRMEDSuccessfully sent to your wallet
FAILEDWithdrawal failed
CANCELLEDWithdrawal was cancelled

Internal Transfer (P2P)

Transfer USDT to another ZDEX user:

POST /v1/transfers/internal
Authorization: Bearer <token>
Content-Type: application/json

{
  "recipientAddress": "0xRecipientWallet...",
  "amount": "25",
  "note": "Payment for services"
}

Limits:

  • Minimum transfer: 1 USDT
  • Cannot transfer to yourself

Response:

{
  "ok": true,
  "transfer": {
    "id": "clx...",
    "amount": "25",
    "status": "SUCCESS"
  }
}

On this page