WhatsApp Coexistence Webhooks
WhatsApp Coexistence adds customer-facing events for messages sent from the WhatsApp Business app and for changes to the coexistence connection. Return an HTTP2xx response promptly. Verify every webhook using the Telnyx webhook signature before processing it. See Receiving webhooks.
Event summary
Meta also sends
history and smb_app_state_sync synchronization webhooks. Telnyx validates and processes these internally. They are not forwarded to the customer webhook URL.
message.echo
message.echo represents a message sent from the WhatsApp Business app. It is outbound and includes origin: whatsapp_business_app.
message.echo is non-billable and does not open or extend the Cloud API customer service window. Avoid feeding it into inbound autoresponse, opt-out, or bot workflows.
Handle message echoes
Python
Node.js
whatsapp.account.update
Coexistence lifecycle changes arrive as whatsapp.account.update. Inspect data.payload.event to determine the transition.
Treat lifecycle events as idempotent. Duplicate or delayed Meta events can arrive, and Telnyx fences stale transitions against the current connection lifecycle.
Meta may include
disconnection_info with a PARTNER_REMOVED event. The current Telnyx customer webhook does not expose that object, so integrations must use data.payload.event as the lifecycle signal.
Message edits and revocations
WhatsApp user edits and revocations are delivered through the standardmessage.received event. Inspect data.payload.body.type to distinguish them. Telnyx does not emit separate message.edited or message.revoked event names.
Edited message
An edit can apply to text or to a media caption. Meta accepts edits for up to 15 minutes after the original message was sent.Revoked message
A user can revoke a message for up to two days after it was sent.original_message_id is the Telnyx message UUID. If the mapping is unavailable, the field can contain the original Meta wamid, so treat it as an opaque string.
Delivery and retry handling
- Return an HTTP
2xxresponse before starting long-running work. - Deduplicate message echoes using
data.payload.idordata.payload.body.foreign_id. - Persist lifecycle processing by WABA ID and event type.
- Do not assume that Meta events arrive in chronological order.
- Keep unknown fields and enum values when storing the payload so integrations remain compatible with future additions.
Unsupported or internal events
history and smb_app_state_sync are synchronization protocol events. Telnyx consumes them internally and does not deliver them as customer webhook events.
Messages sent from unsupported companion clients might not generate message.echo. Treat the customer webhook stream as best-effort visibility, not a complete archive of Business app activity.