Instâncias
Cada instância representa uma conexão de mensageria.
Conecta múltiplas contas, dispara campanhas com tracking, mede conversões, tudo numa stack Go enxuta com webhooks em tempo real.
Entre com seu email e senha.
Informe o email de acesso. Se ele estiver cadastrado, você recebe um link pra criar uma nova senha.
Se o email estiver cadastrado, o link chega em alguns minutos. Ele vale por 1 hora. Confira também a caixa de spam.
Escolha a nova senha do painel. Os outros aparelhos conectados vão precisar entrar de novo.
Cada instância representa uma conexão de mensageria.

Tenants isolados: api_key própria, cota de instâncias e login do cliente.
Guarde agora, só aparece uma vez. É a credencial da org para integrações (n8n). O cliente entra no painel por email/senha.
Use o mesmo número que vai parear. Ex.: 5511999999999 (Brasil + 11 + 9 9999-9999).
Digite este código no celular
No WhatsApp do número: Aparelhos conectados → Conectar com número de telefone e digite o código acima.
3 passos pra fechar o setup da instância e disparar a primeira campanha.
Aparência e comportamentos automáticos da instância.
Credencial desta instância pra integrações (header apikey).
Gerar um novo token invalida o atual na hora. Atualize as integrações que o usam.
Nome e avatar exibidos no painel.
PNG, JPG, WebP ou SVG. Até ~1.5 MB.
Endpoints HTTP que recebem os eventos desta instância.
Guia rápido para integrar o Ignitecore GO com seu backend, n8n ou qualquer cliente HTTP. Todas as rotas retornam JSON. Autenticação por header apikey.
Duas camadas de chave. Envie em apikey: <chave> ou Authorization: Bearer <chave>.
Criar, listar e deletar instâncias. Vem do .env do servidor.
Operar uma instância (mensagens, conexão, webhooks). Devolvido no POST /instance.
curl https://sua-api.com/instance \ -H "apikey: SUA_MASTER_KEY"
Cria uma nova instância e retorna o token.
{ "name": "minha-loja" }
{
"id": "ba6bd24e-3870-42a9-b13e-...",
"name": "minha-loja",
"token": "7cf1cebce83c1208...",
"status": "disconnected",
"settings": { ... }
}
Lista todas as instâncias.
Detalhes (settings + status).
Desconecta e apaga a instância. Irreversível.
Renomeia a instância.
{ "name": "loja-sp" }
Aceita URL, data:…;base64,… ou preset:ignitecore. Vazio volta pras iniciais.
{ "avatar": "preset:ignitecore" }
Comportamentos automáticos.
{
"reject_calls": true,
"ignore_groups": false,
"always_online": true,
"auto_read_messages": true,
"auto_read_status": false
}
Pareie por QR (chama /connect) ou por código de 8 dígitos (alternativa pra quem não consegue ler QR).
{
"status": "qr",
"qr_code": "2@abc...",
"qr_image": "data:image/png;base64,iVBORw0KG..."
}
Status possíveis: qr, connecting, connected, disconnected, logged_out.
Devolve o QR direto como image/png (útil pra <img src>).
Pareamento sem QR. Devolve um código de 8 dígitos. No celular: Aparelhos conectados → Conectar com número de telefone e digite o código.
{ "phone": "5511999999999" }
→
{ "code": "ABCD-WXYZ" }
Fecha a conexão WS preservando o pareamento. /connect reconecta sem QR.
Desfaz o pareamento (apaga sessão). Diferente de /disconnect.
Campo to aceita só o número (5511999999999) ou o JID completo (…@s.whatsapp.net / …@g.us pra grupos).
{
"to": "5511999999999",
"message": "Olá do n8n!",
"reply_to": "MSG_ID_OPCIONAL"
}
Texto com preview de link (Title/Description aparece no balão).
{
"to": "5511999999999",
"text": "Olha esse artigo: https://exemplo.com/post",
"title": "Título exibido",
"description": "Descrição exibida (opcional)",
"thumbnail_url": "https://...image.jpg (opcional)"
}
Mesmo padrão para sendVideo, sendAudio, sendDocument, sendSticker.
{
"to": "5511999999999",
"url": "https://exemplo.com/foto.jpg",
"base64": "(alternativa a url)",
"caption": "texto opcional",
"filename": "arquivo.pdf", // só no sendDocument
"mime_type": "image/jpeg" // opcional
}
{
"to": "5511999999999",
"latitude": -23.550,
"longitude": -46.633,
"name": "Paulista",
"address": "Av. Paulista, São Paulo"
}
{
"to": "5511999999999",
"display_name": "Fulano",
"vcard": "BEGIN:VCARD\nVERSION:3.0\nFN:Fulano\nTEL:+5511...\nEND:VCARD"
}
{ "to": "5511…", "message_id": "ABC…", "emoji": "👍" }
Emoji vazio remove a reação.
{
"to": "5511999999999",
"name": "Qual horário?",
"options": ["Manhã","Tarde","Noite"],
"selectable_count": 1
}
Histórico persistido. Default limit=100, máx 500.
Baixa e descriptografa a mídia. Devolve bytes com o Content-Type correto. Aceita apikey via query (?apikey=…) pra usar em <img>/<video>.
Edita o texto. WhatsApp permite só dentro de ~15 min do envio.
{ "to": "5511999999999", "text": "novo texto" }
Apaga pra todos (revoke).
{ "to": "5511999999999" }
Marca mensagens como lidas (manual). Em grupos, sender é o JID do remetente.
{
"chat": "5511999999999@s.whatsapp.net",
"sender": "5511999999999@s.whatsapp.net",
"message_ids": ["ABC123","DEF456"]
}
Detalhe de uma mensagem persistida.
Cria um grupo. Nome até 25 chars.
{
"subject": "Time vendas",
"participants": ["5511999999999","5511888888888"]
}
Lista todos os grupos da conta.
Detalhes do grupo, com lista de participantes (is_admin, is_super_admin).
Link de convite. Use ?reset=true para revogar e gerar um novo.
→ { "link": "https://chat.whatsapp.com/ABCD..." }
Entra num grupo via link/código de convite.
{ "code": "https://chat.whatsapp.com/ABCD..." }
{ "name": "novo nome" }{ "topic": "descrição do grupo" }{ "url": "https://…" } // ou { "base64": "..." }action: add · remove · promote · demote
{
"action": "promote",
"participants": ["5511999999999"]
}
Confere em batch quais números têm conta no WhatsApp. Útil pra validar antes de mandar.
{ "phones": ["5511999999999","5511888888888"] }
→
[
{ "phone": "+5511999999999", "exists": true, "jid": "...@s.whatsapp.net" },
{ "phone": "+5511888888888", "exists": false }
]
{ "jid": "5511999999999@s.whatsapp.net" }{ "jid": "5511999999999@s.whatsapp.net" }→ { "jids": ["...@s.whatsapp.net", ...] }{ "jid": "...@s.whatsapp.net", "value": true }{ "jid": "...@s.whatsapp.net", "value": true }duration_seconds=0 = mudo permanente, negativo = desmuta.
{ "jid": "...@s.whatsapp.net", "duration_seconds": 3600 }
Disponível em contas WhatsApp Business. color = índice 0–19 da paleta.
Cria, edita ou apaga uma label. Use deleted:true pra remover.
{ "label_id":"1", "name":"Cliente VIP", "color":5 }
{ "label_id":"1", "deleted":true }
{ "jid":"...@s.whatsapp.net", "label_id":"1", "labeled":true }
{ "jid":"...@s.whatsapp.net", "label_id":"1", "message_id":"ABC...", "labeled":true }
URL da foto de perfil de qualquer JID (contato ou grupo).
→ { "url": "https://pps.whatsapp.net/..." }
Atualiza o "recado" (about) da conta.
{ "text": "Disponível 24h" }
{ "state": "available" } // ou "unavailable"
Sinaliza "digitando" ou "gravando áudio" num chat.
{
"to": "5511999999999",
"state": "composing", // composing | paused
"media": "audio" // text | audio
}
Lista todos os contatos que o WhatsApp conhece (push name + business name).
{
"messages": 1024,
"messages_sent": 400,
"messages_received": 624,
"chats": 42,
"groups": 3,
"contacts": 1200,
"connected": true,
"status": "connected",
"last_message_at": "2026-04-24T21:00:00Z"
}
Lista conversas com preview da última mensagem e total.
[{
"chat_jid": "5511999…@s.whatsapp.net",
"last_content": "Valeu!",
"last_type": "text",
"last_from_me": false,
"last_timestamp": "2026-04-24T20:00:00Z",
"total": 17
}]
Cada webhook é um endpoint HTTP seu que recebe POSTs com os eventos da instância. Suporta múltiplos por instância, com escolha granular de eventos e assinatura HMAC opcional.
{
"url": "https://n8n.seu-dominio.com/webhook/abc",
"events": ["message.received", "connection.state"],
"secret": "opcional-para-hmac-sha256"
}
Atualiza URL, eventos, secret ou enabled. Envie só os campos que deseja alterar.
Corpo enviado ao webhook. Estrutura flat: o campo type indica qual evento foi disparado e timestamp vem em milissegundos.
Toda msg que chega da instância. Pode trazer blocos extras opcionais: ad (lead vindo de CTWA, ver abaixo), image/video/audio/document/sticker/location/contact conforme messageType, media base64 se webhook_base64 ligado.
{
"type": "message.received",
"instanceId": "ba6bd24e-…",
"instanceName": "minha-loja",
"connectedPhone": "5511950448963",
"messageId": "ACEDD27D…",
"phone": "5512981713261",
"chatLid": "5512981713261@s.whatsapp.net",
"chatName": "Fulano",
"senderName": "Fulano",
"fromMe": false,
"timestamp": 1775604007000,
"status": "RECEIVED",
"isGroup": false,
"isNewsletter": false,
"isStatusReply": false,
"isEdit": false,
"messageType": "text",
"text": { "message": "Olá!" }
}
Quando o lead inicia conversa clicando num Click-To-WhatsApp Ad do Meta (Facebook/Instagram), a primeira mensagem chega como message.received normal com um bloco extra ad contendo os metadados do anúncio. Esse bloco só aparece nessa primeira msg; mensagens subsequentes do mesmo lead vêm sem ele. Use ad.ctwaClid (Click ID único por clique) como chave de atribuição lead → campanha; combine com ad.sourceId (ID do anúncio no Meta) e ad.ref (parâmetro custom do Ads Manager) pra rastrear campanha → criativo.
{
"type": "message.received",
"instanceId": "ba6bd24e-…",
"messageId": "ACEDD27D…",
"phone": "5512981713261",
"chatLid": "5512981713261@s.whatsapp.net",
"fromMe": false,
"timestamp": 1775604007000,
"messageType": "text",
"text": { "message": "Oi, vim do anúncio!" },
"ad": {
"title": "Plano Premium 50% OFF",
"body": "Aproveite enquanto durar",
"mediaType": "IMAGE", // IMAGE | VIDEO | NONE
"thumbnailUrl": "https://scontent…/img.jpg",
"mediaUrl": "https://scontent…/img.jpg",
"sourceType": "ad",
"sourceId": "123456789012345", // ID do anúncio no Meta
"sourceUrl": "https://fb.me/…",
"sourceApp": "facebook", // facebook | instagram | whatsapp
"ctwaClid": "ARBxYz…", // 🔑 chave de atribuição
"ref": "campanha-black-friday", // parâmetro custom do Ads Manager
"ctaPayload": "", // payload do CTA se configurado
"clickToWhatsappCall": false,
"containsAutoReply": true, // a msg foi o auto-reply do CTA?
"greetingMessageBody": "Olá! Como posso ajudar?",
"adType": "AD_TYPE_UNSPECIFIED",
"adPreviewUrl": "",
"websiteUrl": ""
}
}
{
"type": "message.status",
"instanceId": "ba6bd24e-…",
"messageId": "ABC…",
"chatLid": "5511…@s.whatsapp.net",
"phone": "5511…",
"status": "READ", // ou DELIVERED
"timestamp": 1775604007000
}
messageId aponta pra mensagem original editada. O texto/caption novo vem em newContent e (pra mídia) no campo específico do tipo (text, image, etc.).
{
"type": "message.edited",
"instanceId": "ba6bd24e-…",
"instanceName": "minha-loja",
"messageId": "ABC123", // ID da msg ORIGINAL
"editStanzaId": "EDIT456", // ID da stanza da edição
"phone": "5512981713261",
"chatLid": "5512981713261@s.whatsapp.net",
"fromMe": false,
"isGroup": false,
"isEdit": true,
"messageType": "text",
"newContent": "Texto novo da mensagem",
"text": { "message": "Texto novo da mensagem" },
"timestamp": 1775604007000
}
messageId é o alvo (a msg que recebeu a reação). targetFromMe: true indica que a msg reagida era nossa, sinal de engagement do lead. removed: true + reaction: "" = cliente removeu uma reação anterior.
{
"type": "message.reaction",
"instanceId": "ba6bd24e-…",
"messageId": "ABC123", // msg que RECEBEU a reação
"reactionId": "RCT456", // ID da stanza desta reação (dedupe)
"phone": "5512981713261", // quem reagiu
"chatLid": "5512981713261@s.whatsapp.net",
"fromMe": false, // a reação foi feita por nós?
"targetFromMe": true, // a msg reagida era nossa?
"isGroup": false,
"reaction": "👍",
"removed": false,
"timestamp": 1775604007000
}
{
"type": "connection.connected",
"instanceId": "ba6bd24e-…",
"instanceName": "minha-loja",
"connectedPhone": "5511950448963",
"status": "connected",
"timestamp": 1775604007000
}
{
"type": "connection.qr",
"instanceId": "…",
"instanceName": "minha-loja",
"qrCode": "2@abc…",
"timestamp": 1775604007000
}
{
"type": "call.rejected",
"instanceId": "…",
"callId": "XYZ",
"phone": "5511999999999",
"rejected": true,
"timestamp": 1775604007000
}
Se o webhook tiver secret, cada POST chega com:
X-Webhook-Signature: sha256=<hex>
Onde hex é HMAC-SHA256(secret, body_bytes).
const crypto = require('crypto');
const sig = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(rawBody)
.digest('hex');
// comparar com req.headers['x-webhook-signature']
const sig = $request.headers['x-webhook-signature'];
const expect = 'sha256=' + require('crypto')
.createHmac('sha256', 'SEU_SECRET')
.update($request.rawBody)
.digest('hex');
if (sig !== expect) throw new Error('invalid signature');
Catálogo persistente de números. Use tags pra agrupar (cliente-vip, lead-quente) e disparar campanhas pra audiences reusáveis.
lead-quente, cliente-vip) e disparar campanhas direto pelo grupo, em vez de colar lista de números.Broadcasts nomeados com auto-rewrite de URLs e funnel completo.
Encurta URLs e mede cliques. Compartilhe o short URL (não o destino). Quando alguém clica, a API redireciona e grava o evento. Use em campanhas, bio do WhatsApp Business ou mensagens manuais.
Score 0-100 por contato. Use pra filtrar leads quentes antes de campanha, identificar quem precisa de reativação, ou priorizar atendimento.
Score = read_rate (40%) + response_rate (40%) + recência (20%). Se o destinatário tem confirmação de leitura desligada (read_count=0), o peso é redistribuído pra response_rate (80%) + recência (20%).
Eventos que sua aplicação registrou via POST /events/{instance}/conversion. Cada conversão é atribuída à última campanha enviada pro contato (janela padrão 7d).
POST /events/{instance}/conversion quando concluir uma venda. A conversão aparece aqui e é atribuída à última campanha que enviou pro contato.Comece de um modelo pronto. Cada um tem 3 variantes de tom, você ajusta como quiser depois.
{{primeiro_nome}}. Pra que apareça o nome certo, cadastre os contatos com Nome em Contatos antes do disparo.
Cada destinatário recebe a mensagem com suas variáveis (cadastradas em Contatos). URLs viram short links se "Rastrear cliques" estiver ligado.
1 = enquete única, 2+ = múltipla escolha.
Mínimo 2, máximo 12 opções. Variáveis {{...}} não são suportadas em enquete.
Cole o message_id de uma mensagem que todos os destinatários têm na conversa (ex: msg de transmissão anterior). Cita ela como reply na nova mensagem.
20-30/min pra disparos grandes. 60+ só pra listas pequenas (≤50 contatos).
Randomiza intervalos e faz pausas pra evitar padrão robótico que o WhatsApp detecta.
0 em "a cada" desativa.
Formato E.164. Exemplo: 5511999990001 (Brasil + 11 + 9 9999-0001). Não pode mudar depois.
Use em campanhas como {{empresa}}, {{plano}}, etc.
Nenhuma variável. Clique em "Nova" pra adicionar.
contatos
Nenhuma tag cadastrada. Vá na aba Tags pra criar.
contatos selecionados receberárão a mensagem da campanha escolhida.
draft e volte aqui.
Atalhos só funcionam fora de campos de texto (exceto Ctrl+K, que funciona em qualquer lugar).