Example: depositWithdraw.ts

Static snapshot for Kraken/Spot/Private/depositWithdraw.ts.

Example Path

Kraken/Spot/Private/depositWithdraw.ts

Source Link

Repository source: https://github.com/sieblyio/crypto-api-examples/blob/master/examples/Kraken/Spot/Private/depositWithdraw.ts

Code Snapshot

/* eslint-disable @typescript-eslint/no-unused-vars */
import { SpotClient } from '@siebly/kraken-api';

// This example shows how to call Kraken API endpoint with either node.js,
// javascript (js) or typescript (ts) with the npm module "@siebly/kraken-api" for Kraken exchange
// for DEPOSIT AND WITHDRAWAL

// initialise the client
/**
 *
 * Kraken API uses API Key and Private Key (base64 encoded)
 *
 * Example:
 * {
 *   apiKey: 'your-api-key',
 *   apiSecret: 'your-base64-encoded-private-key',
 * }
 *
 * API Key Permissions Required:
 * - Funds permissions - Query
 * - Funds permissions - Deposit
 * - Funds permissions - Withdraw
 * - Data - Query ledger entries
 *
 */
const client = new SpotClient({
  apiKey: process.env.API_SPOT_KEY || 'insertApiKeyHere',
  apiSecret: process.env.API_SPOT_SECRET || 'insertApiSecretHere',
});

async function withdrawFunds() {
  try {
    // Make a withdrawal request
    const withdrawal = await client.submitWithdrawal({
      asset: 'XBT',
      key: 'btc_2709', // Withdrawal key name from your account
      amount: '0.725',
      address: 'bc1kar0ssrr7xf3vy5l6d3lydnwkre5og2zz3f5ldq', // Optional confirmation
    });
    console.log('Withdrawal Result: ', JSON.stringify(withdrawal, null, 2));

    // Response includes:
    // - refid: Reference ID for the withdrawal
  } catch (e) {
    console.error('Withdraw funds error: ', e);
  }
}

async function getDepositMethods() {
  try {
    // Get available deposit methods for an asset
    const depositMethods = await client.getDepositMethods({
      asset: 'XBT',
    });
    console.log('Deposit Methods: ', JSON.stringify(depositMethods, null, 2));

    // Response includes:
    // - method: Name of deposit method
    // - limit: Maximum net amount that can be deposited
    // - fee: Fees that will be paid
    // - address-setup-fee: Whether method has setup fee
    // - gen-address: Whether new addresses can be generated
    // - minimum: Minimum net amount
  } catch (e) {
    console.error('Get deposit methods error: ', e);
  }
}

async function getDepositAddresses() {
  try {
    // Get or generate deposit address
    const depositAddresses = await client.getDepositAddresses({
      asset: 'XBT',
      method: 'Bitcoin',
      new: false, // Set to true to generate new address
    });
    console.log(
      'Deposit Addresses: ',
      JSON.stringify(depositAddresses, null, 2),
    );

    // Response includes:
    // - address: Deposit address
    // - expiretm: Expiration time or 0 if not expiring
    // - new: Whether address has ever been used
    // - tag: Contains tags/memos for XRP, STX, XLM, EOS
  } catch (e) {
    console.error('Get deposit addresses error: ', e);
  }
}

async function generateNewDepositAddress() {
  try {
    // Generate a new deposit address
    const newAddress = await client.getDepositAddresses({
      asset: 'XBT',
      method: 'Bitcoin',
      new: true, // Generate new address
    });
    console.log('New Deposit Address: ', JSON.stringify(newAddress, null, 2));
  } catch (e) {
    console.error('Generate new deposit address error: ', e);
  }
}

async function getWithdrawalMethods() {
  try {
    // Get available withdrawal methods
    const withdrawalMethods = await client.getWithdrawalMethods({
      asset: 'XBT',
    });
    console.log(
      'Withdrawal Methods: ',
      JSON.stringify(withdrawalMethods, null, 2),
    );

    // Response includes:
    // - asset: Name of asset being withdrawn
    // - method: Name of withdrawal method
    // - network: Blockchain/network name
    // - minimum: Minimum net amount that can be withdrawn
  } catch (e) {
    console.error('Get withdrawal methods error: ', e);
  }
}

async function getWithdrawalAddresses() {
  try {
    // Get withdrawal addresses
    const withdrawalAddresses = await client.getWithdrawalAddresses({
      asset: 'XBT',
      verified: true, // Filter by verification status
    });
    console.log(
      'Withdrawal Addresses: ',
      JSON.stringify(withdrawalAddresses, null, 2),
    );

    // Response includes:
    // - address: Withdrawal address
    // - asset: Asset name
    // - method: Withdrawal method
    // - key: Withdrawal key name
    // - tag: Tags/memos for XRP, STX, XLM, EOS
    // - verified: Verification status
  } catch (e) {
    console.error('Get withdrawal addresses error: ', e);
  }
}

async function getWithdrawalAddressByKey() {
  try {
    // Find withdrawal address by key name
    const addressByKey = await client.getWithdrawalAddresses({
      key: 'btc_2709', // Withdrawal key name
    });
    console.log(
      'Withdrawal Address by Key: ',
      JSON.stringify(addressByKey, null, 2),
    );
  } catch (e) {
    console.error('Get withdrawal address by key error: ', e);
  }
}

async function getWithdrawalsStatus() {
  try {
    // Get status of recent withdrawals
    const withdrawalsStatus = await client.getWithdrawalsStatus({
      asset: 'XBT',
      method: 'Bitcoin',
    });
    console.log(
      'Withdrawals Status: ',
      JSON.stringify(withdrawalsStatus, null, 2),
    );

    // Status values:
    // - Initial: withdrawal just created
    // - Pending: withdrawal pending
    // - Settled: withdrawal settled
    // - Success: withdrawal successful
    // - Failure: withdrawal failed

    // Status properties (if available):
    // - cancel-pending: cancelation requested
    // - canceled: canceled
    // - cancel-denied: cancelation denied
    // - return: return transaction by Kraken
    // - onhold: on hold pending review
  } catch (e) {
    console.error('Get withdrawals status error: ', e);
  }
}

async function getWithdrawalsStatusWithPagination() {
  try {
    // Get withdrawals with pagination
    const withdrawalsPaginated = await client.getWithdrawalsStatus({
      asset: 'XBT',
      cursor: true, // Enable pagination
      limit: 10, // Results per page
    });
    console.log(
      'Withdrawals (Paginated): ',
      JSON.stringify(withdrawalsPaginated, null, 2),
    );
  } catch (e) {
    console.error('Get paginated withdrawals error: ', e);
  }
}

async function getDepositsStatus() {
  try {
    // Get status of recent deposits
    const depositsStatus = await client.getDepositsStatus({
      asset: 'XBT',
      method: 'Bitcoin',
    });
    console.log('Deposits Status: ', JSON.stringify(depositsStatus, null, 2));

    // Similar status values as withdrawals
  } catch (e) {
    console.error('Get deposits status error: ', e);
  }
}

async function cancelWithdrawal() {
  try {
    // Cancel a recent withdrawal (if not yet processed)
    const cancelResult = await client.cancelWithdrawal({
      asset: 'XBT',
      refid: 'AGBSO6T-UFMTTQ-I7KGS6', // Reference ID from withdrawal
    });
    console.log('Cancel Withdrawal: ', JSON.stringify(cancelResult, null, 2));

    // Returns true if cancellation successful
  } catch (e) {
    console.error('Cancel withdrawal error: ', e);
  }
}

async function getWithdrawalInfo() {
  try {
    // Get withdrawal fee information before withdrawing
    const withdrawalInfo = await client.getWithdrawalInfo({
      asset: 'XBT',
      key: 'btc_2709',
      amount: '0.725',
    });
    console.log('Withdrawal Info: ', JSON.stringify(withdrawalInfo, null, 2));

    // Response includes:
    // - method: Withdrawal method
    // - limit: Maximum amount that can be withdrawn
    // - amount: Net amount to be withdrawn
    // - fee: Withdrawal fee
  } catch (e) {
    console.error('Get withdrawal info error: ', e);
  }
}

async function transferToFutures() {
  try {
    const transfer = await client.submitTransferToFutures({
      asset: 'EUR',
      amount: '10',
      from: 'Spot Wallet',
      to: 'Futures Wallet',
    });
    console.log('Transfer to Futures: ', JSON.stringify(transfer, null, 2));
  } catch (e) {
    console.error('Transfer to futures error: ', e);
  }
}

async function transferToSubaccount() {
  try {
    const transfer = await client.submitSubaccountTransfer({
      asset: 'EUR',
      amount: '50',
      from: 'UID', // get From API, getSubaccounts()
      to: 'UID', // get From API, getSubaccounts()
    });
    console.log('Transfer to Subaccount: ', JSON.stringify(transfer, null, 2));
  } catch (e) {
    console.error('Transfer to subaccount error: ', e);
  }
}

// Uncomment the function you want to test:

// withdrawFunds();
// getDepositMethods();
// getDepositAddresses();
// generateNewDepositAddress();
// getWithdrawalMethods();
// getWithdrawalAddresses();
// getWithdrawalAddressByKey();
// getWithdrawalsStatus();
// getWithdrawalsStatusWithPagination();
// getDepositsStatus();
// cancelWithdrawal();
// getWithdrawalInfo();
// transferToFutures();
// transferToSubaccount();

This is a static, crawlable snapshot. The interactive app loads after JavaScript starts and can refresh live data.