| System | Direction | Who configures it | Purpose |
|---|---|---|---|
| Inbound | Meta → Vobiz | Platform plumbing (set once in your Meta App) | Meta delivers raw WhatsApp Cloud API events to Vobiz. |
| Outbound | Vobiz → your server | App developers | Vobiz forwards events to the HTTPS endpoint you register. |
Inbound (Meta → Vobiz)
Meta sends WhatsApp Cloud API events to a single Vobiz endpoint:X-Hub-Signature-256 requirement, and the Meta payload shape.
Outbound (Vobiz → your server)
This is what you build against. You register an HTTPS endpoint and a shared secret; Vobiz thenPOSTs a signed envelope to your endpoint whenever a relevant WhatsApp event occurs.
How it works
- Register a subscription —
POST /api/v1/messaging/webhookswith yoururland asecret. - An event occurs — a customer messages you, a message you sent changes delivery status, or a call event happens.
- Vobiz POSTs to your
url— with the common envelope as the JSON body, anX-Webhook-Signatureheader, and anX-Webhook-Eventheader. - Your server verifies and responds — validate the signature, then return
200quickly and process asynchronously.
Base URL
All subscription-management endpoints live under:Authentication
Subscription-management requests authenticate with your account API credentials (get them from console.vobiz.ai):X-Webhook-Signature HMAC, computed with the secret you supplied (see below).
Event Types
Vobiz emits exactly three outbound event types. The full payloads are in the Event Reference.message.inbound— an end customer sent a message to your WhatsApp number.message.status— a delivery-status update for a message you sent. Thestatusfield is one ofsent,delivered,read, orfailed.call.<event>— a WhatsApp Business Calling lifecycle event, e.g.call.connect,call.status_change,call.terminate.
delivered and read are values of the status field inside message.status, not separate events. There is no message.delivered, message.read, message.sent, message.failed, contact.updated, or campaign.completed webhook.Security
Verifying the signature
Every outbound delivery includes anX-Webhook-Signature header. Its value is the hex-encoded HMAC-SHA256 of the exact raw request body, keyed by the secret you registered with the subscription. There is no sha256= prefix — it is just the hex digest.
To verify:
- Read the raw request body (do not re-serialize the parsed JSON — HMAC is over the exact bytes).
- Compute
HMAC-SHA256(raw_body, your_secret)and hex-encode it. - Constant-time compare against the
X-Webhook-Signatureheader. Reject on mismatch.
Python (Flask)
Node.js (Express)
Additional notes
- HTTPS only — your
urlmust be an HTTPS endpoint. - Replay protection (inbound leg) — on the Meta → Vobiz leg, Vobiz validates
X-Hub-Signature-256and enforces a replay window, rejecting stale or future-dated payloads. - Deduplicate on the envelope’s
event_id— deliveries can be retried.
Best Practices
- Respond quickly — return
200within a few seconds. Do heavy work asynchronously in a queue so you don’t hit the delivery timeout. - Verify every request — never trust a request to your webhook URL without a valid
X-Webhook-Signature. - Deduplicate — use
event_idto ignore repeated deliveries. - Route on
X-Webhook-Event— switch on the header (which equalsevent_type) before parsing.
Real-time UI stream (optional)
Separately from outbound webhooks, Vobiz exposes a WebSocket for building a live inbox UI:message.created, message.updated, call.incoming, call.status) for an authenticated session. This is for interactive front-ends and is not a substitute for webhooks in server-to-server integrations.