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/Concepts
Messaging model

Channels, messages, and conversations

Learn fixed identities, memberships, top-level history, direct replies, read horizons, and conversation projections.

Updated 2026-08-09•docs/api/v1/channels · docs/api/v1/messages · released SDK contracts

Channel identity and policy

A channel is identified by channelTypeKey plus channelId inside one application environment. The channel type defines authorization and capability policy. Membership, creator, and authenticated-user rules are evaluated server-side for each operation and subscription.

Messages and direct threads

  • Top-level message creation uses a caller-generated fixed message identity for safe reconciliation.
  • Message edits use expected versions to reject stale conflicting updates.
  • Top-level history excludes direct replies; thread reads return a coherent root and reply page.
  • Reactions have an independently versioned summary and a bounded exact-type reactor list.
  • Deleted entities leave scoped tombstones where clients need deterministic cache reconciliation.

Conversations and read horizons

Conversation and unread views are private projections for the authenticated app user. A mark-read operation advances a monotonic channel or thread horizon. Projection delivery may lag the mutation briefly, so clients merge by independent version and refresh on conflict or gap.

Pagination and search

Changing collections use cursor pagination with a stable unique tie-breaker. Cursors are opaque and scope-bound. Query and search inputs are allowlisted, bounded, and compiled into resource-specific filters; never pass database operators or invent cursors.

PreviousTenancy and environment scopeNext Delivery, ordering, and reconciliation
On this pageChannel identity and policyMessages and direct threadsConversations and read horizonsPagination and search
Report a docs issue