# Overview

Websockets are used for real-time, event-driven communication between clients and the MinChat server. They are useful in listening for specific events such as a new message received event.

The following is the socket URL endpoint to connect to.

<pre class="language-javascript"><code class="lang-javascript">import { io } from "socket.io-client"

<strong>const socket = io("https://api.minchat.io", { transports: ['websocket'] });
</strong></code></pre>

***it is recommended to use socket.io, however, you can also use any WebSocket library.***

Specify the active user to listen to events.

```typescript
socket.emit('room.user.join', { channelUserId: USER_ID, apiKey: YOUR_API_KEY })
```

Replace `YOUR_API_KEY` with your API Key found on the MinChat [Dashboard](https://dashboard.minchat.io/dashboard/api), and USER\_ID with the userID of the [User ](https://docs.minchat.io/reference/user)that will make requests.

## General Events

### Listen for Chats

Invoked when there is a new message in any conversation.&#x20;

```typescript
socket?.on('chat',(chatData) => {   /** do something with the chat */ })
```

## Conversation Events

The following events require you to subscribe to listen to events for a specific chat by running the following code.

```typescript
socket.emit('room.join', { channelId: CHAT_ID, apiKey: YOUR_API_KEY })
```

Replace `YOUR_API_KEY` with your API Key found on the MinChat [Dashboard](https://dashboard.minchat.io/dashboard/api), and `CHAT_ID`with the id of the conversation you would like to listen to events.

### Listen for new messages

Invoked when there is a new message in the subscribed chat

```typescript
socket.on('message', (messageData) => { /** do something with the messageData */ })
```

### Listen for updated messages

Invoked when a message gets updated in the subscribed chat

```typescript
socket.on('message.update', (messageData) => { /** do something */ })
```

### Listen for deleted messages

Invoked when a message gets deleted  in the subscribed chat

```typescript
socket.on('message.delete', (messageId) => { /** do something */ })
```

### Listen for typing started

Invoked when a user in the conversation starts typing.

```typescript
socket.on('typing.start', (userData) => { /** do something with the userData */ })
```

### Listen for typing stopped

Invoked when a user in the conversation stops typing.

```javascript
socket.on('typing.stop', (userData) => { /** do something with the userData */ })
```
