> For the complete documentation index, see [llms.txt](https://docs.minchat.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.minchat.io/websockets/overview.md).

# 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
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
