In brief
- Every delivery is a POST
application/jsonto the URL you registered. message.*andinstance.*events are WhatsApp only (Telegram usestelegram.*).- Enable only the events your integration needs.
- Reply 2xx quickly; heavy work goes to a queue on your side.
What the POST looks like
Standard envelope for every event:
Headers:
X-Notifique-Signature, X-Notifique-Timestamp, X-Workspace-Id.
What your server should return
Slow processing? Return 200 immediately and process in the background. Taking more than 10 seconds counts as a timeout and the event may be sent again.
X-Notifique-Signature and a recent timestamp. Details: Webhook security.
Event reference
Use these events when integrating bots, support, ERP, or automation on WhatsApp.The
message.* names are WhatsApp only. Telegram uses telegram.*: Telegram events.Messages you send
Messages you receive
Inbound only fires if enabled under Settings → Received messages (store and/or webhook). The legacy dashboard name
message.received still works: the body uses whatsapp.received.Instance (number connection)
The Quick Start refresh-code step can use this webhook instead of polling (
instance.qrcode).
Calls (whatsapp.call.*)
Place-and-speak WhatsApp calls. Do not confuse with voice.call.* (PSTN voice) or message.*.
completed and hung_up both leave the CDR as COMPLETED; the difference is how the call ended. Use the event (or the whatsappCall automation trigger with the matching phase) to branch.
Guide: Calls.
Payload per event
Full POST body. The envelope (event, ids, timestamp) matches the example above; below is what changes in data.
message.sent
message.sent
message.delivered
message.delivered
message.read
message.read
message.clicked
message.clicked
Fired on the first click on a short link in the send (workspace with short links enabled).
message.failed
message.failed
whatsapp.received
whatsapp.received
message.responded
message.responded
message.deleted
message.deleted
message.edited
message.edited
newContent may be null when unavailable.message.updated
message.updated
message.cancelled
message.cancelled
whatsapp.inbound.edited
whatsapp.inbound.edited
whatsapp.inbound.deleted
whatsapp.inbound.deleted
instance.qrcode
instance.qrcode
instance.connected
instance.connected
phoneNumber may be null in some cases.instance.disconnected
instance.disconnected
instance.connecting
instance.connecting
whatsapp.call.initiated
whatsapp.call.initiated
whatsapp.call.answered
whatsapp.call.answered
whatsapp.call.completed
whatsapp.call.completed
hangupReason: completed). If someone hung up mid-call, the event is whatsapp.call.hung_up.whatsapp.call.hung_up
whatsapp.call.hung_up
hangupReason is typically hangup, user_hangup, or equivalent aliases. CDR status remains COMPLETED.whatsapp.call.failed / no_answer / rejected
whatsapp.call.failed / no_answer / rejected
Next steps
- Quick Start: connect and send
- API Key scopes: permissions to read inbound
- Webhooks (guide): create endpoint and test

