Whatsapp Cloud Preparing your workspace
Loading page Fetching the latest data
Know when a new message arrives Enable browser notifications to receive WhatsApp message alerts while this tab is in the background.

WhatsApp Number Status

No number

Monitor every registered WhatsApp number.

Notifications0
Browser alerts are off Enable alerts for new WhatsApp messages.
No notifications yet
Active workspaceNo workspace selected
Platform Root
Support impersonation activeRead only
Workspace
Administration
Developers
API Documentation
Live updates connected
Dashboard filters Refine all metrics and activity below.
Total messages
0
Messages today
0
Conversations
0
Numbers online
0 / 0
Message activity
Inbound and outbound traffic across all time.
WhatsApp connection status
Live online and offline status across all registered numbers.
Online0
Offline0
Peak messaging hours
Inbound and outbound traffic by hour in Asia/Jakarta.
Message mix
Most common formats in the selected period.

Registered numbers

0
View every registered number and its current status.
WhatsApp number Number ID Display name Status Quality / type Actions
Connection status
View the selected WhatsApp number connection.
Select a connection Choose a number to view its official Meta Cloud status.
Conversation inbox
Private chat message charts Uses the number and date range above.
Message classificationWhat kind of messages were exchanged.
Who sends the mostMessages each contact sent you, and your replies.
Document typesFiles shared as documents, by format.
Busiest conversationsTotal messages per contact.
Daily activityReceived and sent messages per day.
Busiest hoursWhen messages arrive during the day.
No chat selected
Choose a chat from the list.
Live
No conversation selectedChoose a conversation to view its messages.
Files to send
Replying to message
Notification history Incoming messages are retained here after they have been read.
0 notifications 0 unread
No. Sender Message WhatsApp number Received Status Actions
No notifications found Try another date range, number, or status.
Call history Voice and video calls seen by your QR-linked numbers. Calls are recorded only; they are answered on the phone.
0 calls 0 answered 0 declined 0 missed 0:00 talk time
No. Contact Call Result Duration WhatsApp number Started
No calls found New calls appear here as they ring. Try another date range, number, or result.
Saved conversation files Browse media and documents retained from every accessible conversation.
0 files 0 B stored
No. File Sender Conversation / group WhatsApp number Date & time Actions
No saved files found Try another date range, number, file type, or search.
Group conversations
Group message charts Uses the number and date range above.
Message classificationWhat kind of messages were exchanged.
Most active membersMessages each member sent in groups.
Document typesFiles shared as documents, by format.
Most active groupsMessages per group, received and sent.
Daily activityReceived and sent messages per day.
Busiest hoursWhen messages arrive during the day.
Group List
No group selected
Choose a group from the list.
Group messages will appear here.
Files to send
Replying to message
No Contact Phone Organization Labels Related number Message sync Actions
How campaigns work
Campaign delivery uses the official Meta Cloud API and approved WhatsApp templates.
  1. 1
    Connect Meta CloudAdd an official number with its WABA and access token in Numbers.
  2. 2
    Sync templatesFetch templates directly from that number's Meta WhatsApp Business Account.
  3. 3
    Create an audienceUse an existing contact list, or all eligible contacts that are not opted out.
  4. 4
    Review and scheduleApprove when required, choose a start time, and monitor delivery progress.
Tenant operations
Templates, campaigns, automation, webhooks, exports, billing, and audit activity in this workspace.
TemplatesSynced from Meta WABA
CampaignsTemplate broadcasts via Meta Cloud
AutomationsQR-linked or Meta message workflows
WebhooksSigned events sent to your URL
AI serviceTenant-owned provider for automation actions
Voice serviceAdministrator-approved self-hosted Indonesian TTS
Exports
Subscription
Tenant audit activitySecurity-relevant changes in this workspace
Tenant members
0 active accounts in this workspace.
MemberRoleNumber accessTeamsStatusActions
Teams and departments
Group members for scoped inbox, assignment, and reporting access.

Access roles

0
Create and maintain the access profiles assigned to system users.
Role Access level Permissions Users Actions
Managed API keys
Generate and control credentials used by services and integrations.
Total keys0
Active0
Expiring soon0
Revoked or expired0
No. Name Key Created by Created Last used Expires Status Actions
No managed API keys

Generate a key to connect your first service, script, or external integration.

Browser authentication
Use an existing generated or environment key in this browser.

No API key saved.

Stored only in this browser. Saving a key switches the current login to machine access.

Connect an integration
Add the generated key to every authenticated API request.
  1. 1
    Generate a keyGive each service its own identifiable credential.
  2. 2
    Copy when neededAuthorized API-access users can copy the encrypted key again later.
  3. 3
    Send it as a headerUse the X-API-Key header on API requests.
X-API-Key: wac_live_your_generated_key
Connect your AI with MCP
Use OAuth for ChatGPT or an API key for AnythingLLM, Cline, and other clients.

ChatGPT / OAuth: choose OAuth and Dynamic Client Registration. Client ID and secret are created automatically; token endpoint authentication is none. Use the tenant custom domain to select the workspace; the root domain asks for its slug.

API key / no browser login: generate a dedicated key above, then send it in X-API-Key or Authorization: Bearer YOUR_KEY. Choose Streamable HTTP. No OAuth client ID or secret is needed. The key selects its own workspace, including on the root domain.

Replace PASTE_YOUR_API_KEY_HERE with a key from this workspace. For AnythingLLM, merge into anythingllm_mcp_servers.json in storage/plugins and refresh Agent Skills. For Cline, merge into cline_mcp_settings.json. Keep existing servers and do not share a configuration containing your real key.

Both methods enforce the connected account's current role scopes, number ownership, and Own Data Only restrictions. API-key access is authenticated access, not anonymous access.

Webhook integration
Send messages into WhatsApp and monitor both incoming requests and outgoing event deliveries.

Authenticate with X-API-Key. Use a phone number or, for QR-linked sessions, a group JID ending in @g.us as the recipient. A fixed Idempotency-Key is allowed: identical payloads are deduplicated for 10 minutes, while changed messages are sent normally.

Ready-to-copy examples
Replace the number ID, destination, and API key with your own values.
Notifier

Keep one fixed destination in the URL and reuse the same idempotency namespace.

Private message

Send directly to a WhatsApp phone number from the selected connection.

Group message

Available for QR-linked numbers using a group JID ending in @g.us.

No request body

Put the destination and message in the URL when the integration cannot send JSON.

Incoming requests0
Accepted0
Outgoing deliveries0
Failed0
Incoming message requests
Calls received at /webhooks/{numberId}/messages.
ReceivedNumber / recipientPayloadStatusDiagnostic
No incoming webhook requests in this range.
Outgoing event deliveries
Signed WhatsApp events sent to registered endpoints.
CreatedEndpoint / eventStatusResponseAction
No outgoing webhook deliveries in this range.
Android app releases
Upload a new APK. Signed-in phones are told to download it, with your feature list and note as the update message.
Loading releases…
Move Server — guided migration
Follow the steps below using SSH on your old and new servers. This page does not move or stop your installation.
Start here: open an SSH terminal on the old server. Run the numbered commands below from the project checkout, one step at a time. Copy buttons only copy text; they do not run commands. “Check inventory” only refreshes the counts. Once the old application is stopped, continue in SSH — this web page will be unavailable.
Before starting: upgrade the source application to this migration release and schedule downtime. Requires Linux, Node.js 24+, Docker Compose and GNU tar on both servers. Direct CapRover/Swarm deployments are not supported; Compose with a CapRover routing overlay is supported when every overlay is supplied with --file. Running both copies can disconnect numbers or duplicate sends. WhatsApp may still require a new QR scan.
Checking the application inventory…

Before copying: log in through SSH as your normal deployment user, with Docker access. You do not need to write to /root. Commands use $HOME, which means the home folder of the user running the command on that server. The examples use source project whatsapp-cloud, environment .env.docker, target directory $HOME/source/whatsapp, and target project whatsapp-live. The target directory and project must be brand new. Adjust all examples consistently if you choose different names. Add every deployment overlay with --file to each source command, using the same configuration as your deployment. Use private/encrypted storage with several times the installation size free. Stop if any command fails; do not skip verification.

1. Old server · Check compatibility (no downtime)

Run this first. Resolve any reported blockers before continuing. Confirm the Compose project name is whatsapp-cloud before step 3.

node scripts/serverMigration.js plan --env .env.docker

2. Old server · Create the private encryption key

Run as the same user who ran step 1. This creates whatsapp-transfer.migration-key in your home folder, readable only by you. It refuses to overwrite an existing key. If one already exists, keep it for its existing backup or choose a new filename in every command. No output on success is normal. Never paste the key contents into this page or a chat.

(
umask 077
set -C
openssl rand -base64 48 > "$HOME/whatsapp-transfer.migration-key"
)

3. Old server · Stop safely and export (downtime starts)

Disable external auto-deploy/restart jobs first. Run each line only after the previous one succeeds. Save the migration ID printed by freeze/export. Large installations can take time while volumes, images and the encrypted payload are captured; progress appears in the terminal. Leave the old server stopped; do not run ./deploy or Compose up.

node scripts/serverMigration.js freeze --env .env.docker --confirm whatsapp-cloud &&
node scripts/serverMigration.js export --env .env.docker --out "$HOME/whatsapp-transfer.wcserver" --passphrase-file "$HOME/whatsapp-transfer.migration-key" &&
node scripts/serverMigration.js inspect --in "$HOME/whatsapp-transfer.wcserver" --passphrase-file "$HOME/whatsapp-transfer.migration-key"

4. Transfer · Copy to the new server

Using SFTP or your secure file-transfer tool, copy whatsapp-transfer.wcserver from the old user's home folder into the new user's home folder. Transfer whatsapp-transfer.migration-key separately into that new home folder; run chmod 600 "$HOME/whatsapp-transfer.migration-key" on the new server. Copy this release's scripts/serverMigration.js into a working directory there, keeping the scripts/ subfolder. No full application deployment is needed first. Home folder names may differ between servers. Compare the bundle SHA-256 on both servers with the checksum printed at export:

sha256sum "$HOME/whatsapp-transfer.wcserver"

5. New server · Restore and verify

Open SSH on the new server, in the working directory containing scripts/serverMigration.js. The target directory and project must not already exist. These commands start only data services, not WhatsApp connections. MongoDB TTL expiry is paused automatically during this offline verification and restored at activation.

TARGET_DIR="$HOME/source/whatsapp"
TARGET_PROJECT="whatsapp-live"
node scripts/serverMigration.js restore --dir "$TARGET_DIR" --project "$TARGET_PROJECT" --confirm "$TARGET_PROJECT" --in "$HOME/whatsapp-transfer.wcserver" --passphrase-file "$HOME/whatsapp-transfer.migration-key" &&
node scripts/serverMigration.js start-data --dir "$TARGET_DIR" &&
node scripts/serverMigration.js verify --dir "$TARGET_DIR"

6. New server · Review, then activate

Edit before running: replace MIGRATION_ID_FROM_EXPORT with the ID printed earlier. Confirm verification succeeded, review pending jobs/webhook retries, and prepare DNS, HTTPS and tunnel/proxy routing for the root hostname and every tenant hostname. The target web service starts during activation, so test each public hostname immediately afterward. The old installation and its auto-restart jobs must remain stopped.

node scripts/serverMigration.js activate --dir "$HOME/source/whatsapp" --confirm MIGRATION_ID_FROM_EXPORT --source-stopped --queues-reviewed --infrastructure-reviewed

After activation, open the new site and check each public route, login, each tenant, WhatsApp numbers, chat history, contacts, files, MCP and webhooks. The generated compose.migration.json pins the captured images; Git pull or plain Compose up alone does not install new application code. For later updates, pull a committed revision in the restored checkout and run ./deploy update. Its migration-aware path rebuilds only the application image within the existing project and preserves migrated volumes. Do not destroy the old server yet.

If something fails · Stop and roll back safely

Do not restart the source while the target is running. If the target accepted new messages/files, reconcile them first: rollback does not merge them into the old server. Replace the migration ID below before running.

If freeze fails, export does not run: there is no new bundle to checksum. The error now names failing services; web shutdown logs identify the pending stage. Data services may intentionally remain running. Do not delete credentials, volumes or the migration journal. Use the recovery command below only with the target stopped. After a successful source-resumed, apply the fix and follow README → “Retrying after a failed freeze” to archive the resumed journal privately before a fresh compatibility check.

# On target, stop it without deleting its volumes:
docker compose -p whatsapp-live -f "$HOME/source/whatsapp/compose.migration.json" stop --timeout 300
# On source, only after reconciling any new target data:
node scripts/serverMigration.js resume-source --env .env.docker --confirm MIGRATION_ID_FROM_FREEZE --target-stopped --rollback-reviewed

Rollback does not merge new target messages or files. Keep target volumes for reconciliation. For ongoing maintenance, use the generated compose.migration.json, not an unrelated fresh deploy configuration. Keep migration state private: it contains credentials.

Before removing the old server: move DNS, HTTPS and every tenant domain; check external services, numbers, attachments, MCP and webhooks. Keep the encrypted bundle and the old server for rollback. A tenant JSON backup is not a full server migration.
Tenant health

Workspace lifecycle

Current tenant state across the platform.

Billing

Subscription mix

Subscriptions grouped by their current state.

Infrastructure

Queue workload

Waiting, active, and failed jobs across background workers.

Cross-platform

Control snapshot

Key signals from operators, billing, and operations.

Security & operations

Recent platform activity

Latest immutable administrative events.

Platform Root console
Global tenant, subscription, queue, and integration health. Tenant content is never shown here.
TenantsLifecycle and support actions
QueuesWaiting, active, and failed jobs
Webhook healthGlobal state counts only
Platform operators
Invite global administrators, assign least-privilege roles, and revoke access immediately.
MembersGlobal identities only
Pending invitationsTime-limited acceptance links
Global rolesPermission ceilings
Plans and subscriptions
Version prices and limits without rewriting historical subscription snapshots.
PlansCurrent and historical versions
SubscriptionsTenant lifecycle and plan assignment
Platform policy and operations
Manage rollout policy, global communication, maintenance, machine access, and immutable audit history.
MCP access policyApplied immediately to AI client connections
Using Allow any disables that protection. Prefer exact hostnames whenever possible.
Enter hostnames or IP addresses only—without https://, ports, or paths. Server-to-server clients commonly send no Origin header.
Global settingsNon-secret runtime policy
Feature flagsGlobal or tenant-targeted rollout
AnnouncementsTargeted system communication
MaintenanceScheduled mutation controls
Platform machine accessService accounts and scoped credentials
Service accounts
API keys
Recent audit activityImmutable security-relevant events

System settings

Manage application preferences and operational data.

Company appearance

Platform Root · independent branding and menu wording for each company.
Only this company changes. The platform's root-domain login remains unchanged.
Choosing a template replaces menu overrides in this draft.

Menu labels, visibility & order

Order is applied within each navigation group, including mobile navigation. Hiding a menu does not revoke API or page access; use roles for access control. Home and Settings stay available.

Original menuCompany labelOrderVisible

Changes are saved only when you click Save. Existing login text, permissions, messages, and connected sessions are preserved. Custom-domain login uses this company's branding.

Brand settings

Applied to this workspace and its verified custom domains.
Current logoPNG, JPEG, WebP, or SVG under 5 MB.

Login and loading page text

Customize every label shown before a user signs in. These values apply to the root login page or this tenant's custom domain.

Custom domains

Verify DNS ownership before this workspace is served from a hostname.
Operational database Back up, merge, or reset contacts, chats, messages, cached group data, and File Manager content.
—Messages —Chats —Contacts —Groups

Create backup

Download the operational database, contacts, and File Manager content as one portable archive.

Restore backup

Merge missing records and files, skip duplicates, and map old session IDs to connected numbers.

Reset operational data

Permanently clear messages, chats, and cached groups. Accounts, roles, branding, and linked numbers are preserved.

The archive includes database records, contacts, and downloaded File Manager media. QR credentials, runtime locks, users, passwords, branding, and encrypted Meta credentials are excluded.
Meta connection portability

Move official Meta Cloud connections

Export linked Meta business accounts and phone credentials in a passphrase-encrypted archive, then import them on another Whatsapp Cloud installation.

AES-256-GCM encrypted Official Meta Cloud
Step 1 · Source server

Export connections

Export every linked number at once, or choose only the Meta connections you need.

Connections to include
— connectionsReady to package without loading every connection into this page.
0 selected
Loading linked sessions…
Page 1 of 1
Step 2 · Destination server

Import connections

Upload an encrypted connection archive created on another server.

Disconnect or retire the source installation before using imported credentials here.