v1 · REST
API Ativa · REST

CDWChat API Reference

Integre qualquer sistema com o canal de atendimento CDWChat. Envie mensagens, gerencie tickets, contatos, Kanban e muito mais.

https://apiwhatsapp.cdwchat.com.br/v1/api/external/b43e06fa-4621-4d83-89db-3dfa214eff94
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRJZCI6MSwicHJvZmlsZSI6ImFkbWluIiwic2Vzc2lvbklkIjoyOSwiaWF0IjoxNzgyMzEwNjE1LCJleHAiOjE4NDUzODI2MTV9.0JiDtgWLQEX6b6BskF9j_ixsZUNbZFtOhqjJDeiK_KQ

🔐 Autenticação

Todos os endpoints usam autenticação via Bearer Token no header HTTP. O único endpoint sem header é /params, que recebe o token via query string.

HEADER
Authorization: Bearer <token>
Obrigatório em todos os endpoints
💡 O token JWT é gerado pelo sistema CDWChat. Cada instância de cliente possui seu próprio token e Base URL única.
http
Authorization: Bearer eyJhbGci...

💬 Mensagens

Envie mensagens de texto, arquivos, stickers, localização e contatos para qualquer número ou ticket.

POST
Enviar Mensagem de Texto
{base_url}
Envia uma mensagem de texto simples para um número ou ticket existente. Use number ou ticketId para identificar o destino.
🔐 Bearer Token
Body Parameters
CampoTipoReq.Descrição
bodystringTexto da mensagem
numberstring*Número com DDI+DDD (ex: 5511999999999)
ticketIdinteger*ID do ticket (alternativo ao number)
externalKeystringID único do seu sistema para webhook
ℹ️ * Use number ou ticketId — ao menos um é obrigatório.
json
{ "body": "A mensagem desejada", "number": "5511999999999", "externalKey": "ID_UNICO_DO_SEU_SISTEMA" }
POST
Enviar Arquivo (Upload)
{base_url} · multipart/form-data
Envia um arquivo real (PDF, imagem, vídeo, áudio) via upload multipart. Ideal para arquivos locais.
🔐 Bearer Token
Form Data
CampoTipoReq.Descrição
mediafileArquivo a enviar
bodystringLegenda do arquivo
numberstring*Número destino
ticketIdinteger*ID do ticket (alternativo)
externalKeystringID único do sistema
curl
curl -X POST {base_url} \ -H "Authorization: Bearer TOKEN" \ -F "media=@/caminho/arquivo.pdf" \ -F "body=Segue o documento" \ -F "number=5511999999999" \ -F "externalKey=ID_UNICO"
POST
Enviar Arquivo (Base64)
{base_url} · JSON
Envia arquivo codificado em Base64 via JSON. Útil quando não há acesso a upload de arquivos.
🔐 Bearer Token
json
{ "body": "Segue o documento", "number": "5511999999999", "externalKey": "ID_UNICO", "mediaMessage": { "mediaType": "application/pdf", "fileName": "documento.pdf", "media": "JVBERi0xLjM... (base64)" } }
POST
Enviar Arquivo por URL
{base_url} · JSON
Envia um arquivo hospedado em URL pública. O servidor faz o download e encaminha ao destinatário.
🔐 Bearer Token
json
{ "body": "Veja a imagem", "number": "5511999999999", "externalKey": "ID_UNICO", "mediaUrl": "https://exemplo.com/imagem.jpg" }
POST
Enviar Sticker
{base_url} · multipart/form-data
Envia uma imagem como sticker. Use PNG ou WebP. O campo body deve ser literalmente "sticker".
🔐 Bearer Token
Form Data
CampoValorDescrição
mediafileImagem PNG/WebP
body"sticker"Deve ser literalmente "sticker"
sticker"true"Flag obrigatória
numberstringNúmero destino
curl
curl -X POST {base_url} \ -H "Authorization: Bearer TOKEN" \ -F "[email protected]" \ -F "body=sticker" \ -F "sticker=true" \ -F "number=5511999999999"
POST
Enviar Localização
{base_url}/location
Envia um pin de localização com nome e endereço.
🔐 Bearer Token
json
{ "number": "5511999999999", "contents": { "type": "location", "longitude": -27.2842864, "latitude": -48.9243959, "name": "Nome do Local", "address": "Rua Exemplo, 100 - Cidade" } }
POST
Enviar Contato
{base_url}/sendcontact
Compartilha um cartão de contato com nome e telefone.
🔐 Bearer Token
json
{ "number": "5511999999999", "contents": { "type": "contact", "displayName": "Nome do Contato", "telephone": "5511987654321" } }
GET
Enviar via Query Params
{base_url}/params
Envia mensagem via GET com todos os parâmetros na URL. Útil para integrações sem suporte a headers (n8n, Make, Zapier, links simples). O token vai na query string.
⚠️ Sem header Authorization — o token vai no campo bearertoken da query string.
Query Parameters
ParâmetroReq.Descrição
bodyTexto (URL encoded)
numberNúmero destino
externalKeyID único do sistema
bearertokenToken JWT (sem "Bearer ")
url
{base_url}/params/?body=Ol%C3%A1%20mundo&number=5511999999999&externalKey=ID_UNICO&bearertoken=eyJhbGci...

🎫 Tickets

Crie e gerencie tickets de atendimento, defina filas, atendentes e chatbots.

POST
Criar Ticket
{base_url}/createticket
Cria um novo ticket para um número com status e fila definidos.
🔐 Bearer Token
Body Parameters
CampoTipoDescrição
numberstringNúmero do contato
statusstring"pending" | "open" | "closed"
queueIdintegerID da fila/setor
userIdinteger|nullID do atendente (null = sem atendente)
json
{ "number": "5511999999999", "status": "pending", "queueId": 15, "userId": null }
POST
Consultar Ticket
{base_url}/showticket · /showallticket · /showticketchatbot
Consulta informações do ticket ativo de um número. Use /showallticket para todos os tickets ou /showticketchatbot para o contexto do chatbot.
🔐 Bearer Token
json
{ "number": "5511999999999" }
POST
Atualizar Ticket
{base_url}/updateticketinfo
Atualiza o status, atendente e fila de um ticket existente.
🔐 Bearer Token
json
{ "ticketId": 1003, "status": "open", "userId": 1, "queueId": null }
POST
Definir Fila do Ticket
{base_url}/updatequeue
🔐 Bearer Token
json
{ "ticketId": 4, "queueId": 1 }
POST
Definir ChatBot do Ticket
{base_url}/updatechatbot
🔐 Bearer Token
json
{ "ticketId": 6934, "chatbotId": 62 }
GET
Listar Mensagens do Ticket
{base_url}/ticket/{ticketId}
Retorna todas as mensagens de um ticket. Substitua {ticketId} pelo ID numérico.
🔐 Bearer Token
url
GET {base_url}/ticket/4990

👤 Contatos

Crie, atualize e consulte contatos. Gerencie tags, CRM, follow-up e carteiras.

POST
Criar Contato
{base_url}/createcontact
🔐 Bearer Token
Body Parameters
CampoTipoDescrição
namestringNome do contato
numberstringNúmero com DDI+DDD
emailstringE-mail
extraInfoarrayCampos customizados [{name, value}]
disableBotbooleanDesativar bot para o contato
commentarystringObservação interna
kanbanPricestringValor no Kanban
json
{ "name": "João Silva", "number": "5511999999999", "email": "[email protected]", "extraInfo": [ { "name": "Empresa", "value": "Ltda" } ], "disableBot": false, "commentary": "Cliente VIP", "kanbanPrice": "1500" }
POST
Atualizar Contato
{base_url}/updatecontact
Atualiza dados de um contato. Use number ou contactId para identificar.
🔐 Bearer Token
json
// por number: { "number": 5511999999999, "name": "João Silva" } // por contactId: { "contactId": "5219", "name": "João Silva" }
POST
Consultar Contato
{base_url}/contact
🔐 Bearer Token
json
// por number: { "number": 5511999999999 } // por contactId: { "contactId": 3397 }
POST
Validar Número WhatsApp
{base_url}/valid-whatsapp-number
🔐 Bearer Token
json
{ "number": 5511999999999 }
POST
Gerenciar Tags
{base_url}/updatetag
🔐 Bearer Token
json
// por ticketId: { "ticketId": 3183, "tags": [25, 26] } // por contactId: { "contactId": 3649, "tags": [25] } // por número: { "number": 5511999999999, "tags": [25] }
POST
Definir CRM
{base_url}/updatecrm
Define o estágio de CRM de um contato. Apenas CRM compartilhado.
🔐 Bearer Token
json
{ "contactId": 3397, "crm": 8 } // ou ticketId / number
POST
Definir Follow-up
{base_url}/updatefollowup
🔐 Bearer Token
json
{ "contactId": 3397, "followup": 8 } // ou ticketId / number
GET
Listar por Filtro
/contacts/tag/{id} · /contacts/crm/{id} · /contacts/followup/{id} · /contacts/wallet/{id}
Lista contatos filtrados por etiqueta, CRM, follow-up ou carteira. Substitua o sufixo e o ID conforme necessário.
🔐 Bearer Token
url
GET {base_url}/contacts/tag/19 GET {base_url}/contacts/crm/3 GET {base_url}/contacts/followup/3 GET {base_url}/contacts/wallet/3

✅ API Oficial (WhatsApp Business)

Envie mensagens interativas via API Oficial do WhatsApp. Todos usam POST {base_url}/apioficial. O tipo é definido por contents.type.

POST
Botões de Resposta Rápida
{base_url}/apioficial · type: button
🔐 Bearer Token
json
{ "number": "5511999999999", "contents": { "type": "button", "body": { "text": "Texto da mensagem" }, "action": { "buttons": [ { "type": "reply", "reply": { "id": "1", "title": "Sim" } }, { "type": "reply", "reply": { "id": "2", "title": "Não" } } ] } } }
POST
Lista de Opções
{base_url}/apioficial · type: list
🔐 Bearer Token
json
{ "number": "5511999999999", "contents": { "type": "list", "header": { "type": "text", "text": "Título" }, "body": { "text": "Escolha uma opção" }, "action": { "sections": [{ "title": "Seção 1", "rows": [ { "id": 1, "title": "Item 1", "description": "Desc" } ] }], "button": "Ver opções" } } }
POST
CTA URL (Botão de Link)
{base_url}/apioficial · type: cta_url
🔐 Bearer Token
json
{ "number": "5511999999999", "contents": { "type": "cta_url", "header": { "type": "text", "text": "Título" }, "body": { "text": "Clique para acessar" }, "footer": { "text": "Rodapé" }, "action": { "name": "cta_url", "parameters": { "display_text": "Acessar", "url": "https://seusite.com.br" } } } }
POST
Enviar Template
{base_url}/apioficial · template
Envia um template aprovado pelo WhatsApp. Adicione parâmetros nos components conforme o template.
🔐 Bearer Token
json
{ "number": "5511999999999", "contents": { "name": "nome_do_template", "components": [ { "type": "body", "parameters": [ { "type": "text", "parameter_name": "nome", "text": "João" } ] } ], "language": { "code": "pt_BR" } } }

⚡ API Plus

Funcionalidades avançadas: botão dinâmico com múltiplas ações, PIX e cobrança. Endpoint base: {base_url}/apiplus.

POST
Botão Dinâmico
{base_url}/apiplus · type: dinamic_button
Botão com múltiplos tipos de ação em um único envio: resposta, copiar texto (PIX), ligar, abrir URL.
🔐 Bearer Token
Tipos de choice
typeCampo extraAção
replyidResposta rápida
copycopyTextCopiar texto (ex: chave PIX)
callphoneNumberIniciar ligação
urlurlAbrir link no browser
json
{ "number": "5511999999999", "contents": { "type": "dinamic_button", "text": "Mensagem principal", "footerText": "Rodapé opcional", "choices": [ { "displayText": "Responder", "id": "r1", "type": "reply" }, { "displayText": "Copiar Chave PIX", "id": "", "type": "copy", "copyText": "00.000.000/0001-00" }, { "displayText": "Ligar", "id": "", "type": "call", "phoneNumber": "554899999999" }, { "displayText": "Ver site", "id": "", "type": "url", "url": "https://seusite.com.br" } ] } }
POST
Botão PIX
{base_url}/pixbutton
Envia mensagem com botão para copiar chave PIX. pixType: CPF, CNPJ, PHONE, EMAIL, EVP.
🔐 Bearer Token
json
{ "number": "5511999999999", "contents": { "type": "pixbutton", "pixKey": "00.000.000/0001-00", "pixName": "Nome da Empresa", "pixType": "CNPJ" } }
POST
Solicitar Pagamento
{base_url}/requestpayment
Envia cobrança com valor, descrição e opções de pagamento (PIX, boleto).
🔐 Bearer Token
Body Parameters
CampoReq.Descrição
amountValor em reais (decimal)
textDescrição do pedido
pixKeyChave PIX
pixTypeCPF | CNPJ | PHONE | EMAIL | EVP
boletoCodeCódigo de barras do boleto
itemNameNome do produto/serviço
json
{ "number": "5511999999999", "contents": { "type": "requestpayment", "amount": 199.99, "text": "Pedido #123", "pixKey": "00.000.000/0001-00", "pixType": "CNPJ", "title": "Detalhes do pedido", "itemName": "Plano Premium" } }

📡 Canal

Verifique o status de conexão do canal e obtenha o QR Code para autenticação.

GET
Status do Canal
{base_url}/statuschannel
Retorna o estado atual do canal: conectado, desconectado ou aguardando QR.
🔐 Bearer Token
url
GET {base_url}/statuschannel
POST
Obter QR Code
{base_url}/qrcode
🔐 Bearer Token
json
{ "number": null }

📋 Kanban Pro

Gerencie boards, colunas e cards do Kanban Pro. O parâmetro action controla o comportamento de criação/movimentação.

GET
Listar Boards / Colunas / Cards
/kanbanpro/boards · /boards/{id}/columns · /boards/{id}/cards
🔐 Bearer Token
url
GET {base_url}/kanbanpro/boards GET {base_url}/kanbanpro/boards/1/columns GET {base_url}/kanbanpro/boards/1/cards GET {base_url}/kanbanpro/boards/1/cards?columnId=3 GET {base_url}/kanbanpro/cards/42 GET {base_url}/kanbanpro/contact/15/cards
POST
Criar / Mover Card
{base_url}/kanbanpro/card
Cria ou move um card no funil. O campo action define o comportamento.
🔐 Bearer Token
Valores de action
actionComportamento
create_or_moveMove se existir, cria se não existir
create_or_updateAtualiza dados sem mover de coluna
create_onlySempre cria um novo card
Valores de priority
ValorDescrição
noneSem prioridade
low · medium · high · urgentNíveis crescentes
json
{ "boardId": 1, "columnId": 2, "contactId": 10, "action": "create_or_move", "title": "Lead — João Silva", "priority": "medium", "note": "Entrou pelo formulário" }
PUT
Atualizar Card
{base_url}/kanbanpro/card/{cardId}
🔐 Bearer Token
json
// Mover para outra coluna: { "columnId": 6, "note": "Contrato assinado" } // Atribuir responsável e prazo: { "assigneeId": 3, "dueDate": "2026-12-31" } // Alterar prioridade: { "priority": "urgent" }
DELETE
Arquivar / Deletar Card
{base_url}/kanbanpro/card/{cardId}
Sem ?permanent=true o card é arquivado (pode ser recuperado). Com o parâmetro, a exclusão é permanente.
🔐 Bearer Token
url
# Arquivar (soft delete): DELETE {base_url}/kanbanpro/card/42 # Deletar permanentemente: DELETE {base_url}/kanbanpro/card/42?permanent=true
✓ Copiado para a área de transferência