Product Voice Solutions Security Pricing Dashboard Docs Blog Log In Book a Demo Start Free Trial →

Everything you need to
get started with Dockbox

Integration guides, dashboard walkthroughs, and the complete API reference.

Overview

Dockbox is a self-hosted AI infrastructure platform. It gives your organization a multi-channel AI assistant accessible through Slack, Telegram, WhatsApp, email, voice, and a web dashboard — all running on your own server with your data staying private.

The platform runs on port 3200 by default. After deployment, you'll access the admin dashboard to create users, configure integrations, and manage your AI groups.

Quick start: After deploying, visit your-server:3200 in a browser. You'll be prompted to set an admin password on first launch.

Admin Dashboard

The admin dashboard is your control center for managing users, groups, integrations, and system settings.

Logging In

Navigate to your Dockbox instance and click Log In. Select the admin account and enter the password you set during initial setup.

Managing Users

From the admin dashboard, you can create, edit, and remove user accounts. Each user gets their own isolated session with the AI assistant.

  • Create a user — Click the + button, choose a display name, and optionally set a password for login.
  • API keys — Each user can have their own API keys for the AI providers they use. Keys are stored encrypted on your server.
  • Quotas — Set per-user token quotas to manage usage across your organization.

Managing Groups

Groups are isolated AI conversation environments. Each group can have its own model, system prompt, and connected integrations. Think of them as separate "rooms" for different purposes (e.g., a general assistant, a code helper, a customer support bot).

System Settings

Configure global settings including:

  • Default AI model and provider
  • Ollama (local model) connection
  • Backup schedules
  • Custom API endpoints

User Dashboard

The user dashboard is the daily interface for interacting with the AI assistant.

Chat Interface

Select a group from the sidebar and start chatting. Messages support markdown, code blocks, and file attachments. You can also use voice input for hands-free interaction.

File Manager

Upload, organize, and share files within your groups. Files are versioned automatically — you can view history and revert to previous versions at any time.

Calendar

A built-in shared calendar for your organization. Events can be created through the dashboard or by the AI assistant. Supports ICS export for syncing with external calendar apps, and two-way sync with Google Calendar and Microsoft Outlook via OAuth.

Work Tasks

Create and track tasks assigned to users. Tasks support priorities, due dates, and project grouping. The AI assistant can also create tasks on your behalf during conversations.

PII Vault

The PII vault automatically detects and scrubs personal information from files. Any detected PII is stored in an encrypted vault so it can be referenced when needed but isn't exposed in plain text.


Slack Integration

Connect Dockbox to your Slack workspace so team members can interact with the AI assistant directly from Slack channels and DMs. Dockbox uses Socket Mode (token-based polling), so no public webhook URL is required.

Create a Slack App

Go to api.slack.com/apps and click Create New App. Choose "From scratch" and give it a name (e.g., "Dockbox AI"). Select your workspace.

Configure Bot Permissions

Under OAuth & Permissions, add these Bot Token Scopes:

  • chat:write — Send messages
  • channels:read — List channels
  • channels:history — Read channel messages
  • groups:read — List private channels
  • groups:history — Read private channel messages
  • im:history — Read DM history
  • im:read — Read DM metadata
  • im:write — Open DMs
  • app_mentions:read — Read @mentions

Enable Socket Mode

Go to Settings → Socket Mode and toggle it on. Generate an App-Level Token with the connections:write scope. Copy the token (starts with xapp-).

Install to Workspace

Click Install to Workspace and authorize. Copy the Bot User OAuth Token (starts with xoxb-).

Add to Dockbox

In the Dockbox user dashboard, go to Accounts → Add Channel → Slack. Paste the bot token.

Link Channels

Dockbox automatically discovers channels the bot is in. Select which Slack channel to link to which Dockbox group.

Invite the Bot

Invite the bot to any channels you want it to monitor by typing /invite @botname in those channels.


Telegram Integration

Connect a Telegram bot to Dockbox so users can message the AI assistant through Telegram. Dockbox uses long polling, so no webhook URL or SSL certificate is required for the bot itself.

Create a Telegram Bot

Open Telegram and message @BotFather. Send /newbot, follow the prompts to name it, and copy the API token it gives you.

Add to Dockbox

In the Dockbox user dashboard, go to Accounts → Add Channel → Telegram. Paste the bot token. Dockbox connects via long polling — no webhook URL needed.

Add the Bot to Groups

Add the bot to your Telegram groups. Send /chatid in the group to get the registration ID.

Link to Dockbox Group

Link the Telegram group to a Dockbox group in the dashboard.

Set Bot Commands (Optional)

Back in BotFather, send /setcommands and add any custom commands you'd like (e.g., clear - Reset conversation).


WhatsApp Integration

Dockbox connects to WhatsApp using the Baileys library (WhatsApp Web protocol). No Meta Business account, webhook setup, or API keys are needed.

Start the Connection

In the Dockbox user dashboard, go to Accounts → Add Channel → WhatsApp. A QR code appears on screen.

Scan the QR Code

Open WhatsApp on your phone, go to Linked Devices, and scan the QR code (the same flow as WhatsApp Web).

Discover Groups

Once connected, Dockbox discovers all your WhatsApp groups automatically.

Link Groups

Select which WhatsApp groups to link to Dockbox groups in the dashboard.


Email Integration

Connect email accounts (IMAP/SMTP) so the AI assistant can read and send emails on behalf of users.

Add an Email Account

In the admin dashboard, go to Email and click Add Account. Enter the IMAP and SMTP server details, credentials, and the email address.

Test the Connection

Click Test Connection to verify both incoming (IMAP) and outgoing (SMTP) work correctly.

Use in Chat

Users can ask the AI to check emails, draft replies, or send new messages. The AI accesses the configured accounts through the email API.


Calendar & Scheduling

Dockbox includes a shared calendar. Events can be synced with Google Calendar or Microsoft Outlook.

Google Calendar Sync

Connect Google Account

In the user dashboard, go to Calendar and click Connect Google Calendar. You'll be redirected to Google to authorize access. Dockbox requests calendar read/write permissions.

Select Calendars

After authorization, choose which Google calendars to sync. Events will appear in Dockbox and changes sync both ways.

ICS Export

Every user gets a personal ICS feed URL for subscribing in any calendar app. Find it under Calendar Settings in the user dashboard.


Voice Assistant

Dockbox supports voice input and output. You can send audio to the API and receive transcribed text and AI responses.

Using Voice in the Dashboard

Click the microphone icon in the chat input to record a voice message. Dockbox transcribes it locally and sends it as a text message to the AI.

Voice API

For building custom voice integrations (smart speakers, phone systems, etc.), send raw audio to the voice endpoint:

POST /api/voice?jid=GROUP_JID&sender_name=USER
// Send raw audio as the request body
// Content-Type: audio/wav, audio/webm, audio/mp3, etc.
// Returns:
{
  "ok": true,
  "transcript": "What's on the calendar today?",
  "id": "msg_abc123"
}

SMS Integration

Connect Twilio accounts to send and receive SMS messages through Dockbox.

Add an SMS Account

In the admin dashboard, go to SMS and click Add Account. Enter your Twilio Account SID, Auth Token, and the phone number you want to use.

Configure the Inbound Webhook

In your Twilio console, set the messaging webhook for your phone number to:

https://your-dockbox-domain/api/sms/webhook/:accountId

Send & Receive

The bot can now send and receive SMS messages. Users can ask the AI to send texts, and inbound messages are routed to the linked group.


Channel Management

Channels are the connections between Dockbox and external messaging platforms (Slack, Telegram, WhatsApp). The channel management API lets you configure, link, and monitor these connections.

Core Concepts

  • Connected channel — A configured integration (e.g., a Slack bot token or a WhatsApp session).
  • Discovered chat — A group or conversation found on the platform that hasn't been linked to a Dockbox group yet.
  • Linked chat — A discovered chat that has been mapped to a specific Dockbox group.

API Endpoints

MethodEndpointDescription
GET/api/channelsList connected channels and their status.
POST/api/channels/:typeConfigure a channel (token, credentials, etc.).
DELETE/api/channels/:typeDisconnect a channel.
POST/api/channels/:type/linkLink a discovered chat to a Dockbox group. Body: { chatJid, groupJid }
GET/api/chats/discovered?channel=slack|whatsapp|telegramList discovered chats not yet linked.

Projects & Timers

A full project management system built into Dockbox. Track projects with deliverables, blockers, priorities, timesheet entries, and financial data — all manageable through the API or by asking the AI in chat.

Projects

Each project has a name, description, priority, and status. Projects contain deliverables (milestones or tasks), blockers, and financial tracking.

Timesheet & Timers

Log time against projects with timesheet entries. Start and stop timers for real-time tracking. View summaries of time spent across projects.

Financials

Track revenue, costs, and margins per project. Financial data is available through the API and in the dashboard.

Tip: You can manage projects entirely through chat. Ask the AI to create a project, add deliverables, start a timer, or mark a project complete.

Alarms

Set alarms via the dashboard or through chat (e.g., "Set an alarm for 2pm"). Alarms ring in the dashboard with a snooze option.

Setting Alarms

  • Dashboard — Use the alarm panel to create, edit, or delete alarms.
  • Chat — Ask the AI to set an alarm (e.g., "Remind me at 3pm to call the client").

API Endpoints

MethodEndpointDescription
GET/api/users/:id/alarmsList alarms.
GET/api/users/:id/alarms/:idGet a specific alarm.
PUT/api/users/:id/alarms/:idUpdate an alarm.
POST/api/users/:id/alarms/:id/snoozeSnooze an alarm.
DELETE/api/users/:id/alarms/:idDelete an alarm.

Notifications

Manage the notification list (separate from the real-time SSE stream). View, mark as read, and delete notifications.

MethodEndpointDescription
GET/api/users/:id/notification-listList all notifications.
PATCH/api/users/:id/notification-list/read-allMark all notifications as read.
PATCH/api/users/:id/notification-list/:id/readMark a single notification as read.
DELETE/api/users/:id/notification-list/:idDelete a notification.

API Authentication

Dockbox runs behind a Cloudflare Zero Trust tunnel. Every request to the API must pass through two layers of authentication:

  1. Cloudflare Access — proves you're allowed to reach the server at all
  2. Dockbox session — identifies which user or admin you are

Layer 1: Cloudflare Access

If you're accessing the API from a browser that you've already authenticated with (e.g. via Google SSO or a one-time email link), Cloudflare sets a CF_Authorization cookie automatically and you're good to go.

For programmatic access (scripts, bots, IoT devices, voice assistants), you need a Cloudflare Service Token. Include the token's client ID and secret as headers on every request:

Cloudflare Service Token headers
CF-Access-Client-Id: your-client-id.access
CF-Access-Client-Secret: your-client-secret

Creating a Service Token

Go to Cloudflare Zero Trust dashboard → AccessService AuthCreate Service Token.

Name it something descriptive (e.g. "Voice Assistant", "Home Automation"). Copy the Client ID and Client Secret — the secret is only shown once.

Go to AccessApplications, find your Dockbox application, and add a policy that allows your service token. Set the policy action to Service Auth and select the token you just created.

Keep your service token secret. Anyone with the client ID and secret can bypass Cloudflare Access and reach your Dockbox API directly. Rotate tokens if they're ever exposed.

Layer 2: Dockbox Session

Once past Cloudflare, you still need a Dockbox user session. Log in as a user and include the session token with every request:

  • Header: x-user-session: SESSION_TOKEN
  • Query param: ?usersession=SESSION_TOKEN
POST /api/users/:id/login
// Request
{ "password": "user-password" }

// Response
{ "session": "sess_abc123..." }

Full Example (programmatic access)

curl — send a message via the API
# Both Cloudflare + Dockbox headers required
curl -X POST https://your-dockbox-domain/api/messages \
  -H "CF-Access-Client-Id: your-client-id.access" \
  -H "CF-Access-Client-Secret: your-client-secret" \
  -H "x-user-session: sess_abc123..." \
  -H "Content-Type: application/json" \
  -d '{"text": "What meetings do I have today?", "jid": "general"}'

Admin Authentication (admin endpoints only)

A separate admin session is required only for endpoints under /api/admin/* and for user management operations like creating or deleting users. Use x-admin-session instead of x-user-session.

  • Header: x-admin-session: SESSION_TOKEN
  • Query param: ?adminsession=SESSION_TOKEN

Public Endpoints (No Auth Required)

These endpoints still require Cloudflare Access but do not need a Dockbox session:

  • GET /api/health
  • GET /api/login-info
  • GET /api/oauth/start
  • GET /api/oauth/callback
  • GET /api/calendar/export.ics?token=... (per-user token)
  • GET /api/users/:id (for login page)
Getting started: For browser-based access, just log in normally — Cloudflare handles the rest. For scripts and automations, create a Cloudflare service token, then log in with POST /api/users/:id/login and include both sets of headers on every request.

Auth & Sessions

MethodEndpointDescription
POST/api/admin/loginAdmin login. Body: { password }{ session }
POST/api/admin/verifyVerify admin session. Body: { session }{ valid }
POST/api/admin/logoutAdmin logout. Body: { session }
POST/api/admin/change-passwordChange admin password. Requires admin session.
POST/api/users/:id/loginUser login. Body: { password }{ session }
POST/api/users/:id/set-passwordSet user password. Body: { session, password }
POST/api/users/:id/verify-sessionVerify user session. Returns { valid, user }
POST/api/users/:id/logoutUser logout. Body: { session }

Example: Admin Login

POST /api/admin/login
// Request
{ "password": "your-admin-password" }

// Response
{ "session": "sess_abc123..." }

Messaging

The messaging API is the core of the AI assistant. Send text or audio and receive AI responses.

MethodEndpointDescription
GET/api/messages?jid=&since=&limit=50Fetch message history for a group.
POST/api/messagesSend a message and trigger the AI agent. Body: { text, jid?, sender_name?, model?, is_bot_message?, verbose?, thinking? }
POST/api/voice?jid=&sender_name=Send raw audio. Transcribes locally, sends as message. Returns { ok, transcript, id }
POST/api/chat/stopStop a running AI response.

Example: Send a Message

POST /api/messages
// Headers: x-user-session: YOUR_SESSION

// Request
{
  "text": "What meetings do I have today?",
  "jid": "group-folder-name",
  "sender_name": "Alice"
}

// The AI response streams via SSE (see Notifications)

SSE / Notifications

Real-time streaming of AI responses and push notifications via Server-Sent Events.

MethodEndpointDescription
GET/api/users/:id/notificationsSSE stream. Sends {"type":"connected"} on connect, then push events. Keepalive every 30s.
GET/api/users/:id/notifications/poll?since=Polling fallback. Returns { notifications: [...] }
GET/api/notifications?since=Bot message notifications (admin only).

Voice Assistant Hot Path

For building a voice assistant, the typical flow is:

POST /api/users/:id/login → get a session token

POST /api/messages with { text, jid } → send the command

GET /api/users/:id/notifications (SSE) → stream the response back

Or use POST /api/voice to skip local STT and let Dockbox transcribe


Groups & Containers

MethodEndpointDescription
GET/api/groupsList all groups.
POST/api/groupsCreate a group. Body: { name, model?, system_prompt? }
POST/api/groups/:folder/clear-sessionClear the conversation context for a group.
GET/api/statusFull system status (groups, containers, metrics).
POST/api/containers/killKill a running container.
POST/api/server/restartRestart the server.
POST/api/stress-testTrigger a stress test.
GET/api/groups/:jid/membersList users with access to a group.

Files

MethodEndpointDescription
POST/api/files/uploadMultipart file upload.
POST/api/files/mkdirCreate a directory.
POST/api/files/renameRename a file or directory.
POST/api/files/copyCopy a file or directory.
POST/api/files/revertRevert a file to a previous version.
GET/api/files/download?path=Download a file.
GET/api/files/serve?path=&usersession=Serve a file (for embedding in iframes).
GET/api/files/read?path=Read file contents.
GET/api/files/history?path=File version history.
GET/api/files/version?path=&hash=Get a specific file version.

Users

MethodEndpointDescription
GET/api/usersList all users.
GET/api/users/check-username?name=Check name availability.
POST/api/usersCreate a user.
GET/api/users/:idGet user details.
PUT/api/users/:idUpdate a user.
DELETE/api/users/:idDelete a user.
GET / PUT/api/users/:id/heartbeatRead/write HEARTBEAT.md.
PATCH/api/users/:id/triggerToggle trigger mode. Body: { jid, requiresTrigger }

API Keys & Usage

MethodEndpointDescription
GET/api/users/:id/api-keysList keys (masked).
POST/api/users/:id/api-keysAdd an API key.
PUT/api/users/:id/api-keys/:keyIdUpdate key label or active status.
DELETE/api/users/:id/api-keys/:keyIdRemove a key.
GET/api/users/:id/api-usage/summaryAggregated usage by model + daily breakdown.
GET/api/users/:id/api-usage?days=30Usage stats for a given period.
GET / PUT/api/users/:id/api-quotaView or update user quota.

Calendar

MethodEndpointDescription
GET/api/calendar/events?start=&end=&user=List events in a date range.
POST/api/calendar/eventsCreate event. Body: { title, start_time, end_time?, description?, location?, all_day?, recurrence?, color?, assigned_to?, created_by? }
PUT/api/calendar/events/:idUpdate an event.
DELETE/api/calendar/events/:idDelete an event.
GET/api/calendar/export.ics?start=&end=&user=&token=ICS export (public with token).
GET/api/users/:id/calendar/export.icsPer-user ICS export.
POST/api/calendar/importImport events from ICS text (raw body).
GET / POST/api/users/:id/calendar-tokenManage per-user calendar token.

Work Tasks

MethodEndpointDescription
GET/api/work-tasksList all work tasks.
POST/api/work-tasksCreate a work task. Body: { title, created_by, description?, priority?, assigned_to?, due_date?, project_id? }

Scheduled Automations

MethodEndpointDescription
GET/api/tasksList all scheduled tasks.
POST/api/tasksCreate a scheduled task. Body: { group_folder, prompt, schedule_type: "cron", ... }
PATCH/api/tasks/:idUpdate task status. Body: { status: "active" | "paused" }
DELETE/api/tasks/:idDelete a scheduled task.

PII Vault

MethodEndpointDescription
GET/api/vaultList all vault entries.
POST/api/vault/scrubScrub files for PII. Body: { paths: [...], useOllama? }
GET/api/vault/dictionaryGet custom PII dictionary.
POST/api/vault/dictionaryUpdate PII dictionary.
DELETE/api/vault/:idDelete a vault entry.

Email

MethodEndpointDescription
GET/api/email/accountsList email accounts.
POST/api/email/accountsCreate an email account.
PUT/api/email/accounts/:idUpdate an email account.
DELETE/api/email/accounts/:idDelete an email account.
GET/api/email/inbox?accountId=&folder=&limit=&offset=Fetch emails from inbox.
GET/api/email/message?accountId=&emailId=Fetch a single email.
POST/api/email/sendSend an email.
POST/api/email/testTest email connection.
GET/api/email/drafts?accountId=List drafts.
DELETE/api/email/drafts/:idDelete a draft.

OAuth

MethodEndpointDescription
GET/api/oauth/start?provider=google|microsoft&userId=&...Start OAuth flow. Optional: read_only, client_id, client_secret.
GET/api/oauth/callback?code=&state=OAuth redirect callback.
GET/api/oauth/accounts?userId=List connected OAuth accounts.
DELETE/api/oauth/accounts/:idRevoke an OAuth account.
PATCH/api/oauth/accounts/:idUpdate OAuth account settings.
POST/api/oauth/accounts/:id/sync-calendarPush local events to the provider.
GET/api/oauth/accounts/:id/calendarsList the provider's available calendars.

Webdev / FTP

MethodEndpointDescription
GET/api/webdev/ftp?folder=Get FTP config for a group.
POST/api/webdev/ftpSave FTP config.
POST/api/webdev/test-ftpTest FTP connection.
POST/api/webdev/ftp-browseBrowse remote FTP directories.
POST/api/webdev/seedSnapshot current files (baseline for push).
POST/api/webdev/pushUpload changed files via FTP.

Ollama (Local LLM)

MethodEndpointDescription
GET/api/ollama/testTest Ollama connection, list available models.
GET / POST/api/ollama/model-namesGet or set friendly model display names.
GET / POST/api/ollama/thinking-supportGet or set per-model thinking support flags.
POST/api/ollama/toggleEnable or disable Ollama. Body: { enabled }
GET / POST/api/automation/modelGet or set the automation model.

MethodEndpointDescription
GET/api/search?q=Search across messages, files, and vault.
GET/api/activity?limit=20Recent activity feed.
GET/api/skillsList installed integrations.

Backup

MethodEndpointDescription
GET/api/backupList backups and config.
GET/api/backup/configGet backup configuration.
POST/api/backup/configSave backup configuration.
POST/api/backup/fullCreate a full backup.
POST/api/backup/incrementalCreate an incremental backup.
POST/api/backup/restore/:idRestore from a backup.
GET/api/backup/download/:idDownload backup archive.
DELETE/api/backup/:idDelete a backup.

Admin

MethodEndpointDescription
GET/api/admin/api-keysList all user API keys.
GET/api/admin/api-usage?days=30Global API usage stats.
PUT/api/admin/api-quotaSet user quota. Body: { user_id, usage_quota_tokens?, usage_reset_day?, quota_exempt? }
POST/api/admin/api-quota/resetReset a user's quota. Body: { user_id }
GET/api/admin/custom-apisList custom API endpoints.
POST/api/admin/custom-apisCreate a custom API. Body: { name, url, method?, headers?, body?, description? }
PATCH/api/admin/custom-apis/:idUpdate a custom API.
DELETE/api/admin/custom-apis/:idDelete a custom API.
POST/api/admin/custom-apis/:id/executeExecute a custom API.
GET / POST/api/settingsRead or write server settings.

Session Links

MethodEndpointDescription
GET/api/session-linksList linked sessions.
POST/api/session-linksCreate a session link.

Static / Preview

PathDescription
/preview/:groupFolder/...Serves group files with correct relative paths (for iframe previews).

SMS API

MethodEndpointDescription
GET/api/sms/accountsList SMS accounts.
POST/api/sms/accountsCreate SMS account. Body: { twilioSid, authToken, phoneNumber }
PUT/api/sms/accounts/:idUpdate SMS account.
DELETE/api/sms/accounts/:idDelete SMS account.
GET/api/sms/messagesGet SMS messages.
POST/api/sms/sendSend SMS. Body: { to, message, accountId }
POST/api/sms/testTest SMS connection.

Projects API

MethodEndpointDescription
GET/api/users/:id/projectsList projects.
POST/api/users/:id/projectsCreate project.
GET/api/users/:id/projects/:idGet project.
PUT/api/users/:id/projects/:idUpdate project.
POST/api/users/:id/projects/:id/completeComplete project.
GET / POST/api/users/:id/projects/:id/financialsProject financials.
GET / POST / PUT / DELETE/api/users/:id/projects/:id/deliverables/*Deliverables CRUD.
GET / POST / PUT / DELETE/api/users/:id/projects/:id/blockers/*Blockers CRUD.
GET / POST / PUT / DELETE/api/users/:id/projects/:id/timesheet/*Timesheet entries CRUD.
GET/api/users/:id/projects/:id/timesheet-summaryTimesheet summary.
GET / POST / PUT / DELETE/api/users/:id/projects/:id/timers/*Timers CRUD.
POST/api/users/:id/projects/:id/timers/:id/stopStop timer.
GET/api/users/:id/timersAll timers across projects.

Alarms API

MethodEndpointDescription
GET/api/users/:id/alarmsList alarms.
GET/api/users/:id/alarms/:idGet alarm.
PUT/api/users/:id/alarms/:idUpdate alarm.
POST/api/users/:id/alarms/:id/snoozeSnooze alarm.
DELETE/api/users/:id/alarms/:idDelete alarm.

Notifications API

MethodEndpointDescription
GET/api/users/:id/notification-listList notifications.
PATCH/api/users/:id/notification-list/read-allMark all as read.
PATCH/api/users/:id/notification-list/:id/readMark as read.
DELETE/api/users/:id/notification-list/:idDelete notification.

Channels API

MethodEndpointDescription
GET/api/channelsList connected channels.
POST/api/channels/:typeConfigure channel (token, etc.).
DELETE/api/channels/:typeDisconnect channel.
POST/api/channels/:type/linkLink discovered chat to group. Body: { chatJid, groupJid }
GET/api/chats/discovered?channel=List discovered unlinked chats.
GET/api/channels/whatsapp/qrGet WhatsApp QR code for scanning.

Companies API

MethodEndpointDescription
GET/api/companiesList companies.
POST/api/companiesCreate company. Body: { name, slug }
GET/api/companies/:slugGet company info.

Discovered Chats

When a channel (Slack, WhatsApp, Telegram) is connected, Dockbox discovers available groups and conversations on that platform. Use the discovered chats endpoint to list them and link them to Dockbox groups.

MethodEndpointDescription
GET/api/chats/discovered?channel=slack|whatsapp|telegramList discovered chats not yet linked to a Dockbox group.
POST/api/channels/:type/linkLink a discovered chat to a Dockbox group. Body: { chatJid, groupJid }