---
title: "Webhook payload examples"
description: "Example JSON bodies Wazapin POSTs to your webhook URL."
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.wazapin.id/llms.txt
> Use this file to discover all available pages before exploring further.

# Webhook payload examples

Wazapin delivers events to URLs you configure under **Developer → Webhooks**. Each request is signed — verify first. See [Webhook signature examples](/api/webhook-signature-examples) and [Webhooks](/api/webhooks).

:::info
**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](/api/message-lifecycle-idempotency).

## Inbound text (`message.new`)

Task guide: [Handle inbound text](/guides/handle-inbound-text)

User sent a text message to your WhatsApp number.

:::details[Example body]
```json
{
  "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](/guides/handle-interactive-replies)

User tapped a quick-reply button from your [buttons](/getting-started/send-buttons) message.

:::details[Example body]
```json
{
  "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](/guides/handle-interactive-replies)

User picked a row from a [list](/getting-started/send-list) message.

:::details[Example body]
```json
{
  "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](/getting-started/request-user-location), the user may share coordinates.

:::details[Example body]
```json
{
  "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](/guides/handle-delivery-status)

When an outbound message moves through `sent`, `delivered`, `read`, or `failed`:

:::details[Example body]
```json
{
  "message_id": "9f1fd66d-c37a-4b50-a8c2-b4dca523f9c8",
  "conversation_id": "0f89b0f9-74b4-44f9-b9b6-48f6d4de57aa",
  "status": "delivered",
  "organization_id": "org_123"
}
```

:::note
Subscribe to `message.status_update` on your endpoint. Status values match message records from `GET /v1/messages/{messageID}`.
:::
:::

## Related

- [Example: handle webhook events](/recipes/handle-webhook-events)
- [Webhooks](/api/webhooks)

Source: https://docs.wazapin.id/api/inbound-webhook-examples/index.mdx
