Skip to main content

1. Formato geral do payload

Todas as requisições são POST com Content-Type: application/json. O corpo segue a estrutura:
{
  "event": "message.sent",
  "workspaceId": "clxx...",
  "instanceId": "clxx...",
  "messageId": "clxx...",
  "timestamp": "2025-02-09T12:00:00.000Z",
  "data": { ... }
}
CampoTipoDescrição
eventstringNome do evento (ex.: message.sent, sms.delivered).
workspace_idstringID do workspace.
instanceIdstringID da instância WhatsApp (vazio para SMS, e-mail e push).
message_idstring | undefinedID da mensagem no Notifique (quando aplicável).
timestampstringISO 8601; use para anti-replay (janela recomendada: 5 min).
dataobjectDados específicos do evento (ver por canal abaixo).

2. Headers e assinatura

HeaderDescrição
Content-Typeapplication/json
X-Webhook-EventNome do evento.
X-Notifique-TimestampTimestamp em segundos (Unix) usado na assinatura.
X-Notifique-SignatureAssinatura: t={timestamp},v1={hash}.
X-Workspace-IdID do workspace.
  • Cálculo HMAC: hash = HMAC-SHA256(secret, timestamp + "." + body) (body = corpo bruto do POST).
  • Anti-replay: Rejeite requisições com timestamp fora de uma janela (ex.: 5 minutos).

3. Por canal


3.1 WhatsApp — Mensagens e instância

Escopos disponíveis

EscopoDescriçãoQuando é disparado
message.sentMensagem enviada foi aceita.Após envio bem-sucedido.
message.deliveredMensagem entregue no dispositivo.Provedor envia DELIVERY_ACK.
message.readMensagem foi lida (ou mídia tocada).Provedor envia READ/PLAYED.
message.failedFalha no envio.Worker falha ou provedor envia ERROR.
message.deletedMensagem deletada (“apagar para todos”).Provedor ou API/app.
message.editedMensagem de texto editada.Provedor ou API/app.
message.updatedQualquer atualização de status.Em toda mudança (sent, delivered, read, etc.).
message.cancelledMensagem agendada cancelada.API ou app.
message.receivedMensagem recebida (inbound).WhatsApp: quando a mensagem inbound é persistida. SMS usa sms.received / sms.replied.
message.respondedDestinatário respondeu (reply).Provedor (reply).
instance.connectedInstância conectada ao WhatsApp.QR lido ou sessão restaurada.
instance.disconnectedInstância desconectada.Provedor (connection.update close).
instance.qrcodeNovo QR code para pareamento.Provedor (qrcode.updated).
instance.connectingInstância aguardando QR.Provedor (qrcode) quando não ACTIVE.

Retorno completo por evento

instance.qrcode
dataTipoDescrição
base64stringImagem do QR em base64.
{
  "event": "instance.qrcode",
  "workspaceId": "clxxworkspace123",
  "instanceId": "clxxinstance456",
  "timestamp": "2025-02-20T14:00:00.000Z",
  "data": {
    "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
  }
}
instance.connected
dataTipoDescrição
phone_numberstring | nullNúmero do WhatsApp conectado.
{
  "event": "instance.connected",
  "workspaceId": "clxxworkspace123",
  "instanceId": "clxxinstance456",
  "timestamp": "2025-02-20T14:01:00.000Z",
  "data": {
    "phoneNumber": "5511999999999"
  }
}
instance.disconnected
dataDescrição
(objeto vazio){}
{
  "event": "instance.disconnected",
  "workspaceId": "clxxworkspace123",
  "instanceId": "clxxinstance456",
  "timestamp": "2025-02-20T14:02:00.000Z",
  "data": {}
}
instance.connecting
dataTipoDescrição
statusstring"AWAITING_QR".
messagestringMensagem descritiva.
{
  "event": "instance.connecting",
  "workspaceId": "clxxworkspace123",
  "instanceId": "clxxinstance456",
  "timestamp": "2025-02-20T14:00:00.000Z",
  "data": {
    "status": "AWAITING_QR",
    "message": "QR code generated; scan to connect"
  }
}
message.sent
dataTipoDescrição
tostringDestinatário (E.164).
typestringTipo (TEXT, IMAGE, etc.).
statusstring"SENT".
sent_atstringISO 8601.
external_idstringID no provedor.
{
  "event": "message.sent",
  "workspaceId": "clxxworkspace123",
  "instanceId": "clxxinstance456",
  "messageId": "clxxmessage789",
  "timestamp": "2025-02-20T14:05:00.000Z",
  "data": {
    "to": "5511999999999",
    "type": "TEXT",
    "status": "SENT",
    "sentAt": "2025-02-20T14:05:00.000Z",
    "externalId": "3EB0xxxx"
  }
}
message.delivered
dataTipoDescrição
message_idstringID da mensagem no Notifique.
tostringDestinatário.
statusstring"DELIVERED".
{
  "event": "message.delivered",
  "workspaceId": "clxxworkspace123",
  "instanceId": "clxxinstance456",
  "messageId": "clxxmessage789",
  "timestamp": "2025-02-20T14:05:30.000Z",
  "data": {
    "messageId": "clxxmessage789",
    "to": "5511999999999",
    "status": "DELIVERED"
  }
}
message.read
dataTipoDescrição
message_idstringID da mensagem.
tostringDestinatário.
statusstring"READ".
{
  "event": "message.read",
  "workspaceId": "clxxworkspace123",
  "instanceId": "clxxinstance456",
  "messageId": "clxxmessage789",
  "timestamp": "2025-02-20T14:06:00.000Z",
  "data": {
    "messageId": "clxxmessage789",
    "to": "5511999999999",
    "status": "READ"
  }
}
message.failed
dataTipoDescrição
message_idstringOpcional.
tostringDestinatário.
statusstring"FAILED".
reasonstringMotivo (ex.: instance_disconnected).
{
  "event": "message.failed",
  "workspaceId": "clxxworkspace123",
  "instanceId": "clxxinstance456",
  "messageId": "clxxmessage789",
  "timestamp": "2025-02-20T14:05:00.000Z",
  "data": {
    "messageId": "clxxmessage789",
    "to": "5511999999999",
    "status": "FAILED",
    "reason": "instance_disconnected"
  }
}
message.deleted
dataTipoDescrição
message_idstringID da mensagem.
tostringDestinatário.
statusstring"DELETED".
sourcestring"messages.delete", "revoke" ou "api".
{
  "event": "message.deleted",
  "workspaceId": "clxxworkspace123",
  "instanceId": "clxxinstance456",
  "messageId": "clxxmessage789",
  "timestamp": "2025-02-20T14:07:00.000Z",
  "data": {
    "messageId": "clxxmessage789",
    "to": "5511999999999",
    "status": "DELETED",
    "source": "api"
  }
}
message.edited
dataTipoDescrição
message_idstringID da mensagem.
tostringDestinatário.
statusstring"EDITED".
new_contentstring | nullNovo texto.
{
  "event": "message.edited",
  "workspaceId": "clxxworkspace123",
  "instanceId": "clxxinstance456",
  "messageId": "clxxmessage789",
  "timestamp": "2025-02-20T14:08:00.000Z",
  "data": {
    "messageId": "clxxmessage789",
    "to": "5511999999999",
    "status": "EDITED",
    "newContent": "Texto atualizado"
  }
}
message.updated
dataTipoDescrição
message_idstringID da mensagem.
tostringDestinatário.
statusstringNovo status (SENT, DELIVERED, READ, FAILED, etc.).
previous_statusstringStatus anterior.
reasonstring | nullMotivo (ex.: em falha).
{
  "event": "message.updated",
  "workspaceId": "clxxworkspace123",
  "instanceId": "clxxinstance456",
  "messageId": "clxxmessage789",
  "timestamp": "2025-02-20T14:05:30.000Z",
  "data": {
    "messageId": "clxxmessage789",
    "to": "5511999999999",
    "status": "DELIVERED",
    "previousStatus": "SENT",
    "reason": null
  }
}
message.cancelled
dataTipoDescrição
message_idstringID da mensagem.
tostringDestinatário.
statusstring"CANCELLED".
{
  "event": "message.cancelled",
  "workspaceId": "clxxworkspace123",
  "instanceId": "clxxinstance456",
  "messageId": "clxxmessage789",
  "timestamp": "2025-02-20T14:09:00.000Z",
  "data": {
    "messageId": "clxxmessage789",
    "to": "5511999999999",
    "status": "CANCELLED"
  }
}
message.received
dataTipoDescrição
fromstringRemetente.
typestringTipo (text, etc.).
contentstringConteúdo.
statusstring"RECEIVED".
{
  "event": "message.received",
  "workspaceId": "clxxworkspace123",
  "instanceId": "clxxinstance456",
  "messageId": "clxxinbound001",
  "timestamp": "2025-02-20T14:10:00.000Z",
  "data": {
    "from": "5511999999999",
    "type": "text",
    "content": "Olá!",
    "status": "RECEIVED"
  }
}
message.responded
dataTipoDescrição
message_idstringID da mensagem respondida.
reply_textstringTexto da resposta.
statusstring"RESPONDED".
{
  "event": "message.responded",
  "workspaceId": "clxxworkspace123",
  "instanceId": "clxxinstance456",
  "messageId": "clxxmessage789",
  "timestamp": "2025-02-20T14:11:00.000Z",
  "data": {
    "messageId": "clxxmessage789",
    "replyText": "Resposta do destinatário",
    "status": "RESPONDED"
  }
}

3.2 SMS

instanceId vem vazio em todos os eventos SMS.

Escopos disponíveis

EscopoDescriçãoQuando é disparado
sms.sentSMS aceito e enviado.Após envio bem-sucedido.
sms.deliveredSMS entregue (DLR).Callback do provedor.
sms.failedSMS falhou.Falha no envio ou DLR de erro.
sms.cancelledSMS agendado cancelado.API ou app (POST cancel).
sms.receivedSMS de entrada (MO) persistido.Callback MO do provedor configurado na integração.
sms.repliedResposta vinculada a um envio.MO correlacionado a um smsId de saída.

Retorno completo por evento

sms.sent
dataTipoDescrição
smsIdstringID do SMS no Notifique.
tostringDestinatário (E.164).
statusstring"SENT".
sent_atstringISO 8601.
external_idstring | undefinedID no provedor.
providerstring | undefinedNome do provedor.
{
  "event": "sms.sent",
  "workspaceId": "clxxworkspace123",
  "instanceId": "",
  "timestamp": "2025-02-20T14:00:00.000Z",
  "data": {
    "smsId": "clxxsms123",
    "to": "5511999999999",
    "status": "SENT",
    "sentAt": "2025-02-20T14:00:00.000Z",
    "externalId": "provider-msg-123"
  }
}
sms.delivered
dataTipoDescrição
smsIdstringID do SMS.
tostringDestinatário.
statusstring"DELIVERED".
deliveredAtstringISO 8601.
{
  "event": "sms.delivered",
  "workspaceId": "clxxworkspace123",
  "instanceId": "",
  "timestamp": "2025-02-20T14:00:30.000Z",
  "data": {
    "smsId": "clxxsms123",
    "to": "5511999999999",
    "status": "DELIVERED",
    "deliveredAt": "2025-02-20T14:00:30.000Z"
  }
}
sms.failed
dataTipoDescrição
smsIdstringID do SMS.
tostringDestinatário.
statusstring"FAILED".
failedAtstringISO 8601.
{
  "event": "sms.failed",
  "workspaceId": "clxxworkspace123",
  "instanceId": "",
  "timestamp": "2025-02-20T14:00:00.000Z",
  "data": {
    "smsId": "clxxsms123",
    "to": "5511999999999",
    "status": "FAILED",
    "failedAt": "2025-02-20T14:00:00.000Z"
  }
}
sms.cancelled
dataTipoDescrição
smsIdstringID do SMS.
tostringDestinatário.
statusstring"CANCELLED".
{
  "event": "sms.cancelled",
  "workspaceId": "clxxworkspace123",
  "instanceId": "",
  "timestamp": "2025-02-20T14:00:00.000Z",
  "data": {
    "smsId": "clxxsms123",
    "to": "5511999999999",
    "status": "CANCELLED"
  }
}
sms.received
dataTipoDescrição
inboundIdstringID do registro de SMS recebido.
fromstringRemetente do MO.
bodystringTexto recebido.
providerstringIdentificador do canal no provedor (valor depende da integração).
relatedSmsIdstring | nullEnvio original, se correlacionado.
externalMoIdstringID do MO no provedor.
sms.replied Mesmos campos que sms.received, com smsId (envio original) obrigatório em data quando o MO está vinculado.

3.3 E-mail

instanceId vem vazio em todos os eventos de e-mail.

Escopos disponíveis

EscopoDescriçãoQuando é disparado
email.sentE-mail aceito e enviado.Após envio bem-sucedido (worker).
email.deliveredE-mail entregue.Callback do provedor.
email.openedE-mail aberto pelo destinatário (open tracking).Primeira abertura (callback do provedor).
email.clickedLink do e-mail clicado (click tracking).Clique em link rastreado (callback do provedor).
email.failedE-mail falhou ou bounce.Falha no worker ou callback.
email.complainedReclamação de spam.Callback do provedor (complaint).
email.cancelledE-mail agendado cancelado.API ou app (POST cancel).

Retorno completo por evento

email.sent
dataTipoDescrição
emailIdstringID do e-mail no Notifique.
tostring[]Destinatários.
fromstringRemetente.
statusstring"SENT".
sentAtstringISO 8601.
{
  "event": "email.sent",
  "workspaceId": "clxxworkspace123",
  "instanceId": "",
  "timestamp": "2025-02-20T14:00:00.000Z",
  "data": {
    "emailId": "clxxemail123",
    "to": ["cliente@example.com"],
    "from": "noreply@seudominio.com",
    "status": "SENT",
    "sentAt": "2025-02-20T14:00:00.000Z"
  }
}
email.delivered
dataTipoDescrição
emailIdstringID do e-mail.
tostring[]Destinatários.
fromstringRemetente.
statusstring"DELIVERED".
{
  "event": "email.delivered",
  "workspaceId": "clxxworkspace123",
  "instanceId": "",
  "timestamp": "2025-02-20T14:00:05.000Z",
  "data": {
    "emailId": "clxxemail123",
    "to": ["cliente@example.com"],
    "from": "noreply@seudominio.com",
    "status": "DELIVERED"
  }
}
email.opened
dataTipoDescrição
emailIdstringID do e-mail.
tostringDestinatário.
fromstringRemetente.
statusstring"OPENED".
openedAtstringISO 8601; primeira abertura.
{
  "event": "email.opened",
  "workspaceId": "clxxworkspace123",
  "instanceId": "",
  "timestamp": "2025-02-20T14:00:30.000Z",
  "data": {
    "emailId": "clxxemail123",
    "to": "cliente@example.com",
    "from": "noreply@seudominio.com",
    "status": "OPENED",
    "openedAt": "2025-02-20T14:00:30.000Z"
  }
}
email.clicked
dataTipoDescrição
emailIdstringID do e-mail.
tostringDestinatário.
fromstringRemetente.
statusstring"CLICKED".
clickedAtstringISO 8601; primeiro clique em link.
{
  "event": "email.clicked",
  "workspaceId": "clxxworkspace123",
  "instanceId": "",
  "timestamp": "2025-02-20T14:00:45.000Z",
  "data": {
    "emailId": "clxxemail123",
    "to": "cliente@example.com",
    "from": "noreply@seudominio.com",
    "status": "CLICKED",
    "clickedAt": "2025-02-20T14:00:45.000Z"
  }
}
email.failed
dataTipoDescrição
emailIdstringID do e-mail.
tostring[]Destinatários.
fromstringRemetente.
statusstring"FAILED".
errorstringMensagem de erro.
{
  "event": "email.failed",
  "workspaceId": "clxxworkspace123",
  "instanceId": "",
  "timestamp": "2025-02-20T14:00:00.000Z",
  "data": {
    "emailId": "clxxemail123",
    "to": ["cliente@example.com"],
    "from": "noreply@seudominio.com",
    "status": "FAILED",
    "error": "Invalid address"
  }
}
email.complained
dataTipoDescrição
emailIdstringID do e-mail.
tostringDestinatário.
fromstringRemetente.
statusstring"COMPLAINED".
{
  "event": "email.complained",
  "workspaceId": "clxxworkspace123",
  "instanceId": "",
  "timestamp": "2025-02-20T14:00:10.000Z",
  "data": {
    "emailId": "clxxemail123",
    "to": "cliente@example.com",
    "from": "noreply@seudominio.com",
    "status": "COMPLAINED"
  }
}
email.cancelled
dataTipoDescrição
emailIdstringID do e-mail.
tostringDestinatário.
fromstringRemetente.
statusstring"CANCELLED".
{
  "event": "email.cancelled",
  "workspaceId": "clxxworkspace123",
  "instanceId": "",
  "timestamp": "2025-02-20T14:00:00.000Z",
  "data": {
    "emailId": "clxxemail123",
    "to": "cliente@example.com",
    "from": "noreply@seudominio.com",
    "status": "CANCELLED"
  }
}

3.4 Push

instanceId vem vazio em todos os eventos de push. Dados vão em data (pushId, deviceId, appId, status, etc.).

Escopos disponíveis

EscopoDescriçãoQuando é disparado
push.sentPush aceito e enviado.Após envio bem-sucedido (worker).
push.deliveredPush entregue no dispositivo.SW/navegador reporta via POST /v1/push/events/delivered.
push.clickedUsuário clicou na notificação.Cliente reporta via POST /v1/push/events/click.
push.failedPush falhou no envio.Falha no worker (subscription inválida, etc.).
push.cancelledPush agendado cancelado.API ou app (POST cancel).

Retorno completo por evento

push.sent
dataTipoDescrição
pushIdstringID do push no Notifique.
deviceIdstringID do dispositivo (subscription).
appIdstringID do app de push.
statusstring"SENT".
{
  "event": "push.sent",
  "workspaceId": "clxxworkspace123",
  "instanceId": "",
  "timestamp": "2025-02-20T14:00:00.000Z",
  "data": {
    "pushId": "clxxpush123",
    "deviceId": "clxxdevice456",
    "appId": "clxxapp789",
    "status": "SENT"
  }
}
push.delivered
dataTipoDescrição
pushIdstringID do push.
deviceIdstringID do dispositivo.
appIdstringID do app.
statusstring"DELIVERED".
deliveredAtstringData/hora da entrega (ISO 8601).
{
  "event": "push.delivered",
  "workspaceId": "clxxworkspace123",
  "instanceId": "",
  "timestamp": "2025-02-20T14:00:05.000Z",
  "data": {
    "pushId": "clxxpush123",
    "deviceId": "clxxdevice456",
    "appId": "clxxapp789",
    "status": "DELIVERED",
    "deliveredAt": "2025-02-20T14:00:05.000Z"
  }
}
push.clicked
dataTipoDescrição
pushIdstringID do push.
deviceIdstringID do dispositivo.
appIdstringID do app.
statusstring"CLICKED".
clickedAtstringData/hora do clique (ISO 8601).
{
  "event": "push.clicked",
  "workspaceId": "clxxworkspace123",
  "instanceId": "",
  "timestamp": "2025-02-20T14:00:05.000Z",
  "data": {
    "pushId": "clxxpush123",
    "deviceId": "clxxdevice456",
    "appId": "clxxapp789",
    "status": "CLICKED",
    "clickedAt": "2025-02-20T14:00:05.123Z"
  }
}
push.failed
dataTipoDescrição
pushIdstringID do push.
deviceIdstringID do dispositivo.
appIdstringID do app.
statusstring"FAILED".
errorstringMensagem de erro.
{
  "event": "push.failed",
  "workspaceId": "clxxworkspace123",
  "instanceId": "",
  "timestamp": "2025-02-20T14:00:00.000Z",
  "data": {
    "pushId": "clxxpush123",
    "deviceId": "clxxdevice456",
    "appId": "clxxapp789",
    "status": "FAILED",
    "error": "Subscription expired"
  }
}
push.cancelled
dataTipoDescrição
pushIdstringID do push.
deviceIdstringID do dispositivo.
appIdstringID do app.
statusstring"CANCELLED".
{
  "event": "push.cancelled",
  "workspaceId": "clxxworkspace123",
  "instanceId": "",
  "timestamp": "2025-02-20T14:00:00.000Z",
  "data": {
    "pushId": "clxxpush123",
    "deviceId": "clxxdevice456",
    "appId": "clxxapp789",
    "status": "CANCELLED"
  }
}

4. Comportamento do worker de webhooks

  • Eventos são enfileirados.
  • Timeout por requisição: 10 s. Retentativas: 5 min, 30 min, 2 h (até 4 tentativas).
  • Após 4 falhas consecutivas, o webhook pode ser marcado como failing.