Wazapin delivers events to URLs you configure under Developer → Webhooks. Each request is signed — verify first. See Webhook signature examples and Webhooks.
Event type (for example message.new) is determined by your endpoint subscription and delivery metadata, not by a top-level event_type field on every body. The JSON body contains the fields below.
Deduplicate using the svix-id (or webhook-id) header on each delivery. See Message lifecycle and idempotency.

Inbound text (message.new)

Task guide: Handle inbound text User sent a text message to your WhatsApp number.
{
  "message_id": "9f1fd66d-c37a-4b50-a8c2-b4dca523f9c8",
  "conversation_id": "0f89b0f9-74b4-44f9-b9b6-48f6d4de57aa",
  "contact_id": "c1a2b3c4-d5e6-7890-abcd-ef1234567890",
  "channel_id": "wzp_abc123",
  "direction": "inbound",
  "from_phone": "6281234567890",
  "msg_type": "text"
}

Interactive button reply (message.new)

Task guide: Handle interactive replies User tapped a quick-reply button from your buttons message.
{
  "message_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "conversation_id": "0f89b0f9-74b4-44f9-b9b6-48f6d4de57aa",
  "channel_id": "wzp_abc123",
  "direction": "inbound",
  "from_phone": "6281234567890",
  "msg_type": "interactive"
}
Fetch full content with GET /v1/messages/{messageID} when you need button id / title.

Interactive list reply (message.new)

Task guide: Handle interactive replies User picked a row from a list message.
{
  "message_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
  "conversation_id": "0f89b0f9-74b4-44f9-b9b6-48f6d4de57aa",
  "direction": "inbound",
  "from_phone": "6281234567890",
  "msg_type": "interactive"
}

Location shared by user (message.new)

After a location request, the user may share coordinates.
{
  "message_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
  "conversation_id": "0f89b0f9-74b4-44f9-b9b6-48f6d4de57aa",
  "direction": "inbound",
  "from_phone": "6281234567890",
  "msg_type": "location"
}

Delivery status (message.status_update)

Task guide: Handle delivery status When an outbound message moves through sent, delivered, read, or failed:
{
  "message_id": "9f1fd66d-c37a-4b50-a8c2-b4dca523f9c8",
  "conversation_id": "0f89b0f9-74b4-44f9-b9b6-48f6d4de57aa",
  "status": "delivered",
  "organization_id": "org_123"
}
Subscribe to message.status_update on your endpoint. Status values match message records from GET /v1/messages/{messageID}.