Documentação Técnica

API NimoChat Pro+

Integre o NimoChat Pro+ ao seu CRM, ERP, n8n, Make ou qualquer plataforma. Automatize disparos, sincronize contatos, gerencie tickets e construa fluxos personalizados via API REST.

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

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

  1. Faça login no seu painel NimoChat Pro+ como Administrador.
  2. No menu lateral, acesse API.
  3. Clique em Nova API, dê um nome e selecione a conexão WhatsApp.
  4. Copie e guarde o Token e o API ID. O token só é exibido uma vez.
Mantenha seu token seguro. Ele dá acesso total à sua conta. Nunca exponha o token em código frontend, repositórios públicos ou logs. Se suspeitar que o token vazou, gere um novo imediatamente.

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.

Boas práticas: guarde o token em variáveis de ambiente (.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:

Códigos de resposta

CódigoSignificado
200 OKRequisição bem-sucedida. O corpo contém os dados solicitados.
400 Bad RequestParâmetros inválidos ou faltando.
401 UnauthorizedToken inválido ou ausente.
403 ForbiddenToken válido, mas sem permissão para o recurso.
404 Not FoundRecurso não encontrado (ex: ID inexistente).
429 Too Many RequestsRate limit excedido. Aguarde antes de tentar novamente.
500 Internal Server ErrorErro 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"
    }
  ]
}
Recebeu uma resposta? Você está pronto para usar a API. Agora explore os endpoints abaixo ou abra a coleção do Postman que tem todos os endpoints prontos para testar.

📊 Listagens (GET)

Endpoints de consulta. Use estas rotas para buscar informações da plataforma. Todas retornam JSON.

GET /v2/api/external/{apiId}/listChannels

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'
GET /v2/api/external/{apiId}/listSessions

Lista todas as sessões (instâncias) ativas no seu sistema.

GET /v2/api/external/{apiId}/listTickets

Lista os tickets (atendimentos) com filtros avançados. Suporta paginação.

Query Parameters

ParâmetroTipoDescrição
pageNumberintNúmero da página (começa em 1).
statusstringFiltra por status: open, pending, closed.
searchParamstringTexto para buscar em nome, número ou conteúdo.
queuesIdsarrayIDs das filas para filtrar.
whatsappIdsarrayIDs das conexões WhatsApp.
selectedUserintID 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'
GET /v2/api/external/{apiId}/listContacts

Lista contatos cadastrados. Suporta filtros por nome, carteira (wallet) e tag.

Query Parameters

ParâmetroTipoDescrição
pageNumberintNúmero da página.
searchParamstringBusca por nome ou número.
walletIdintFiltra contatos da carteira de um vendedor.
tagIdintFiltra contatos com determinada tag.
GET /v2/api/external/{apiId}/listUsers

Lista todos os usuários (atendentes) cadastrados na sua conta.

Query Parameters

ParâmetroTipoDescrição
pageNumberintPágina de resultados.
searchParamstringBusca por nome ou e-mail.
GET /v2/api/external/{apiId}/listTags

Lista as tags (etiquetas) cadastradas para classificar contatos e tickets.

Query Parameters

ParâmetroTipoDescrição
isActivebooleanFiltrar apenas tags ativas (true) ou inativas (false).
GET /v2/api/external/{apiId}/listQueues

Lista as filas (departamentos) configuradas, como "Vendas", "Suporte", "Financeiro".

GET /v2/api/external/{apiId}/listOpportunities

Lista as oportunidades (cartões) do funil de vendas (Kanban).

Query Parameters

ParâmetroTipoDescrição
pageintPágina de resultados.
limitintItens por página.
statusstringStatus da oportunidade.
pipelineIdintID do pipeline (funil).
stageIdintID do estágio dentro do pipeline.
GET /v2/api/external/{apiId}/getUserStatus

Verifica em tempo real se um atendente específico está Online ou Offline.

Query Parameters

ParâmetroTipoDescrição
userIdintobrigatórioID do atendente.
GET /v2/api/external/{apiId}/listNotes

Lista todas as notas internas registradas em um ticket específico.

Query Parameters

ParâmetroTipoDescrição
ticketIdintobrigatórioID do ticket.
GET /v2/api/external/{apiId}/getContactExtraInfo

Retorna os campos personalizados (extraInfo) de um contato.

Query Parameters

ParâmetroTipoDescrição
contactIdintobrigatórioID 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.

POST /v2/api/external/{apiId}/createContact

Cria um novo contato no sistema.

Body

CampoTipoDescrição
namestringobrigatórioNome do contato.
numberstringobrigatórioTelefone com DDI + DDD (ex: 5511999999999).
emailstringopcionalE-mail do contato.
extraInfoarrayopcionalCampos 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"
  }'
POST /v2/api/external/{apiId}/updateContact

Atualiza dados de um contato existente.

Body

CampoTipoDescrição
contactIdintobrigatórioID do contato.
namestringopcionalNovo nome.
emailstringopcionalNovo e-mail.
POST /v2/api/external/{apiId}/updateContactKanban

Move um contato para uma posição (kanban) específica do funil.

Body

CampoTipoDescrição
contactIdintobrigatórioID do contato.
kanbanint|stringobrigatórioID ou nome do kanban de destino.
POST /v2/api/external/{apiId}/updateContactWallet

Define a carteira (wallet) de um contato — vincula o contato a um vendedor responsável. Útil para distribuir leads automaticamente.

Body

CampoTipoDescrição
contactIdintobrigatórioID do contato.
walletIdint|arrayobrigatórioID do vendedor (ou array de IDs).
POST /v2/api/external/{apiId}/blockContact

Bloqueia ou desbloqueia o chatbot para um contato. Útil para evitar respostas automáticas para contatos VIP.

Body

CampoTipoDescrição
contactIdintobrigatórioID do contato.
blockedbooleanobrigatóriotrue para bloquear, false para desbloquear.
POST /v2/api/external/{apiId}/updateContactExtraInfo

Atualiza os campos personalizados (extraInfo) de um contato.

Body

CampoTipoDescrição
contactIdintobrigatórioID do contato.
extraInfoarrayobrigatórioArray no formato [{"name":"campo","value":"valor"}].
POST /v2/api/external/{apiId}/contacts/search

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

CampoTipoDescrição
tagIdint|arrayopcionalID(s) das tags. Buscar contatos com qualquer uma das tags.
pageintopcionalPágina (padrão: 1).
limitintopcionalItens por página (padrão: 50).
searchParamstringopcionalTexto para buscar.
walletIdintopcionalFiltra pela carteira de um vendedor.
blockedbooleanopcionalInclui (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).

POST /v2/api/external/{apiId}/sendMessageAPIText

Envia uma mensagem de texto para um número WhatsApp.

Body

CampoTipoDescrição
numberstringobrigatórioNúmero com DDI + DDD (ex: 5511999999999).
messagestringobrigatórioTexto da mensagem.
ticketIdintopcionalTicket 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."
  }'
POST /v2/api/external/{apiId}/sendMessageAPIFileURL

Envia um arquivo (imagem, PDF, áudio, vídeo) a partir de uma URL pública.

Body

CampoTipoDescrição
numberstringobrigatórioNúmero de destino.
urlstringobrigatórioURL pública do arquivo.
captionstringopcionalLegenda (apenas imagens e vídeos).
POST /v2/api/external/{apiId}/sendPresence

Envia indicadores de presença (estado) para o WhatsApp do contato — útil para humanizar bots mostrando "digitando..." antes de uma resposta automática.

Body

CampoTipoDescrição
ticketIdintobrigatórioID do ticket.
statestringobrigatóriotyping, paused ou recording.
POST /v2/api/external/{apiId}/sendButtonWABA

Envia mensagem com até 3 botões interativos via WhatsApp Business API (WABA).

Disponível apenas em conexões WABA (API oficial). Não funciona com QR Code (whatsmeow/uazapi).

Body

CampoTipoDescrição
numberstringobrigatórioNúmero de destino.
messagestringobrigatórioTexto principal da mensagem.
button1stringobrigatórioTexto do primeiro botão (máx 20 caracteres).
button2stringopcionalTexto do segundo botão.
button3stringopcionalTexto do terceiro botão.
ticketIdintopcionalVincular a um ticket existente.
POST /v2/api/external/{apiId}/sendListWABA

Envia mensagem com lista interativa (menu suspenso) via WhatsApp Business API (WABA).

Body

CampoTipoDescrição
numberstringobrigatórioNúmero de destino.
headerstringobrigatórioCabeçalho da lista.
bodystringobrigatórioTexto principal.
footerstringopcionalRodapé.
button_textstringobrigatórioTexto do botão de abertura da lista.
sectionsarrayobrigatórioSeções com itens da lista.
ticketIdintopcionalVincular a um ticket existente.

🎫 Tickets & Tags

POST /v2/api/external/{apiId}/updateTicketChannel

Altera o canal (conexão WhatsApp) de um ticket existente — útil quando você precisa migrar um atendimento de uma conexão para outra.

Body

CampoTipoDescrição
ticketIdintobrigatórioID do ticket.
whatsappIdintobrigatórioID da nova conexão WhatsApp.
channelstringobrigatórioTipo do canal (ex: whatsapp, instagram).
POST /v2/api/external/{apiId}/createNotes

Adiciona uma nota interna (visível apenas para atendentes) em um ticket.

Body

CampoTipoDescrição
ticketIdintobrigatórioID do ticket.
notesstringobrigatórioTexto da nota.
POST /v2/api/external/{apiId}/updateNote

Atualiza o conteúdo de uma nota interna existente.

Body

CampoTipoDescrição
noteIdintobrigatórioID da nota.
notesstringobrigatórioNovo texto.
POST /v2/api/external/{apiId}/addTag

Adiciona uma ou mais tags a um ticket sem remover as existentes. Ideal para classificar atendimentos durante automações sem perder histórico.

Body

CampoTipoDescrição
ticketIdintobrigatórioID do ticket.
tagIdint|arrayobrigatórioID da tag (ou array de IDs).
POST /v2/api/external/{apiId}/removeTag

Remove uma ou mais tags específicas de um ticket.

Body

CampoTipoDescrição
ticketIdintobrigatórioID do ticket.
tagIdint|arrayobrigatórioID da tag (ou array de IDs).

👥 Usuários (Atendentes)

POST /v2/api/external/{apiId}/createUser

Cria um novo usuário (atendente) na sua conta.

Body

CampoTipoDescrição
namestringobrigatórioNome do atendente.
emailstringobrigatórioE-mail (será o login).
passwordstringobrigatórioSenha inicial.
profilestringobrigatórioadmin, super ou user.
POST /v2/api/external/{apiId}/updateUser

Atualiza dados de um usuário existente.

Body

CampoTipoDescrição
userIdintobrigatórioID do usuário.
namestringopcionalNovo nome.
emailstringopcionalNovo e-mail.

🪝 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.

Quando usar webhooks: notificações em tempo real, automações que dependem de eventos (chegou mensagem → cria ticket no Zendesk), sincronização contínua entre sistemas, alertas para o time de plantão.

Configurando o Webhook

A configuração é feita no painel administrativo do NimoChat Pro+ em poucos cliques:

  1. Faça login como Administrador.
  2. Acesse Integrações > Webhook no menu.
  3. Ative a opção "Ativar webhook".
  4. Informe a URL do seu sistema que vai receber as notificações (precisa ser HTTPS pública).
  5. Opcionalmente, ative "Receber eventos de mensagem" para receber notificações também das mensagens individuais (não apenas dos tickets).
  6. Salve as alterações.
Sua URL precisa estar acessível pela internet e responder com HTTP 200 em até 15 segundos. URLs locais (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

CampoTipoDescrição
methodstringTipo do evento. Quando ausente ou vazio, indica evento de entrada (mensagem recebida ou ticket criado).
tenantIdintID da sua conta. Sempre valide para garantir que o webhook é da sua conta.
ticketIdintID do ticket relacionado ao evento.
msg.bodystringTexto da mensagem (em mensagens de texto).
msg.fromMebooleantrue se a mensagem foi enviada pelo atendente, false se foi recebida do contato.
ticket.userIdint|nullnull indica ticket não atribuído (oportunidade de distribuição automática).
ticket.contact.numberstringTelefone do contato (sem prefixos do WhatsApp).

Tipos de eventos

O campo method identifica o tipo do evento. Os principais valores são:

EventoQuando dispara
(vazio) — Mensagem recebidaO contato enviou uma mensagem. msg.fromMe = false e method ausente. Frequentemente acompanhado de criação de ticket novo.
(vazio) — Novo ticketUm novo ticket foi criado a partir de uma conversa de entrada. ticket.userId = null.
message_sendO atendente enviou uma mensagem pelo painel. msg.fromMe = true.
message_send_uazapiMensagem enviada por uma sessão WhatsApp via QR Code (não-oficial).
message_send_waba / message_sent_wabaMensagem enviada pela API oficial do WhatsApp Business (Cloud API).
ackConfirmação de leitura/entrega do WhatsApp (entregue, lido, ouvido).
presenceAtualização de presença do contato (online, offline, digitando).
Foco no que importa: a maioria das integrações filtra apenas eventos de entrada (sem 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" }
  }
}
Atenção com mídias: em mensagens de mídia o campo 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

Dica de produção: use plataformas como n8n, Make ou Pipedream para receber webhooks sem precisar manter um servidor. Elas oferecem URLs prontas, retry automático e logs visuais — ideal para começar.

💡 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."
  }'
Cuidado com o WhatsApp: respeite os limites do WhatsApp (não dispare 1000+ mensagens em segundos) e adicione delays entre as mensagens (ex: 5-10 segundos). Use também a tag de opt-in para evitar bloqueios.

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 165 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).

Acessar coleção completa no Postman

Endpoints por categoria

Resumo de tudo que está disponível na coleção:

📅 Agendamentos e Lembretes

Crie e gerencie agendamentos e lembretes automáticos.

POSTAppointmentCreateCriar agendamento
POSTAppointmentUpdateAtualizar agendamento
POSTAppointmentDeleteDeletar agendamento
GETAppointmentListListar agendamentos
GETAppointmentShowDetalhes de um agendamento
POSTScheduleReminderCreateCriar lembrete
POSTScheduleReminderUpdateAtualizar lembrete
POSTScheduleReminderDeleteDeletar lembrete
POSTScheduleReminderToggleAtivar/desativar lembrete
GETScheduleReminderListListar lembretes

📣 Campanhas

Crie, gerencie e dispare campanhas de marketing em massa.

POSTCampaignCreateCriar campanha
POSTCampaignUpdateEditar campanha
POSTCampaignDeleteDeletar campanha
POSTCampaignDuplicateDuplicar campanha
POSTCampaignStartIniciar disparo
POSTCampaignPausePausar campanha
POSTCampaignResumeRetomar campanha pausada
POSTCampaignCancelCancelar campanha
POSTCampaignSkipPular envio atual
GETCampaignListListar campanhas
GETCampaignReportRelatório de envios
POSTCampaignContactsAddAdicionar contatos
POSTCampaignContactsRemoveRemover contato
POSTCampaignContactsRemoveAllLimpar todos os contatos
GETCampaignContactsListListar contatos da campanha

🔌 Canais e Sessões

Gerencie conexões WhatsApp, escaneie QR Codes, inicie e finalize sessões.

POSTCreateSessionCriar nova sessão
POSTStartSessionIniciar sessão
POSTDeleteSessionDeletar sessão
POSTShowQrCodeExibir QR Code atual
POSTRequestNewQrCodeSolicitar novo QR Code
POSTShowChannelInformationInformações do canal
POSTShowChannelInformationByIdInformações por ID
POSTListGroupsInfoListar grupos do canal

👤 Contatos (avançado)

POSTShowContactDetalhes do contato

🏗️ CRM - Pipeline

Gerencie pipelines (funis) e estágios do CRM.

POSTPipelineCreateCriar funil
POSTPipelineUpdateAtualizar funil
POSTPipelineDeleteDeletar funil
GETPipelineListListar funis
GETPipelineShowDetalhes do funil
POSTStageCreateCriar estágio
POSTStageUpdateAtualizar estágio
POSTStageDeleteDeletar estágio
GETStageListListar estágios
GETStageShowDetalhes do estágio

📊 Dashboard

Métricas e gráficos para BI / dashboards externos.

GETDashTicketsAndTimesTickets e tempos médios
GETDashTicketsChannelsTickets por canal
GETDashTicketsEvolutionEvolução temporal
GETDashTicketsEvolutionByValueEvolução por valor
GETDashTicketsEvolutionChannelsNameEvolução por canal
GETDashTicketsPerUserTickets por atendente
GETDashTicketsQueueTickets por fila
GETDashTicketsReasonsTickets por motivo
GETDashTicketsStatusTickets por status
GETDashTicketsUserTickets de um usuário

📤 Envio em Lote (Bulk)

Disparos em massa de mensagens com controle de progresso.

POSTBulkSendMessageDisparo simples em lote
POSTBulkSendMessageWithVariableDisparo com variáveis personalizadas
POSTBulkFastMessageDisparo rápido
POSTBulkIndividualEnvio individual em lote
POSTBulkDispatchUpdateAtualizar disparo
POSTBulkDispatchIncrementProgressIncrementar progresso
GETBulkDispatchListListar disparos
GETBulkDispatchShowDetalhes do disparo

📂 Galeria de mídias

POSTGalleryUploadUpload de arquivo
POSTGalleryDeleteDeletar arquivo
GETGalleryListListar arquivos

👥 Grupos WhatsApp

Crie e gerencie grupos do WhatsApp.

POSTGroupCreateCriar novo grupo
POSTGroupChangeTitleAlterar título
POSTGroupChangeDescriptionAlterar descrição
POSTGroupChangePictureAlterar foto
POSTGroupAddParticipantAdicionar participante
POSTGroupRemoveParticipantRemover participante
POSTGroupPromotePromover a admin
POSTGroupDemoteRebaixar admin
POSTGroupSetAdminsOnlyRestringir só admins
POSTGroupGetInviteLinkObter link de convite
POSTGroupListParticipantsListar participantes
POSTGroupShowByIdDetalhes do grupo
POSTGroupListListar grupos

🏷️ Kanban / Tags / Motivos / Filas

CRUD completo de objetos auxiliares.

POSTCreateKanbanCriar coluna kanban
POSTUpdateKanbanAtualizar kanban
POSTDeleteKanbanDeletar kanban
GETListKanbanListar kanbans
POSTCreateTagCriar tag
POSTUpdateTagDataAtualizar tag
POSTDeleteTagDeletar tag
POSTCreateReasonCriar motivo
POSTUpdateReasonAtualizar motivo
POSTDeleteReasonDeletar motivo
GETListReasonsListar motivos
POSTCreateQueueDataCriar fila
POSTUpdateQueueDataAtualizar fila
POSTDeleteQueueDataDeletar fila

🔍 Listagens utilitárias

GETListAutoRepliesAuto-respostas
GETListChatFlowsFluxos de chatbot
GETListFastRepliesRespostas rápidas
GETGetAllSessionApisTodas as APIs de sessão

📞 Logs de Chamadas

GETCallLogListListar chamadas
GETCallLogShowDetalhes da chamada
GETWavoipCallListListar chamadas Wavoip
GETWavoipCallShowDetalhes Wavoip

📨 Mensagens (extras)

POSTSendMessageAPIFileEnviar arquivo (upload)
POSTSendMessageAPITextBase64Texto com mídia base64
POSTSendMessageAPIVoiceEnviar áudio (voice)
POSTSendLocationEnviar localização
POSTSendVcardEnviar contato (vCard)
GETGetMessageByMessageIdBuscar mensagem por ID
GETSearchMessagesBuscar mensagens
GETSendMessageParamsParâmetros disponíveis

👥 Mensagens em Grupo

POSTSendGroupMessageAPITextTexto para grupo
POSTSendGroupMessageAPIFileArquivo para grupo
POSTSendMessageAPIFileURLGroupArquivo via URL para grupo

💼 Oportunidades (CRM)

POSTCreateOpportunityCriar oportunidade
POSTUpdateOpportunityAtualizar oportunidade
POSTDeleteOpportunityDeletar oportunidade

📋 Templates WABA (API Oficial)

POSTSendTemplateWabaEnviar template aprovado
POSTSendTemplateWabaBodyTemplate com variáveis no corpo
POSTSendTemplateWabaMarketingTemplate de marketing

🎫 Tickets (extras)

POSTCreateTicketCriar ticket manualmente
POSTCreateTicketFileCriar ticket com arquivo
POSTCreateTicketWebmailCriar ticket de webmail
POSTSetTicketInfoAtualizar info do ticket
POSTSetQueueMover ticket para fila
POSTSetTagDefinir tags (substitui)
POSTShowTicketByIdDetalhes por ID
POSTShowTicketInformationInformações do ticket
POSTShowAllTicketInformationTodas as informações
POSTShowAllMessagesTodas as mensagens
POSTStartTicketPausePausar ticket
POSTEndTicketPauseDespausar ticket
GETListTicketPauseLogsLogs de pausas
GETListTicketEvaluationsAvaliações
POSTTicketShareCreateCompartilhar ticket
GETTicketShareShowDetalhes do compartilhamento

✅ To-Do List

POSTTodoCreateCriar tarefa
POSTTodoUpdateAtualizar tarefa
POSTTodoDeleteDeletar tarefa
GETTodoListListar tarefas
GETTodoLogsLogs de tarefas

❓ 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.

Pronto para integrar? Comece pela coleção do Postman. Tem dúvidas técnicas? Fale com nosso time.