# Agent Channels

**Agent Channels** are the messaging surfaces a customer-facing [Agent](/docs/concepts/agents) answers on: WhatsApp Business numbers, Instagram accounts, and Messenger pages.

This is the account-level integration itself and which agent it is bound to. It is **not** the same as `PUT /agents/{agentId}/settings/{channel}`, which configures how a given agent *behaves* on a channel (split-message rules, conversation-close policy, appearance).

Connecting a new channel requires the OAuth / embedded-signup flow in the app (Meta tokens) and is **not** available via the API. The Public API can list already-connected channels, bind or unbind them to agents, and run WhatsApp number maintenance.

## Binding

Every channel binds to **exactly one** agent.

- Pass `agentId` to bind.
- Pass `null` (or `--clear` on the CLI) to unbind.
- Omit the field to leave the current binding unchanged (WhatsApp `update` also edits the business profile this way).


WhatsApp numbers used by `SEND_WHATSAPP_MESSAGE` nodes need `canSendMessages: true` (an assistant is assigned).

## WhatsApp templates

Approved WhatsApp message templates from Meta are listed separately. Use `template.name` in `SEND_WHATSAPP_MESSAGE` nodes and map parameters into `templateVariables`.

## Operations

| Verb | Path | Purpose |
|  --- | --- | --- |
| `GET` | `/public/v1/channels` | List WhatsApp / Instagram / Messenger + agent bindings |
| `GET` | `/public/v1/channels/whatsapp/templates` | Approved WhatsApp templates |
| `GET` | `/public/v1/channels/whatsapp/numbers/{phoneNumberId}/business-info` | Live business profile |
| `PUT` | `/public/v1/channels/whatsapp/{integrationId}/numbers/{phoneNumberId}` | Update profile and/or bind an agent |
| `POST` | `/public/v1/channels/whatsapp/{integrationId}/numbers/{phoneNumberId}/register` | Register the number with Meta |
| `POST` | `/public/v1/channels/whatsapp/{integrationId}/numbers/{phoneNumberId}/disconnect` | Disconnect one number |
| `PUT` | `/public/v1/channels/instagram/accounts/{instagramAccountId}` | Bind / unbind an Instagram account |
| `PUT` | `/public/v1/channels/messenger/pages/{messengerPageId}` | Bind / unbind a Messenger page |


`GET /channels` accepts an account API key. Binding and WhatsApp maintenance require a USER API key.

Full list in the **[API Reference](/reference/openapi)** under the `Agent Channels` tag.

Personal WhatsApp sync (turning chats into CRM records) is a different surface — see [Data & Sync](/docs/concepts/admin/data-and-sync).

## CLI

```bash
frontline agent-channels list --table
frontline agent-channels instagram assign <instagramAccountId> --agent-id <agentId>
frontline agent-channels messenger assign <messengerPageId> --clear
frontline agent-channels whatsapp update <integrationId> <phoneNumberId> --agent-id <agentId>
frontline agent-channels whatsapp info <phoneNumberId>
```

In `--table` mode, `targetId` is the value you pass to assign/update (WhatsApp uses `phoneNumberId`; Instagram/Messenger use the numeric account/page id).