Developer center

Webhook Events

Subscribe to HTTPS endpoints and receive real-time notifications for messages and campaigns. List available events with GET /api/webhooks/events (no auth).

Delivery headers

  • X-Webhook-Event — canonical event name
  • X-Webhook-Signature — HMAC-SHA256 of the JSON body
  • X-Webhook-Delivery-Id — unique delivery UUID
  • X-Webhook-Attempt — retry attempt number
message_receivedmessages

Inbound message from a contact.

{
  "event": "message_received",
  "timestamp": "2026-01-01T12:00:00.000Z",
  "data": {
    "sessionId": "uuid",
    "from": "+15551234567",
    "text": "Hello",
    "messageId": "msg-id"
  }
}
message_sentmessages

Outbound message accepted for delivery.

{
  "event": "message_sent",
  "timestamp": "2026-01-01T12:00:00.000Z",
  "data": {
    "sessionId": "uuid",
    "to": "+15551234567",
    "messageId": "msg-id"
  }
}
message_deliveredmessages

Delivery receipt for an outbound message.

{
  "event": "message_delivered",
  "timestamp": "2026-01-01T12:00:00.000Z",
  "data": {
    "sessionId": "uuid",
    "messageId": "msg-id",
    "deliveredAt": "2026-01-01T12:00:00.000Z"
  }
}
message_readmessages

Read receipt for an outbound message.

{
  "event": "message_read",
  "timestamp": "2026-01-01T12:00:00.000Z",
  "data": {
    "sessionId": "uuid",
    "messageId": "msg-id",
    "readAt": "2026-01-01T12:00:00.000Z"
  }
}
message_failedmessages

Outbound message could not be sent.

{
  "event": "message_failed",
  "timestamp": "2026-01-01T12:00:00.000Z",
  "data": {
    "sessionId": "uuid",
    "messageId": "msg-id",
    "error": "Session not connected"
  }
}
campaign_progresscampaigns

A campaign recipient was processed.

{
  "event": "campaign_progress",
  "timestamp": "2026-01-01T12:00:00.000Z",
  "data": {
    "campaignId": "uuid",
    "recipientId": "uuid",
    "phone": "+15551234567",
    "status": "sent"
  }
}