GET /websocket

Realtime event stream (Socket.IO)

Connect with a Socket.IO v4 client to `wss://{name}.eai.menustudioai.com` (default namespace) and pass the instance token as the `apikey` query parameter. You only receive the events of that instance. Use `transports: ['websocket']`: HTTP long-polling is not supported and is rejected. The socket is receive-only: events you emit are dropped, so send messages with the REST endpoints. Events: messages.set, messages.upsert, messages.edited, messages.update, messages.delete, send.message, send.message.update, connection.update, qrcode.updated, presence.update, chats.set, chats.upsert, chats.update, chats.delete, contacts.set, contacts.upsert, contacts.update, groups.upsert, group.update, group-participants.update, call, labels.edit, labels.association.

cURL example

// Node.js (socket.io-client v4)
import { io } from 'socket.io-client';
const socket = io('wss://{name}.eai.menustudioai.com', {
  path: '/socket.io',
  transports: ['websocket'], // long-polling is not supported
  query: { apikey: 'YOUR_INSTANCE_TOKEN' },
});
socket.on('connect', () => console.log('connected'));
socket.on('connect_error', (err) => console.error('connect_error', err.message));
// Receive-only: listen for events, send messages via the REST API.
socket.on('messages.upsert', (data) => console.log('new message', data));
socket.on('connection.update', (data) => console.log('connection', data));
socket.on('qrcode.updated', (data) => console.log('qr', data));

Try it live

requests are proxied by Weai — your token never hits the browser
.eai.menustudioai.com
GET/websocket

Payload keys are sent as query parameters.

Response

example response — run a test to see live data
{
  "event": "messages.upsert",
  "instance": "{name}",
  "data": {
    "key": {
      "remoteJid": "[email protected]",
      "fromMe": false,
      "id": "3EB0C85D5A1B2C3D"
    },
    "message": {
      "conversation": "Hello!"
    },
    "messageType": "conversation"
  }
}