Inbox webhooks
Events for messages, conversations, reactions, comments, and reviews received in the inbox.
Events for everything that lands in (or leaves) the inbox: direct messages and their lifecycle, conversations, emoji reactions, comments on tracked posts, and reviews. Delivery, retries, idempotency, and signature verification work the same for every event and are covered in the webhooks overview.
Events
| Event | Description |
|---|---|
message.received | Fired when a new inbox message is received. |
message.sent | Fired when an outgoing message is sent from the inbox. |
conversation.started | Fired once when a new conversation begins between an account and a contact, on any DM platform. |
message.edited | Fired when a sender edits a previously-sent message. |
message.deleted | Fired when a sender deletes (unsends) a message. |
message.delivered | Fired when an outgoing message is delivered to the recipient. |
message.read | Fired when an outgoing message is read by the recipient. |
message.failed | Fired when an outgoing message fails to deliver (WhatsApp only). |
reaction.received | Fired when a participant adds or removes an emoji reaction (WhatsApp, Telegram). |
comment.received | Fired when a new comment is received on a tracked post. |
review.new | Fired when a new review is posted on a connected account. |
review.updated | Fired when a review is edited or a reply is added. |
message.received
Fired when a new inbox message is received. Subscribe with Create webhook settings or Update webhook settings.
Stable webhook event ID
"message.received"The conversation context included in inbox webhook payloads.
The account context included in inbox webhook payloads.
Interactive message metadata (present when message is a quick reply tap, postback button tap, or inline keyboard callback)
date-timeResponse Body
message.sent
Fired when an outgoing message is sent from the inbox. Subscribe with Create webhook settings or Update webhook settings.
Stable webhook event ID
"message.sent"The conversation context included in inbox webhook payloads.
The account context included in inbox webhook payloads.
date-timeResponse Body
conversation.started
Fired once when a new conversation begins between one of your connected accounts and a contact, in either direction. Platform-agnostic — covers every DM platform (Instagram, Messenger/Facebook, Telegram, WhatsApp, Twitter, Reddit, Bluesky) with a single subscription. Naturally deduped: a given conversation only fires this event the very first time it appears.
Subscribe with Create webhook settings or Update webhook settings.
Stable webhook event ID
"conversation.started"The account context included in inbox webhook payloads.
When the conversation document was created.
date-timedate-timeResponse Body
message.edited
Fired when the sender edits a previously-sent message. Supported on Instagram, Facebook Messenger, and Telegram. The payload carries the full editHistory (oldest prior version first) so you can reconstruct every version of the message. message.text is the latest version. Subscribe with Create webhook settings or Update webhook settings.
"message.edited"The message object included in inbox webhook payloads.
Prior versions of the message, oldest first.
Total number of edits applied to this message.
When the most recent edit happened.
date-timeThe conversation context included in inbox webhook payloads.
The account context included in inbox webhook payloads.
date-timeResponse Body
message.deleted
Fired when the sender deletes (unsends) a message. Supported on Instagram (incoming unsend) and WhatsApp (when the business deletes an outgoing message via the Cloud API). The payload retains the pre-delete text and attachments so API consumers can access the original content, useful for moderation, compliance, or archival. The Zernio dashboard UI does not show this content. Subscribe with Create webhook settings or Update webhook settings.
"message.deleted"The message object included in inbox webhook payloads.
date-timeThe conversation context included in inbox webhook payloads.
The account context included in inbox webhook payloads.
date-timeResponse Body
message.delivered
Fired when an outgoing message is delivered to the recipient. Supported on WhatsApp and Facebook Messenger. Instagram doesn't emit a separate delivery event (only message.read). Subscribe with Create webhook settings or Update webhook settings.
"message.delivered" | "message.read" | "message.failed"The message object included in inbox webhook payloads.
When the platform reported this status.
date-timePopulated only on message.failed.
The conversation context included in inbox webhook payloads.
The account context included in inbox webhook payloads.
date-timeResponse Body
message.read
Fired when an outgoing message is read by the recipient. Supported on WhatsApp, Facebook Messenger, and Instagram. Subscribe with Create webhook settings or Update webhook settings.
"message.delivered" | "message.read" | "message.failed"The message object included in inbox webhook payloads.
When the platform reported this status.
date-timePopulated only on message.failed.
The conversation context included in inbox webhook payloads.
The account context included in inbox webhook payloads.
date-timeResponse Body
message.failed
Fired when an outgoing message fails to deliver. Currently only emitted for WhatsApp (Messenger, Instagram, and Telegram don't expose per-message failure via webhook). The payload error object includes code, title, and message from the platform, useful for categorising failures (e.g. 131026 for "recipient phone not reachable"). Subscribe with Create webhook settings or Update webhook settings.
"message.delivered" | "message.read" | "message.failed"The message object included in inbox webhook payloads.
When the platform reported this status.
date-timePopulated only on message.failed.
The conversation context included in inbox webhook payloads.
The account context included in inbox webhook payloads.
date-timeResponse Body
reaction.received
Fired when a participant adds or removes an emoji reaction on a message. Supported on WhatsApp and Telegram (Telegram requires the bot to be an administrator in the chat; reactions in private chats are never delivered to bots). Available on the Usage plan (or AppSumo with the Inbox add-on).
This is distinct from message.received: a reaction is not a message. Branch on it separately so a 👍 isn't treated as an inbound DM.
reaction.actionisaddedorremoved.reaction.emojiis the emoji reacted with. On WhatsApp removals the platform does not report which emoji was removed, so this may be an empty string whenactionisremoved.reaction.platformMessageIdis the platform-native id of the reacted-to message and is always present.reaction.messageIdis the Zernio message id of that message when it can be resolved.
Subscribe with Create webhook settings or Update webhook settings.
Stable webhook event ID
"reaction.received"The conversation context included in inbox webhook payloads.
The account context included in inbox webhook payloads.
date-timeResponse Body
comment.received
Fired when a new comment is received on a tracked post. Subscribe with Create webhook settings or Update webhook settings.
The payload includes an optional comment.ad object when the comment was made on paid content. For Instagram this carries ad.id and ad.title directly from the Meta webhook. For Facebook it carries ad.promotionStatus ("active" for boosted organic posts, "ineligible" for dark post creatives). The field is absent for comments on organic posts that are not currently promoted, so clients can filter ad-driven comments with a simple if (comment.ad) { ... } check.
Stable webhook event ID
"comment.received"date-timeResponse Body
review.new
Fired when a new review is posted on a connected account. Currently supported for Google Business Profile (real-time via Pub/Sub). Available on the Usage plan (or AppSumo with the Inbox add-on). Subscribe with Create webhook settings or Update webhook settings.
Stable webhook event ID
"review.new"Review data shared by review.new and review.updated payloads.
date-timeResponse Body
review.updated
Fired when a review changes: the reviewer edits their text or rating, or a reply is added (via the API or directly through the Google Business dashboard). Available on the Usage plan (or AppSumo with the Inbox add-on). The payload has the same shape as review.new; when a reply is present, review.hasReply is true and review.reply is populated. Subscribe with Create webhook settings or Update webhook settings.
Stable webhook event ID
"review.updated"Review data shared by review.new and review.updated payloads.
date-time