> ## Documentation Index
> Fetch the complete documentation index at: https://docs.60db.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# WhatsApp

> Connect a business number, manage conversations and send messages through 60db

WhatsApp is a workspace service in 60db. Connect your own WhatsApp Business account, receive conversations in the dashboard and send messages through the 60db API.

## Connect a business number

1. Open **WhatsApp → Numbers** in the dashboard.
2. Select **Add channel**. Choose **Connect existing WhatsApp Business app** to keep using the app on your phone, or **Register new number** for Cloud API messaging without Business app coexistence.
3. For the Business app option, review **Before you connect** and select **I meet the requirements — Continue** to open Meta signup. No registration PIN is shown. For the standard option, choose a six-digit two-step verification PIN or use its existing PIN, then select **Continue with Meta**; you can also enter the PIN after authorization. Select the same connection type in Meta and 60db.
4. For Business app onboarding, choose the verified number returned to 60db and select **Connect selected number**. For an ordinary number without a supplied PIN, enter the PIN after Meta authorization and select **Register number**. The number must show **connected** before sending messages.

The registration PIN is separate from the SMS verification code requested by Meta. Account connection requires a workspace **owner or admin**, an active paid platform plan and a platform administrator's completed Meta app configuration.

The Business app checklist covers app version 2.24.17 or later, an existing Business app number, Meta eligibility and access to manage the business. Meta supplies the verification steps. History sharing is optional and can cover up to six months. Linked devices are unlinked during onboarding; supported devices can be relinked afterwards. Keep the app open while contacts and any shared history sync. [Meta's current requirements](https://developers.facebook.com/documentation/business-messaging/whatsapp/embedded-signup/onboarding-business-app-users)

If a recorded authorization, number discovery or final setup loses its response, use **Retry authorization**, **Retry number discovery** or **Retry connection** in the dialog. The retry retains the original account attempt and details without reopening Meta. If authorization was not recorded, start again in Meta to obtain a fresh code. The PIN stays in this dialog's memory; it is never saved in browser storage. Closing ends the attempt; reopening or **Start again** begins with a blank PIN. Changing workspaces discards this dialog's state. If you close while setup is running, check **Numbers** before starting another attempt: the backend may still finish.

Use **Reconnect** beside a stopped number and select that same number in Meta. The dashboard checks the selected number and the returned connection state before announcing success. A setup failure or a connection stopped during setup does not appear as connected.

If setup is unconfirmed, use **Retry connection** before the session expires. The backend checks the original app subscription and phone readiness before completing an interrupted setup; it does not blindly repeat an uncertain registration. A failed or expired attempt requires **Start again**. A retry of an already attempted registration does not change the Meta PIN. Authorization can only be recovered if its account token was saved by the backend.

Customer connection tokens stay on the 60db backend. Your application uses a 60db API key with the `whatsapp` scope; it does not need a Meta access token.

If the number requires action after confirmed revoked/expired access, missing grants or loss of its selected account/number binding, restore the required Meta access and reconnect. An unavailable permission/asset check alone does not disconnect the number. Disconnect clears its stored token and stops pending campaigns and assistant work while retaining history. Owners/admins can stop an existing connection after paid access ends. Re-enable the assistant and resume paused conversations explicitly after reconnecting.

Meta policy restrictions can block particular actions while the number remains connected. A blocked send or utility-template creation reports the restriction; review its expiry and remediation in WhatsApp Manager or Meta Business Support Home. The backend checks restrictions again before dispatch and AI credit spending. Inbound history remains available, and a warning alone does not disconnect the number. Reconnecting the same account does not bypass its restrictions. After expiry, start a new eligible action; failed sends and campaigns are not automatically replayed. [Restriction details](https://docs.60db.ai/api-reference/whatsapp/resources.md#policy-restrictions)

## Keep using WhatsApp Business app

The configured Meta flow can onboard eligible existing WhatsApp Business app numbers. 60db accepts a Business account-only finish, discovers eligible phones on the backend and requires you to choose the intended number. No registration PIN is needed for verified Business app mode. Reconnecting an existing 60db number restricts selection to that same phone.

**Numbers** shows contact/history request states separately from history receipt. **Request accepted** does not mean history was shared or imported. History can show **Importing**, **Import complete** or **Sharing declined in Business app**. An unconfirmed import request is never automatically repeated; check Business Platform settings in the app or contact support. Reconnecting or disconnecting locally preserves prior import attempts.

Imported history cannot start AI, increment live unread counts or extend a reply window. Business app sends take over pending AI. The inbox labels imported history, app sends and edits; deleted messages display a placeholder. Historical media remains a placeholder until Meta shares the asset. Address-book sync preserves consent: a synced contact does not imply opt-in.

Business app onboarding requires an eligible account and the platform administrator's configured Meta flow and webhook fields. The implementation is checked locally with fixtures; actual signup, permission grants and provider delivery require testing with your configured app. [Business app API behavior](https://docs.60db.ai/api-reference/whatsapp/resources.md#business-app-callback-support)

## Work in the inbox

The main 60db navigation remains available alongside a dedicated WhatsApp menu. Use **Inbox** to search conversations, read messages, take over a conversation and resolve or reopen it.

A customer's inbound message opens a **24-hour reply window**. Send text replies while that window is open. Outside the window, choose an approved template. Sending a template does not itself reopen the reply window.

Use **Attach file** to send images, audio, video or documents within the reply window. Add an optional caption for images, video and documents. Select an inbound attachment to load its preview or native playback controls, then save it. [Attachment formats and limits](https://docs.60db.ai/api-reference/whatsapp/media.md) apply.

Message states distinguish queued, sent, delivered, read, failed and delivery unconfirmed. If the provider's result is ambiguous, 60db leaves the message unconfirmed and does not automatically resend it.

## Configure the assistant

Open **WhatsApp → Assistant**, choose a number and enable its assistant. Start in **Drafts** mode: a teammate reviews each generated reply. Add business instructions, choose up to ten workspace Memory collections, and optionally enable STT for incoming voice messages and TTS for voice replies. Judge is enabled by default and requests a teammate when a reply is rejected or falls below the confidence threshold.

Save the settings for each number. Unsaved edits are retained when switching numbers on this page. Saving cancels pending attempts; new customer messages use the saved configuration. Existing manual conversations require explicit resumption before automatic replies begin.

In **Inbox**, review the latest draft, its credit cost and breakdown. **Approve and send** queues that reply. **Edit as text reply** takes over and copies the proposed text into an empty composer; it does not send or overwrite an unsent reply. On mobile, **Write a manual reply** opens the composer while a draft is ready. Voice transcripts appear with their inbound message when available.

Use **Take over** to pause the assistant. **Resume drafts** or **Resume automatic replies** applies to future customer messages. Generation failures offer an explicit retry, which reuses completed stages. A Judge handoff requires a teammate response rather than draft approval. See the [assistant API and billing behavior](https://docs.60db.ai/api-reference/whatsapp/assistant.md).

## Templates and consent

Use **Templates** to sync your Meta templates or submit a text template for review. Only templates with status `APPROVED` can be sent. Dashboard creation supports text templates without variables; create more complex templates in Meta and sync them to 60db. The API accepts Meta template components.

Use **Contacts** to record a customer's explicit opt-in or opt-out. Adding a contact is not evidence of consent. The API requires recorded consent when initiating a conversation with a contact who has never messaged the number. An opt-out blocks outbound messages.

## Prepare and schedule a broadcast

1. Open **WhatsApp → Broadcasts → New broadcast** and choose a connected business number.
2. Choose an approved text template. Fill numbered variables with shared text, each contact's name or each contact's phone number. A missing contact name uses their phone number.
3. Select recipients with recorded opt-in. Search by name/phone or an exact tag, select individual contacts or the current page, or use **Select all matching**. Selection stays across pages and filters, with a maximum of 1,000 recipients per campaign.
4. Choose a recipient in **Message preview** to review their personalized message, then **Save draft**. Saving sends nothing. **Back to broadcasts → Continue draft** retains unsaved inputs while you stay in this section.
5. Inspect saved recipient messages in the campaign detail. Choose **Send now** or **Schedule for later**, enter the date/time in the displayed local time zone, and confirm the review dialog.

The dashboard editor supports approved text templates with numbered variables. Use the [native broadcast API](https://docs.60db.ai/api-reference/whatsapp/broadcasts.md) for media, buttons or named variables. Saved drafts have a fixed audience and message; cancel and recreate one to edit it. A changed approved template blocks scheduling or dispatch so it cannot silently replace the message you reviewed.

Campaign details show recipient outcomes separately from dispatch completion. **Dispatch complete** means all attempts have settled; it does not confirm that every recipient received the message. Unconfirmed sends are never automatically resent. **Cancel broadcast** stops remaining sends and waits for any provider call already in progress; it cannot recall accepted messages.

## Access and pricing

WhatsApp module access is included in **Starter, Creator and Pro platform plans**, with no separate platform subscription. Meta messaging fees are billed by Meta to the connected business. AI usage draws from existing 60db workspace credits when AI features are used.

Flow licences do not include WhatsApp platform access.

| Role | Access |
| - | - |
| Owner / admin | Read, send, manage assistants, templates, broadcasts and webhooks, connect and disconnect numbers |
| Developer | Read, send, manage assistants, templates, broadcasts and webhooks |
| Member | Read, send, update conversations and contacts |
| Viewer | Read only |

Read access remains available for history when paid sending access ends. The backend checks current membership, plan and API key scope on requests and rechecks the sender before queued dispatch.

## Build with the API

In **WhatsApp → Webhooks**, enter your public HTTPS endpoint and choose the events to receive. The initial selection covers incoming messages, message statuses and successful connections. Select `number.disconnected` and `number.action_required` for connection alerts, `number.updated` for provider/sync/history changes, `message.mirrored` for Business app sends, `message.updated` for mirrored edits/deletions, or `assistant.failed` for generation failures. Save the signing secret shown once before adding another endpoint.

* [Send a message](https://docs.60db.ai/api-reference/whatsapp/send-message.md)
* [Upload and download attachments](https://docs.60db.ai/api-reference/whatsapp/media.md)
* [Configure native AI replies and review drafts](https://docs.60db.ai/api-reference/whatsapp/assistant.md)
* [Prepare, schedule and cancel consent-based broadcasts through the API](https://docs.60db.ai/api-reference/whatsapp/broadcasts.md)
* [Numbers, contacts, conversations and templates](https://docs.60db.ai/api-reference/whatsapp/resources.md)
* [Signed webhook events](https://docs.60db.ai/api-reference/whatsapp/webhook-events.md)

WhatsApp uses its own webhook subscriptions. Existing voice or dialer webhook endpoints do not automatically receive WhatsApp events.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.