Fiat Withdrawal Request
Withdraw fiat currency via international or domestic bank transfer
Fiat Withdrawal Request
Withdraw fiat currency to bank accounts via international or domestic transfer
USER Operation
Overview
The bankWithdrawRequest mutation allows users to request fiat currency withdrawals via bank transfer. This supports both international and domestic transfers with comprehensive banking details.
Manual Processing Required
This creates a withdrawal request that requires manual admin approval and bank transfer processing. It does not create automatic payouts.
GraphQL Schema
bankWithdrawRequest(
  targetCurrency: String!,
  amount: Float!,
  sourceToken: String!,
  mode: Int!,
  country: String!,
  holderName: String!,
  bankName: String!,
  accNumber: String!,
  metadata: String!,
  address: String!,
  postCode: String!,
  code: String!
): BankWithdrawRequestParameters
targetCurrencyString!The fiat currency to receive in your bank account
Examples: "USD", "EUR", "GBP", "JPY", "CAD", "AUD"
amountFloat!The amount to withdraw in target currency
sourceTokenString!The currency type to withdraw from your wallet (will be converted to target currency)
Examples: "BTC", "ETH", "USDT", "NYYU"
modeInt!Transfer mode selection
1: International Transfer
2: Domestic Transfer
countryString!Country where the bank is located
holderNameString!Full name of the bank account holder (must match bank records)
bankNameString!Official name of the bank institution
accNumberString!Bank account number or IBAN
metadataString!Additional banking information (SWIFT/BIC code, routing number, etc.)
Example: "SWIFT: CHASUS33, Routing: 021000021"
addressString!Physical address of the account holder
postCodeString!Postal/ZIP code of the address
codeString!Email verification code from generateWithdraw mutation
Return Value
type BankWithdrawRequest {
  id: Int!
  userId: Int!
  targetCurrency: String!
  amount: Float!
  sourceToken: String!
  mode: Int!
  country: String!
  holderName: String!
  bankName: String!
  accNumber: String!
  metadata: String
  address: String!
  postCode: String!
  status: Int!
  createdAt: Float
  updatedAt: Float
}Example Mutation
mutation {
  bankWithdrawRequest(
    targetCurrency: "USD",
    amount: 1000.0,
    sourceToken: "BTC",
    mode: 1,
    country: "USA",
    holderName: "John Doe",
    bankName: "Bank of America",
    accNumber: "123456789",
    metadata: "SWIFT: BOFAUS3N, Routing: 026009593",
    address: "123 Main St, Anytown, CA",
    postCode: "12345",
    code: "123456"
  ) {
    id
    userId
    targetCurrency
    amount
    sourceToken
    mode
    status
    createdAt
  }
}{
  "data": {
    "bankWithdrawRequest": {
      "id": 12345,
      "userId": 789,
      "targetCurrency": "USD",
      "amount": 1000.0,
      "sourceToken": "BTC",
      "mode": 1,
      "status": 0,
      "createdAt": 1699564800000
    }
  }
}Implementation Example
async function withdrawToBank(withdrawalDetails: BankWithdrawalParams) {
  try {
    // Step 1: Generate verification code
    const codeResult = await client.request(gql`
      mutation {
        generateWithdraw
      }
    `);
    if (codeResult.generateWithdraw !== 'Success') {
      throw new Error('Failed to generate verification code');
    }
    // Step 2: Get verification code from user
    const verificationCode = await promptUserForCode();
    // Step 3: Submit bank withdrawal request
    const withdrawal = await client.request(gql`
      mutation BankWithdraw(
        $targetCurrency: String!,
        $amount: Float!,
        $sourceToken: String!,
        $mode: Int!,
        $country: String!,
        $holderName: String!,
        $bankName: String!,
        $accNumber: String!,
        $metadata: String!,
        $address: String!,
        $postCode: String!,
        $code: String!
      ) {
        bankWithdrawRequest(
          targetCurrency: $targetCurrency,
          amount: $amount,
          sourceToken: $sourceToken,
          mode: $mode,
          country: $country,
          holderName: $holderName,
          bankName: $bankName,
          accNumber: $accNumber,
          metadata: $metadata,
          address: $address,
          postCode: $postCode,
          code: $code
        ) {
          id
          status
          amount
          targetCurrency
          createdAt
        }
      }
    `, {
      ...withdrawalDetails,
      code: verificationCode
    });
    console.log('✅ Bank withdrawal request submitted');
    console.log('Request ID:', withdrawal.bankWithdrawRequest.id);
    return withdrawal.bankWithdrawRequest;
  } catch (error) {
    console.error('❌ Bank withdrawal failed:', error);
    throw error;
  }
}Transfer Modes
For withdrawals to banks in different countries
For withdrawals within the same country
Security Features
Verification code required from authenticated user's email
All bank withdrawals manually reviewed and approved by admins with 2FA
Account holder name must match verified user identity
Bank account details verified for correctness and fraud prevention
Best Practices
Double-check account number, routing/SWIFT codes, and account holder name for accuracy
Select mode 1 for international or mode 2 for domestic transfers
Provide all necessary routing codes (SWIFT, BIC, routing number) in metadata field
Ensure target currency matches your bank's country (USD for US banks, EUR for European banks, etc.)
Bank transfers require manual processing - allow 3-7 business days for completion
Related Operations
Generate Withdraw Code
Generate verification code required for withdrawal
Approve Fiat Withdrawal
Admin approval after manual bank transfer (ADMIN)
Deny Bank Withdrawal
Admin denial with reason (ADMIN)
Withdrawal Overview
Complete withdrawal API documentation