/websocketRealtime 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/websocketPayload 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"
}
}