When you configure a webhook, Zenzap sends HTTP POST requests to your URL when events occur. This page documents the payload structure for each event type.
Event Envelope
All webhook events share the same envelope structure:
Each webhook delivery includes these headers:
Signature Verification
When a secret is configured, verify webhooks by calculating:
Message Events
message.created
Sent when a new message is posted in a topic where your bot is a member.
message.updated
Sent when a message is edited or when voice message transcription completes.
message.deleted
Sent when a message is deleted.
Message Object
The message object in message events contains:
Message Types
Attachments
File attachments include a signed download URL:
Attachment URLs expire after 60 minutes. Download files promptly after receiving the webhook.
Voice Message Transcription
Voice messages (audio attachments) are automatically transcribed. The flow is:
message.created arrives with transcription.status: "Pending"
message.updated arrives when transcription completes
Transcription Status Values:
Mentions
To create mentions via External API message sending, use <@profileId> in message text.
Example request text:
In webhook payloads, mentions are returned under message.mentions.
message.mentionedProfiles may also be present as a compact ID list.
message.text keeps the mention token format (<@profileId>), while mentions[] provides resolved display names.
mentions fields:
Reply Messages
Messages that reply to other messages include:
Location Messages
address is optional and is included only when available.
Task Messages
Task snapshots are sent when tasks are created, updated, or their status changes:
Task Actions:
Reaction Events
reaction.added
reaction.removed
Same structure as reaction.added.
Member Events
member.added
member.removed
Topic Events
topic.updated
Sent when a topic’s name or description is changed.
Only changed fields are included in the payload. If only the description was updated, name would be absent.
Poll Vote Events
poll_vote.created
Sent when a user votes on a poll in a topic where your bot is a member.
poll_vote.deleted
Sent when a user removes their vote from a poll.
Retry & Auto-Pause Behavior
- Webhooks are retried up to 3 times with exponential backoff on failure
- After 10 consecutive failures, the webhook is automatically paused
- Re-enable a paused webhook via the Update webhook configuration endpoint