---
title: "Bitget WebSocket Public JavaScript SDK Example | Siebly"
description: "Bitget V3 UTA websocket public JavaScript example for the Siebly Bitget SDK, covering exchange REST API and WebSocket integration, setup, and production SDK docs."
canonical: "https://siebly.io/examples/Bitget/V3%20-%20UTA/Websocket/ws-public"
robots: "index,follow"
---

# Bitget WebSocket Public JavaScript SDK Example

Bitget V3 UTA websocket public JavaScript example for the Siebly Bitget SDK, covering exchange REST API and WebSocket integration, setup, and production SDK docs.

**Path:** [Home](/) / [Examples](/examples) / [Bitget](/examples/Bitget) / [V3 - UTA](/examples/Bitget/V3%20-%20UTA) / [Websocket](/examples/Bitget/V3%20-%20UTA/Websocket) / [ws-public.ts](/examples/Bitget/V3%20-%20UTA/Websocket/ws-public)

[View source on GitHub](https://github.com/sieblyio/crypto-api-examples/blob/master/examples/Bitget/V3%20-%20UTA/Websocket/ws-public.ts)

[Open the Bitget JavaScript SDK guide](/sdk/bitget/javascript)

## ws-public.ts

```typescript
import { DefaultLogger, WebsocketClientV3, WS_KEY_MAP } from 'bitget-api';

(async () => {
  const logger = {
    ...DefaultLogger,
    trace: (...params: any[]) => console.log('trace', ...params),
  };

  const wsClient = new WebsocketClientV3({}, logger);

  wsClient.on('update', (data) => {
    console.log('WS raw message received ', data);
    // console.log('WS raw message received ', JSON.stringify(data, null, 2));
  });

  wsClient.on('open', (data) => {
    console.log('WS connection opened:', data.wsKey);
  });
  wsClient.on('response', (data) => {
    console.log('WS response: ', JSON.stringify(data, null, 2));
  });
  wsClient.on('reconnect', ({ wsKey }) => {
    console.log('WS automatically reconnecting.... ', wsKey);
  });
  wsClient.on('reconnected', (data) => {
    console.log('WS reconnected ', data?.wsKey);
  });
  wsClient.on('exception', (data) => {
    console.log('WS error', data);
  });

  /**
   * Public events
   */

  // You can subscribe to one topic at a time
  wsClient.subscribe(
    {
      topic: 'ticker',
      payload: {
        instType: 'spot',
        symbol: 'BTCUSDT',
      },
    },
    WS_KEY_MAP.v3Public, // This parameter points to private or public
  );

  // Or multiple at once:
  wsClient.subscribe(
    [
      {
        topic: 'ticker',
        payload: {
          instType: 'spot',
          symbol: 'BTCUSDT',
        },
      },
      {
        topic: 'ticker',
        payload: {
          instType: 'spot',
          symbol: 'ETHUSDT',
        },
      },
      {
        topic: 'ticker',
        payload: {
          instType: 'spot',
          symbol: 'XRPUSDT',
        },
      },
      {
        topic: 'ticker',
        payload: {
          instType: 'usdt-futures',
          symbol: 'BTCUSDT',
        },
      },
      {
        topic: 'ticker',
        payload: {
          instType: 'usdt-futures',
          symbol: 'BTCUSDT',
        },
      },
    ],
    WS_KEY_MAP.v3Public,
  );

  // Topics are tracked per websocket type
  // The below example will pull a list of subscribed topics on that connection (e.g. all public topics), after a 5 second delay:
  setTimeout(() => {
    const publicTopics = wsClient.getWsStore().getTopics(WS_KEY_MAP.v3Public);

    console.log('public topics: ', publicTopics);
  }, 5 * 1000);
})();
```
