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

# Connect WhatsApp

> Connect WhatsApp numbers through Meta or 360dialog, bring them into Tars, and assign each number to an agent.

export const Browser = ({url, children}) => <div className="tars-browser">
    <div className="tars-browser-bar">
      <span className="tars-browser-dots">
        <i />
        <i />
        <i />
      </span>
      {url ? <span className="tars-browser-url">{url}</span> : null}
    </div>
    <div className="tars-browser-view">{children}</div>
  </div>;

export const img = {
  activity: {
    activityTimeline: "/docs/guides/activity/images/activity-timeline.png",
    capturedVariablesPanel: "/docs/guides/activity/images/captured-variables-panel.png",
    dataViewCards: "/docs/guides/activity/images/data-view-cards.png",
    exportDataDialog: "/docs/guides/activity/images/export-data-dialog.png",
    tasksPanelExportReady: "/docs/guides/activity/images/tasks-panel-export-ready.png"
  },
  analytics: {
    analyticsOverview: "/docs/guides/analytics/images/analytics-overview.png",
    exploreGallery: "/docs/guides/analytics/images/explore-gallery.png",
    exploreTab: "/docs/guides/analytics/images/explore-tab.png",
    goalForm: "/docs/guides/analytics/images/goal-form.png",
    goalsTab: "/docs/guides/analytics/images/goals-tab.png",
    improveDiagnostics: "/docs/guides/analytics/images/improve-diagnostics.png",
    improveTab: "/docs/guides/analytics/images/improve-tab.png",
    teamTab: "/docs/guides/analytics/images/team-tab.png"
  },
  billing: {
    billingOverview: "/docs/guides/billing/images/billing-overview.png",
    buyConversationsDialog: "/docs/guides/billing/images/buy-conversations-dialog.png",
    buySeatsDialog: "/docs/guides/billing/images/buy-seats-dialog.png",
    livechatSeatsTab: "/docs/guides/billing/images/livechat-seats-tab.png",
    organizationDeletionLifecycle: "/docs/guides/billing/images/organization-deletion-lifecycle.svg",
    organizationSwitcher: "/docs/guides/billing/images/organization-switcher.png",
    rolesAndAccessMatrix: "/docs/guides/billing/images/roles-and-access-matrix.png"
  },
  building: {
    agentBehaviorGuardrails: "/docs/guides/building/images/agent-behavior-guardrails.png",
    agentCardMenu: "/docs/guides/building/images/agent-card-menu.png",
    agentConfigure: "/docs/guides/building/images/agent-configure.png",
    agentExitRoutesDialog: "/docs/guides/building/images/agent-exit-routes-dialog.png",
    agentLibrary: "/docs/guides/building/images/agent-library.png",
    agentModelParameters: "/docs/guides/building/images/agent-model-parameters.png",
    aiAgentGambitLoop: "/docs/guides/building/images/ai-agent-gambit-loop.svg",
    builderBasics: "/docs/guides/building/images/builder-basics.png",
    builderConnectHandlePanel: "/docs/guides/building/images/builder-connect-handle-panel.png",
    builtInToolsDialog: "/docs/guides/building/images/built-in-tools-dialog.png",
    configureDebugTab: "/docs/guides/building/images/configure-debug-tab.png",
    configureLanguage: "/docs/guides/building/images/configure-language.png",
    configureNotifications: "/docs/guides/building/images/configure-notifications.png",
    createAgentDialog: "/docs/guides/building/images/create-agent-dialog.png",
    draftPublishRollbackPinning: "/docs/guides/building/images/draft-publish-rollback-pinning.svg",
    draftSwitcherChip: "/docs/guides/building/images/draft-switcher-chip.png",
    duplicateAgentDialog: "/docs/guides/building/images/duplicate-agent-dialog.png",
    flowConditions: "/docs/guides/building/images/flow-conditions.png",
    gambitPalette: "/docs/guides/building/images/gambit-palette.png",
    gambits: {
      gambitAiAgent: "/docs/guides/building/gambits/images/gambit-ai-agent.png",
      gambitApiCall: "/docs/guides/building/gambits/images/gambit-api-call.png",
      gambitAutoSuggestion: "/docs/guides/building/gambits/images/gambit-auto-suggestion.png",
      gambitButton: "/docs/guides/building/gambits/images/gambit-button.png",
      gambitCard: "/docs/guides/building/gambits/images/gambit-card.png",
      gambitChannel: "/docs/guides/building/gambits/images/gambit-channel.png",
      gambitCustomCode: "/docs/guides/building/gambits/images/gambit-custom-code.png",
      gambitDateTime: "/docs/guides/building/gambits/images/gambit-date-time.png",
      gambitGeoLocation: "/docs/guides/building/gambits/images/gambit-geo-location.png",
      gambitLanguage: "/docs/guides/building/gambits/images/gambit-language.png",
      gambitLiveChat: "/docs/guides/building/gambits/images/gambit-live-chat.png",
      gambitMediaUpload: "/docs/guides/building/gambits/images/gambit-media-upload.png",
      gambitNoInput: "/docs/guides/building/gambits/images/gambit-no-input.png",
      gambitRedirect: "/docs/guides/building/gambits/images/gambit-redirect.png",
      gambitStarRating: "/docs/guides/building/gambits/images/gambit-star-rating.png",
      gambitStartAndEnd: "/docs/guides/building/gambits/images/gambit-start-and-end.png",
      gambitText: "/docs/guides/building/gambits/images/gambit-text.png",
      gambitTrigger: "/docs/guides/building/gambits/images/gambit-trigger.png"
    },
    languagesTranslateGambit: "/docs/guides/building/images/languages-translate-gambit.png",
    languageSystemMessages: "/docs/guides/building/images/language-system-messages.png",
    newDraftDialog: "/docs/guides/building/images/new-draft-dialog.png",
    outputComponentsGrid: "/docs/guides/building/images/output-components-grid.png",
    publishDialog: "/docs/guides/building/images/publish-dialog.png",
    systemPromptDialog: "/docs/guides/building/images/system-prompt-dialog.png",
    testModeEventLog: "/docs/guides/building/images/test-mode-event-log.png",
    testModePanel: "/docs/guides/building/images/test-mode-panel.png",
    validationProblemsPanel: "/docs/guides/building/images/validation-problems-panel.png",
    variablePickerPanel: "/docs/guides/building/images/variable-picker-panel.png",
    variablePillInserted: "/docs/guides/building/images/variable-pill-inserted.png",
    versionsDraftsPanel: "/docs/guides/building/images/versions-drafts-panel.png"
  },
  campaigns: {
    campaignFlavorsTriggers: "/docs/guides/campaigns/images/campaign-flavors-triggers.svg",
    campaignReplyRouting: "/docs/guides/campaigns/images/campaign-reply-routing.svg",
    campaignSendAnatomy: "/docs/guides/campaigns/images/campaign-send-anatomy.svg",
    createACampaign: "/docs/guides/campaigns/images/create-a-campaign.png",
    walletReserveSettleRefund: "/docs/guides/campaigns/images/wallet-reserve-settle-refund.svg",
    webhookCampaignContractLocking: "/docs/guides/campaigns/images/webhook-campaign-contract-locking.svg",
    webhookCampaignLifecycleStates: "/docs/guides/campaigns/images/webhook-campaign-lifecycle-states.svg",
    webhookCampaignOneCallOneDelivery: "/docs/guides/campaigns/images/webhook-campaign-one-call-one-delivery.svg"
  },
  channels: {
    distributeWhatsappConnect: "/docs/guides/channels/images/distribute-whatsapp-connect.png",
    whatsappConnectDialogWaiting: "/docs/guides/channels/images/whatsapp-connect-dialog-waiting.png",
    whatsappEmptyState: "/docs/guides/channels/images/whatsapp-empty-state.png"
  },
  deploy: {
    bridgeEventGambitSection: "/docs/guides/deploy/images/bridge-event-gambit-section.png",
    deploymentSurfacesAndChannels: "/docs/guides/deploy/images/deployment-surfaces-and-channels.svg",
    designAgentTab: "/docs/guides/deploy/images/design-agent-tab.png",
    designLauncherTab: "/docs/guides/deploy/images/design-launcher-tab.png",
    embedIframeTab: "/docs/guides/deploy/images/embed-iframe-tab.png",
    embedTheWidget: "/docs/guides/deploy/images/embed-the-widget.png",
    mobileAppIntegration: "/docs/guides/deploy/images/mobile-app-integration.png",
    onYourDomain: "/docs/guides/deploy/images/on-your-domain.png",
    shareYourAgentLink: "/docs/guides/deploy/images/share-your-agent-link.png"
  },
  developer: {
    api: {
      channelSendTemplateVsMessage: "/docs/developer/api/images/channel-send-template-vs-message.svg",
      endUsers: {
        endUsersListCursorPagination: "/docs/developer/api/end-users/images/end-users-list-cursor-pagination.svg"
      },
      triggerCallConversationLifecycle: "/docs/developer/api/images/trigger-call-conversation-lifecycle.svg"
    },
    developerSurfacesMap: "/docs/developer/images/developer-surfaces-map.svg",
    embed: {
      embedConfigToWidgetContext: "/docs/developer/embed/images/embed-config-to-widget-context.svg",
      hostPageBridgeFlow: "/docs/developer/embed/images/host-page-bridge-flow.svg",
      identitySigningFlow: "/docs/developer/embed/images/identity-signing-flow.svg",
      scriptVsIframeEmbed: "/docs/developer/embed/images/script-vs-iframe-embed.svg"
    },
    mobile: {
      bridgeMessageProtocol: "/docs/developer/mobile/images/bridge-message-protocol.svg",
      webviewBridgeArchitecture: "/docs/developer/mobile/images/webview-bridge-architecture.svg"
    }
  },
  endUsers: {
    anonymousToIdentifiedProfile: "/docs/guides/end-users/images/anonymous-to-identified-profile.svg",
    bulkActionBar: "/docs/guides/end-users/images/bulk-action-bar.png",
    campaignConsentGate: "/docs/guides/end-users/images/campaign-consent-gate.svg",
    consentPerChannelStates: "/docs/guides/end-users/images/consent-per-channel-states.svg",
    dynamicVsStaticSegments: "/docs/guides/end-users/images/dynamic-vs-static-segments.svg",
    endUserDirectory: "/docs/guides/end-users/images/end-user-directory.png",
    endUserProfileAcrossChannels: "/docs/guides/end-users/images/end-user-profile-across-channels.svg",
    endUserProfilePanes: "/docs/guides/end-users/images/end-user-profile-panes.png",
    profileMergeAndTakeoverProtection: "/docs/guides/end-users/images/profile-merge-and-takeover-protection.svg",
    segmentBuilder: "/docs/guides/end-users/images/segment-builder.png",
    segmentsPage: "/docs/guides/end-users/images/segments-page.png"
  },
  getStarted: {
    agentStates: "/docs/get-started/images/agent-states.svg",
    buildToLivePath: "/docs/get-started/images/build-to-live-path.svg",
    dashboardSidebarMap: "/docs/get-started/images/dashboard-sidebar-map.png",
    organizationOwnershipAndRoles: "/docs/get-started/images/organization-ownership-and-roles.svg",
    quickstart: {
      step1CreateYourAccount: "/docs/get-started/images/quickstart/step-1-create-your-account.png",
      step3ConnectTheAiAgent: "/docs/get-started/images/quickstart/step-3-connect-the-ai-agent.png",
      step4TestMode: "/docs/get-started/images/quickstart/step-4-test-mode.png"
    },
    quickstartCanvas: "/docs/get-started/images/quickstart-canvas.png"
  },
  knowledge: {
    addASource: "/docs/guides/knowledge/images/add-a-source.png",
    addRetrieverPicker: "/docs/guides/knowledge/images/add-retriever-picker.png",
    attachKnowledgeGambit: "/docs/guides/knowledge/images/attach-knowledge-gambit.png",
    configureARetriever: "/docs/guides/knowledge/images/configure-a-retriever.png",
    createKnowledgeBaseDialog: "/docs/guides/knowledge/images/create-knowledge-base-dialog.png",
    customRetrieverDialog: "/docs/guides/knowledge/images/custom-retriever-dialog.png",
    datasetTab: "/docs/guides/knowledge/images/dataset-tab.png",
    documentChangeReindexLifecycle: "/docs/guides/knowledge/images/document-change-reindex-lifecycle.svg",
    documentsTabPreview: "/docs/guides/knowledge/images/documents-tab-preview.png",
    importAWebsite: "/docs/guides/knowledge/images/import-a-website.png",
    kbList: "/docs/guides/knowledge/images/kb-list.png",
    retrieverIndexStates: "/docs/guides/knowledge/images/retriever-index-states.svg",
    retrieverQueryPipeline: "/docs/guides/knowledge/images/retriever-query-pipeline.svg",
    standardVsParentChildChunking: "/docs/guides/knowledge/images/standard-vs-parent-child-chunking.svg",
    syncManagement: "/docs/guides/knowledge/images/sync-management.png",
    testRetriever: "/docs/guides/knowledge/images/test-retriever.png"
  },
  liveChat: {
    agentWorkspace: "/docs/guides/live-chat/images/agent-workspace.png",
    assignedAgentPicker: "/docs/guides/live-chat/images/assigned-agent-picker.png",
    automaticAssignmentRouting: "/docs/guides/live-chat/images/automatic-assignment-routing.svg",
    availabilityDropdown: "/docs/guides/live-chat/images/availability-dropdown.png",
    cannedResponses: "/docs/guides/live-chat/images/canned-responses.png",
    composerPreferences: "/docs/guides/live-chat/images/composer-preferences.png",
    copilotPanel: "/docs/guides/live-chat/images/copilot-panel.png",
    filterConversationsDialog: "/docs/guides/live-chat/images/filter-conversations-dialog.png",
    inboxAnalyticsTab: "/docs/guides/live-chat/images/inbox-analytics-tab.png",
    inboxAvailabilityTab: "/docs/guides/live-chat/images/inbox-availability-tab.png",
    inboxesSettings: "/docs/guides/live-chat/images/inboxes-settings.png",
    inboxRoutingTab: "/docs/guides/live-chat/images/inbox-routing-tab.png",
    labelsSettings: "/docs/guides/live-chat/images/labels-settings.png",
    newAttributeDialog: "/docs/guides/live-chat/images/new-attribute-dialog.png",
    newCannedResponseDialog: "/docs/guides/live-chat/images/new-canned-response-dialog.png",
    notificationPreferences: "/docs/guides/live-chat/images/notification-preferences.png",
    notificationsPage: "/docs/guides/live-chat/images/notifications-page.png",
    pickupTargetCard: "/docs/guides/live-chat/images/pickup-target-card.png",
    resolveMenu: "/docs/guides/live-chat/images/resolve-menu.png",
    searchDialog: "/docs/guides/live-chat/images/search-dialog.png",
    seatGateConversation: "/docs/guides/live-chat/images/seat-gate-conversation.png",
    seatsSettings: "/docs/guides/live-chat/images/seats-settings.png",
    workTheInbox: "/docs/guides/live-chat/images/work-the-inbox.png"
  },
  security: {
    addOpenRouterKeyDialog: "/docs/guides/security/images/add-open-router-key-dialog.png",
    auditChainVerified: "/docs/guides/security/images/audit-chain-verified.png",
    auditEventDrawer: "/docs/guides/security/images/audit-event-drawer.png",
    auditExportDialog: "/docs/guides/security/images/audit-export-dialog.png",
    auditLogViewer: "/docs/guides/security/images/audit-log-viewer.png",
    auditRecordLifecycle: "/docs/guides/security/images/audit-record-lifecycle.svg",
    logPrivacyRedactionEnabled: "/docs/guides/security/images/log-privacy-redaction-enabled.png",
    modelProviderEmptyState: "/docs/guides/security/images/model-provider-empty-state.png",
    privacySettings: "/docs/guides/security/images/privacy-settings.png",
    siemConnectWizard: "/docs/guides/security/images/siem-connect-wizard.png",
    supportActorMasking: "/docs/guides/security/images/support-actor-masking.svg"
  },
  tools: {
    addToolModal: "/docs/guides/tools/images/add-tool-modal.png",
    addToolsPanel: "/docs/guides/tools/images/add-tools-panel.png",
    codekitActionEditor: "/docs/guides/tools/images/codekit-action-editor.png",
    codekitConnectToolkitsDialog: "/docs/guides/tools/images/codekit-connect-toolkits-dialog.png",
    codekitSchemaDialog: "/docs/guides/tools/images/codekit-schema-dialog.png",
    codekitToolkit: "/docs/guides/tools/images/codekit-toolkit.png",
    codekitToolkitAnatomy: "/docs/guides/tools/images/codekit-toolkit-anatomy.svg",
    createActionDialog: "/docs/guides/tools/images/create-action-dialog.png",
    createCodekitDialog: "/docs/guides/tools/images/create-codekit-dialog.png",
    responseFilteringDialog: "/docs/guides/tools/images/response-filtering-dialog.png",
    toolGambitEditorAgentMode: "/docs/guides/tools/images/tool-gambit-editor-agent-mode.png",
    toolGambitEditorWorkflowMode: "/docs/guides/tools/images/tool-gambit-editor-workflow-mode.png",
    toolkitDetail: "/docs/guides/tools/images/toolkit-detail.png",
    toolsConnected: "/docs/guides/tools/images/tools-connected.png",
    toolsDirectory: "/docs/guides/tools/images/tools-directory.png",
    viewActionsModal: "/docs/guides/tools/images/view-actions-modal.png",
    workflowModeResponse: "/docs/guides/tools/images/workflow-mode-response.png"
  }
};

export const planNames = {
  premium: "Premium",
  enterprise: "Enterprise"
};

export const props_0 = undefined

export const urls = {
  app: "https://dashboard.hellotars.com",
  site: "https://hellotars.com",
  support: "mailto:support@hellotars.com",
  status: "https://status.hellotars.com"
};

At the end of this page, a WhatsApp number is connected, labeled, and assigned to an agent that answers messages on it.

## Before you start

Before you start, sign in to <a href={urls.app}>the dashboard</a> and select the organization you want to work in.

<Info>
  This capability needs the **{planNames[props_0.plan] ?? props_0.plan}** plan or higher.
</Info>

* Only an organization Admin can connect, reconnect, or remove a number. Admins and Members can assign an agent from the numbers list. Only Admins can change the number from an agent's **Distribute** page.
* To connect through Meta, you need a Facebook login with access to the business that owns the WhatsApp Business Account. You can create the account during signup. Allow popups for the dashboard, because the Facebook signup opens in a popup window.
* To connect a number you already run on 360dialog, you need the API key for that number from your 360dialog account.

For how numbers, providers, and health states fit together, see [Channels overview](/docs/guides/channels/channels-overview).

## Open the WhatsApp page

Go to **Settings**, then **WhatsApp** under **Channels**. Before the first number is connected, the page shows a **Connect WhatsApp** empty state with a **Connect WhatsApp number** button.

<Frame>
  <img src={img.channels.whatsappEmptyState} alt="The WhatsApp page in Settings before any number is connected, showing the Connect WhatsApp empty state with its Connect WhatsApp number button" />
</Frame>

Members who are not Admins see **No WhatsApp numbers yet** instead, without the button.

## Choose a provider

Select **Connect WhatsApp number**. The **Connect WhatsApp number** dialog asks you to pick one of two providers.

| Option            | How you connect                             | Who bills message costs             |
| ----------------- | ------------------------------------------- | ----------------------------------- |
| **Direct (Meta)** | Through Facebook                            | Meta bills you directly             |
| **360dialog**     | With an API key from your 360dialog account | Tars bills you on your Tars invoice |

Under **360dialog**, choose **I already have a 360dialog number**. The **Set up a new number with 360dialog** option shows **Not available yet**. For now, create the number in 360dialog, then connect it with its API key.

Some notices can appear in the dialog:

* If Meta cannot be used, a note under **Direct (Meta)** says why, for example **Facebook's window is blocked here**. Allow the Facebook script, then select **Try again**.
* If your organization already has numbers on the other provider, **You'll get two bills** warns that both providers bill you until the move is finished.
* While another WhatsApp connection is still finishing, **Continue** stays disabled until it completes.

## Connect a number through Meta

<Steps>
  <Step title="Choose Direct (Meta) and select Continue">
    A dialog titled **Continue in the Facebook window** opens next to the Facebook popup. It lists **Facebook signup**, **Verify with Meta**, and **Add your numbers**.
  </Step>

  <Step title="Finish the Facebook signup">
    In the popup, sign in and pick your WhatsApp Business Account and a phone number. Select **Cancel** in the dialog to stop.
  </Step>

  <Step title="Wait for Verify with Meta">
    The dialog changes to **Verifying your account with Meta…**. You cannot close it during this step, because the Facebook sign-in expires quickly.
  </Step>

  <Step title="Watch Add your numbers">
    The dialog changes to **Adding your numbers** and lists each number with a badge. Badges move to **Healthy** or **Needs attention**.
  </Step>

  <Step title="Read the result">
    The dialog ends with **WhatsApp connected** and a line such as **1 number ready**. Select **Assign agents** to continue on the numbers list.
  </Step>
</Steps>

<Frame>
  <img src={img.channels.whatsappConnectDialogWaiting} alt="The connect dialog titled Continue in the Facebook window, listing the steps Facebook signup, Verify with Meta, and Add your numbers, with a Cancel button" />
</Frame>

Some result states differ:

* If every number on the account is already connected, the dialog says **WhatsApp connected** with **Every number on this business account is already in your workspace**.
* If no number could be set up, the title is **We couldn't finish setting up your numbers**. Each number shows what it needs, and **Try again** restarts the flow.
* If you came from **Fix in Settings** or **Manage number in Settings** in Distribute, an **Assign to an agent** button returns you there.
* If your business is not verified with Meta, the dialog notes that Meta limits messages to new people while unverified.

The success dialog closes on its own after a short countdown. Select **Keep open** to stop the countdown.

### If the flow fails

The dialog shows a title such as **The Facebook window didn't open** or **You left the Facebook window**, and the failed step turns red. Nothing is connected in these cases. Select **Try again** to restart from the beginning.

Some failures show a **Reference** line and a **Copy diagnostics** button. Include the reference when you email support. If your number is already on 360dialog, select **Already on 360dialog? Connect with your API key** instead.

Common failure titles and what to do:

| Title                               | What to do                                                                      |
| ----------------------------------- | ------------------------------------------------------------------------------- |
| **The Facebook window didn't open** | Allow popups for the dashboard, then try again.                                 |
| **No phone number was picked**      | Run the signup again and select a number, not only a business account.          |
| **This number isn't ready yet**     | Finish setting the number up in WhatsApp Manager, then try again.               |
| **Couldn't add this number**        | The number is already connected to another organization. Remove it there first. |

### If adding numbers takes long

Select **Continue in background** to close the dialog while numbers are still being added. A chip at the top right of the WhatsApp page shows **Adding 1 of 3** style progress. Select the chip to reopen the dialog.

If any number ends in **Needs attention**, the chip changes to **1 number needs attention**. An amber notice titled **Some numbers couldn't be added** lists each number with guidance. Most guidance asks you to fix the cause in WhatsApp Manager, then connect again. Select **Dismiss** on the notice when you are done.

## Connect a 360dialog number with an API key

<Warning>
  Connecting sends the number's incoming messages to Tars. Until an agent is assigned, those messages are dropped. Pick the agent in the dialog, or assign one right after you connect.
</Warning>

<Steps>
  <Step title="Choose 360dialog, then I already have a 360dialog number">
    Select **Continue**. The **Connect with a 360dialog API key** dialog opens.
  </Step>

  <Step title="Paste the key and select Check key">
    Paste the key into **360dialog API key**. Nothing is connected at this step.
  </Step>

  <Step title="Confirm the number">
    The dialog shows **This key connects** followed by the phone number. Check that it is the number you meant.
  </Step>

  <Step title="Pick an agent">
    Choose the agent under **Agent**, or leave it empty to assign one later.
  </Step>

  <Step title="Select Connect this number">
    A **Number connected** toast confirms the connection. The number joins the numbers list.
  </Step>
</Steps>

If the toast also says the number has no agent assigned, assign one on the numbers list. See [Assign an agent to a number](#assign-an-agent-to-a-number).

Common problems the dialog reports and what to do:

| Problem                                                             | What to do                                                   |
| ------------------------------------------------------------------- | ------------------------------------------------------------ |
| 360dialog does not accept the key                                   | Copy the key again from your 360dialog account and paste it. |
| The number is already connected in another organization             | Contact support to move the number.                          |
| 360dialog accepted the key, but the number cannot send messages yet | Finish the number's setup in 360dialog, then try again.      |
| Tars could not reach 360dialog                                      | Nothing changed. Try again in a moment.                      |

## Work with the numbers list

After the first connection, the WhatsApp page lists every connected number, from both providers.

Each row has three columns and a **Details** button:

* **Number** shows the color dot, the alias or verified name, up to two tags, and the phone number with its WhatsApp Business Account name.
* **Agent** shows the assigned agent, or a **Not connected** or **Assignment needs review** badge.
* **Status** shows the health badge next to a mode badge of **Production**, **Staging**, or **Test**. When a provider reports a specific problem, hover the badge to read the guidance. Health labels are explained in [Channels overview](/docs/guides/channels/channels-overview).

Above the table, search by number or alias, filter with **All status**, and filter with **Tags** once any number has a tag. Admins also see two buttons:

* **Sync from Meta** checks the connected Meta WhatsApp Business Accounts for new or changed numbers. A toast reports what was added, recovered, or needs attention. If you have no Meta numbers, the toast says **No Meta numbers to sync**.
* **Connect WhatsApp number** opens the provider choice again for another number.

When a Meta number shows **Token expiring** or **Token expired**, Admins see an inline **Reconnect** link in the **Status** column. It opens the provider choice. Choose **Direct (Meta)** and select **Continue** to run the Facebook flow, which ends with **Connection renewed**.

## Open the number detail sheet

Select a row, or its **Details** button, to open the detail sheet. The page address records the open number, so a reload reopens the same sheet. Closing the sheet clears the address again.

The sheet has these sections:

* **Connection** shows the verified name, the WhatsApp Business Account, the **Provider** (**Meta** or **360dialog**), and the health badge. For a **Needs attention** number, guidance appears under the badge. For a Meta number, Admins also get **Refresh now** for the access token and, when the token is in trouble, **Reconnect with Facebook**.
* **Manage connection** appears for Admins on a 360dialog number. See [Manage a 360dialog number](#manage-a-360dialog-number).
* **Agent** holds the same **Assign agent** picker as the table.
* **Identity** holds the color, alias, and tags, with a preview of how the number appears in lists.
* **Danger zone** holds **Remove number from workspace** for Admins. Removing keeps open conversations in the inbox, but new messages to the number no longer reach any agent.

### Manage a 360dialog number

The **Manage connection** section has two controls.

* **Incoming messages** has a **Check delivery** button. The result is **Delivering to Tars** or **Delivering elsewhere**.
* **360dialog API key** has a **Copy API key** button. It opens the **Copy the 360dialog API key** dialog, where **Copy key** puts the key on your clipboard. The key is never shown on screen, and each copy is recorded in your audit log.

<Warning>
  Restoring delivery moves incoming messages for the number to Tars. If another system receives them today, it stops receiving them. Sending is not affected.
</Warning>

When the check shows **Delivering elsewhere**, select **Restore delivery to Tars**, then **Point to Tars** in the confirmation dialog. A toast confirms that the number now delivers to Tars.

If 360dialog pauses sending because of unpaid invoices, the number shows **Needs attention** with that guidance. After 360dialog confirms the account is settled, an Admin selects **Resume sending on this number**. Tars cannot see your 360dialog invoices, so if sending is still paused, the next message raises the notice again.

## Assign an agent to a number

You can assign from the numbers list or from the agent's **Distribute** page. Both change where new WhatsApp messages on the number route.

<Warning>
  Changing or clearing an assignment can interrupt replies. If an active or paused webhook campaign uses the number, an extra dialog names that risk before the change applies. It is titled **Change this agent?** or **Unassign this agent?** on the numbers list, and **Change this WhatsApp connection?** in Distribute.
</Warning>

### From the numbers list

<Steps>
  <Step title="Open the Assign agent picker">
    Select **Assign agent** in the **Agent** column, or open the detail sheet and use the **Agent** section.
  </Step>

  <Step title="Pick an agent">
    Agents already used by another number stay listed but disabled, with a **Used by** note naming that number. A number can hold one agent.
  </Step>

  <Step title="Confirm a change">
    If the number already had an agent, a **Replace this agent?** dialog opens. Select **Change agent** to apply. A first assignment applies without this dialog.
  </Step>
</Steps>

To clear an assignment, open the same picker and select **Unassign agent**. An **Unassign this agent?** dialog warns that messages to the number will not reach any agent.

A number whose stored assignment no longer resolves shows **Assignment needs review**. Choose an agent to confirm routing, or select **Clear assignment**.

### From the Distribute page

In the builder sidebar, select **Distribute**, then **WhatsApp** under **Channels**. Only Admins can change the connection here. Other members see the connected number, if any, with a note to ask an admin.

<Browser url={urls.app}>
  <img src={img.channels.distributeWhatsappConnect} alt="The WhatsApp section in Distribute, pointing to Settings because the organization has no connected numbers yet" />
</Browser>

<Steps>
  <Step title="Select a number">
    Open **Select a number**. The list groups numbers under **Available** and **Connected to another agent**.
  </Step>

  <Step title="Connect it">
    For a number under **Available**, select **Connect**. A number under **Connected to another agent** opens a confirmation at once.
  </Step>

  <Step title="If you picked a number from another agent, confirm the move">
    Select **Connect to** followed by this agent's name. The number leaves the other agent.
  </Step>
</Steps>

Once connected, the section shows the number, its health badge, and **Messages on this number run** your agent. Use **Change number** or **Disconnect** to update it, or **Manage number in Settings** to open the detail sheet. A number in trouble shows **Fix in Settings** instead.

Numbers marked **Needs attention** or **Temporarily unavailable** cannot be picked. A number is temporarily unavailable while an unfinished campaign send locks it.

## Label your numbers

Labels live in the **Identity** section of the detail sheet. They belong to your organization and make numbers easy to tell apart in tables and pickers.

* **Color** picks a swatch that shows as a dot next to the number everywhere.
* **Alias** replaces the verified name in lists, for example **Support IN**. Type it and select **Save**. Each alias must be unique across your numbers and holds up to 50 characters.
* **Tags** adds a named, colored chip. Type a name, pick a color, and select **Add**. Remove a tag with its **×**. Tags appear on the numbers list and power the **Tags** filter there.

A tag name holds up to 30 characters, and a number holds up to 5 tags. Counters under each field show the current length and tag count. Length is counted in Unicode code points, so most accented letters and simple emoji count once, while a flag or skin-tone emoji counts more than once. When the limit is reached, the field asks you to remove a tag before adding another.

## Verify

Send a WhatsApp message to the connected number from your phone. On the numbers list, the number shows **Healthy** and the assigned agent replies in the conversation.

## Related pages

* [Manage WhatsApp templates](/docs/guides/channels/whatsapp-templates)
* [Channels overview](/docs/guides/channels/channels-overview)
* [Deployments explained](/docs/guides/deploy/deployments-explained)
* [Campaigns overview](/docs/guides/campaigns/campaigns-overview)
