API Reference

Webhooks

Real-time HTTPS POST notifications when messages arrive, delivery status changes, or Device/QR channels connect or disconnect.

How delivery works

  • Transport — HTTPS POST with JSON body
  • Queue — Asynchronous with automatic retries
  • Timeout — 8s per attempt
  • Retries — Up to 5 attempts with exponential backoff (60s → 5m → 15m → 1h → 2h)
  • Auto-disable — After 10 consecutive failures the endpoint is disabled until re-enabled
Unified across channels Cloud API and Device/QR share the same event names and payload format. Register once via POST /v1/webhooks or the dashboard.

Events

Subscribe to exact names (message.received) and/or families (message.*, device.*). Leave events empty or null to receive all events. There is no message.created event — inbound is message.received.

EventChannelsDescription
message.* cloud, device Family wildcard — matches message.received, message.sent, message.delivered, message.read, and message.failed.
message.received cloud, device A new inbound message was received (Cloud API or Device/QR channel).
message.sent cloud, device An outbound message was accepted and sent from your account.
message.delivered cloud, device An outbound message was delivered to the recipient device.
message.read cloud, device An outbound message was read by the recipient.
message.failed cloud, device An outbound message failed to send or deliver.
device.* device, cloud Family wildcard — matches device.connected, device.disconnected, and device.status_changed.
device.connected device A Device/QR channel connected successfully (WhatsApp linked).
device.disconnected device A Device/QR channel lost its WhatsApp connection.
device.status_changed cloud, device Any channel connection-status transition (payload includes from_status and to_status). Fired in addition to device.connected/device.disconnected.
ticket.created cloud, device A tenant ticket was created.
ticket.updated cloud, device A tenant ticket was updated.
ticket.closed cloud, device A tenant ticket was closed.
ticket.reopened cloud, device A tenant ticket was reopened.
ticket.csat cloud, device A CSAT score was recorded on a tenant ticket.
template.created cloud A Meta template was created and submitted.
template.submitted cloud A Meta template was submitted for review.
template.status.updated cloud Meta updated a template status.
template.rejected cloud Meta rejected a template.
template.approved cloud Meta approved a template.
template.deleted cloud A Meta template was deleted.
template.sync.failed cloud Template sync with Meta failed.

Request envelope

JSON
{
  "event": "message.received",
  "timestamp": "2026-07-10T12:00:00+03:00",
  "data": { }
}
FieldTypeDescription
eventstringEvent name from the table above
timestampISO 8601When Washeej generated this delivery
dataobjectEvent payload — structure depends on event type

Real-time vs webhooks

MechanismAudienceUse case
Webhooks Your server Message events, delivery status, device connection
Pusher (WebSocket) Washeej web inbox only Live UI updates — not part of the public API