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/Flutter SDK
Core messaging

Channels, messages, and threads

Create and query channels, send messages, work with direct replies, reactions, attachments, and read state.

Updated 2026-08-09•sdks/flutter/packages/v_chat_core/README.md · public facades

Open a channel handle

dart
final identity = VChatChannelIdentity(
  channelTypeKey: 'messaging',
  channelId: 'support-123',
);

final channel = client.channel(identity);
final snapshot = await client.getChannel(identity: identity);

Creating a handle performs no I/O. Cached results may be stale and are not proof of current authorization or server completeness.

Send, query, update, and delete

dart
final sent = await client.sendMessage(
  channel: identity,
  request: VChatMessageSendRequest(text: 'Hello'),
);

final page = await client.queryMessages(channel: identity, limit: 25);

final updated = await client.updateMessage(
  channel: identity,
  messageId: sent.message.messageId,
  request: VChatMessageUpdateRequest(
    expectedVersion: sent.message.version,
    text: const VChatOptionalValue<String>.value('Updated'),
  ),
);

await client.deleteMessage(
  channel: identity,
  messageId: updated.message.messageId,
);

Direct replies and thread read state

dart
final reply = await client.sendMessageReply(
  channel: identity,
  rootMessageId: sent.message.messageId,
  request: VChatMessageSendRequest(text: 'Direct reply'),
);

final thread = await client.getMessageThread(
  channel: identity,
  rootMessageId: sent.message.messageId,
  limit: 25,
);

await client.markMessageThreadRead(
  channel: identity,
  rootMessageId: sent.message.messageId,
  replyMessageId: reply.message.messageId,
);

Top-level history excludes direct replies. Replies live under their root message and become authoritative only through a coherent completed thread snapshot.

Reactions and attachments

Add/remove reaction operations affect only the connected user and use separate reaction-summary versions. Attachment upload is a three-stage intent, one-use transfer, and completion flow. Persist only validated metadata—never signed upload URLs, headers, or attachment bytes.

No offline mutation replay

Confirmed server representations and tombstones may be cached. Pending message content, attachment bytes, remote cursors, and mutation commands are not persisted or automatically replayed.

PreviousFlutter authenticationNext Offline state and reconciliation
On this pageOpen a channel handleSend, query, update, and deleteDirect replies and thread read stateReactions and attachments
Report a docs issue