KuCoin TypeScript SDK example: ws-api-client.ts

KuCoin WebSocket WebSocket API websocket API client example for the Siebly KuCoin SDK, with TypeScript source for exchange REST API and WebSocket integration, setup, and production SDK docs.

What This Example Covers

  • KuCoin WebSocket API request/response example in TypeScript.
  • Uses the Siebly KuCoin SDK package kucoin-api instead of hand-written WebSocket plumbing.
  • Source path: Kucoin/WebSockets/WS-API/ws-api-client.ts.
  • Example category: WebSocket WebSocket API.
  • Imports SDK symbols including DefaultLogger, WebsocketAPIClient.
  • Calls SDK methods such as submitNewSpotOrder(), submitSyncSpotOrder(), modifySpotOrder(), cancelSpotOrder(), cancelSyncSpotOrder(), submitMarginOrder(), cancelMarginOrder(), submitFuturesOrder(), cancelFuturesOrder(), submitMultipleFuturesOrders(), cancelMultipleFuturesOrders().

How To Use This Example

  • Start here for the specific request or stream pattern, then check the matching SDK guide for install, credentials, and operational notes.
  • For WebSocket examples, keep reconnect, resubscribe, heartbeat, and event-handler behavior explicit in your service.
  • Open the repository source when you need the latest committed version: GitHub source file.

Example Path

Kucoin/WebSockets/WS-API/ws-api-client.ts

Source Link

Repository source: https://github.com/sieblyio/crypto-api-examples/blob/master/examples/Kucoin/WebSockets/WS-API/ws-api-client.ts

Related SDK Docs

Example Source

/**
 * KuCoin WebSocket API Client - Complete Example
 *
 * This example demonstrates all available WebSocket API operations:
 * - Spot trading: submit, modify, cancel, sync operations
 * - Margin trading: submit and cancel orders
 * - Futures trading: submit, cancel, batch operations
 *
 * Usage:
 * Make sure to set your API credentials in environment variables:
 *    - API_KEY
 *    - API_SECRET
 *    - API_PASSPHRASE
 *
 *  or pass them as arguments to the constructor
 */

import { DefaultLogger, WebsocketAPIClient } from 'kucoin-api';

async function main() {
  const customLogger = {
    ...DefaultLogger,
    // For a more detailed view of the WebsocketClient, enable the `trace` level by uncommenting the below line:
    // trace: (...params) => console.log(new Date(), 'trace', ...params),
  };

  const account = {
    key: process.env.API_KEY || 'keyHere',
    secret: process.env.API_SECRET || 'secretHere',
    passphrase: process.env.API_PASSPHRASE || 'apiPassPhraseHere', // This is NOT your account password
  };

  const wsClient = new WebsocketAPIClient(
    {
      apiKey: account.key,
      apiSecret: account.secret,
      apiPassphrase: account.passphrase,

      // If you want your own event handlers instead of the default ones with logs, disable this setting and see the `attachEventHandlers` example below:
      // attachEventListeners: false
    },
    customLogger,
  );

  // Example usage for each WebSocket API operation
  console.log('Starting WebSocket API examples...\n');

  // 1. Submit Spot Order
  try {
    console.log('\n2. Testing submitNewSpotOrder...');
    const spotOrderResponse = await wsClient.submitNewSpotOrder({
      side: 'buy',
      symbol: 'BTC-USDT',
      type: 'limit',
      price: '20000', // Very low price to avoid accidental execution
      size: '0.0001',
    });
    console.log('Spot order response:', spotOrderResponse);
  } catch (e) {
    console.log('Spot order error:', e);
  }

  // 2. Submit Sync Spot Order
  try {
    console.log('\n3. Testing submitSyncSpotOrder...');
    const syncSpotOrderResponse = await wsClient.submitSyncSpotOrder({
      side: 'buy',
      symbol: 'BTC-USDT',
      type: 'limit',
      price: '1000', // Very high price to avoid accidental execution
      size: '0.01',
    });
    console.log('Sync spot order response:', syncSpotOrderResponse);
  } catch (e) {
    console.log('Sync spot order error:', e);
  }

  // 3. Modify Spot Order (requires existing order ID)
  try {
    console.log('\n4. Testing modifySpotOrder...');
    const modifyResponse = await wsClient.modifySpotOrder({
      symbol: 'BTC-USDT',
      orderId: '68cc3476693c1c00072ef1d9', // Replace with actual order ID
      newPrice: '2000',
    });
    console.log('Modify spot order response:', modifyResponse);
  } catch (e) {
    console.log('Modify spot order error:', e);
  }

  // 4. Cancel Spot Order
  try {
    console.log('\n5. Testing cancelSpotOrder...');
    const cancelSpotResponse = await wsClient.cancelSpotOrder({
      symbol: 'BTC-USDT',
      orderId: '68cc34c6693c1c0007301929', // Replace with actual order ID
    });
    console.log('Cancel spot order response:', cancelSpotResponse);
  } catch (e) {
    console.log('Cancel spot order error:', e);
  }

  // 5. Cancel Sync Spot Order
  try {
    console.log('\n6. Testing cancelSyncSpotOrder...');
    const cancelSyncResponse = await wsClient.cancelSyncSpotOrder({
      symbol: 'BTC-USDT',
      orderId: '68cc3530b9870a0007670294', // Replace with actual client order ID
    });
    console.log('Cancel sync spot order response:', cancelSyncResponse);
  } catch (e) {
    console.log('Cancel sync spot order error:', e);
  }

  // 6. Submit Margin Order
  try {
    console.log('\n7. Testing submitMarginOrder...');
    const marginOrderResponse = await wsClient.submitMarginOrder({
      clientOid: 'margin-test-' + Date.now(),
      side: 'buy',
      symbol: 'BTC-USDT',
      type: 'limit',
      price: '19000', // Very low price to avoid accidental execution
      size: '0.0001',
      isIsolated: false, // false for cross margin, true for isolated
    });
    console.log('Margin order response:', marginOrderResponse);
  } catch (e) {
    console.log('Margin order error:', e);
  }

  // 7. Cancel Margin Order
  try {
    console.log('\n8. Testing cancelMarginOrder...');
    const cancelMarginResponse = await wsClient.cancelMarginOrder({
      symbol: 'BTC-USDT',
      orderId: 'your-margin-order-id-here', // Replace with actual order ID
    });
    console.log('Cancel margin order response:', cancelMarginResponse);
  } catch (e) {
    console.log('Cancel margin order error:', e);
  }

  // 8. Submit Futures Order
  try {
    console.log('\n9. Testing submitFuturesOrder...');
    const futuresOrderResponse = await wsClient.submitFuturesOrder({
      clientOid: 'futures-test-' + Date.now(),
      side: 'buy',
      symbol: 'XBTUSDTM',
      marginMode: 'CROSS',
      type: 'limit',
      price: '1000', // Very low price to avoid accidental execution
      qty: '0.01',
      leverage: 10,
      positionSide: 'LONG', // needed if trading two-way (hedge) position mode
    });
    console.log('Futures order response:', futuresOrderResponse);
  } catch (e) {
    console.log('Futures order error:', e);
  }

  // 9. Cancel Futures Order
  try {
    console.log('\n10. Testing cancelFuturesOrder...');
    const cancelFuturesResponse = await wsClient.cancelFuturesOrder({
      symbol: 'XBTUSDTM',
      orderId: '358196976308797441', // Replace with actual order ID
    });
    console.log('Cancel futures order response:', cancelFuturesResponse);
  } catch (e) {
    console.log('Cancel futures order error:', e);
  }

  // 10. Submit Multiple Futures Orders
  try {
    console.log('\n11. Testing submitMultipleFuturesOrders...');
    const multiFuturesResponse = await wsClient.submitMultipleFuturesOrders([
      {
        clientOid: 'futures-test-1-' + Date.now(),
        side: 'buy',
        symbol: 'XBTUSDTM',
        marginMode: 'CROSS',
        type: 'limit',
        price: '1000', // Very low price to avoid accidental execution
        qty: '0.01',
        leverage: 10,
        positionSide: 'LONG', // Needed if trading hedge/two-way mode. Optional in one-way mode.
      },
      {
        clientOid: 'futures-test-2-' + Date.now(),
        side: 'buy',
        symbol: 'XBTUSDTM',
        marginMode: 'CROSS',
        type: 'limit',
        price: '1010', // Very low price to avoid accidental execution
        qty: '0.01',
        leverage: 10,
        positionSide: 'LONG',
      },
    ]);
    console.log('Multiple futures orders response:', multiFuturesResponse);
  } catch (e) {
    console.log('Multiple futures orders error:', e);
  }

  // 11. Cancel Multiple Futures Orders
  try {
    console.log('\n12. Testing cancelMultipleFuturesOrders...');
    const cancelMultiFuturesResponse =
      await wsClient.cancelMultipleFuturesOrders({
        orderIdsList: ['order-id-1', 'order-id-2'], // Replace with actual order IDs
      });
    console.log(
      'Cancel multiple futures orders response:',
      cancelMultiFuturesResponse,
    );
  } catch (e) {
    console.log('Cancel multiple futures orders error:', e);
  }

  console.log('\nCompleted all WebSocket API examples!');
  process.exit(1);
}

// Start executing the example workflow
main();