Entrar Painel
Doc AI Friendly (agente de IA)
Webhooks

Webhooks do ZapFácil

Webhooks permitem receber notificações estruturadas em tempo real em seu servidor sempre que um evento relevante ocorrer no WhatsApp. As requisições são enviadas como chamadas HTTP POST para a URL que você configurou no Painel de Controle.

🛡️ Verificação de Assinatura (HMAC-SHA256):

Se você configurou um webhook_secret em seu painel, toda requisição de webhook incluirá o cabeçalho X-ZapFacil-Signature: sha256={hash}. Valide o payload calculando o HMAC-SHA256 do corpo cru da requisição para comprovar a legitimidade da origem.

Segurança

Validação HMAC

Abaixo estão exemplos práticos de como validar a assinatura HMAC enviada no cabeçalho X-ZapFacil-Signature no seu backend:

Exemplo em Node.js

import crypto from "node:crypto";

function verifyWebhookSignature(payloadRawBody, signatureHeader, secret) {
    const hmac = crypto.createHmac("sha256", secret);
    const digest = "sha256=" + hmac.update(payloadRawBody).digest("hex");
    return crypto.timingSafeEqual(
        Buffer.from(digest),
        Buffer.from(signatureHeader)
    );
}

Exemplo em PHP

function verifyWebhookSignature($payloadRawBody, $signatureHeader, $secret) {
    $expected = 'sha256=' . hash_hmac('sha256', $payloadRawBody, $secret);
    return hash_equals($expected, $signatureHeader);
}
EVENT MESSAGE_RECEIVED

Disparado em tempo real sempre que um novo chat, mensagem de texto ou de áudio/voz é recebida pelo celular emparelhado.

Payload Exemplo (Texto)

{
  "event": "MESSAGE_RECEIVED",
  "instance_id": "019002a2-3f1d-7201-9a74-b528a7f5b12b",
  "timestamp": "2026-06-08T21:27:23Z",
  "data": {
    "phone": "5511999999999",
    "message": "Salve",
    "message_id": "3EB01B2C3D4E5F6A7B8C9D",
    "chat_jid": "299876543210987",
    "sender_jid": "299876543210987:99",
    "is_group": false,
    "is_from_me": false,
    "timestamp": "2026-06-08T21:27:23Z",
    "type": "text",
    "event": "MESSAGE_RECEIVED",
    "instance_id": "019002a2-3f1d-7201-9a74-b528a7f5b12b"
  }
}

Payload Exemplo (Áudio/Voz)

{
  "event": "MESSAGE_RECEIVED",
  "instance_id": "019002a2-3f1d-7201-9a74-b528a7f5b12b",
  "timestamp": "2026-06-08T21:27:30Z",
  "data": {
    "phone": "5511999999999",
    "message_id": "3EB01B2C3D4E5F6A7B8C9E",
    "chat_jid": "299876543210987",
    "sender_jid": "299876543210987:99",
    "is_group": false,
    "is_from_me": false,
    "timestamp": "2026-06-08T21:27:30Z",
    "type": "audio",
    "audio_base64": "UklGRiS9AABXQVZFZm10IBIA...",
    "ptt": true,
    "mimetype": "audio/ogg; codecs=opus",
    "event": "MESSAGE_RECEIVED",
    "instance_id": "019002a2-3f1d-7201-9a74-b528a7f5b12b"
  }
}

Estrutura do Payload

application/json
event string required 06/04/2026

Sempre MESSAGE_RECEIVED.

instance_id string (uuid) required 06/04/2026

Identificador único da instância que recebeu a mensagem.

timestamp string required 06/04/2026

Data e hora do recebimento no formato ISO 8601.

data object required 06/04/2026

Objeto contendo os dados da mensagem.

Atributos do Objeto
phone string 06/04/2026

Número do remetente (inclui DDI e DDD).

message string | null 06/04/2026

Conteúdo textual recebido (nulo se for mensagem apenas de mídia/áudio).

message_id string 06/04/2026

Identificador único da mensagem no WhatsApp.

chat_jid string 08/06/2026

JID do chat de recebimento da mensagem no WhatsApp.

sender_jid string 08/06/2026

JID do remetente específico da mensagem.

is_group boolean 08/06/2026

Indica se a mensagem é proveniente de um grupo.

is_from_me boolean 08/06/2026

Indica se a mensagem foi enviada por você (pela conta conectada).

push_name string | null 08/06/2026

Nome público de exibição do remetente no WhatsApp.

timestamp string 08/06/2026

Data e hora do recebimento no formato ISO 8601.

type string 08/06/2026

Tipo da mensagem (ex: "text" ou "audio").

event string 08/06/2026

Evento redundante incluído no objeto de dados.

instance_id string (uuid) 08/06/2026

UUIDv7 da instância incluída no objeto de dados.

audio_base64 string | null 07/06/2026

Áudio codificado em Base64 (presente se a mensagem for áudio/voz).

ptt boolean | null 07/06/2026

Se true, indica que é mensagem de voz gravada na hora (Push-to-Talk).

mimetype string | null 07/06/2026

Tipo MIME do áudio (ex: "audio/ogg; codecs=opus").

EVENT CONNECTION_STATUS

Disparado sempre que o estado da sessão do WhatsApp de uma instância é alterado (conecta ou desconecta da plataforma).

Exemplo Conectado

{
  "event": "CONNECTION_STATUS",
  "instance_id": "019002a2-3f1d-7201-9a74-b528a7f5b12b",
  "timestamp": "2026-06-07T03:01:20Z",
  "data": {
    "status": "CONNECTED",
    "phone": "5511999999999"
  }
}

Exemplo Desconectado

{
  "event": "CONNECTION_STATUS",
  "instance_id": "019002a2-3f1d-7201-9a74-b528a7f5b12b",
  "timestamp": "2026-06-07T03:02:15Z",
  "data": {
    "status": "DISCONNECTED",
    "reason": "logout"
  }
}

Estrutura do Payload

application/json
event string required 06/04/2026

Sempre CONNECTION_STATUS.

instance_id string (uuid) required 06/04/2026

Identificador único da Instância.

timestamp string required 06/04/2026

Data e hora do evento no formato ISO 8601.

data object required 06/04/2026

Objeto contendo as informações de status.

Atributos do Objeto
status enum 06/04/2026

Novo estado da instância ("CONNECTED" ou "DISCONNECTED").

phone string | null 06/04/2026

Número de celular emparelhado. Presente apenas em status "CONNECTED".

reason string | null 07/06/2026

Motivo da desconexão (ex: "logout"). Presente apenas em status "DISCONNECTED".

EVENT QR_CODE

Disparado assim que a conexão é iniciada e um novo código QR fica disponível para leitura e sincronização de conta.

Exemplo de Resposta

{
  "event": "QR_CODE",
  "instance_id": "019002a2-3f1d-7201-9a74-b528a7f5b12b",
  "timestamp": "2026-06-07T03:00:05Z",
  "data": {
    "qr_code_base64": "data:image/png;base64,iVBORw0KGgoAAA...",
    "qr_code_raw": "[email protected]_code"
  }
}

Estrutura do Payload

application/json
event string required 06/04/2026

Sempre QR_CODE.

instance_id string (uuid) required 06/04/2026

Identificador único da Instância.

timestamp string required 06/04/2026

Data e hora do evento no formato ISO 8601.

data object required 06/04/2026

Objeto contendo as chaves do QR Code.

Atributos do Objeto
qr_code_base64 string 06/04/2026

String de imagem no formato Base64 (ideal para renderizar imagens em tags <img>).

qr_code_raw string 06/04/2026

Texto cru do QR Code (ideal para gerar QR Codes sob demanda no seu frontend).