Pular para o conteúdo

Canais e conexões

Um canal é por onde as conversas acontecem. Todo contato, mensagem e grupo pertence a um canal. Antes de enviar a primeira mensagem, a organização precisa de pelo menos um WhatsApp conectado (status: "connected").

type O que é O que dá para fazer pela API
whatsapp Um número de WhatsApp conectado lendo um QR Code (ou digitando um código de pareamento) no celular — o mesmo que Configurações → Conexões no painel. Tudo: criar e conectar, reconectar, renomear, desconectar e remover.
webchat O Chat do site, o widget de conversa instalado no seu site. Aparece em GET /channels e pode ser renomeado. Criar, configurar e remover é só no painel.
status Significado O que fazer
connected O celular leu o QR Code (ou digitou o código). Pronto para enviar e receber. Nada: use o canal normalmente.
connecting Esperando a leitura do QR Code ou do código de pareamento, ou reconectando sozinho. Mostre o QR Code e consulte GET /channels/{channel_id}/qr a cada 3–5 s.
disconnected Sem sessão do WhatsApp. Envios por este canal respondem 422 channel_unavailable. Gere um novo QR Code com POST /channels/{channel_id}/connect.
POST /channels
│
▼
┌────────────┐ o celular leu o QR Code ┌───────────┐
│ connecting │ ────────────────────────► │ connected │
└────────────┘ (ou digitou o código) └───────────┘
▲ │ ▲ │
│ └───┘ QR Code novo a cada ~20–40 s │ POST /channels/{id}/disconnect
│ (consulte GET /channels/{id}/qr) │ ou a sessão caiu no celular
│ ▼
│ POST /channels/{id}/connect ┌──────────────┐
└─────────────────────────────────────│ disconnected │
└──────────────┘

O fluxo é sempre o mesmo: criar o canal → mostrar o QR Code → atualizar a cada poucos segundos → parar quando conectar. Tudo pelo seu backend (a chave de API nunca vai para o navegador).

  1. Crie o canal. Chame POST /channels com um nome. A resposta 201 traz o ID do canal em channel.id e o primeiro QR Code em qr_code.

    Janela do terminal
    curl https://platform.toptalking.com.br/v1/channels \
    -H "Authorization: Bearer $TOPTALKING_API_KEY" \
    -H "Content-Type: application/json" \
    -H "Idempotency-Key: conexao-pos-venda-001" \
    -d '{ "name": "Pós-venda" }'
    {
    "object": "channel_connection",
    "channel": {
    "id": "742539b3-2c69-4acc-988f-fcd836e565a9",
    "object": "channel",
    "type": "whatsapp",
    "name": "Pós-venda",
    "phone": null,
    "status": "connecting",
    "is_primary": false,
    "created_at": "2026-11-11T15:20:00Z"
    },
    "status": "connecting",
    "qr_code": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARQAAAEUCAYAAADqcMl5AAAAAklEQVR4AewaftIAAA...",
    "qr_code_generated_at": "2026-11-11T15:20:02Z",
    "pairing_code": null
    }

    Guarde o channel.id: você vai usá-lo nos próximos passos.

  2. Mostre o QR Code. qr_code é uma imagem PNG em data URL (data:image/png;base64,...). Não precisa converter: coloque direto no src de uma imagem — <img src={qr_code} /> no React ou img.src = qr_code em JavaScript puro.

    No celular que vai ser conectado: WhatsApp → Configurações (no Android, toque em ⋮) → Aparelhos conectados → Conectar um aparelho e aponte a câmera para o QR Code.

  3. Atualize a cada 3–5 segundos. O QR Code vale só ~20 a 40 segundos e é renovado automaticamente. Consulte GET /channels/{channel_id}/qr em intervalos curtos e troque a imagem sempre que qr_code mudar (qr_code_generated_at diz quando o atual foi gerado).

    Janela do terminal
    curl https://platform.toptalking.com.br/v1/channels/742539b3-2c69-4acc-988f-fcd836e565a9/qr \
    -H "Authorization: Bearer $TOPTALKING_API_KEY"

    Esta rota só lê o QR Code atual — não gera um pareamento novo. Pode consultar à vontade (respeitando o limite de 120 requisições por minuto).

  4. Pare quando status for connected. Assim que o celular lê o código, a consulta devolve status: "connected", qr_code: null e o número em channel.phone:

    {
    "object": "channel_connection",
    "channel": {
    "id": "742539b3-2c69-4acc-988f-fcd836e565a9",
    "object": "channel",
    "type": "whatsapp",
    "name": "Pós-venda",
    "phone": "5511955554444",
    "status": "connected",
    "is_primary": false,
    "created_at": "2026-11-11T15:20:00Z"
    },
    "status": "connected",
    "qr_code": null,
    "qr_code_generated_at": null,
    "pairing_code": null
    }

    Prefere não consultar? Assine o webhook channel.status_updated: ele chega no instante em que o canal conecta.

  5. Envie uma mensagem de teste. Use o ID do canal em channel_id para garantir que a mensagem sai pelo número recém-conectado (mande para o seu próprio celular):

    Janela do terminal
    curl https://platform.toptalking.com.br/v1/messages \
    -H "Authorization: Bearer $TOPTALKING_API_KEY" \
    -H "Content-Type: application/json" \
    -H "Idempotency-Key: teste-pos-venda-001" \
    -d '{
    "to": "5511999998888",
    "channel_id": "742539b3-2c69-4acc-988f-fcd836e565a9",
    "text": "Teste: o WhatsApp do Pós-venda está conectado ✅"
    }'

Um backend que cria a conexão e acompanha o QR Code até conectar. Escolha a linguagem:

conectar-whatsapp.sh
# Requer curl, jq e base64. Salva o QR Code atual em qr.png até conectar.
API=https://platform.toptalking.com.br/v1
AUTH="Authorization: Bearer $TOPTALKING_API_KEY"
# 1. Cria o canal e guarda o ID
ID=$(curl -s "$API/channels" -H "$AUTH" -H "Content-Type: application/json" \
-H "Idempotency-Key: conexao-pos-venda-001" \
-d '{ "name": "Pós-venda" }' | jq -r '.channel.id')
echo "Canal criado: $ID"
# 2 a 4. A cada 4 s: salva o QR Code (se houver) e para quando conectar
while true; do
R=$(curl -s "$API/channels/$ID/qr" -H "$AUTH")
STATUS=$(echo "$R" | jq -r '.status')
[ "$STATUS" = "connected" ] && echo "Conectado: $(echo "$R" | jq -r '.channel.phone')" && break
QR=$(echo "$R" | jq -r '.qr_code // empty')
[ -n "$QR" ] && echo "${QR#*,}" | base64 -d > qr.png && echo "status: $STATUS (abra qr.png)"
sleep 4
done

Para o usuário conectar pelo seu sistema, exponha duas rotas no seu backend (que chamam a TopTalking com a chave) e faça a tela consultar essas rotas — nunca a API da TopTalking direto do navegador.

server.ts (Express 5)
import express from 'express';
import { criarConexao, consultarConexao, type Conexao } from './toptalking-conexao';
const app = express();
app.use(express.json());
// Devolva ao navegador só o necessário (nunca a chave).
const resumo = (c: Conexao) => ({
id: c.channel.id,
status: c.status,
qrCode: c.qr_code,
telefone: c.channel.phone,
});
// Proteja estas rotas com o login do seu sistema.
app.post('/api/whatsapp/conexoes', async (req, res) => {
const conexao = await criarConexao(req.body.nome ?? 'WhatsApp');
res.status(201).json(resumo(conexao));
});
app.get('/api/whatsapp/conexoes/:id', async (req, res) => {
res.json(resumo(await consultarConexao(req.params.id)));
});
app.listen(3000);
ConectarWhatsApp.tsx
import { useEffect, useState } from 'react';
type Conexao = { id: string; status: string; qrCode: string | null; telefone: string | null };
export function ConectarWhatsApp() {
const [conexao, setConexao] = useState<Conexao | null>(null);
async function iniciar() {
const res = await fetch('/api/whatsapp/conexoes', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ nome: 'Pós-venda' }),
});
setConexao(await res.json());
}
// Enquanto não conecta, consulta o SEU backend a cada 4 s.
useEffect(() => {
if (!conexao || conexao.status === 'connected') return;
const timer = setInterval(async () => {
const res = await fetch(`/api/whatsapp/conexoes/${conexao.id}`);
setConexao(await res.json());
}, 4000);
return () => clearInterval(timer);
}, [conexao?.id, conexao?.status]);
if (!conexao) return <button onClick={iniciar}>Conectar WhatsApp</button>;
if (conexao.status === 'connected') return <p>WhatsApp {conexao.telefone} conectado!</p>;
return (
<div>
{conexao.qrCode ? (
<img src={conexao.qrCode} alt="QR Code para conectar o WhatsApp" width={264} height={264} />
) : (
<p>Gerando o QR Code…</p>
)}
<p>No celular: WhatsApp → Aparelhos conectados → Conectar um aparelho.</p>
</div>
);
}

Sem câmera à mão (ex.: o celular é o mesmo aparelho que mostra a tela)? Peça um código de pareamento de 8 caracteres em vez do QR Code.

  1. Tenha um canal que ainda não está conectado. Crie com POST /channels (ignore o QR Code da resposta) ou use um canal disconnected.

  2. Peça o código com POST /channels/{channel_id}/connect, enviando em phone o número do WhatsApp que vai ser conectado (o do celular da empresa, com DDI e DDD — não o de um cliente). A resposta pode levar até ~20 segundos: use um timeout de pelo menos 30 s.

    Janela do terminal
    curl https://platform.toptalking.com.br/v1/channels/742539b3-2c69-4acc-988f-fcd836e565a9/connect \
    -H "Authorization: Bearer $TOPTALKING_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{ "phone": "5511955554444" }'
    {
    "object": "channel_connection",
    "channel": {
    "id": "742539b3-2c69-4acc-988f-fcd836e565a9",
    "object": "channel",
    "type": "whatsapp",
    "name": "Pós-venda",
    "phone": null,
    "status": "connecting",
    "is_primary": false,
    "created_at": "2026-11-11T15:20:00Z"
    },
    "status": "connecting",
    "qr_code": null,
    "qr_code_generated_at": null,
    "pairing_code": "WZYE-H1YY"
    }
  3. Digite o código no celular: WhatsApp → Aparelhos conectados → Conectar um aparelho → Conectar com número de telefone e digite WZYE-H1YY.

  4. Espere o connected. Consulte GET /channels/{channel_id}/qr a cada 3–5 s (o status vira connected) ou assine channel.status_updated. Se o código não funcionar, peça outro chamando o /connect de novo.

Quando um canal fica disconnected (o celular saiu de “Aparelhos conectados”, trocou de aparelho, ficou muito tempo sem internet…), não crie um canal novo: gere um novo QR Code para o mesmo canal. Assim as conversas continuam no mesmo lugar.

  1. Chame POST /channels/{channel_id}/connect sem corpo (ou com { "phone": "..." } para receber um código de pareamento).
  2. Mostre o qr_code e siga os passos 3 e 4 de Conectar um WhatsApp por QR Code.

Se o canal já estiver conectado, a API responde 409 invalid_state: para trocar o número, desconecte antes.

{
"id": "d781e759-4047-4c35-bfcd-eae8c666369a",
"object": "channel",
"type": "whatsapp",
"name": "Vendas",
"phone": "5511988887777",
"status": "connected",
"is_primary": true,
"created_at": "2026-03-02T12:10:44Z"
}
Campo Tipo Descrição
id UUID ID do canal. Use em channel_id para escolher por qual número enviar.
object string Sempre channel.
type string whatsapp (número conectado por QR Code) ou webchat (Chat do site).
name string Nome do canal no painel (ex.: “Vendas”).
phone string ou null Número do WhatsApp, só dígitos com DDI. null no Chat do site e em canais que ainda não conectaram.
status string connected, connecting ou disconnected. Veja Status da conexão.
is_primary booleano Se é o WhatsApp principal — o usado por padrão em POST /messages.
created_at data Quando o canal foi criado.

Devolvido por POST /channels, POST /channels/{channel_id}/connect e GET /channels/{channel_id}/qr. Mostra o estado do pareamento de um canal de WhatsApp.

{
"object": "channel_connection",
"channel": {
"id": "742539b3-2c69-4acc-988f-fcd836e565a9",
"object": "channel",
"type": "whatsapp",
"name": "Pós-venda",
"phone": null,
"status": "connecting",
"is_primary": false,
"created_at": "2026-11-11T15:20:00Z"
},
"status": "connecting",
"qr_code": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARQAAAEUCAYAAADqcMl5AAAAAklEQVR4AewaftIAAA...",
"qr_code_generated_at": "2026-11-11T15:20:31Z",
"pairing_code": null
}
Campo Tipo Descrição
object string Sempre channel_connection.
channel objeto O objeto canal atualizado.
status string connected (o celular leu o código e o canal já envia mensagens), connecting ou disconnected.
qr_code string ou null Imagem PNG em data URL (data:image/png;base64,...), pronta para o src de uma imagem. null quando o canal está conectado, quando não há pareamento em andamento, quando o QR Code ainda está sendo gerado ou quando você pediu código de pareamento.
qr_code_generated_at data ou null Quando o QR Code atual foi gerado. Mudou? Troque a imagem.
pairing_code string ou null Código de pareamento (8 caracteres, ex.: WZYE-H1YY). Só vem na resposta de POST /channels/{channel_id}/connect com phone.

GET/v1/channels

Devolve todos os canais da organização — WhatsApp e Chat do site, conectados ou não. Use para descobrir o channel_id de cada número e para monitorar se algum WhatsApp caiu.

Não tem parâmetros. A lista vem inteira numa página (has_more: false).

Janela do terminal
curl https://platform.toptalking.com.br/v1/channels \
-H "Authorization: Bearer $TOPTALKING_API_KEY"
{
"object": "list",
"data": [
{
"id": "d781e759-4047-4c35-bfcd-eae8c666369a",
"object": "channel",
"type": "whatsapp",
"name": "Vendas",
"phone": "5511988887777",
"status": "connected",
"is_primary": true,
"created_at": "2026-03-02T12:10:44Z"
},
{
"id": "9d8adaf6-a08d-4027-b07c-5df1e89e117b",
"object": "channel",
"type": "whatsapp",
"name": "Suporte",
"phone": "5511977776666",
"status": "disconnected",
"is_primary": false,
"created_at": "2026-05-18T09:31:02Z"
},
{
"id": "742539b3-2c69-4acc-988f-fcd836e565a9",
"object": "channel",
"type": "whatsapp",
"name": "Pós-venda",
"phone": null,
"status": "connecting",
"is_primary": false,
"created_at": "2026-11-11T15:20:00Z"
},
{
"id": "26facac8-3d9a-41b3-bfee-88851aba96ec",
"object": "channel",
"type": "webchat",
"name": "Chat do site",
"phone": null,
"status": "connected",
"is_primary": false,
"created_at": "2026-06-20T17:45:10Z"
}
],
"has_more": false,
"next_cursor": null
}

Só os gerais: 401 (chave) e 429 (limite por minuto). Veja Erros.

POST/v1/channels

Cria um canal de WhatsApp e já inicia o pareamento: a resposta traz o primeiro QR Code. É o primeiro passo para conectar um WhatsApp por QR Code. Depois, consulte GET /channels/{channel_id}/qr até status ser connected.

Cada canal criado conta no limite de conexões do plano — veja Limite de conexões do plano.

Parâmetro Onde Tipo Obrigatório Descrição
name corpo string não Nome do canal no painel (até 80 caracteres), ex.: “Pós-venda”. O corpo inteiro é opcional.
Idempotency-Key cabeçalho string não (recomendado) Evita criar dois canais se a requisição for repetida. Veja Idempotência.
Janela do terminal
curl https://platform.toptalking.com.br/v1/channels \
-H "Authorization: Bearer $TOPTALKING_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: conexao-pos-venda-001" \
-d '{ "name": "Pós-venda" }'

O objeto conexão, com o canal em connecting:

{
"object": "channel_connection",
"channel": {
"id": "742539b3-2c69-4acc-988f-fcd836e565a9",
"object": "channel",
"type": "whatsapp",
"name": "Pós-venda",
"phone": null,
"status": "connecting",
"is_primary": false,
"created_at": "2026-11-11T15:20:00Z"
},
"status": "connecting",
"qr_code": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARQAAAEUCAYAAADqcMl5AAAAAklEQVR4AewaftIAAA...",
"qr_code_generated_at": "2026-11-11T15:20:02Z",
"pairing_code": null
}

qr_code pode vir null se o QR Code ainda estiver sendo gerado: continue consultando GET /channels/{channel_id}/qr.

HTTP code Quando acontece
400 invalid_json, invalid_field Corpo inválido, name com mais de 80 caracteres ou campo desconhecido.
403 read_only_key Chave somente leitura.
422 limit_reached O plano já tem o máximo de conexões de WhatsApp.
502 provider_error, internal_error O WhatsApp não respondeu ao criar a conexão. Tente de novo com a mesma Idempotency-Key.
504 timeout O lado do WhatsApp demorou demais. Tente de novo com a mesma Idempotency-Key: se a primeira tiver dado certo, você recebe o canal já criado.
422 limit_reached
{
"error": {
"type": "invalid_request_error",
"code": "limit_reached",
"message": "Seu plano permite 3 conexões de WhatsApp. Remova uma ou faça upgrade no painel.",
"request_id": "req_6f1d2c3b4a5e"
}
}

GET/v1/channels/{channel_id}

Um canal pelo ID. Útil para conferir o status de um número específico antes de um envio importante.

Parâmetro Onde Tipo Obrigatório Descrição
channel_id caminho UUID sim ID do canal.
Janela do terminal
curl https://platform.toptalking.com.br/v1/channels/d781e759-4047-4c35-bfcd-eae8c666369a \
-H "Authorization: Bearer $TOPTALKING_API_KEY"
{
"id": "d781e759-4047-4c35-bfcd-eae8c666369a",
"object": "channel",
"type": "whatsapp",
"name": "Vendas",
"phone": "5511988887777",
"status": "connected",
"is_primary": true,
"created_at": "2026-03-02T12:10:44Z"
}
HTTP code Quando acontece
404 resource_not_found O canal não existe, foi removido ou é de outra organização.

GET/v1/channels/{channel_id}/qr

Devolve o QR Code mais recente do pareamento em andamento e o status da conexão, para você mostrar na tela e saber quando parar. É a rota que você chama a cada 3–5 segundos durante a conexão.

Ela não gera um pareamento novo (para isso, use POST /channels/{channel_id}/connect). Quando o celular lê o código, status vira connected e qr_code volta null. Só funciona para canais whatsapp.

Parâmetro Onde Tipo Obrigatório Descrição
channel_id caminho UUID sim ID do canal.
Janela do terminal
curl https://platform.toptalking.com.br/v1/channels/742539b3-2c69-4acc-988f-fcd836e565a9/qr \
-H "Authorization: Bearer $TOPTALKING_API_KEY"

Enquanto espera a leitura:

{
"object": "channel_connection",
"channel": {
"id": "742539b3-2c69-4acc-988f-fcd836e565a9",
"object": "channel",
"type": "whatsapp",
"name": "Pós-venda",
"phone": null,
"status": "connecting",
"is_primary": false,
"created_at": "2026-11-11T15:20:00Z"
},
"status": "connecting",
"qr_code": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARQAAAEUCAYAAADqcMl5AAAAAklEQVR4AewaftIAAA...",
"qr_code_generated_at": "2026-11-11T15:20:31Z",
"pairing_code": null
}

Depois que o celular leu o código, a mesma chamada devolve status: "connected", qr_code: null e o número em channel.phone (veja o passo 4 de Conectar um WhatsApp por QR Code).

status qr_code O que fazer
connecting preenchido Mostre (ou troque) a imagem e consulte de novo em 3–5 s.
connecting null O QR Code está sendo gerado (ou você pediu código de pareamento). Consulte de novo.
connected null Pronto. Pare de consultar.
disconnected null Não há pareamento em andamento. Chame POST /channels/{channel_id}/connect.
HTTP code Quando acontece
400 invalid_field O canal é o Chat do site (webchat), que não usa QR Code.
404 resource_not_found O canal não existe, foi removido ou é de outra organização.

POST/v1/channels/{channel_id}/connect

Inicia um novo pareamento num canal de WhatsApp que não está conectado e devolve o QR Code. Use para:

  • reconectar um canal disconnected;
  • gerar outro QR Code quando o anterior não foi lido a tempo;
  • conectar sem câmera: envie phone e receba um pairing_code para digitar no celular (veja Conectar com código de pareamento).

O QR Code vale cerca de 20 a 40 segundos e é renovado sozinho: depois desta chamada, consulte GET /channels/{channel_id}/qr a cada poucos segundos até status virar connected. Com phone, a resposta pode demorar até ~20 segundos.

Parâmetro Onde Tipo Obrigatório Descrição
channel_id caminho UUID sim ID do canal de WhatsApp.
phone corpo string não Número do WhatsApp que vai ser conectado, com DDI e DDD (ex.: 5511955554444). Com ele, a resposta traz pairing_code em vez de qr_code. Sem corpo (ou {}), vem o QR Code.
Janela do terminal
# QR Code
curl -X POST https://platform.toptalking.com.br/v1/channels/9d8adaf6-a08d-4027-b07c-5df1e89e117b/connect \
-H "Authorization: Bearer $TOPTALKING_API_KEY"
# Código de pareamento (sem câmera)
curl https://platform.toptalking.com.br/v1/channels/9d8adaf6-a08d-4027-b07c-5df1e89e117b/connect \
-H "Authorization: Bearer $TOPTALKING_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "phone": "5511977776666" }'

Sem phone (QR Code):

{
"object": "channel_connection",
"channel": {
"id": "9d8adaf6-a08d-4027-b07c-5df1e89e117b",
"object": "channel",
"type": "whatsapp",
"name": "Suporte",
"phone": "5511977776666",
"status": "connecting",
"is_primary": false,
"created_at": "2026-05-18T09:31:02Z"
},
"status": "connecting",
"qr_code": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARQAAAEUCAYAAADqcMl5AAAAAklEQVR4AewaftIAAA...",
"qr_code_generated_at": "2026-11-11T15:42:08Z",
"pairing_code": null
}

Com phone (código de pareamento):

{
"object": "channel_connection",
"channel": {
"id": "9d8adaf6-a08d-4027-b07c-5df1e89e117b",
"object": "channel",
"type": "whatsapp",
"name": "Suporte",
"phone": "5511977776666",
"status": "connecting",
"is_primary": false,
"created_at": "2026-05-18T09:31:02Z"
},
"status": "connecting",
"qr_code": null,
"qr_code_generated_at": null,
"pairing_code": "WZYE-H1YY"
}
HTTP code Quando acontece
400 invalid_field O canal é o Chat do site (webchat), que não usa QR Code, ou há campo desconhecido no corpo.
400 invalid_phone phone não parece um número válido.
403 read_only_key Chave somente leitura.
404 resource_not_found O canal não existe ou é de outra organização.
409 invalid_state O canal já está conectado. Para trocar o número, desconecte antes.
502 provider_error O WhatsApp não devolveu o QR Code ou o código de pareamento. Confira o número e tente de novo.
504 timeout O lado do WhatsApp demorou demais para responder. Tente de novo em instantes.
409 invalid_state
{
"error": {
"type": "conflict_error",
"code": "invalid_state",
"message": "Este WhatsApp já está conectado. Para trocar o número, desconecte antes.",
"request_id": "req_6f1d2c3b4a5e"
}
}

PATCH/v1/channels/{channel_id}

Muda o nome do canal no painel (ex.: de “WhatsApp” para “Suporte”). Não afeta a conexão nem as conversas.

Parâmetro Onde Tipo Obrigatório Descrição
channel_id caminho UUID sim ID do canal.
name corpo string sim Novo nome (até 80 caracteres).
Janela do terminal
curl -X PATCH https://platform.toptalking.com.br/v1/channels/742539b3-2c69-4acc-988f-fcd836e565a9 \
-H "Authorization: Bearer $TOPTALKING_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Pós-venda e trocas" }'
{
"id": "742539b3-2c69-4acc-988f-fcd836e565a9",
"object": "channel",
"type": "whatsapp",
"name": "Pós-venda e trocas",
"phone": "5511955554444",
"status": "connected",
"is_primary": false,
"created_at": "2026-11-11T15:20:00Z"
}
HTTP code Quando acontece
400 missing_field Faltou name.
400 invalid_json, invalid_field Corpo inválido, name com mais de 80 caracteres ou campo desconhecido.
403 read_only_key Chave somente leitura.
404 resource_not_found O canal não existe ou é de outra organização.

POST/v1/channels/{channel_id}/disconnect

Encerra a sessão do WhatsApp neste canal — o mesmo que Desconectar no painel (o aparelho some de “Aparelhos conectados” no celular). O canal continua existindo, com status: "disconnected", e as conversas continuam no painel. Para usar o número de novo (ou conectar outro número no mesmo canal), chame POST /channels/{channel_id}/connect.

Parâmetro Onde Tipo Obrigatório Descrição
channel_id caminho UUID sim ID do canal de WhatsApp.
Janela do terminal
curl -X POST https://platform.toptalking.com.br/v1/channels/742539b3-2c69-4acc-988f-fcd836e565a9/disconnect \
-H "Authorization: Bearer $TOPTALKING_API_KEY"

O objeto canal, já desconectado:

{
"id": "742539b3-2c69-4acc-988f-fcd836e565a9",
"object": "channel",
"type": "whatsapp",
"name": "Pós-venda e trocas",
"phone": "5511955554444",
"status": "disconnected",
"is_primary": false,
"created_at": "2026-11-11T15:20:00Z"
}
HTTP code Quando acontece
400 invalid_field O canal é o Chat do site (webchat).
403 read_only_key Chave somente leitura.
404 resource_not_found O canal não existe ou é de outra organização.

DELETE/v1/channels/{channel_id}

Desconecta o WhatsApp e remove o canal da organização, liberando uma conexão do plano. As conversas que já existiam continuam no painel. Não dá para desfazer: para usar o número de novo, crie outro canal.

O Chat do site (webchat) só pode ser removido no painel.

Parâmetro Onde Tipo Obrigatório Descrição
channel_id caminho UUID sim ID do canal de WhatsApp.
Janela do terminal
curl -X DELETE https://platform.toptalking.com.br/v1/channels/742539b3-2c69-4acc-988f-fcd836e565a9 \
-H "Authorization: Bearer $TOPTALKING_API_KEY"
{
"id": "742539b3-2c69-4acc-988f-fcd836e565a9",
"object": "channel",
"deleted": true
}
HTTP code Quando acontece
400 invalid_field O canal é o Chat do site (webchat): remova pelo painel.
403 read_only_key Chave somente leitura.
404 resource_not_found O canal não existe, já foi removido ou é de outra organização.
400 invalid_field
{
"error": {
"type": "invalid_request_error",
"code": "invalid_field",
"message": "O Chat do site é gerenciado no painel (Configurações → Conexões).",
"param": "channel_id",
"request_id": "req_6f1d2c3b4a5e"
}
}

Cada plano da TopTalking permite um número de conexões de WhatsApp (canais whatsapp). Canais disconnected também contam — só remover libera a vaga. O Chat do site não conta.

Ao passar do limite, POST /channels responde 422 limit_reached:

{
"error": {
"type": "invalid_request_error",
"code": "limit_reached",
"message": "Seu plano permite 3 conexões de WhatsApp. Remova uma ou faça upgrade no painel.",
"request_id": "req_6f1d2c3b4a5e"
}
}

O que fazer: reconecte um canal existente com POST /channels/{channel_id}/connect em vez de criar outro, remova um canal que não usa mais ou faça upgrade do plano no painel.