Documentação do KiraGo

Painel Swagger

O KiraGo é uma implementação da biblioteca whatsmeow como um serviço de API REST simples, com suporte a múltiplos dispositivos e sessões simultâneas.

A biblioteca whatsmeow não usa Puppeteer no Chrome headless e nem emulador Android. Ela se comunica diretamente com os servidores websocket do WhatsApp, sendo bem rápida e usando menos memória e CPU do que outras soluções. A desvantagem é que mudanças no protocolo do WhatsApp podem quebrar conexões e exigir atualização da biblioteca.

⚠️ Aviso: Usar este software em violação aos Termos de Serviço do WhatsApp pode resultar no banimento do seu número. Tenha cuidado, não use para enviar SPAM ou similares. Use por sua conta e risco. Se você precisa desenvolver algo com interesse comercial, procure um provedor oficial de soluções WhatsApp e utilize a WhatsApp Business API.

Autenticação

O KiraGo oferece dois métodos de autenticação:

Exemplo de requisição com token de usuário:

curl -X POST https://seu-dominio.com/webhook \
  -H "token: seu_token_aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "webhook": "https://seu-webhook.com/callback",
    "events": ["Message", "ReadReceipt"]
  }'

Primeiros passos

Para começar a usar a API do KiraGo, siga estes passos:

  1. Criar um usuário:

    Você precisa criar um usuário no banco de dados. O administrador pode criar um novo usuário pela rota /admin/users.

  2. Conectar ao WhatsApp:

    Use o endpoint /session/connect para iniciar a conexão com os servidores do WhatsApp.

  3. Escanear o QR code:

    Obtenha o QR code pelo endpoint /session/qr e escaneie com o app do WhatsApp.

  4. Configurar seu webhook:

    Use o endpoint /webhook para configurar a URL do webhook e os tipos de eventos que você quer receber.

  5. Enviar mensagens:

    Agora você já pode enviar mensagens usando os endpoints disponíveis em /chat/send/*.

Dica: Para testes, use o painel em /dashboard para gerenciar suas instâncias e visualizar o QR code de conexão.

Sessão

Endpoints para gerenciar a conexão com os servidores do WhatsApp.

POST /session/connect

Conecta aos servidores do WhatsApp. Se não houver sessão anterior, será necessário escanear um QR code.

Parâmetros do corpo:

Parâmetro Tipo Descrição
Subscribe Array[string] Lista de tipos de evento para assinar. Valores possíveis: "Message", "ReadReceipt", "Presence", "HistorySync", "ChatPresence", "All"
Immediate boolean Se true, retorna imediatamente sem aguardar a confirmação da conexão

Exemplo de requisição:

{
  "Subscribe": ["Message", "ReadReceipt"],
  "Immediate": true
}

Resposta:

{
  "code": 200,
  "data": {
    "details": "Connected!",
    "events": "Message,ReadReceipt",
    "jid": "5491155555555.0:53@s.whatsapp.net",
    "webhook": "https://some.site/webhook?request=parameter"
  },
  "success": true
}

POST /session/disconnect

Desconecta dos servidores do WhatsApp sem encerrar a sessão.

Resposta:

{
  "code": 200,
  "data": {
    "Details": "Disconnected"
  },
  "success": true
}

POST /session/logout

Encerra a conexão e termina a sessão, exigindo novo scan do QR na próxima conexão.

Resposta:

{
  "code": 200,
  "data": {
    "Details": "Logged out"
  },
  "success": true
}

GET /session/status

Obtém o status atual da conexão e da sessão.

Resposta:

{
  "code": 200,
  "data": {
    "Connected": true,
    "LoggedIn": true
  },
  "success": true
}

GET /session/qr

Obtém o QR code para escanear no app do WhatsApp.

Resposta:

{
  "code": 200,
  "data": {
    "QRCode": "data:image/png;base64,iVBORw0KGgoA..."
  },
  "success": true
}

Webhook

Endpoints para configurar webhooks que receberão notificações de eventos.

GET /webhook

Obtém o webhook configurado e os eventos assinados.

Resposta:

{
  "code": 200,
  "data": {
    "subscribe": ["Message", "ReadReceipt"],
    "webhook": "https://example.net/webhook"
  },
  "success": true
}

POST /webhook

Configura um webhook para receber eventos.

Parâmetros do corpo:

Parâmetro Tipo Descrição
webhook string URL do webhook que receberá as chamadas
events Array[string] Lista de tipos de evento para assinar. Veja a seção "Tipos de eventos disponíveis" abaixo para a lista completa.
active boolean Define se o webhook está ativo ou não. Padrão: true

Exemplo de requisição:

{
  "webhook": "https://example.net/webhook",
  "events": ["Message", "ReadReceipt"]
}

Resposta:

{
  "code": 200,
  "data": {
    "webhook": "https://example.net/webhook",
    "events": ["Message", "ReadReceipt"]
  },
  "success": true
}

PUT /webhook

Atualiza a configuração do webhook. Dá para atualizar apenas a URL, apenas os eventos, ou ambos.

Parâmetros do corpo:

Parâmetro Tipo Descrição
webhook string Nova URL do webhook (opcional se for atualizar apenas eventos)
events Array[string] Nova lista de eventos (opcional se for atualizar apenas a URL)
active boolean Ativar ou desativar o webhook

Exemplos de requisição:

// Atualizar apenas eventos
{
  "events": ["Message", "Receipt", "GroupInfo"],
  "active": true
}

// Atualizar apenas URL
{
  "webhook": "https://novo-endpoint.com/webhook",
  "active": true
}

// Desativar webhook
{
  "active": false
}

DELETE /webhook

Remove o webhook e limpa a configuração de eventos.

Resposta:

{
  "code": 200,
  "data": {
    "message": "Webhook removed successfully"
  },
  "success": true
}

Tipos de eventos disponíveis

Abaixo está a lista completa de eventos que você pode assinar:

Mensagens e comunicação

  • Message - Mensagem recebida ou enviada
  • UndecryptableMessage - Mensagem que não pôde ser descriptografada
  • Receipt - Confirmação de entrega/leitura
  • MediaRetry - Tentativa de reenvio de mídia

Grupos e contatos

  • GroupInfo - Informações do grupo atualizadas
  • JoinedGroup - Entrou em um grupo
  • Picture - Foto de perfil atualizada
  • BlocklistChange - Alteração na lista de bloqueio
  • Blocklist - Lista de bloqueio

Conexão e sessão

  • Connected - Conectado ao WhatsApp
  • Disconnected - Desconectado do WhatsApp
  • ConnectFailure - Falha na conexão
  • KeepAliveRestored - Conexão restaurada
  • KeepAliveTimeout - Timeout de conexão
  • LoggedOut - Sessão encerrada
  • ClientOutdated - Cliente desatualizado
  • TemporaryBan - Banimento temporário
  • StreamError - Erro de stream
  • StreamReplaced - Stream substituído
  • PairSuccess - Pareamento bem-sucedido
  • PairError - Erro ao parear
  • QR - QR code gerado
  • QRTimeout - Timeout do QR code
  • QRScannedWithoutMultidevice - QR escaneado sem multi-dispositivo

Privacidade e configurações

  • PrivacySettings - Configurações de privacidade
  • PushNameSetting - Nome de exibição alterado
  • UserAbout - Status/Sobre atualizado

Sincronização e estado

  • AppState - Estado do aplicativo
  • AppStateSyncComplete - Sincronização concluída
  • HistorySync - Sincronização de histórico
  • OfflineSyncCompleted - Sincronização offline concluída
  • OfflineSyncPreview - Prévia da sincronização offline

Chamadas

  • CallOffer - Oferta de chamada
  • CallAccept - Chamada aceita
  • CallTerminate - Chamada encerrada
  • CallOfferNotice - Aviso de oferta de chamada
  • CallRelayLatency - Latência do relay da chamada

Presença e atividade

  • Presence - Status de presença
  • ChatPresence - Presença no chat (digitando)

Outros

  • IdentityChange - Mudança de identidade
  • CATRefreshError - Erro de atualização do CAT
  • NewsletterJoin - Entrou na newsletter
  • NewsletterLeave - Saiu da newsletter
  • NewsletterMuteChange - Alteração de silenciar newsletter
  • NewsletterLiveUpdate - Atualização ao vivo da newsletter
  • FBMessage - Mensagem da ponte do Facebook
  • All - Receber todos os eventos

Estrutura do webhook

Quando um evento ocorre, o KiraGo envia uma requisição POST para o webhook configurado com os dados do evento. Abaixo estão os formatos dos principais tipos de evento:

Mensagem recebida

{
  "event": "Message",
  "instance": "5491155553934.0:53@s.whatsapp.net",
  "data": {
    "id": "3EB0ABCD123456789",
    "pushName": "Nome do Contato",
    "fromMe": false,
    "timestamp": 1647878528,
    "chat": "5491199999999@s.whatsapp.net",
    "sender": "5491199999999@s.whatsapp.net",
    "message": {
      "conversation": "Olá, como vai?"
    }
  }
}

Confirmação de leitura

{
  "event": "ReadReceipt",
  "instance": "5491155553934.0:53@s.whatsapp.net",
  "data": {
    "sender": "5491199999999@s.whatsapp.net",
    "chat": "5491199999999@s.whatsapp.net",
    "ids": ["3EB0ABCD123456789"],
    "timestamp": 1647878650
  }
}

Presence

{
  "event": "Presence",
  "instance": "5491155553934.0:53@s.whatsapp.net",
  "data": {
    "sender": "5491199999999@s.whatsapp.net",
    "status": "available",
    "timestamp": 1647878750
  }
}
Observação: Garanta que seu servidor de webhook responda com código 200 em um tempo razoável. O KiraGo considera uma resposta bem-sucedida como confirmação de que o evento foi processado corretamente.

Chat

Endpoints para enviar mensagens e gerenciar interações de chat.

POST /chat/send/text

Envia uma mensagem de texto para um contato ou grupo.

Parâmetros do corpo:

Parâmetro Tipo Descrição
Phone string Número do destinatário (com DDI, sem "+" ou outros caracteres especiais)
Body string Conteúdo da mensagem de texto
Id string ID customizado da mensagem. Se não informado, um ID aleatório será gerado
ContextInfo object Informações de contexto para responder a uma mensagem específica

Exemplo de requisição:

{
  "Phone": "5491155553935",
  "Body": "Olá, como você está?",
  "Id": "ABCDABCD1234",
  "ContextInfo": {
    "StanzaId": "3EB06F9067F80BAB89FF",
    "Participant": "5491155553935@s.whatsapp.net"
  }
}

Resposta:

{
  "code": 200,
  "data": {
    "Details": "Sent",
    "Id": "ABCDABCD1234",
    "Timestamp": "2023-03-24T15:49:08-03:00"
  },
  "success": true
}

POST /chat/send/image

Envia uma imagem para um contato ou grupo.

Parâmetros do corpo:

Parâmetro Tipo Descrição
Phone string Número do destinatário
Image string Imagem em base64 (deve começar com "data:image/jpeg;base64," ou "data:image/png;base64,")
Caption string Legenda opcional para a imagem
Id string ID customizado da mensagem

GET /chat/history

Recupera o histórico de mensagens de um chat específico. Retorna em ordem cronológica reversa (mais recentes primeiro).

Parâmetros de Query:

Parâmetro Tipo Descrição
chat_jid string JID (ID do WhatsApp) do chat para recuperar o histórico
limit integer Número máximo de mensagens para recuperar (padrão: 50; máximo: 1000)

Exemplo de requisição:

GET /chat/history?chat_jid=5491155553935@s.whatsapp.net&limit=10

Resposta de Sucesso:

{
  "code": 200,
  "success": true,
  "data": [
    {
      "id": 1,
      "user_id": "abc123def456",
      "chat_jid": "5491155553935@s.whatsapp.net",
      "sender_jid": "5491155554444@s.whatsapp.net",
      "message_id": "3EB0C767D26A1B5F7C83",
      "timestamp": "2023-12-01T15:30:00Z",
      "message_type": "text",
      "text_content": "Olá, como você está?",
      "media_link": ""
    },
    {
      "id": 2,
      "user_id": "abc123def456", 
      "chat_jid": "5491155553935@s.whatsapp.net",
      "sender_jid": "5491155553935@s.whatsapp.net",
      "message_id": "4FB1D878E37B2C6G8D94",
      "timestamp": "2023-12-01T15:25:00Z",
      "message_type": "image",
      "text_content": "Veja esta foto!",
      "media_link": "https://example.com/media/image123.jpg"
    }
  ]
}

Erros possíveis:

Código Descrição
400 Requisição inválida - parâmetro chat_jid é obrigatório
501 Não implementado - histórico de mensagens está desativado
500 Erro interno do servidor
Observação: Este endpoint exige que o histórico de mensagens esteja habilitado no servidor. O histórico é salvo automaticamente para mensagens enviadas e recebidas após habilitar esse recurso.

Usuário

Endpoints para obter informações de usuários e gerenciar presença.

POST /user/check

Verifica se números de telefone têm WhatsApp.

Parâmetros do corpo:

Parâmetro Tipo Descrição
Phone Array[string] Lista de números de telefone para verificar

Exemplo de requisição:

{
  "Phone": ["5491155553934", "5491155553935"]
}

Resposta:

{
  "code": 200,
  "data": {
    "Users": [
      {
        "IsInWhatsapp": true,
        "JID": "5491155553934@s.whatsapp.net",
        "Query": "5491155553934",
        "VerifiedName": "Company Name"
      },
      {
        "IsInWhatsapp": false,
        "JID": "5491155553935@s.whatsapp.net",
        "Query": "5491155553935",
        "VerifiedName": ""
      }
    ]
  },
  "success": true
}

Grupo

Endpoints para gerenciar grupos e suas propriedades.

GET /group/list

Lista todos os grupos aos quais a conta está vinculada.

Resposta:

{
  "code": 200,
  "data": {
    "Groups": [
      {
        "AnnounceVersionID": "1650572126123738",
        "DisappearingTimer": 0,
        "GroupCreated": "2022-04-21T17:15:26-03:00",
        "IsAnnounce": false,
        "IsEphemeral": false,
        "IsLocked": false,
        "JID": "120362023605733675@g.us",
        "Name": "Super Group",
        "NameSetAt": "2022-04-21T17:15:26-03:00",
        "NameSetBy": "5491155554444@s.whatsapp.net",
        "OwnerJID": "5491155554444@s.whatsapp.net",
        "ParticipantVersionID": "1650234126145738",
        "Participants": [
          {
            "IsAdmin": true,
            "IsSuperAdmin": true,
            "JID": "5491155554444@s.whatsapp.net"
          },
          {
            "IsAdmin": false,
            "IsSuperAdmin": false,
            "JID": "5491155553333@s.whatsapp.net"
          }
        ],
        "Topic": "",
        "TopicID": "",
        "TopicSetAt": "0001-01-01T00:00:00Z",
        "TopicSetBy": ""
      }
    ]
  },
  "success": true
}

Newsletter

Endpoints para acessar newsletters/canais do WhatsApp.

GET /newsletter/list

Lista todas as newsletters assinadas.

Resposta:

{
  "code": 200,
  "data": {
    "Newsletter": [
      {
        "id": "120363144038483540@newsletter",
        "state": {"type": "active"},
        "thread_metadata": {
          "creation_time": "1688746895",
          "description": {
            "text": "WhatsApp's official channel. Follow for our latest feature launches, updates, exclusive drops and more."
          },
          "name": {"text": "WhatsApp"},
          "picture": {"type": "IMAGE"},
          "subscribers_count": "0"
        },
        "viewer_metadata": {"role": "subscriber"}
      }
    ]
  },
  "success": true
}

Admin

Endpoints administrativos para gerenciar usuários e instâncias.

GET /admin/users

Lista todos os usuários cadastrados no sistema.

Cabeçalhos:

Header Valor Descrição
Authorization string Token administrativo para autenticação

Resposta:

{
  "code": 200,
  "data": [
    {
      "id": 1,
      "name": "John",
      "token": "1234ABCD",
      "webhook": "https://example.com/webhook",
      "jid": "5491155553934@s.whatsapp.net",
      "qrcode": "",
      "connected": true,
      "expiration": 0,
      "events": "Message,ReadReceipt"
    }
  ],
  "success": true
}

Armazenamento S3

Configure armazenamento compatível com S3 para guardar arquivos de mídia do WhatsApp. Suporta AWS S3, MinIO, DigitalOcean Spaces e outros provedores compatíveis.

GET /s3/config

Obtém a configuração atual do S3.

Resposta:

{
  "code": 200,
  "data": {
    "endpoint": "https://s3.amazonaws.com",
    "bucket": "meu-bucket",
    "region": "us-east-1",
    "path_prefix": "uploads/whatsapp/",
    "force_path_style": false
  },
  "success": true
}

PUT /s3/config

Configura o armazenamento S3 para esta instância.

Parâmetros do corpo:

Parâmetro Tipo Descrição
endpoint string URL do endpoint S3 (padrão: https://s3.amazonaws.com)
access_key string Access key do S3
secret_key string Secret key do S3
bucket string Nome do bucket S3
region string Região do S3 (obrigatória para AWS S3)
path_prefix string Prefixo de caminho para organizar arquivos
force_path_style boolean Forçar path style (obrigatório para MinIO)

Exemplo de requisição:

{
  "endpoint": "https://s3.amazonaws.com",
  "access_key": "AKIAIOSFODNN7EXAMPLE",
  "secret_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
  "bucket": "meu-bucket-whatsapp",
  "region": "us-east-1",
  "path_prefix": "uploads/",
  "force_path_style": false
}

Resposta:

{
  "code": 200,
  "data": {
    "message": "S3 configuration saved successfully"
  },
  "success": true
}

POST /s3/test

Testa a conexão com o S3 usando a configuração informada.

Parâmetros do corpo:

Os mesmos parâmetros do endpoint PUT /s3/config

Resposta:

{
  "code": 200,
  "data": {
    "message": "S3 connection test successful"
  },
  "success": true
}
Exemplos de configuração:
  • AWS S3: Use o endpoint padrão e informe a região
  • MinIO: Use seu endpoint customizado (ex: http://localhost:9000) e habilite force_path_style
  • DigitalOcean Spaces: Use https://nyc3.digitaloceanspaces.com como endpoint

Proxy

Configure um proxy HTTP/HTTPS ou SOCKS5 para as conexões do WhatsApp. Útil para restrições de rede ou para aumentar a privacidade.

GET /proxy/config

Obtém a configuração atual do proxy.

Resposta:

{
  "code": 200,
  "data": {
    "proxy_url": "socks5://proxy.example.com:1080",
    "username": "user",
    "bypass_list": ["localhost", "127.0.0.1", "*.local"]
  },
  "success": true
}

PUT /proxy/config

Configura o proxy para esta instância.

Parâmetros do corpo:

Parâmetro Tipo Descrição
proxy_url string URL completa do proxy, incluindo protocolo e porta
username string Usuário para autenticação no proxy
password string Senha para autenticação no proxy
bypass_list Array[string] Lista de domínios/IPs que devem ignorar o proxy

Exemplo de requisição:

{
  "proxy_url": "socks5://proxy.example.com:1080",
  "username": "usuario",
  "password": "senha123",
  "bypass_list": ["localhost", "127.0.0.1", "*.local", "192.168.*"]
}

Resposta:

{
  "code": 200,
  "data": {
    "message": "Proxy configuration saved successfully"
  },
  "success": true
}

POST /proxy/test

Testa a conexão através do proxy configurado.

Parâmetros do corpo:

Os mesmos parâmetros do endpoint PUT /proxy/config (exceto bypass_list)

Resposta:

{
  "code": 200,
  "data": {
    "message": "Proxy connection test successful",
    "response_time": "245ms"
  },
  "success": true
}
Formatos de URL suportados:
  • HTTP/HTTPS: http://proxy.example.com:8080
  • SOCKS5: socks5://proxy.example.com:1080
  • Com autenticação: socks5://user:pass@proxy.example.com:1080

Melhores práticas

Para usar a API do KiraGo com eficiência e evitar problemas, considere estas melhores práticas:

Segurança

Limites de uso

Webhooks

FAQ

Sim. O KiraGo suporta múltiplas instâncias. Cada instância tem seu próprio token e pode conectar a um número diferente. Você pode gerenciar todas as instâncias pelo painel administrativo.

Se o WhatsApp desconectar sua sessão (por exemplo, ao conectar no app ou ao clicar em “Sair de todos os dispositivos”), você precisará reconectar pelo endpoint /session/connect e escanear o QR novamente. O KiraGo não reconecta automaticamente em caso de logout forçado.

Para reduzir o risco de bloqueio:

  • Não envie mensagens em massa para pessoas que não conhecem você
  • Não envie a mesma mensagem para muitos contatos em sequência
  • Respeite limites de envio (aprox. 50–100 mensagens/dia para números novos)
  • Use um número que já tenha histórico de uso no WhatsApp
  • Não use a API para spam ou conteúdo inadequado