API

WhatsApp

Gerenciar contatos e enviar mensagens de WhatsApp via API.

WhatsApp

A API expõe operações para gerenciar contatos e enviar mensagens de texto via inboxes WhatsApp já conectadas (Baileys ou WhatsApp Cloud API). O envio passa pelo serviço interno de WhatsApp da plataforma — não há comunicação direta com a API do Meta nesta versão.

Para conectar uma inbox use o painel Configurações → Integrações → WhatsApp Business. A API v1 não cria inboxes, apenas opera sobre as existentes.

Contatos

GET /v1/whatsapp/contacts

Lista os contatos de WhatsApp do time.

Query Parameters

ParâmetroTipoPadrãoDescrição
pagenumber1Página atual
limitnumber20Itens por página (máx: 100)
tagstringFiltrar por tag
client_iduuidFiltrar por cliente vinculado
searchstringBuscar por nome, telefone ou push_name
sortstring-created_atpush_name, custom_name, phone, created_at, updated_at

Request

curl -X GET "https://app.sonarbr.io/api/v1/whatsapp/contacts?search=joao" \
  -H "Authorization: Bearer ea_live_sua_chave_aqui"

Response

{
  "success": true,
  "data": [
    {
      "id": "770e8400-e29b-41d4-a716-446655440010",
      "phone": "5511999998888",
      "jid": "5511999998888@s.whatsapp.net",
      "push_name": "João Silva",
      "custom_name": "João — TechStore",
      "profile_picture_url": null,
      "notes": null,
      "tags": ["lead-quente"],
      "client_id": "550e8400-e29b-41d4-a716-446655440000",
      "created_at": "2026-05-18T10:30:00Z",
      "updated_at": "2026-05-18T10:30:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 1,
    "pages": 1
  }
}

POST /v1/whatsapp/contacts

Cria um novo contato. O jid é calculado automaticamente a partir do telefone (apenas dígitos com DDI).

CampoTipoObrigatórioDescrição
phonestringSimEntre 10 e 15 dígitos, com DDI (5511...)
custom_namestringNãoNome de exibição interno
notesstringNãoAnotações privadas
tagsstring[]NãoTags livres
client_iduuidNãoVincular a um cliente do CRM
curl -X POST https://app.sonarbr.io/api/v1/whatsapp/contacts \
  -H "Authorization: Bearer ea_live_sua_chave_aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "5511999998888",
    "custom_name": "João — TechStore",
    "tags": ["lead-quente"],
    "client_id": "550e8400-e29b-41d4-a716-446655440000"
  }'

GET /v1/whatsapp/contacts/:id

Busca um contato específico.

PUT /v1/whatsapp/contacts/:id

Atualiza custom_name, notes, tags ou client_id. O telefone é imutável (recrie o contato se precisar mudar).

curl -X PUT https://app.sonarbr.io/api/v1/whatsapp/contacts/CONTACT_UUID \
  -H "Authorization: Bearer ea_live_sua_chave_aqui" \
  -H "Content-Type: application/json" \
  -d '{ "tags": ["lead-quente", "convertido"] }'

DELETE /v1/whatsapp/contacts/:id

Remove o contato permanentemente. Retorna 409 CONFLICT se o contato tiver conversas vinculadas (para evitar perda acidental do histórico via cascade). Arquive ou remova as conversas antes.

curl -X DELETE https://app.sonarbr.io/api/v1/whatsapp/contacts/CONTACT_UUID \
  -H "Authorization: Bearer ea_live_sua_chave_aqui"

Mensagens

POST /v1/whatsapp/messages

Envia uma mensagem de texto. A v1 suporta somente texto — para mídia, use a interface web ou o endpoint legado autenticado por sessão.

Request Body

CampoTipoObrigatórioDescrição
contentstringSimTexto da mensagem
inbox_iduuidSim*Inbox de origem
phonestringSim*Telefone do destinatário (dígitos com DDI)
conversation_iduuidSim*Alternativa: conversa existente

* Você precisa informar (inbox_id + phone) ou apenas (conversation_id). Se a conversa ainda não existir para o par inbox_id + phone, ela é criada automaticamente.

Request

curl -X POST https://app.sonarbr.io/api/v1/whatsapp/messages \
  -H "Authorization: Bearer ea_live_sua_chave_aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "inbox_id": "INBOX_UUID",
    "phone": "5511999998888",
    "content": "Olá! Sua proposta está pronta, podemos conversar?"
  }'

Response

{
  "success": true,
  "data": {
    "id": "msg-uuid",
    "conversation_id": "conv-uuid",
    "inbox_id": "INBOX_UUID",
    "remote_jid": "5511999998888@s.whatsapp.net",
    "whatsapp_message_id": "ABC123",
    "direction": "outgoing",
    "message_type": "text",
    "content": "Olá! Sua proposta está pronta, podemos conversar?",
    "status": "sent",
    "created_at": "2026-05-18T10:32:00Z"
  }
}

O status inicial é sent. Confirmações de entrega/leitura chegam via webhook (whatsapp.message.status) à medida que o WhatsApp confirma.

Erros Comuns

CódigoErroCausa
400VALIDATION_ERRORFalta content, inbox_id, phone ou conversation_id
400VALIDATION_ERRORInbox inativa
404NOT_FOUNDInbox/contato/conversa não encontrado ou pertence a outro time
409CONFLICTDELETE em contato com conversas vinculadas
502BAD_GATEWAYFalha ao enviar pelo serviço WhatsApp (rede, sessão Baileys desconectada, Meta indisponível)

Limitações conhecidas (v1)

  • Sem suporte a mídia (image/audio/video/document).
  • Sem suporte a templates pré-aprovados da Cloud API.
  • Sem retry automático — se o serviço retornar 502, sua aplicação deve reenviar com backoff.
  • Rate limit segue o limite global de 60 req/min por IP.