url). For the inbound Meta → Vobiz contract and how to register a subscription, see the Webhooks overview and the Webhooks API.
All outbound webhooks are HTTP POST requests with Content-Type: application/json, signed with the X-Webhook-Signature header (see Verifying signatures).
Common Envelope
Every outbound webhook body is the same envelope. Only thepayload object differs per event type.
Envelope shape
X-Webhook-Event request header carries the same value as event_type, so you can route on the header before parsing the body.
There are exactly three outbound event types:
message.inbound, message.status, and call.<event>. There is no separate message.delivered, message.read, message.sent, or message.failed event - those are delivery states reported inside message.status.message.inbound
An end customer sent a message to your WhatsApp number. This is the event you build conversational experiences and auto-replies on. Thepayload contains the WhatsApp Cloud API change value: the channel metadata, the sender in contacts[], and the message in messages[] (with the WhatsApp message id wamid and the type-specific content).
message.inbound
Message types
Themessages[].type field reflects the WhatsApp message type, e.g. text, image, video, audio, document, location, contacts, button, interactive. Text content is in text.body; media and interactive messages carry their own type-specific object alongside.
message.status
A delivery-status update for a message you sent. Thepayload contains the change value with a statuses[] array; each entry has the WhatsApp message id (id = the wamid returned when you sent the message), the recipient_id, and a status.
status is one of:
delivered and read are values of status inside a single message.status event - they are not separate event types. Use the id to correlate the update back to the message you sent.message.status
call.<event>
WhatsApp Business Calling lifecycle events. Theevent_type suffix mirrors Meta’s call event, so values you may receive include:
call.connect- a call is being set up (carries the SDP offer in the session).call.status_change- the call status changed (e.g. ringing → accepted).call.terminate- the call ended.
payload contains the change value with a calls[] array. Each call entry includes id, from, to, event, status, direction, and (for connect) a session with the SDP.
call.connect
Handling tips
- Deduplicate on
event_id- Vobiz may retry a delivery, and the underlying WhatsApp event can repeat. - Verify the signature on every request before trusting the body (see the overview).
- Respond fast - return
200quickly and process asynchronously; Vobiz uses a short per-delivery timeout.