Webhook and WebSocket share the same envelope and the same catalog of events. The only difference is the delivery channel,Documentation Index
Fetch the complete documentation index at: https://docs.ryzeapi.cloud/llms.txt
Use this file to discover all available pages before exploring further.
data is identical.
This page documents the 6 types: message.exchange, message.status, call.update, group.flow, instance.state and label.update.
Envelope
event name in the events field of the config. Empty = all types.
Filtering and routing
byEvents=true (webhook only), the event name is appended to the URL:
- Config:
url: "https://app/wh",byEvents: true - Delivery:
POST https://app/wh/message.exchange
message.exchange
Messages sent and received (text, media, sticker, document, audio, poll, contact, location, etc.), edits and revocations.
Payload
Conditional fields
Only the fields relevant to the message type are populated. Edits haveedit populated; revocations arrive with type: "message_revoke" in data.message.type.
chat.isCommunity appears only when true, indicating the chat is the announcement channel (parent / announcement channel) of a WhatsApp community. Subgroups linked to a community keep type: "group" and do not include the isCommunity field. In regular groups and DMs the field is also omitted.Example (image received)
message.status
Delivery receipts: delivered, read, played, etc.
Payload
status enum
| Value | Meaning |
|---|---|
delivered | Message reached the recipient’s device. |
read | Recipient read it (read receipts on). |
played | Audio/voice note was played. |
sender | Internal echo (the source itself reporting delivery). |
read_self | The user themselves marked it as read on another device. |
played_self | The user themselves played it on another device. |
retry | Server requested redelivery (transient). |
inactive | Recipient has been offline too long. |
server_error | Generic WhatsApp server error. |
messageSenderin groups: JID of the original message author (relevant when someone reads a message from another participant).chat.isCommunityfollows the same rule asmessage.exchange: present andtrueonly when the chat is the announcement channel of a community.
call.update
Call events: offer, accepted, rejected, terminated, latency.
Payload
type enum
| Value | When it fires |
|---|---|
offer | Call received/sent (initial ring). |
accepted | Remote side answered. |
rejected | Remote side rejected. |
terminated | Call ended, duration in seconds is populated. |
notification | Contextual call notification (e.g., missed group call). |
latency | Latency metric during the call (latency in ms, latencyStatus). |
group.flow
Group changes: members, metadata, settings.
Payload, participant change
Metadata subtypes
type | Meaning |
|---|---|
name | Group name changed |
topic | Description changed |
locked / unlocked | Members can/cannot edit info |
announce / not_announce | Members can/cannot send messages |
ephemeral / not_ephemeral | Ephemeral messages on/off |
invite | Invite link generated |
link / unlink | Subgroup linked/unlinked from community |
delete | Group deleted |
membership_approval | Approval mode for new members changed |
suspended / unsuspended | Group suspended/reactivated by WhatsApp |
instance.state
Changes in the instance’s own state (connection, QR, ban, pairing).
Payload
state enum
| State | Meaning | Extra fields populated |
|---|---|---|
connected | Active session, ready to send/receive. | — |
disconnected | Disconnected (transient, usually reconnects on its own). | — |
logged_out | Session invalidated (requires new connect). | reason |
stream_replaced | Another session took over (multi-device conflict). | — |
temp_banned | Temporary ban applied by WhatsApp. | expireAt, expireInSeconds, reason |
client_outdated | The WhatsApp Web version in use is outdated, contact support. | message |
connect_failure | Failure during connection. | reason, reasonCode |
stream_error | WhatsApp stream error. | errorMsg |
cat_refresh_error | Failed to refresh credentials (cat). | errorMsg |
qr_ready | New QR available for pairing. | codes[], onConnect |
pair_success | Pairing completed. | jid, platform |
pair_error | Error during pairing. | errorMsg |
qr_scanned_no_multidevice | QR scanned but the target device does not support multidevice. | — |
keepalive_timeout | Unstable connection, keepalive not answered. | — |
keepalive_restored | Connection stabilized after keepalive_timeout. | — |
manual_reconnect | Reconnection triggered manually via REST. | — |
label.update
Label edits/associations (WhatsApp Business labels).
Payload
type × action combinations
type | valid action | Extra fields |
|---|---|---|
edit | updated, deleted | name, color, labelType, isActive, isImmutable, orderIndex, deleted |
chat | add, remove | chatJid, labeled |
message | add, remove | chatJid, messageId |
Events not emitted (internal)
Captured by thewhatsmeow handler but not propagated via webhook/WS:
*events.Picture, profile picture change (logged only).*events.FBMessage, Facebook Business (logged only).*events.HistorySync, history sync (processed and stored in DB).
References
Configure webhook
Filter events via
events[] in the config.Configure WebSocket
Same filter syntax as the webhook.
Connect via WebSocket
Receive events in real time.
Events overview
Webhook vs WebSocket comparison.