# 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 ](/reference/user.md)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 */ })
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.minchat.io/websockets/overview.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
