API Reference
Webhooks API
Manage Vobiz outbound webhook subscriptions and understand the inbound Meta callback - create, list, and delete subscriptions to receive WhatsApp inbound messages, delivery status, and call events on your server.
POST
Webhooks API
Two separate webhook systems work together in a Vobiz WhatsApp integration. See the Webhooks overview for the conceptual split.
All endpoints are under the base URL
When you register the webhook in your Meta App, Meta sends a
Meta
After Vobiz accepts an inbound Meta event, it fans it out to your registered subscriptions as an outbound webhook.
Register an HTTPS endpoint to receive events.
Returns the webhook subscriptions for your account. The
Remove a subscription by its UUID. Vobiz stops delivering events to that URL.
Body — the common envelope (full reference):
The only
| System | Direction | Purpose |
|---|---|---|
| Inbound | Meta → Vobiz | Meta delivers raw WhatsApp Cloud API events to a Vobiz endpoint. Platform plumbing you set once in your Meta App. |
| Outbound | Vobiz → your server | Vobiz forwards a signed event envelope to the endpoint URL you register here. |
https://api.vobiz.ai/api/v1/messaging, except the inbound Meta callback which is at https://api.vobiz.ai/api/v1/webhooks/whatsapp.
Inbound (Meta → Vobiz)
These endpoints are called by Meta, not by your application. You normally configure the callback URL and verify token once inside your Meta App. The examples below are for understanding and local simulation only.Verify webhook (challenge-response)
GET with the standard hub.* query params. Vobiz echoes the hub.challenge back as text/plain 200 only when hub.verify_token matches the token configured on the Vobiz side. No auth header is used on this endpoint.
| Param | Description |
|---|---|
hub.mode | Always subscribe. |
hub.verify_token | The verify token you set. Must match the Vobiz-side token or the request is rejected with 403. |
hub.challenge | Random string Meta expects echoed back verbatim. |
Simulate Meta's verification
200 OK
Receive webhook (Meta callback)
POSTs the WhatsApp Cloud API event here. Meta signs the request with X-Hub-Signature-256: sha256=<hex HMAC-SHA256 of the raw body, keyed by your Meta App Secret>. Vobiz verifies that signature and enforces a replay window, rejecting stale or future-dated payloads. The body is the standard Meta envelope (object = whatsapp_business_account, entry[].changes[].value carrying messaging_product, metadata, and any of contacts[], messages[], statuses[], calls[]).
Simulate a delivery status callback
200 OK
Outbound (Vobiz → your server)
Register an HTTPS endpoint and a shared secret. Vobiz then delivers a signed event envelope to your endpoint for the three supported event types. See the Event Reference for envelope and payload shapes, and the overview for signature verification. Authentication (subscription management):X-Auth-ID: MA_XXXXXXXX, X-Auth-Token: <token>. Get credentials from console.vobiz.ai.
Create webhook subscription
| Field | Required | Description |
|---|---|---|
url | Yes | HTTPS endpoint that will receive event deliveries. |
secret | Yes | Shared secret used to sign deliveries (HMAC-SHA256 → X-Webhook-Signature). Store it securely — it is never returned in any response. |
cURL
201 Created
| Field | Type | Description |
|---|---|---|
id | string (UUID) | Subscription identifier. |
url | string | Your registered HTTPS endpoint. |
status | string | active or inactive. |
created_at | string (RFC3339, UTC) | Creation timestamp. |
updated_at | string (RFC3339, UTC) | Last-update timestamp. |
List webhook subscriptions
secret is never included.
cURL
200 OK
Delete webhook subscription
cURL
204 No Content
Delivery to your endpoint
When an event fires, Vobiz sends aPOST to your registered url with:
Headers
| Header | Description |
|---|---|
X-Webhook-Signature | Hex-encoded HMAC-SHA256 of the exact raw request body, keyed by your subscription secret. No sha256= prefix — just the hex digest. |
X-Webhook-Event | The event type, equal to the body’s event_type. |
Content-Type | application/json. |
event_type values emitted are message.inbound, message.status (with status ∈ sent/delivered/read/failed), and call.<event> (e.g. call.connect, call.terminate).