KiraGo
KiraGo é uma API REST para automação de WhatsApp Web (multidevice).
Este repositório público existe para documentação de uso e notas de versão .
Aviso importante
O WhatsApp pode banir números por uso indevido. Não use para SPAM, disparos em massa ou qualquer violação dos Termos do WhatsApp. Use por sua conta e risco.
Instalação (Docker)
Exemplo de docker-compose.yml:
services:
kirago:
image: SUA_IMAGEM_DO_KIRAGO_AQUI
container_name: kirago
restart: unless-stopped
env_file:
- .env
ports:
- "${KIRAGO_PORT:-8080}:8080"
Copy
Suba o serviço:
docker compose up -d
Copy
Configuração (.env)
Crie um arquivo .env na mesma pasta do docker-compose.yml. Você pode copiar kirago/.env.sample como ponto de partida.
Variáveis obrigatórias
Variável Descrição KIRAGO_ADMIN_TOKENToken de administrador para rotas /admin/* KIRAGO_LICENSE_KEYChave de licença — obrigatória para criar instâncias KIRAGO_GLOBAL_ENCRYPTION_KEYChave AES-256 para dados sensíveis (exatamente 32 bytes) KIRAGO_GLOBAL_HMAC_KEYChave HMAC global para assinar webhooks (mínimo 32 caracteres) DB_USERUsuário PostgreSQL (padrão: postgres) DB_PASSWORDSenha PostgreSQL DB_NAMENome do banco (padrão: kirago) DB_HOSTHost do banco (padrão: kirago-db) DB_PORTPorta do banco (padrão: 5432)
Variáveis de servidor
Variável Padrão Descrição KIRAGO_PORT8080Porta de escuta KIRAGO_ADDRESS0.0.0.0Endereço de bind KIRAGO_PUBLIC_URL— URL pública da instância (usado em links externos) KIRAGO_SKIP_HOMEPAGEfalsetrue redireciona / direto para /dashboardKIRAGO_STATIC_DIRauto Caminho dos arquivos estáticos (dashboard, swagger) TZ— Timezone (ex: America/Sao_Paulo) DB_SSLMODEfalseModo SSL do banco
Variáveis de sessão e dispositivo
Variável Padrão Descrição SESSION_DEVICE_NAMEKiraGoNome do dispositivo exibido no WhatsApp
Variáveis de webhook
Variável Padrão Descrição KIRAGO_GLOBAL_WEBHOOK— URL de webhook global (recebe eventos de todos os usuários) KIRAGO_GLOBAL_WEBHOOK_EVENTS— Eventos a encaminhar para o webhook global, separados por vírgula (vazio = todos) WEBHOOK_FORMATjsonFormato do payload: json ou form WEBHOOK_RETRY_ENABLEDtrueAtiva retry automático em falha de entrega WEBHOOK_RETRY_COUNT5Número de tentativas WEBHOOK_RETRY_DELAY_SECONDS30Intervalo entre tentativas (segundos) WEBHOOK_ERROR_QUEUE_NAMEwebhook_errorsFila RabbitMQ para webhooks com falha
Variáveis de presença (WhatsApp)
Variável Padrão Descrição WA_AUTO_PRESENCE_AVAILABLEtrueEnvia PresenceAvailable automaticamente ao conectar WA_AUTO_PRESENCE_OFF_SECONDS20Segundos até enviar PresenceUnavailable após conectar WA_AUTO_PRESENCE_ON_INCOMINGfalseEnvia presença ao receber mensagens WA_FORCE_ACTIVE_DELIVERY_RECEIPTSfalseForça recibos de entrega ativos WA_HUMAN_CHAT_PRESENCEtrueEnvia ChatPresence (digitando) antes de enviar mensagens WA_HUMAN_CHAT_PRESENCE_DELAY_MS_MIN0Delay mínimo (ms) antes de enviar com chat presence WA_HUMAN_CHAT_PRESENCE_DELAY_MS_MAX0Delay máximo (ms) antes de enviar com chat presence
Dica: Em alguns aparelhos, manter a instância "online" pode suprimir notificações no celular. Se isso acontecer, mantenha WA_AUTO_PRESENCE_ON_INCOMING=false (padrão). Se ainda persistir, teste WA_AUTO_PRESENCE_AVAILABLE=false.
Variáveis de proxy
Variável Padrão Descrição KIRAGO_PROXY_FAILOPENfalseAo detectar falha no proxy, desativa-o e reconecta direto pela VPS KIRAGO_PROXY_FAILOPEN_COOLDOWN_SECONDS300Cooldown (segundos) entre tentativas de fail-open por sessão
Variáveis de RabbitMQ
Variável Padrão Descrição RABBITMQ_URL— URL de conexão (amqp://...) RABBITMQ_QUEUE— Fila para eventos WhatsApp RABBITMQ_TYPEBOT_QUEUEtypebot_outboxFila para mensagens do Typebot
Variáveis de log
Variável Padrão Descrição KIRAGO_EVENT_LOGfalsePersiste logs de eventos no banco, acessíveis em GET /logs/events
Documentação no servidor
Após subir a instância:
URL Descrição {BASE_URL}/dashboardPainel de gerenciamento {BASE_URL}/apiSwagger / OpenAPI {BASE_URL}/docsDocumentação de uso {BASE_URL}/loginTela de login por token
Autenticação
Todas as rotas (exceto /health) exigem o header:
token: SEU_TOKEN
Content-Type: application/json
Copy
Endpoints (resumo)
Sessão
Método Rota Descrição POST /session/connectIniciar conexão / gerar QR GET /session/qrObter QR Code atual GET /session/statusStatus da sessão POST /session/disconnectDesconectar POST /session/logoutLogout completo POST /session/pairphoneParear por número de telefone GET/POST /session/historySolicitar sincronização de histórico
Webhook
Método Rota Descrição POST /webhookConfigurar webhook GET /webhookObter configuração atual PUT /webhookAtualizar configuração DELETE /webhookRemover webhook
Envio de mensagens
Método Rota Descrição POST /chat/send/textTexto POST /chat/send/imageImagem POST /chat/send/audioÁudio POST /chat/send/videoVídeo POST /chat/send/documentDocumento POST /chat/send/stickerSticker POST /chat/send/gifGIF POST /chat/send/locationLocalização POST /chat/send/contactContato POST /chat/send/pollEnquete POST /chat/send/buttonsBotões interativos POST /chat/send/listLista interativa POST /chat/send/carouselCarrossel POST /chat/send/product-carouselCarrossel de produtos POST /chat/send/orderDetalhes de pedido POST /chat/send/editEditar mensagem enviada POST /chat/send/presenceEnviar presença
Ações no chat
Método Rota Descrição POST /chat/reactReagir a mensagem POST /chat/markreadMarcar como lido POST /chat/deleteDeletar mensagem POST /chat/presenceTyping / ChatPresence GET /chat/historyHistórico do chat POST /chat/archiveArquivar/desarquivar chat
Download de mídia
Método Rota Descrição POST /chat/downloadimageImagem POST /chat/downloadvideoVídeo POST /chat/downloadaudioÁudio POST /chat/downloaddocumentDocumento
Usuário / contatos
Método Rota Descrição POST /user/checkVerificar se número existe no WhatsApp GET /user/infoInformações do usuário GET /user/avatarFoto de perfil GET /user/contactsLista de contatos GET /user/lidObter LID do usuário GET/POST /user/privacyConfigurações de privacidade GET/POST /user/blocklistLista de bloqueados
Status / Story
Método Rota Descrição POST /status/textPublicar story de texto POST /status/imagePublicar story de imagem POST /status/videoPublicar story de vídeo POST /status/audioPublicar story de áudio POST /status/stickerPublicar story de sticker POST /status/setDefinir texto de status pessoal
Grupos
Método Rota Descrição GET /group/listListar grupos GET /group/infoInformações do grupo POST /group/createCriar grupo POST /group/leaveSair do grupo POST /group/joinEntrar via link POST /group/participantsAdicionar/remover participantes POST /group/nameRenomear grupo POST /group/topicAlterar descrição POST /group/photoAlterar foto GET /group/invitelinkObter link de convite GET /group/inviteinfoInfo do link de convite
Newsletter (Canais WhatsApp)
Método Rota Descrição GET /newsletter/listListar newsletters seguidos POST /newsletter/createCriar newsletter GET /newsletter/infoInfo do newsletter POST /newsletter/followSeguir POST /newsletter/unfollowDeixar de seguir POST /newsletter/muteSilenciar/ativar
CRM
Método Rota Descrição POST /session/crm/configConfigurar integração CRM GET /session/crm/configObter configuração DELETE /session/crm/configRemover configuração GET /session/crm/tokenObter token do CRM POST /session/crm/sync-historySincronizar histórico de mensagens para o CRM
Chatwoot
Método Rota Descrição POST /session/chatwoot/configConfigurar Chatwoot GET /session/chatwoot/configObter configuração DELETE /session/chatwoot/configRemover configuração POST /session/chatwoot/sync-historySincronizar histórico POST /chatwoot/webhookWebhook recebido do Chatwoot
Typebot
Método Rota Descrição POST /session/typebot/configConfigurar Typebot GET /session/typebot/configObter configuração DELETE /session/typebot/configRemover configuração POST /typebot/startIniciar fluxo POST /typebot/continueContinuar fluxo
Configurações avançadas por sessão
Método Rota Descrição POST/GET/DELETE /session/s3/configConfiguração de S3 POST /session/s3/testTestar conexão S3 POST/GET/DELETE /session/rabbitmq/configConfiguração de RabbitMQ POST /session/rabbitmq/testTestar conexão RabbitMQ POST/GET/DELETE /session/hmac/configConfiguração de HMAC por sessão POST/GET/DELETE /session/proxyConfigurar proxy de saída POST /session/proxy/testTestar proxy GET/POST /session/skipConfigurar eventos ignorados
Admin
Método Rota Descrição GET/POST /admin/usersListar / criar usuários PUT/DELETE /admin/users/{id}Editar / remover usuário
Utilitários
Método Rota Descrição GET /healthHealth check GET /logs/eventsLogs de eventos (requer KIRAGO_EVENT_LOG=true) POST /call/rejectRejeitar chamada recebida
Integração CRM
O KiraGo suporta envio de eventos em tempo real para um CRM externo via HTTP POST no endpoint /api/inbound do CRM.
O que é enviado
Mensagens 1:1 — texto, imagem, áudio, vídeo, documento, sticker, localização, reações, respostas e deleções
ReadReceipt — confirmação de leitura
Presence — status de presença do contato
HistorySync — histórico de mensagens ao sincronizar (quando history_sync: true)
Grupos e canais (newsletters) não são enviados ao CRM — apenas conversas individuais.
Resolução de nome do contato
O nome enviado ao CRM segue a ordem: FullName → FirstName → PushName → JID. Para mensagens enviadas pela instância, o nome é buscado no store local de contatos.
Sincronização de histórico
Use POST /session/crm/sync-history para sincronizar mensagens existentes:
curl -X POST "{BASE_URL}/session/crm/sync-history" \
-H "token: SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"direction": "both",
"include_media": true,
"batch_size": 500,
"max_messages": 0,
"dry_run": false
}'
Copy
Parâmetros:
Campo Tipo Descrição directionstring sent, received ou bothinclude_mediabool Incluir mídia no payload batch_sizeint Mensagens por lote (padrão: 500) max_messagesint Limite total (0 = sem limite) dry_runbool Simula sem enviar ao CRM
Eventos de webhook
O KiraGo tem dois tipos de webhook. Os eventos disponíveis são os mesmos em ambos, mas a forma de configurar é diferente:
Webhook da instância Webhook global Escopo Por instância (usuário) Servidor inteiro — recebe de todas as instâncias Como configurar POST /webhook com "events": [...]Env KIRAGO_GLOBAL_WEBHOOK + KIRAGO_GLOBAL_WEBHOOK_EVENTS Filtro de eventos Campo events na requisição KIRAGO_GLOBAL_WEBHOOK_EVENTS separado por vírgulaPayload extra userID, instanceNameuserID, instanceName (igual)HMAC Chave por instância (POST /session/hmac/config) KIRAGO_GLOBAL_HMAC_KEYRetry automático Sim (fila de outbox) Não
Use "events": ["All"] (instância) ou deixe KIRAGO_GLOBAL_WEBHOOK_EVENTS vazio (global) para receber todos os eventos sem filtro.
💬 Mensagens
Evento O que dispara MessageNova mensagem recebida ou enviada em conversa individual GroupMessageNova mensagem recebida ou enviada em grupo UndecryptableMessageMensagem que não foi possível descriptografar ReceiptRecibo de entrega de mensagem (alias de ReadReceipt) ReadReceiptConfirmação de leitura de mensagem (tique azul) GroupReadReceiptConfirmação de leitura em grupo MediaRetryTentativa de reenvio de mídia que falhou no download
👥 Grupos e contatos
Evento O que dispara GroupInfoAlteração nas informações do grupo (nome, descrição, configurações, participantes) JoinedGroupInstância entrou em um novo grupo PictureFoto de perfil de contato ou grupo foi atualizada BlocklistChangeUm contato foi bloqueado ou desbloqueado BlocklistLista de bloqueados sincronizada completa
🔌 Sessão e conexão
Evento O que dispara ConnectedInstância conectada com sucesso ao WhatsApp DisconnectedInstância desconectada (perda de conexão ou logout) ConnectFailureFalha ao tentar conectar LoggedOutSessão encerrada pelo WhatsApp (deslogar do celular) ClientOutdatedVersão do cliente considerada desatualizada pelo WhatsApp TemporaryBanNúmero banido temporariamente pelo WhatsApp StreamErrorErro no stream de conexão com o servidor do WhatsApp StreamReplacedStream substituído (outra sessão aberta com o mesmo número) KeepAliveTimeoutTimeout no keep-alive da conexão KeepAliveRestoredConexão keep-alive restaurada após timeout
📷 QR e pareamento
Evento O que dispara QRNovo QR Code gerado para parear o dispositivo QRTimeoutQR Code expirou sem ser escaneado PairSuccessPareamento concluído com sucesso PairErrorFalha no pareamento do dispositivo QRScannedWithoutMultideviceQR escaneado por um aparelho sem suporte a multidevice
👀 Presença
Evento O que dispara PresenceMudança de presença de um contato (online/offline/digitando) ChatPresenceContato está digitando ou gravando áudio em um chat
🔄 Sincronização
Evento O que dispara HistorySyncSincronização de histórico de mensagens (ao conectar ou solicitar) AppStateAtualização do estado interno do app (listas, contatos, configurações) AppStateSyncCompleteSincronização de estado do app concluída OfflineSyncCompletedSincronização offline concluída após reconexão OfflineSyncPreviewPreview de itens pendentes antes da sincronização offline
📞 Chamadas
Evento O que dispara CallOfferChamada recebida (voz ou vídeo) CallAcceptChamada aceita pelo destinatário CallTerminateChamada encerrada CallOfferNoticeAviso de chamada (notificação sem atender) CallRelayLatencyInformação de latência do relay da chamada
⚙️ Configurações e privacidade
Evento O que dispara PrivacySettingsConfigurações de privacidade atualizadas (foto, recados, etc.) PushNameSettingNome de exibição do número atualizado UserAboutRecado/status do contato atualizado IdentityChangeChave de identidade de um contato foi alterada (troca de aparelho) CATRefreshErrorErro ao renovar token de autenticação interno
📢 Newsletter (Canais WhatsApp)
Evento O que dispara NewsletterJoinInstância passou a seguir um canal NewsletterLeaveInstância deixou de seguir um canal NewsletterMuteChangeSilenciamento de um canal foi alterado NewsletterLiveUpdateNova publicação ou atualização ao vivo em um canal seguido
🌐 Meta / Facebook Bridge
Evento O que dispara FBMessageMensagem recebida via bridge Facebook/Meta (uso em contas Business)
🔮 Especial
Evento O que dispara AllRecebe todos os eventos acima sem exceção
Exemplos rápidos (cURL)
Conectar e gerar QR
curl -s -X POST \
-H "token: SEU_TOKEN" \
-H "Content-Type: application/json" \
--data '{"immediate":true}' \
"{BASE_URL}/session/connect"
Copy
curl -s -X GET \
-H "token: SEU_TOKEN" \
"{BASE_URL}/session/qr"
Copy
Enviar texto
curl -s -X POST \
-H "token: SEU_TOKEN" \
-H "Content-Type: application/json" \
--data '{"Phone":"5511999999999","Body":"Olá via KiraGo","Id":"msg-1"}' \
"{BASE_URL}/chat/send/text"
Copy
Configurar webhook
curl -s -X POST \
-H "token: SEU_TOKEN" \
-H "Content-Type: application/json" \
--data '{"webhookurl":"https://seuapp.com/webhook","events":["Message","ReadReceipt","Connected"]}' \
"{BASE_URL}/webhook"
Copy
Configurar CRM
curl -s -X POST \
-H "token: SEU_TOKEN" \
-H "Content-Type: application/json" \
--data '{"base_url":"https://seucrm.com","api_token":"TOKEN_CRM","history_sync":true}' \
"{BASE_URL}/session/crm/config"
Copy
Licenças e atualizações
O KiraGo é licenciado por chave. O acesso à API e as atualizações dependem da licença ativa.
Atualizações podem ser bloqueadas quando o build instalado estiver fora da janela de atualizações do plano. Ao renovar, o servidor revalida automaticamente.
Como atualizar
docker compose pull
docker compose up -d
Copy
Suporte
Se precisar de ajuda, informe:
Seu BASE_URL
O endpoint utilizado
O erro retornado pela API (sem expor o token)