---
title: "Webhook event catalog"
description: "Subscribable webhook event types, when they fire, and sample JSON bodies."
---

> 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 event catalog

Pick events when you configure **Developer → Webhooks** or `POST /v1/settings/developer/webhooks/endpoints` (`filterTypes` / enabled events in the app).

:::info
Deliveries are signed for verification (headers `svix-id`, `svix-signature`, …). The JSON **body** is a flat object per event — there is no universal `{ type, data }` wrapper. See [Webhooks](/api/webhooks) and [Webhook signature examples](/api/webhook-signature-examples).
:::

## Messaging (most integrators)

Subscribe to these for send/receive automation.

| Event | When it fires | Sample body (fields may include more in production) |
| --- | --- | --- |
| `message.new` | New message in a conversation (inbound from a contact, or certain outbound echoes). | See below |
| `message.sent` | Outbound message was sent from your workspace. | `conversation_id`, `message_id`, `channel_id` |
| `message.status_update` | Delivery/read/failed status changed for a sent message. | `message_id`, `status`, often `conversation_id`, `organization_id` |
| `conversation.updated` | Conversation metadata changed (assignment, status, preview, tags). | `conversation_id`, `status` |
| `contact.updated` | Contact profile linked to conversations was updated (also emitted on some creates). | `contact_id`, `name`, `organization_id` |
| `template.status_update` | WhatsApp template approval status changed. | `template_id`, `status` |

### `message.new` (inbound text)

```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"
}
```

### `message.status_update`

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

`status` values align with message records from `GET /v1/messages/{messageID}` (`sent`, `delivered`, `read`, `failed`, …).

More narrative examples: [Webhook payload examples](/api/inbound-webhook-examples).

:::details[Migrating from Kapso or YCloud?]
| Wazapin | Kapso (structured) | YCloud |
| --- | --- | --- |
| `message.new` | `whatsapp.message.received` | `whatsapp.inbound_message.received` |
| `message.sent` | `whatsapp.message.sent` | (outbound in `whatsapp.message.updated`) |
| `message.status_update` | `whatsapp.message.delivered` / `.read` / `.failed` | `whatsapp.message.updated` |

Wazapin uses **one** status event with a `status` field instead of splitting every transition into separate event types.
:::

## Commerce

| Event | When it fires |
| --- | --- |
| `commerce.order.updated` | Order or payment state changed in Commerce. |

```json
{
  "order_id": "ord_01h2",
  "order_no": "INV-1042",
  "status": "paid",
  "payment_status": "paid"
}
```

:::details[CRM events (advanced)]
Available if your product uses Wazapin CRM webhooks. Examples:

| Event | When it fires |
| --- | --- |
| `crm.record.created` | CRM record created (deals, people, companies, tasks, …). |
| `crm.record.updated` | CRM record updated. |
| `crm.record.deleted` | CRM record deleted. |
| `crm.deal.stage_changed` | Deal moved to another pipeline stage. |
| `crm.task.completed` | Task marked completed. |
| `crm.comment.created` / `crm.comment.deleted` | Comment on a record. |
| `crm.list.entry_added` / `crm.list.entry_removed` | List membership changed. |
| `crm.relationship.linked` / `crm.relationship.unlinked` | Record relationship changed. |
| `crm.import.committed` | Import job finished. |
| … | See app webhook settings for the full CRM list. |

Sample shape for record events:

```json
{
  "object_kind": "people",
  "record_id": "rec_01h2",
  "display_name": "Ayu Pratiwi",
  "organization_id": "org_01h2"
}
```
:::

## Related

- [Webhooks](/api/webhooks)
- [Webhook signature examples](/api/webhook-signature-examples)
- [Message lifecycle and idempotency](/api/message-lifecycle-idempotency)

:::note
If a live delivery differs from a sample, trust your first production payload and [Webhook payload examples](/api/inbound-webhook-examples). The full event list in the app is the source of truth for what you can subscribe to.
:::

Source: https://docs.wazapin.id/api/webhook-event-catalog/index.mdx
