Skip to main content
Documentation
StartOverviewArchitectureAuthenticationSend your first message
TypeScript SDKOverviewTrusted app serverApp-user clientsRealtimeErrors & webhooks
Flutter SDKOverviewInstallationAuthenticationChannels & messagesOffline & syncRealtimeUI componentsPush & lifecycle
ConceptsTenancy & scopeChannels & messagesDelivery & reconciliationSecurity checklist
ProtocolsRealtimeSigned webhooks
ReferenceREST APIErrors, limits & retriesDeploy docs to Coolify
VV ChatDocs API v1
Recommended starting points
Build chat without rebuilding infrastructureV Chat is a multi-tenant messaging backend with typed server, web, and Flutter integration paths.StartArchitecture at a glanceUnderstand the control plane, data plane, realtime path, and SDK boundaries before integrating.StartAuthentication and credentialsSelect the correct credential for dashboard, trusted-server, app-user, realtime, and webhook flows.StartSend your first messageUse the trusted TypeScript server client to create the minimum safe messaging flow.StartTypeScript SDK overviewChoose the correct typed client for trusted servers, app users, dashboard sessions, realtime, and webhooks.TypeScript SDKTrusted app-server clientUse AppServerClient from a protected backend to manage data-plane resources and mint app-user tokens.TypeScript SDKApp-user clientsBuild browser or Node app-user flows with VChatClient or the lower-level AppUserClient.TypeScript SDK
↑↓ Navigate↵ Openesc Close
API reference
StartOverviewArchitectureAuthenticationSend your first message
TypeScript SDKOverviewTrusted app serverApp-user clientsRealtimeErrors & webhooks
Flutter SDKOverviewInstallationAuthenticationChannels & messagesOffline & syncRealtimeUI componentsPush & lifecycle
ConceptsTenancy & scopeChannels & messagesDelivery & reconciliationSecurity checklist
ProtocolsRealtimeSigned webhooks
ReferenceREST APIErrors, limits & retriesDeploy docs to Coolify
Contract sourceOpenAPI JSON
Docs/Realtime & webhooks
vchat.realtime.v1

Realtime protocol

A complete map of connection tickets, native WebSocket lifecycle, channel subscriptions, events, recovery, presence, and typing.

Updated 2026-08-09•docs/realtime/v1 · artifacts/events

Handshake

  1. Authenticate an app user over REST and request a one-use connection ticket.
  2. Open the released WebSocket URL and offer only the vchat.realtime.v1 subprotocol.
  3. Treat the connection as usable only after a valid connection.ready envelope.
  4. Use native Ping/Pong for heartbeat and honor terminal close classifications.

Authorized subscriptions

A connection does not grant channel access by itself. Each channel.subscribe command resolves the exact scoped channel and current channel-type policy, then acknowledges a baseline event sequence. Revocation can remove a live subscription when membership or policy changes.

Durable and private events

Public channel projections cover released message, reply, reaction, and channel behavior. Private user messaging state carries only the authenticated user’s conversation, unread, read, and thread projections. Both use stable event IDs and version fences; channel events also carry eventSequence.

Bounded pressure

  • Server frames above the released maximum are rejected.
  • Connections bound active/pending subscriptions and in-flight commands.
  • Client event processing uses bounded frame and byte budgets.
  • A slow consumer closes that socket as terminal; it does not silently drop an ordered event and continue.

Use the SDK lifecycle

TypeScript realtime

Connect, subscribe, listen, and recover with the TypeScript SDK.

Read guide
Flutter realtime

Bind realtime to Flutter lifecycle and Drift reconciliation.

Read guide
PreviousIntegration security checklistNext Signed webhooks
On this pageHandshakeAuthorized subscriptionsDurable and private eventsBounded pressureUse the SDK lifecycle
Report a docs issue