O que é a API NimoChat Pro+
A API NimoChat Pro+ é uma interface REST que permite integrar a plataforma de atendimento com qualquer sistema externo: CRM, ERP, sistema de RH, plataformas de automação como n8n, Make, Zapier, ou aplicações sob medida.
Com a API você pode automatizar tarefas repetitivas, sincronizar dados entre sistemas, criar fluxos personalizados e levar a inteligência do NimoChat Pro+ para fora dele. A API é organizada em torno de princípios REST: usa URLs previsíveis, recebe e devolve JSON, e usa códigos HTTP padrão.
Casos de uso comuns
- Disparo em massa segmentado — Buscar contatos com determinada tag e disparar campanha via n8n.
- Sincronização com CRM — Criar contatos automaticamente a partir de leads do seu CRM.
- Automação de RH — Cadastrar usuários (atendentes) automaticamente quando um colaborador é admitido no ERP.
- Integração com BI — Extrair dashboards de tickets, tempos de atendimento e evolução para Power BI / Looker.
- Humanização de bots — Mostrar status "digitando..." antes de uma resposta automática.
Começando
Para usar a API você precisa de 3 informações: a URL base do seu painel, uma chave de API (token) e o ID da sua conexão WhatsApp. Tudo pode ser obtido em poucos cliques no painel administrativo.
Passo 1 — Gerar sua chave de API
- Faça login no seu painel NimoChat Pro+ como Administrador.
- No menu lateral, acesse API.
- Clique em Nova API, dê um nome e selecione a conexão WhatsApp.
- Copie e guarde o Token e o API ID. O token só é exibido uma vez.
Passo 2 — Identificar sua URL base
Cada cliente NimoChat Pro+ tem sua própria URL de back-end. Ela aparece no painel administrativo e tem o formato:
https://seudominio.nimochat.com.br
Todas as chamadas à API são feitas a partir dessa URL. Se você não souber a sua, pergunte ao administrador da conta ou consulte o painel em Configurações > Domínios.
Autenticação
A API NimoChat Pro+ usa o padrão Bearer Token. Toda requisição precisa incluir o token no cabeçalho HTTP Authorization:
Authorization: Bearer SEU_TOKEN_AQUI
O sistema valida o token em todas as chamadas e isola os dados por empresa: você só consegue acessar e modificar dados da sua própria conta. Tentar usar um token inválido retorna HTTP 401 Unauthorized.
.env), nunca direto no código. Em ambientes de produção, use um cofre de secrets como AWS Secrets Manager, Doppler ou Vault.
URL Base e formato dos endpoints
Todos os endpoints da API seguem o mesmo padrão de URL:
https://seudominio.nimochat.com.br/v2/api/external/{apiId}/{endpoint}
Onde:
seudominio.nimochat.com.br— sua URL base (Passo 2 acima){apiId}— o API ID gerado no Passo 1{endpoint}— o nome do endpoint que você quer chamar (ex:listChannels)
Códigos de resposta
| Código | Significado |
|---|---|
200 OK | Requisição bem-sucedida. O corpo contém os dados solicitados. |
400 Bad Request | Parâmetros inválidos ou faltando. |
401 Unauthorized | Token inválido ou ausente. |
403 Forbidden | Token válido, mas sem permissão para o recurso. |
404 Not Found | Recurso não encontrado (ex: ID inexistente). |
429 Too Many Requests | Rate limit excedido. Aguarde antes de tentar novamente. |
500 Internal Server Error | Erro no servidor. Reporte ao suporte se persistir. |
Exemplo rápido — sua primeira chamada
Vamos listar todos os canais (conexões WhatsApp) da sua conta. Substitua SEU_TOKEN, SEU_DOMINIO e SEU_API_ID pelos valores reais:
cURL
curl --request GET \ --url 'https://SEU_DOMINIO.nimochat.com.br/v2/api/external/SEU_API_ID/listChannels' \ --header 'Authorization: Bearer SEU_TOKEN'
Resposta esperada
{
"channels": [
{
"id": 1,
"name": "WhatsApp Principal",
"status": "CONNECTED",
"number": "5511999999999"
}
]
}
📊 Listagens (GET)
Endpoints de consulta. Use estas rotas para buscar informações da plataforma. Todas retornam JSON.
Lista todas as conexões (canais) da sua conta — WhatsApp, Instagram, Facebook, WebChat, Telegram, etc.
Exemplo
curl --request GET \ --url 'https://SEU_DOMINIO.nimochat.com.br/v2/api/external/SEU_API_ID/listChannels' \ --header 'Authorization: Bearer SEU_TOKEN'
Lista todas as sessões (instâncias) ativas no seu sistema.
Lista os tickets (atendimentos) com filtros avançados. Suporta paginação.
Query Parameters
| Parâmetro | Tipo | Descrição |
|---|---|---|
pageNumber | int | Número da página (começa em 1). |
status | string | Filtra por status: open, pending, closed. |
searchParam | string | Texto para buscar em nome, número ou conteúdo. |
queuesIds | array | IDs das filas para filtrar. |
whatsappIds | array | IDs das conexões WhatsApp. |
selectedUser | int | ID do atendente responsável. |
Exemplo — tickets abertos da fila 3
curl --request GET \ --url 'https://SEU_DOMINIO.nimochat.com.br/v2/api/external/SEU_API_ID/listTickets?status=open&queuesIds=3&pageNumber=1' \ --header 'Authorization: Bearer SEU_TOKEN'
Lista contatos cadastrados. Suporta filtros por nome, carteira (wallet) e tag.
Query Parameters
| Parâmetro | Tipo | Descrição |
|---|---|---|
pageNumber | int | Número da página. |
searchParam | string | Busca por nome ou número. |
walletId | int | Filtra contatos da carteira de um vendedor. |
tagId | int | Filtra contatos com determinada tag. |
Lista todos os usuários (atendentes) cadastrados na sua conta.
Query Parameters
| Parâmetro | Tipo | Descrição |
|---|---|---|
pageNumber | int | Página de resultados. |
searchParam | string | Busca por nome ou e-mail. |
Lista as tags (etiquetas) cadastradas para classificar contatos e tickets.
Query Parameters
| Parâmetro | Tipo | Descrição |
|---|---|---|
isActive | boolean | Filtrar apenas tags ativas (true) ou inativas (false). |
Lista as filas (departamentos) configuradas, como "Vendas", "Suporte", "Financeiro".
Lista as oportunidades (cartões) do funil de vendas (Kanban).
Query Parameters
| Parâmetro | Tipo | Descrição |
|---|---|---|
page | int | Página de resultados. |
limit | int | Itens por página. |
status | string | Status da oportunidade. |
pipelineId | int | ID do pipeline (funil). |
stageId | int | ID do estágio dentro do pipeline. |
Verifica em tempo real se um atendente específico está Online ou Offline.
Query Parameters
| Parâmetro | Tipo | Descrição |
|---|---|---|
userId | intobrigatório | ID do atendente. |
Lista todas as notas internas registradas em um ticket específico.
Query Parameters
| Parâmetro | Tipo | Descrição |
|---|---|---|
ticketId | intobrigatório | ID do ticket. |
Retorna os campos personalizados (extraInfo) de um contato.
Query Parameters
| Parâmetro | Tipo | Descrição |
|---|---|---|
contactId | intobrigatório | ID do contato. |
👤 Contatos (POST)
Endpoints para criar, atualizar e gerenciar contatos. Todos os métodos POST recebem o corpo em JSON com header Content-Type: application/json.
Cria um novo contato no sistema.
Body
| Campo | Tipo | Descrição |
|---|---|---|
name | stringobrigatório | Nome do contato. |
number | stringobrigatório | Telefone com DDI + DDD (ex: 5511999999999). |
email | stringopcional | E-mail do contato. |
extraInfo | arrayopcional | Campos personalizados [{"name":"...","value":"..."}]. |
Exemplo
curl --request POST \ --url 'https://SEU_DOMINIO.nimochat.com.br/v2/api/external/SEU_API_ID/createContact' \ --header 'Authorization: Bearer SEU_TOKEN' \ --header 'Content-Type: application/json' \ --data '{ "name": "João Silva", "number": "5511999999999", "email": "joao@empresa.com.br" }'
Atualiza dados de um contato existente.
Body
| Campo | Tipo | Descrição |
|---|---|---|
contactId | intobrigatório | ID do contato. |
name | stringopcional | Novo nome. |
email | stringopcional | Novo e-mail. |
Move um contato para uma posição (kanban) específica do funil.
Body
| Campo | Tipo | Descrição |
|---|---|---|
contactId | intobrigatório | ID do contato. |
kanban | int|stringobrigatório | ID ou nome do kanban de destino. |
Define a carteira (wallet) de um contato — vincula o contato a um vendedor responsável. Útil para distribuir leads automaticamente.
Body
| Campo | Tipo | Descrição |
|---|---|---|
contactId | intobrigatório | ID do contato. |
walletId | int|arrayobrigatório | ID do vendedor (ou array de IDs). |
Bloqueia ou desbloqueia o chatbot para um contato. Útil para evitar respostas automáticas para contatos VIP.
Body
| Campo | Tipo | Descrição |
|---|---|---|
contactId | intobrigatório | ID do contato. |
blocked | booleanobrigatório | true para bloquear, false para desbloquear. |
Atualiza os campos personalizados (extraInfo) de um contato.
Body
| Campo | Tipo | Descrição |
|---|---|---|
contactId | intobrigatório | ID do contato. |
extraInfo | arrayobrigatório | Array no formato [{"name":"campo","value":"valor"}]. |
Busca paginada com filtros avançados — ideal para disparos em massa. Retorna apenas dados essenciais (id, nome, número) para performance, evitando trafegar dados desnecessários.
Body
| Campo | Tipo | Descrição |
|---|---|---|
tagId | int|arrayopcional | ID(s) das tags. Buscar contatos com qualquer uma das tags. |
page | intopcional | Página (padrão: 1). |
limit | intopcional | Itens por página (padrão: 50). |
searchParam | stringopcional | Texto para buscar. |
walletId | intopcional | Filtra pela carteira de um vendedor. |
blocked | booleanopcional | Inclui (false) ou exclui (true) contatos bloqueados. |
Exemplo — buscar todos contatos com a tag "Lead Quente"
curl --request POST \ --url 'https://SEU_DOMINIO.nimochat.com.br/v2/api/external/SEU_API_ID/contacts/search' \ --header 'Authorization: Bearer SEU_TOKEN' \ --header 'Content-Type: application/json' \ --data '{ "tagId": 42, "page": 1, "limit": 100 }'
📨 Mensagens (POST)
Endpoints para envio de mensagens via WhatsApp através das suas conexões. Suporta texto, arquivos, áudio, localização, e os tipos interativos da API oficial WhatsApp Business (WABA).
Envia uma mensagem de texto para um número WhatsApp.
Body
| Campo | Tipo | Descrição |
|---|---|---|
number | stringobrigatório | Número com DDI + DDD (ex: 5511999999999). |
message | stringobrigatório | Texto da mensagem. |
ticketId | intopcional | Ticket ao qual vincular a mensagem. |
Exemplo
curl --request POST \ --url 'https://SEU_DOMINIO.nimochat.com.br/v2/api/external/SEU_API_ID/sendMessageAPIText' \ --header 'Authorization: Bearer SEU_TOKEN' \ --header 'Content-Type: application/json' \ --data '{ "number": "5511999999999", "message": "Olá! Esta é uma mensagem de teste." }'
Envia um arquivo (imagem, PDF, áudio, vídeo) a partir de uma URL pública.
Body
| Campo | Tipo | Descrição |
|---|---|---|
number | stringobrigatório | Número de destino. |
url | stringobrigatório | URL pública do arquivo. |
caption | stringopcional | Legenda (apenas imagens e vídeos). |
Envia indicadores de presença (estado) para o WhatsApp do contato — útil para humanizar bots mostrando "digitando..." antes de uma resposta automática.
Body
| Campo | Tipo | Descrição |
|---|---|---|
ticketId | intobrigatório | ID do ticket. |
state | stringobrigatório | typing, paused ou recording. |
Envia mensagem com até 3 botões interativos via WhatsApp Business API (WABA).
Body
| Campo | Tipo | Descrição |
|---|---|---|
number | stringobrigatório | Número de destino. |
message | stringobrigatório | Texto principal da mensagem. |
button1 | stringobrigatório | Texto do primeiro botão (máx 20 caracteres). |
button2 | stringopcional | Texto do segundo botão. |
button3 | stringopcional | Texto do terceiro botão. |
ticketId | intopcional | Vincular a um ticket existente. |
Envia mensagem com lista interativa (menu suspenso) via WhatsApp Business API (WABA).
Body
| Campo | Tipo | Descrição |
|---|---|---|
number | stringobrigatório | Número de destino. |
header | stringobrigatório | Cabeçalho da lista. |
body | stringobrigatório | Texto principal. |
footer | stringopcional | Rodapé. |
button_text | stringobrigatório | Texto do botão de abertura da lista. |
sections | arrayobrigatório | Seções com itens da lista. |
ticketId | intopcional | Vincular a um ticket existente. |
🎫 Tickets & Tags
Altera o canal (conexão WhatsApp) de um ticket existente — útil quando você precisa migrar um atendimento de uma conexão para outra.
Body
| Campo | Tipo | Descrição |
|---|---|---|
ticketId | intobrigatório | ID do ticket. |
whatsappId | intobrigatório | ID da nova conexão WhatsApp. |
channel | stringobrigatório | Tipo do canal (ex: whatsapp, instagram). |
Adiciona uma nota interna (visível apenas para atendentes) em um ticket.
Body
| Campo | Tipo | Descrição |
|---|---|---|
ticketId | intobrigatório | ID do ticket. |
notes | stringobrigatório | Texto da nota. |
Atualiza o conteúdo de uma nota interna existente.
Body
| Campo | Tipo | Descrição |
|---|---|---|
noteId | intobrigatório | ID da nota. |
notes | stringobrigatório | Novo texto. |
Adiciona uma ou mais tags a um ticket sem remover as existentes. Ideal para classificar atendimentos durante automações sem perder histórico.
Body
| Campo | Tipo | Descrição |
|---|---|---|
ticketId | intobrigatório | ID do ticket. |
tagId | int|arrayobrigatório | ID da tag (ou array de IDs). |
Remove uma ou mais tags específicas de um ticket.
Body
| Campo | Tipo | Descrição |
|---|---|---|
ticketId | intobrigatório | ID do ticket. |
tagId | int|arrayobrigatório | ID da tag (ou array de IDs). |
👥 Usuários (Atendentes)
Cria um novo usuário (atendente) na sua conta.
Body
| Campo | Tipo | Descrição |
|---|---|---|
name | stringobrigatório | Nome do atendente. |
email | stringobrigatório | E-mail (será o login). |
password | stringobrigatório | Senha inicial. |
profile | stringobrigatório | admin, super ou user. |
Atualiza dados de um usuário existente.
Body
| Campo | Tipo | Descrição |
|---|---|---|
userId | intobrigatório | ID do usuário. |
name | stringopcional | Novo nome. |
email | stringopcional | Novo e-mail. |
📣 Campanhas
Crie e gerencie campanhas de envio programado via API: defina mensagens (com rotação de até 3 variações), data de início, conexão de envio e a lista de contatos. Ideal para integrar disparos a CRMs e automações.
delay com valores adequados e evite enviar a mesma mensagem para muitos destinatários em janelas curtas — envios em massa sem intervalo podem causar restrições no número pelo WhatsApp/Meta. Prefira as 3 variações de mensagem.
Cria uma campanha. Após criar, adicione os contatos e inicie com campaign/start.
Body
| Campo | Tipo | Descrição |
|---|---|---|
name | stringobrigatório | Nome da campanha. |
start | stringobrigatório | Data/hora de início em ISO 8601 (ex: 2026-04-10T10:00:00.000Z). |
message1 | stringobrigatório | Mensagem principal. Aceita placeholder {nome}. |
message2 | stringopcional | Variação 2 (rotação automática entre contatos). |
message3 | stringopcional | Variação 3. |
sessionId | intobrigatório | ID da conexão (canal) que fará os envios — veja Listar Canais. |
delay | stringopcional | Intervalo (segundos) entre envios. |
Exemplo
curl --request POST \ --url 'https://SEU_DOMINIO.nimochat.com.br/v2/api/external/SEU_API_ID/campaign/create' \ --header 'Authorization: Bearer SEU_TOKEN' \ --header 'Content-Type: application/json' \ --data '{ "name": "Promoção Junho", "start": "2026-06-15T10:00:00.000Z", "message1": "Olá {nome}! Temos uma novidade para você.", "message2": "Oi {nome}, tudo bem? Confira nossa novidade.", "sessionId": 12, "delay": "5" }'
Atualiza uma campanha existente (mesmos campos do create). Disponível enquanto a campanha não estiver em andamento.
Lista as campanhas do tenant com paginação. Retorna status, totais e configuração de cada campanha.
Relatório da campanha: contatos, status de entrega por contato e progresso geral.
Ações de ciclo de vida da campanha. Todas são POST com body vazio ({}).
Ações disponíveis
| Rota | Efeito |
|---|---|
campaign/start/{campaignId} | Inicia o disparo. |
campaign/pause/{campaignId} | Pausa o disparo em andamento. |
campaign/resume/{campaignId} | Retoma uma campanha pausada. |
campaign/cancel/{campaignId} | Cancela definitivamente. |
campaign/skip/{campaignId} | Pula o contato atual da fila. |
campaign/duplicate/{campaignId} | Duplica a campanha (nova cópia em rascunho). |
campaign/delete/{campaignId} | Exclui a campanha. |
Gerencia os contatos de uma campanha. O add recebe um array de contatos no body.
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | campaign/contacts/add/{campaignId} | Adiciona contatos (array de {name, number}). |
GET | campaign/contacts/{campaignId} | Lista os contatos da campanha. |
POST | campaign/contacts/remove/{campaignId}/{contactId} | Remove um contato. |
POST | campaign/contacts/removeAll/{campaignId} | Remove todos os contatos. |
Exemplo (add)
curl --request POST \ --url 'https://SEU_DOMINIO.nimochat.com.br/v2/api/external/SEU_API_ID/campaign/contacts/add/123' \ --header 'Authorization: Bearer SEU_TOKEN' \ --header 'Content-Type: application/json' \ --data '[ { "name": "João", "number": "5511999990001" }, { "name": "Maria", "number": "5511999990002" } ]'
📤 Envio em Lote
Endpoints para disparo direto a múltiplos números, sem criar uma campanha. Os campos min e max definem o intervalo aleatório (em segundos) entre cada envio — essencial para envios saudáveis.
Envia a mesma mensagem para uma lista de números.
Body
| Campo | Tipo | Descrição |
|---|---|---|
whatsappId | intobrigatório | ID da conexão de envio. |
arrayNumbers | arrayobrigatório | Lista de números (DDI+DDD+número). |
message | stringobrigatório | Texto a enviar. |
min / max | intopcional | Intervalo aleatório entre envios, em segundos (ex: 3 a 8). |
Exemplo
curl --request POST \ --url 'https://SEU_DOMINIO.nimochat.com.br/v2/api/external/SEU_API_ID/bulkSendMessage' \ --header 'Authorization: Bearer SEU_TOKEN' \ --header 'Content-Type: application/json' \ --data '{ "whatsappId": 12, "arrayNumbers": ["5511999990001", "5511999990002"], "message": "Olá, tudo bem?", "min": 3, "max": 8 }'
Envio em massa personalizado por contato: a mensagem usa placeholders e os valores vêm de uma lista CSV (uma linha por destinatário).
Body
| Campo | Tipo | Descrição |
|---|---|---|
whatsappId | intobrigatório | ID da conexão de envio. |
message | stringobrigatório | Mensagem com placeholders, ex: Olá {nome}, seu código é {codigo}. |
dataInput | stringobrigatório | Linhas numero,valor1,valor2 separadas por \n — os valores preenchem os placeholders na ordem. |
min / max | intopcional | Intervalo aleatório entre envios (segundos). |
Exemplo
curl --request POST \ --url 'https://SEU_DOMINIO.nimochat.com.br/v2/api/external/SEU_API_ID/bulkSendMessageWithVariable' \ --header 'Authorization: Bearer SEU_TOKEN' \ --header 'Content-Type: application/json' \ --data '{ "whatsappId": 12, "message": "Olá {nome}, seu código é {codigo}", "dataInput": "5511999990001,João,ABC123\n5511999990002,Maria,DEF456", "min": 3, "max": 8 }'
Variante do envio em massa que informa o tipo da conexão (whatsappType) — útil quando o tenant tem conexões de tipos diferentes.
Body
| Campo | Tipo | Descrição |
|---|---|---|
whatsappId | intobrigatório | ID da conexão. |
whatsappType | stringobrigatório | Tipo da conexão (conforme retornado em Listar Canais). |
arrayNumbers | arrayobrigatório | Lista de números. |
message | stringobrigatório | Texto a enviar. |
min / max | intopcional | Intervalo aleatório entre envios (segundos). |
Envio individual pela mesma infraestrutura do lote — aceita externalKey para controle/idempotência do seu lado.
Body
| Campo | Tipo | Descrição |
|---|---|---|
whatsappId | intobrigatório | ID da conexão. |
number | stringobrigatório | Número de destino. |
message | stringobrigatório | Texto a enviar. |
externalKey | stringopcional | Chave externa para rastrear o envio. |
Acompanhe os despachos em lote criados pelos endpoints acima.
Rotas
| Método | Rota | Descrição |
|---|---|---|
GET | bulkDispatch/list | Lista despachos (paginação page/limit). |
GET | bulkDispatch/show/{dispatchId} | Detalhe de um despacho (progresso, status). |
POST | bulkDispatch/update/{dispatchId} | Atualiza um despacho — ex: {"status": "cancelled", "cancellationReason": "..."}. |
👥 Grupos WhatsApp
Crie e administre grupos do WhatsApp via API: participantes, administradores, título, descrição, foto e link de convite. Em todas as rotas, whatsappId é o ID da conexão (veja Listar Canais) e groupId é o identificador do grupo (formato 123456789@g.us).
Cria um ou mais grupos e adiciona o número informado como primeiro participante.
Body (exemplo)
{
"whatsappId": 12,
"titles": ["Meu Grupo 1"],
"number": "5511999990001"
}
Ações de administração. Todas recebem whatsappId + groupIds (array) e os campos específicos abaixo.
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | group/addParticipant | Adiciona participantes — body extra: participants (array de números). |
POST | group/removeParticipant | Remove participantes — participants. |
POST | group/promote | Promove participantes a admin — participants. |
POST | group/demote | Rebaixa admins a participante — participants. |
POST | group/changeTitle | Altera o título — title. |
POST | group/changeDescription | Altera a descrição — description. |
POST | group/changePicture | Altera a foto — picture (URL pública). |
POST | group/setAdminsOnly | Restringe mensagens a admins — adminsOnly (true/false). |
Body (exemplo)
{
"whatsappId": 12,
"groupIds": ["123456789@g.us"],
"participants": ["5511999990001"]
}
Consultas de grupos da conexão.
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | group/list | Lista os grupos — body: {whatsappId}. |
POST | group/listParticipants | Participantes de grupos — {whatsappId, groupIds}. |
POST | group/showById | Detalhe de um grupo — {whatsappId, groupId}. |
POST | group/getInviteLink | Link de convite — {whatsappId, groupId}. |
POST | listGroupInfo | Listagem geral com participantes — {listGroups: true, listParticipants: true} (opcional groupId). |
Envia mensagens para um grupo. No campo number, informe o ID numérico do grupo (sem o sufixo @g.us).
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | /v2/api/external/{apiId}/group | Texto para grupo — body: {body, number, externalKey, isClosed}. |
POST | /v2/api/external/{apiId}/groupMediaUrl | Arquivo via URL — body: {mediaUrl, body, number, externalKey, isClosed}. |
Body (exemplo)
{
"body": "A mensagem desejada",
"number": "123456789015189153",
"externalKey": "SUA_CHAVE_EXTERNA",
"isClosed": false
}
📨 Mensagens — Recursos Adicionais
Complementos aos endpoints de envio de texto e arquivo: áudio como mensagem de voz, arquivo em base64, localização, cartão de contato (vCard), busca e consulta de mensagens.
Envia um áudio como mensagem de voz (PTT) a partir de uma URL pública.
Body (exemplo)
{
"audio": "https://exemplo.com/audio.ogg",
"number": "5511999999999",
"externalKey": "SUA_CHAVE_EXTERNA",
"isClosed": false
}
Envia arquivo codificado em base64 — útil quando o arquivo não tem URL pública.
Body (exemplo)
{
"body": "A mensagem desejada",
"number": "5511999999999",
"base64Data": "iVBORw0KGgoAAAANSUhEUgAA...",
"mimeType": "image/png",
"fileName": "exemplo_imagem",
"isClosed": false
}
Envio de texto via GET (parâmetros na URL) — para integrações que só conseguem disparar GET. Informe body, number, externalKey, bearertoken e opcional isClosed.
Envia uma localização (pin no mapa) com nome e endereço.
Body (exemplo)
{
"number": "5511999990001",
"latitude": -23.5505,
"longitude": -46.6333,
"name": "São Paulo",
"address": "Av. Paulista, 1000",
"ticketId": null,
"externalKey": "SUA_CHAVE_EXTERNA"
}
Envia um cartão de contato (vCard).
Body (exemplo)
{
"number": "5511999990001",
"contact": [
{
"fullName": "João Silva",
"wuid": "5511999990002@s.whatsapp.net",
"phoneNumber": "5511999990002"
}
],
"ticketId": null,
"externalKey": "SUA_CHAVE_EXTERNA"
}
Consulta de mensagens.
Rotas
| Método | Rota | Descrição |
|---|---|---|
GET | searchMessages?ticketId=...&searchParam=...&page=1&limit=20 | Busca textual nas mensagens de um ticket. |
GET | getMessageByMessageId?messageId=... | Recupera uma mensagem pelo ID do WhatsApp. |
🧩 Mensagens Interativas
Botões, listas, enquetes e templates ricos. Os recursos disponíveis dependem do tipo da conexão do ticket. Todos os endpoints recebem ticketId e respondem dentro da conversa existente.
Conexões padrão (não-oficiais).
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | sendInteractive/baileys/quickReply | Botões de resposta rápida — {ticketId, body:{text}, footer:{text}, buttons:[{display_text,id}]}. |
POST | sendInteractive/baileys/singleSelect | Lista de seleção única — {ticketId, body, footer, list:{title, sections:[{title, rows:[{id,title,description}]}]}}. |
POST | sendInteractive/baileys/pixButton | Botão PIX — {ticketId, pixType, pixKey, pixName, bodyText}. |
POST | sendInteractive/baileys/ctaCopy | Botão copiar código — {ticketId, body, footer, displayText, copyCode}. |
POST | sendInteractive/baileys/ctaUrl | Botão abrir URL — {ticketId, body, footer, displayText, url}. |
POST | sendInteractive/baileys/ctaCall | Botão ligar — {ticketId, body, footer, displayText, phoneNumber}. |
Body (exemplo)
{
"ticketId": 1262,
"body": { "text": "Escolha uma opção:" },
"footer": { "text": "Rodapé opcional" },
"buttons": [
{ "display_text": "Opção 1", "id": "op1" },
{ "display_text": "Opção 2", "id": "op2" }
]
}
Conexões do tipo uazapi.
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | sendInteractive/uazapi/button | Botões — {ticketId, text, choices:[...], footerText, imageButton}. |
POST | sendInteractive/uazapi/list | Lista — {ticketId, text, choices, listButton, footerText}. |
POST | sendInteractive/uazapi/poll | Enquete — {ticketId, text, choices, selectableCount}. |
POST | sendInteractive/uazapi/carousel | Carrossel de cards — {ticketId, text, carousel:[{text,image,buttons:[{text,type}]}]}. |
POST | sendInteractive/uazapi/pixButton | Botão PIX — {ticketId, pixType, pixKey, pixName}. |
POST | sendInteractive/uazapi/locationButton | Solicitar localização — {ticketId, text}. |
POST | sendInteractive/uazapi/requestPayment | Solicitação de pagamento — {ticketId, amount, title, text, footer, itemName, invoiceNumber, pixType, pixKey, pixName}. |
Body (exemplo)
{
"ticketId": 1262,
"text": "Qual sua preferência?",
"choices": ["Opção A", "Opção B", "Opção C"],
"selectableCount": 1
}
Conexões Instagram Direct.
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | sendInteractive/instagram/quickReply | Respostas rápidas — {ticketId, message, quickReplies:[{content_type,title,payload}]}. |
POST | sendInteractive/instagram/buttonTemplate | Botões — {ticketId, message, buttons:[{type,title,payload}]}. |
POST | sendInteractive/instagram/genericTemplate | Cards — {ticketId, elements:[{title,subtitle,image_url,buttons}]}. |
POST | instagram/iceBreakers | Perguntas iniciais (get/set/delete) — {action, iceBreakers:[{question,payload}]}. |
POST | instagram/persistentMenu | Menu persistente (get/set/delete) — {action, composerInputDisabled, menuItems}. |
Conexões Facebook Messenger.
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | sendInteractive/messenger/quickReply | Respostas rápidas — {ticketId, message, quickReplies}. |
POST | sendInteractive/messenger/buttonTemplate | Botões — {ticketId, message, buttons} (suporta web_url). |
POST | sendInteractive/messenger/genericTemplate | Cards — {ticketId, elements}. |
POST | sendInteractive/messenger/mediaTemplate | Mídia + botões — {ticketId, mediaType, mediaUrl, buttons}. |
POST | sendInteractive/messenger/receiptTemplate | Recibo de compra — {ticketId, receipt:{recipient_name, order_number, currency, summary, elements}}. |
POST | sendInteractive/messenger/messageTag | Mensagem fora da janela 24h com tag — {ticketId, message, tag} (ex: POST_PURCHASE_UPDATE). |
POST | sendInteractive/messenger/customerFeedback | Pesquisa NPS/CSAT — {ticketId, title, subtitle, business_privacy_url, expires_in_days, feedback_screens}. |
POST | messenger/greeting | Saudação da página (get/set/delete) — {action, greetings:[{locale,text}]}. |
POST | messenger/personas | Personas de atendente (list/create/delete) — {action, name, profilePictureUrl}. |
📋 Templates WABA (API Oficial)
Para conexões da API oficial do WhatsApp Business, mensagens fora da janela de 24h exigem templates aprovados. O campo templateData segue o formato oficial da Meta.
Envia um template aprovado.
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | template | Template simples (sem variáveis). |
POST | templateBody | Template com variáveis no corpo (components/parameters). |
POST | templateMarketingBody | Template de marketing com variáveis. |
Body (exemplo)
{
"number": "5511999999999",
"isClosed": false,
"templateData": {
"messaging_product": "whatsapp",
"to": "5511999999999",
"type": "template",
"template": {
"name": "hello_world",
"language": { "code": "en_US" }
}
}
}
🎫 Tickets — Gestão Completa
Criação de tickets, consulta por número ou ID, atualização de fila/status/integrações, tags por contato, pausa e compartilhamento.
Cria um ticket com mensagem inicial. Para canais de e-mail (webmail), use email em vez de number e informe o channelId do canal webmail. Campos opcionais: name/firstName/lastName (criação do contato), kanbanId, chatFlowId, queueId, reasonId, value.
Body (exemplo)
{
"body": "A mensagem desejada",
"number": "5511999999999",
"externalKey": "SUA_CHAVE_EXTERNA",
"userId": 3,
"status": "pending"
}
Consultas de tickets e mensagens.
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | showticket | Ticket ativo do contato — {number}. |
POST | showallticket | Todos os tickets do contato — {number}. |
POST | showticketchatbot | Ticket em atendimento por chatbot — {number}. |
POST | showTicketById | Ticket por ID — {ticketId}. |
POST | showAllMessages | Todas as mensagens de um ticket — {ticket}. |
Atualizações do ticket.
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | updateticketinfo | Status, fila e integrações — {ticketId, userId, status, queueId, typebotStatus, chatgptStatus, dialogflowStatus, difyStatus, n8nStatus, chatFlowId}. |
POST | updatequeue | Altera a fila — {ticketId, queueId}. |
POST | updatetag | Define a tag principal — {ticketId, tag}. |
Tags por contato (sem precisar de ticket). Localize por contactId ou number; aceita tagId ou tagIds. O addTagContact mantém as tags existentes.
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | addTagContact | Adiciona tag(s) ao contato. |
POST | removeTagContact | Remove tag(s) do contato. |
Body (exemplo)
{
"contactId": 123,
"tagId": 1
}
Pausa de atendimento com motivo e histórico.
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | ticket/pause/start/{ticketId} | Inicia pausa — body: {pauseReason}. |
POST | ticket/pause/end/{ticketId} | Encerra a pausa. |
GET | ticket/pause/logs/{ticketId} | Histórico de pausas do ticket. |
Compartilhamento e avaliações.
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | ticket/share | Cria link de compartilhamento — {ticketId, inviteUrl}. |
GET | ticket/share/{ticketId} | Consulta o compartilhamento. |
GET | listTicketEvaluations?page=1&limit=20 | Lista avaliações de atendimento. |
🏗️ CRM — Pipelines, Oportunidades e Cadastros
Estruture o funil de vendas via API: pipelines e estágios, oportunidades vinculadas a contatos, e os cadastros de apoio (kanban, tags, motivos de encerramento e filas).
CRUD de pipelines (funis) e estágios.
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | pipeline/create | Cria — {name, description}. |
GET | pipeline/list?page=1&limit=20 | Lista. |
GET | pipeline/show/{id} | Detalhe. |
POST | pipeline/update/{id} | Atualiza — {name}. |
POST | pipeline/delete/{id} | Exclui. |
POST | stage/create | Cria estágio — {name, pipelineId, order, color}. |
GET | stage/list?pipelineId=... | Lista estágios do pipeline. |
GET | stage/show/{id} | Detalhe do estágio. |
POST | stage/update/{id} | Atualiza estágio. |
POST | stage/delete/{id} | Exclui estágio. |
Oportunidades de venda. status: open, win ou lose. Se o contato não existir, é criado a partir de number/contactName/email. Veja também Listar Oportunidades.
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | createOpportunity | Cria oportunidade. |
POST | updateOpportunity | Atualiza — {opportunityId, ...}. |
POST | deleteOpportunity | Exclui — {opportunityId}. |
Body (exemplo)
{
"number": "5511999990001",
"contactName": "Nome do Contato",
"email": "contato@email.com",
"name": "Proposta Empresa X",
"value": 10000.00,
"status": "open",
"pipelineId": 16,
"stageId": 7,
"responsibleId": 1,
"closingForecast": "2026-12-31",
"description": "Descrição da oportunidade"
}
Cadastros de apoio: tags, colunas de kanban, motivos de encerramento e filas.
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | createTag | Cria tag — {tag, color, isActive}. |
POST | updateTagData/{id} | Atualiza tag — {tag, color}. |
POST | deleteTag/{id} | Exclui tag. |
POST | createKanban | Cria coluna kanban — {name}. |
GET | listKanban | Lista colunas. |
POST | updateKanban/{id} | Atualiza coluna. |
POST | deleteKanban/{id} | Exclui coluna. |
POST | createReason | Cria motivo — {name}. |
GET | listReasons | Lista motivos. |
POST | updateReason/{id} | Atualiza motivo. |
POST | deleteReason/{id} | Exclui motivo. |
POST | createQueueData | Cria fila — {queue, isActive}. |
POST | updateQueueData/{id} | Atualiza fila. |
POST | deleteQueueData/{id} | Exclui fila. |
📅 Agendamentos e Lembretes
Agende compromissos vinculados a contatos e configure lembretes automáticos por WhatsApp antes de cada evento.
CRUD de agendamentos. status: pending, confirmed, etc.
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | appointment/create | Cria. |
GET | appointment/list?page=1&limit=20&status=pending | Lista (filtro por status). |
GET | appointment/show/{id} | Detalhe. |
POST | appointment/update/{id} | Atualiza. |
POST | appointment/delete/{id} | Exclui. |
Body (exemplo)
{
"title": "Reunião de Vendas",
"description": "Reunião sobre proposta comercial",
"contactId": 123,
"contactName": "João Silva",
"contactPhone": "5511999999999",
"whatsappId": 12,
"startAt": "2026-06-15T14:00:00.000Z",
"endAt": "2026-06-15T15:00:00.000Z",
"status": "pending",
"notes": "Levar proposta impressa"
}
Regras de lembrete automático: a mensagem é enviada N horas antes do agendamento, pela conexão indicada.
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | scheduleReminder/create | Cria regra. |
GET | scheduleReminder/list | Lista regras. |
POST | scheduleReminder/update/{id} | Atualiza. |
POST | scheduleReminder/toggle/{id} | Ativa/desativa. |
POST | scheduleReminder/delete/{id} | Exclui. |
Body (exemplo)
{
"name": "Lembrete 24h antes",
"description": "Envia mensagem ao contato 24h antes do agendamento",
"hoursBeforeEvent": 24,
"messageType": "message",
"messageContent": "Olá {nome}, lembrete da sua reunião amanhã!",
"whatsappId": 12,
"active": true
}
📊 Dashboard e Relatórios
Indicadores de atendimento para alimentar BI e relatórios externos. Todos os endpoints são GET e aceitam startDate e endDate (formato AAAA-MM-DD).
Indicadores disponíveis:
Rotas
| Método | Rota | Descrição |
|---|---|---|
GET | dash/ticketsAndTimes | Totais de tickets e tempos médios (espera/atendimento). |
GET | dash/ticketsStatus | Distribuição por status. |
GET | dash/ticketsChannels | Distribuição por canal. |
GET | dash/ticketsQueue | Distribuição por fila. |
GET | dash/ticketsPerUser | Volume por atendente. |
GET | dash/ticketsUser | Detalhe por atendente. |
GET | dash/ticketsReasons | Distribuição por motivo de encerramento. |
GET | dash/ticketsEvolution | Evolução diária de tickets. |
GET | dash/ticketsEvolutionByValue | Evolução por valor. |
GET | dash/ticketsEvolutionChannelsName | Evolução diária por canal. |
🔌 Canais e Sessões
Gerencie as conexões WhatsApp do tenant via API: criar, iniciar, obter QR Code e consultar canais. Complementa Listar Canais e Listar Sessões.
Ciclo de vida da sessão (conexão).
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | createtSession | Cria sessão — {name, status, type}. Atenção: a rota é createtSession mesmo (grafia da plataforma). |
POST | startSession | Inicia — {whatsappId}. |
POST | qrCodeSession | Obtém o QR Code atual — {whatsappId}. |
POST | requestNewQrCodeSession | Força novo QR Code — {whatsappId}. |
POST | deleteSession | Exclui a sessão — {whatsappId}. |
POST | showChannel | Consulta canal pelo número — {number}. |
POST | showChannelById | Consulta canal por ID — {id}. |
GET | getAllSessionApis | Lista as configurações de API do tenant. |
🗂️ Utilitários
Galeria de arquivos, tarefas (to-do), logs de chamadas, consulta de contato por número e listagens auxiliares.
Consulta um contato pelo número de WhatsApp (retorna dados completos, incluindo tags e carteiras).
Body (exemplo)
{
"number": "5511999999999"
}
Galeria de arquivos do tenant. O upload é multipart/form-data (campo de arquivo + description).
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | gallery/upload | Envia arquivo (multipart) — campo description opcional. |
GET | gallery/list?pageNumber=1&fileType=image | Lista arquivos (filtro por tipo). |
POST | gallery/delete/{id} | Exclui arquivo. |
Tarefas (to-do) por usuário. priority: low/medium/high; status: pending/finished.
Rotas
| Método | Rota | Descrição |
|---|---|---|
POST | todo/create | Cria — {name, description, owner, ownerId, status, priority}. |
GET | todo/list | Lista. |
POST | todo/update/{id} | Atualiza — ex: {status: finished}. |
POST | todo/delete/{id} | Exclui. |
GET | todo/logs/{userId} | Histórico de alterações por usuário. |
Logs de chamadas recebidas/realizadas.
Rotas
| Método | Rota | Descrição |
|---|---|---|
GET | callLog/list?page=1&limit=20 | Lista chamadas. |
GET | callLog/show/{id} | Detalhe da chamada. |
GET | wavoip/calls?page=1&limit=20 | Lista chamadas de voz IP. |
GET | wavoip/calls/{id} | Detalhe da chamada de voz IP. |
Listagens auxiliares para montar integrações.
Rotas
| Método | Rota | Descrição |
|---|---|---|
GET | listChatFlows | Fluxos de chatbot do tenant. |
GET | listAutoReplies | Respostas automáticas. |
GET | listFastReplies | Respostas rápidas. |
🪝 Webhooks
Webhooks são notificações que o NimoChat Pro+ envia automaticamente para uma URL do seu sistema sempre que algo acontece na plataforma — uma nova mensagem chega, um ticket é criado, um atendimento é finalizado.
Em vez de seu sistema ficar perguntando à API "tem mensagem nova?" a cada minuto (polling), o NimoChat avisa em tempo real quando algo acontece. Isso é mais eficiente, mais rápido e consome menos recursos.
Configurando o Webhook
A configuração é feita no painel administrativo do NimoChat Pro+ em poucos cliques:
- Faça login como Administrador.
- Acesse Integrações > Webhook no menu.
- Ative a opção "Ativar webhook".
- Informe a URL do seu sistema que vai receber as notificações (precisa ser HTTPS pública).
- Opcionalmente, ative "Receber eventos de mensagem" para receber notificações também das mensagens individuais (não apenas dos tickets).
- Salve as alterações.
localhost, 192.168.x.x) não funcionam. Use um servidor público, ngrok para testes ou um serviço como n8n/Make/Pipedream.
Estrutura do payload
Toda notificação é enviada como POST para sua URL com Content-Type: application/json. O corpo da requisição segue esta estrutura:
{
"method": "...", // tipo do evento (opcional)
"tenantId": 123, // ID da sua conta
"ticketId": 98765, // ID do ticket relacionado
"msg": { // dados da mensagem
"body": "texto da mensagem",
"fromMe": false, // true = atendente enviou, false = contato enviou
"from": "5511999999999@s.whatsapp.net"
},
"ticket": { // dados do ticket
"id": 98765,
"tenantId": 123,
"userId": null, // null = não atribuído
"queueId": 5, // ID da fila
"createdAt": "2026-04-06T13:00:00.000Z",
"contact": {
"id": 456,
"name": "João Silva",
"number": "5511999999999",
"wallets": [{ "id": 7 }]
}
}
}
Campos principais
| Campo | Tipo | Descrição |
|---|---|---|
method | string | Tipo do evento. Quando ausente ou vazio, indica evento de entrada (mensagem recebida ou ticket criado). |
tenantId | int | ID da sua conta. Sempre valide para garantir que o webhook é da sua conta. |
ticketId | int | ID do ticket relacionado ao evento. |
msg.body | string | Texto da mensagem (em mensagens de texto). |
msg.fromMe | boolean | true se a mensagem foi enviada pelo atendente, false se foi recebida do contato. |
ticket.userId | int|null | null indica ticket não atribuído (oportunidade de distribuição automática). |
ticket.contact.number | string | Telefone do contato (sem prefixos do WhatsApp). |
Tipos de eventos
O campo method identifica o tipo do evento. Os principais valores são:
| Evento | Quando dispara |
|---|---|
| (vazio) — Mensagem recebida | O contato enviou uma mensagem. msg.fromMe = false e method ausente. Frequentemente acompanhado de criação de ticket novo. |
| (vazio) — Novo ticket | Um novo ticket foi criado a partir de uma conversa de entrada. ticket.userId = null. |
message_send | O atendente enviou uma mensagem pelo painel. msg.fromMe = true. |
message_send_uazapi | Mensagem enviada por uma sessão WhatsApp via QR Code (não-oficial). |
message_send_waba / message_sent_waba | Mensagem enviada pela API oficial do WhatsApp Business (Cloud API). |
ack | Confirmação de leitura/entrega do WhatsApp (entregue, lido, ouvido). |
presence | Atualização de presença do contato (online, offline, digitando). |
method e com fromMe = false) e ignora os eventos ack, presence e os de envio. Isso evita ruído e processa só o que é acionável.
Exemplos de payloads reais
Mensagem de texto recebida
{
"msg": {
"fromMe": false,
"body": "Olá, gostaria de saber sobre o produto X",
"from": "5511999999999@s.whatsapp.net"
},
"ticket": {
"id": 12345,
"tenantId": 2,
"userId": null,
"queueId": 3,
"createdAt": "2026-04-06T13:00:00.000Z",
"contact": {
"id": 456,
"name": "João Silva",
"number": "5511999999999",
"wallets": []
}
}
}
Mídia recebida (áudio, imagem, documento)
{
"msg": {
"fromMe": false,
"content": [
{ "type": "audio", "url": "https://media.../audio.ogg" }
]
},
"ticket": {
"id": 12346,
"tenantId": 2,
"contact": { "id": 456, "number": "5511999999999" }
}
}
msg.body pode estar vazio e o conteúdo vir em msg.content como array. Sempre faça type checking no seu código antes de processar.
Mensagem enviada pelo atendente (filtrar)
{
"method": "message_send_uazapi",
"msg": { "fromMe": true, "body": "Olá! Em que posso ajudar?" },
"ticket": { "id": 12345, "tenantId": 2 }
}
Confirmação de leitura (filtrar)
{
"method": "ack",
"ticketId": 12345
}
Exemplo de receiver (Node.js)
Receiver simples em Node.js + Express que processa apenas mensagens recebidas:
const express = require('express'); const app = express(); app.use(express.json()); // Métodos a ignorar (saída + ruído) const IGNORE = ['message_send', 'message_send_uazapi', 'message_send_waba', 'message_sent_waba', 'ack', 'presence']; app.post('/webhook/nimochat', (req, res) => { const payload = req.body; // 1. Filtrar eventos que não interessam if (IGNORE.includes(payload.method)) return res.sendStatus(200); // 2. Validar tenant (segurança) if (payload.ticket?.tenantId !== SEU_TENANT_ID) return res.sendStatus(403); // 3. Processar apenas mensagens recebidas if (payload.msg?.fromMe === false) { const contact = payload.ticket?.contact; const body = typeof payload.msg.body === 'string' ? payload.msg.body : ''; console.log(`Nova mensagem de ${contact?.name}: ${body}`); // Aqui você integra com seu CRM, dispara alerta, etc. } res.sendStatus(200); }); app.listen(3000);
Segurança e boas práticas
- HTTPS obrigatório — sempre use URLs com SSL válido. Webhooks com HTTP simples podem não funcionar.
- Valide o
tenantId— confira se o ID da conta no payload bate com o seu. Se não bater, rejeite com HTTP 403. - Responda rápido (HTTP 200) — o webhook tem timeout. Se sua lógica é demorada, responda 200 imediatamente e processe em background (fila).
- Idempotência — use
ticket.id+msg.from+ timestamp para evitar processar a mesma mensagem 2x se houver retentativa. - Type checking — sempre verifique o tipo dos campos antes de usar (especialmente
msg.bodyque pode ser string ou ausente). - Logue tudo no início — durante a integração, logue payloads completos. Eles são sua única fonte de verdade sobre o que chega.
- IP whitelist (opcional) — se possível, restrinja o endpoint apenas a IPs conhecidos do servidor NimoChat.
💡 Casos de uso reais
1. Disparo em massa segmentado por tag
Você quer enviar uma promoção para todos os contatos com a tag "Lead Quente". Em vez de exportar a lista manualmente, busque os contatos via API e dispare via n8n / Make.
Passo 1 — Buscar contatos com a tag
curl --request POST \ --url 'https://SEU_DOMINIO.nimochat.com.br/v2/api/external/SEU_API_ID/contacts/search' \ --header 'Authorization: Bearer SEU_TOKEN' \ --header 'Content-Type: application/json' \ --data '{ "tagId": 42, "limit": 500 }'
Passo 2 — Para cada contato, enviar a mensagem
curl --request POST \ --url 'https://SEU_DOMINIO.nimochat.com.br/v2/api/external/SEU_API_ID/sendMessageAPIText' \ --header 'Authorization: Bearer SEU_TOKEN' \ --header 'Content-Type: application/json' \ --data '{ "number": "5511999999999", "message": "Oferta especial só para você! 30% OFF até hoje." }'
2. Distribuição automática de leads para vendedores
Quando um novo lead chega, atribua automaticamente para um vendedor disponível usando a função de carteirização (wallet).
Atribuir contato à carteira do vendedor
curl --request POST \ --url 'https://SEU_DOMINIO.nimochat.com.br/v2/api/external/SEU_API_ID/updateContactWallet' \ --header 'Authorization: Bearer SEU_TOKEN' \ --header 'Content-Type: application/json' \ --data '{ "contactId": 4567, "walletId": 12 }'
Combine com o webhook de novo ticket: quando o NimoChat avisar que um novo ticket foi criado, sua aplicação consulta qual vendedor está disponível (lógica round-robin, menor carga, especialidade) e atribui via API.
3. Sincronizar contatos do CRM com o NimoChat
Toda vez que um novo contato é cadastrado no seu CRM, replique-o automaticamente para o NimoChat:
curl --request POST \ --url 'https://SEU_DOMINIO.nimochat.com.br/v2/api/external/SEU_API_ID/createContact' \ --header 'Authorization: Bearer SEU_TOKEN' \ --header 'Content-Type: application/json' \ --data '{ "name": "Maria Oliveira", "number": "5511988887777", "email": "maria@empresa.com", "extraInfo": [ { "name": "empresa", "value": "ACME Ltda" }, { "name": "cargo", "value": "Diretora Comercial" } ] }'
4. Cadastrar atendentes via integração com RH
Quando um novo colaborador é admitido no seu sistema de RH, crie automaticamente o usuário (atendente) no NimoChat:
curl --request POST \ --url 'https://SEU_DOMINIO.nimochat.com.br/v2/api/external/SEU_API_ID/createUser' \ --header 'Authorization: Bearer SEU_TOKEN' \ --header 'Content-Type: application/json' \ --data '{ "name": "Carlos Santos", "email": "carlos.santos@empresa.com", "password": "SenhaTemp123!", "profile": "user" }'
5. Humanizar bots — mostrar "digitando..." antes da resposta
Antes do seu bot enviar uma resposta automática, envie um sinal de presence "typing" para humanizar a interação:
# 1. Envia "digitando..." (typing) curl --request POST \ --url 'https://SEU_DOMINIO.nimochat.com.br/v2/api/external/SEU_API_ID/sendPresence' \ --header 'Authorization: Bearer SEU_TOKEN' \ --data '{ "ticketId": 12345, "state": "typing" }' # 2. Aguarda 2-4 segundos sleep 3 # 3. Envia a mensagem real curl --request POST \ --url 'https://SEU_DOMINIO.nimochat.com.br/v2/api/external/SEU_API_ID/sendMessageAPIText' \ --header 'Authorization: Bearer SEU_TOKEN' \ --data '{ "number": "5511999999999", "message": "Resposta do bot" }'
6. Classificar tickets durante o atendimento
Use addTag para classificar o ticket sem perder as tags anteriores. Por exemplo, ao detectar uma palavra-chave no texto da mensagem:
curl --request POST \ --url 'https://SEU_DOMINIO.nimochat.com.br/v2/api/external/SEU_API_ID/addTag' \ --header 'Authorization: Bearer SEU_TOKEN' \ --data '{ "ticketId": 12345, "tagId": [42, 87] }'
📚 Referência completa de endpoints
A coleção do Postman tem mais de 205 endpoints documentados com exemplos prontos de request e response em várias linguagens (cURL, Node.js, Python, PHP, Go, Java).
Abra a coleção, clique em qualquer endpoint, e copie o snippet na linguagem desejada usando o painel "Code" (lateral direita).
Endpoints por categoria
Resumo de tudo que está disponível na coleção:
📅 Agendamentos e Lembretes
Crie e gerencie agendamentos e lembretes automáticos.
📣 Campanhas
Crie, gerencie e dispare campanhas de marketing em massa.
🔌 Canais e Sessões
Gerencie conexões WhatsApp, escaneie QR Codes, inicie e finalize sessões.
👤 Contatos (avançado)
🏗️ CRM - Pipeline
Gerencie pipelines (funis) e estágios do CRM.
📊 Dashboard
Métricas e gráficos para BI / dashboards externos.
📤 Envio em Lote (Bulk)
Disparos em massa de mensagens com controle de progresso.
📂 Galeria de mídias
👥 Grupos WhatsApp
Crie e gerencie grupos do WhatsApp.
🏷️ Kanban / Tags / Motivos / Filas
CRUD completo de objetos auxiliares.
🔍 Listagens utilitárias
📞 Logs de Chamadas
📨 Mensagens (extras)
👥 Mensagens em Grupo
💼 Oportunidades (CRM)
📋 Templates WABA (API Oficial)
🎫 Tickets (extras)
✅ To-Do List
❓ FAQ — Perguntas frequentes
Posso testar sem código?
Sim. Acesse a coleção do Postman, clique em qualquer endpoint, preencha as variáveis (token, URL base, API ID) e clique em "Send". É a forma mais rápida de testar.
Como gerar exemplos de código em outras linguagens?
No Postman, abra o endpoint, clique no ícone { } (Code Snippets) na lateral direita e escolha a linguagem: cURL, Node.js, Python, PHP, Java, Go, C#, Ruby, etc.
Existe limite de requisições (rate limit)?
Sim. Use a API com bom senso — picos muito altos podem ser bloqueados. Para disparos em massa, use os endpoints específicos de Bulk com delay entre mensagens (recomendado: 5-10 segundos).
Como funciona a autenticação Bearer?
Você gera um token no painel admin (menu API) e envia ele em todas as requisições no header Authorization: Bearer SEU_TOKEN. O token é específico da sua conta e isola seus dados.
O que é o apiId no URL?
É o identificador único da sua chave de API. É gerado junto com o token quando você cria uma nova API no painel. Cada chave pode estar associada a uma conexão WhatsApp específica.
Por que minhas mensagens não chegam ao destino?
Possíveis causas: (1) número formatado errado — sempre use DDI+DDD+número (ex: 5511999999999), (2) conexão WhatsApp desconectada — verifique no painel, (3) número do destinatário não tem WhatsApp, (4) o WhatsApp pode ter bloqueado por excesso de mensagens.
O webhook não está chegando, o que fazer?
Confira: (1) URL configurada está correta e é HTTPS pública, (2) seu servidor responde com HTTP 200 em até 15 segundos, (3) a opção "Receber eventos de mensagem" está ativada se você quer receber mensagens individuais, (4) seu firewall não está bloqueando os IPs do NimoChat.
Onde reportar bugs ou sugerir novos endpoints?
Entre em contato pelo nosso canal de suporte — vamos avaliar e priorizar. Atualizações da API são notificadas via release notes no Postman.