Realtime · Socket.IO
Client → server emits
Quick reference for every emit the server accepts.
| Event | Payload | Typical response / broadcast |
|---|---|---|
subscribe:project | projectId (string) | (none) — joins project:* |
subscribe:collection | string or { projectId, collectionId } | subscribed if object form |
unsubscribe:collection | { collectionId } | unsubscribed |
subscribe:document | { projectId, collectionId, documentId } | subscribed |
subscribe:query | { projectId, collectionId, queryId, query? } | subscribed |
custom:event | { projectId, ... } | Others in project get custom:event |
integration:join | { projectId, integrationId } | integration:joined / integration:error |
integration:leave | { integrationId } | integration:left |
integration:execute | { projectId, integrationId, endpoint, params?, requestData? } | see Integrations page |
integration:test | { projectId, integrationId, endpoint } | see Integrations page |
integration:status | { projectId, integrationId } | integration:status:response |
integration:webhook:subscribe | { projectId, integrationId } | integration:webhook:subscribed |
integration:webhook:unsubscribe | { integrationId } | integration:webhook:unsubscribed |
wallet:subscribe:address | { addressId } | wallet:subscribed |
wallet:subscribe:project | { projectId } | wallet:subscribed |
wallet:subscribe:chain | { chain } | wallet:subscribed |
wallet:subscribe:currency | { currency } | wallet:subscribed |
wallet:unsubscribe:address | { addressId } | wallet:unsubscribed |
wallet:unsubscribe:project | { projectId } | wallet:unsubscribed |
presence:online | { projectId? } | broadcasts presence:user:online |
presence:offline | — | broadcasts presence:user:offline |
presence:update | — | updates internal lastSeen |
presence:get:online | { projectId } | presence:online:list |
auth:login | { projectId } | others: user:online |
auth:logout | { projectId } | others: user:offline |
auth:session:update | { projectId, sessionData } | other tabs same user: session:updated |
chat:join | { chatId, projectId } | chat:joined; room: user:online |
chat:leave | { chatId } | chat:left; room: user:offline |
chat:typing:start | { chatId } | room: user:typing:start |
chat:typing:stop | { chatId } | room: user:typing:stop |
message:send | { chatId, projectId, type, content, replyTo?, mentions? } | message:sent; room: message:new |
message:react | { chatId, projectId, messageId, emoji } | room: message:reaction |
message:edit | { chatId, projectId, messageId, content } | room: message:edited |
message:delete | { chatId, projectId, messageId } | room: message:deleted |
messages:mark:read | { chatId, projectId, messageIds } | room: messages:read |
call:initiate | { chatId, type, participants[] } | targets: call:incoming |
call:accept | { chatId, callerId } | call:accepted |
call:reject | { chatId, callerId } | call:rejected |
call:end | { chatId, participants[] } | call:ended |
custom:broadcast | { projectId, event, payload?, room? } | custom:<event> |
custom:join | { room } | custom:joined |
custom:leave | { room } | custom:left |
custom:message | { targetUserId, message, type? } | target: custom:message |
custom:presence | { projectId, status, metadata? } | room: custom:presence |
custom:typing | { projectId, isTyping, context? } | room: custom:typing |
custom:file:share | { projectId, fileId, fileName, recipients? } | custom:file:shared |