message.received▾
message.received
A contact sent you a message. This is the event that opens the 24-hour session window.
Fires for every inbound message on any connected number. Receiving one opens or extends the 24-hour customer service window, so this is also your cue that free-form replies are allowed.
message.received{
"id": "evt_01JZQ6F5H7K9M1P3R5T7V9XZBD",
"object": "event",
"type": "message.received",
"created_at": "2026-09-06T09:41:02.114Z",
"api_version": "2026-09-01",
"data": {
"object": "message",
"id": "msg_01JZQ3F8X2K7N4B6Y0R9M5TCWA",
"wamid": "wamid.SEJnTTIwMTAwNTU1MDEyM0ZRSUFFUmdT",
"conversation_id": "conv_01JZQ3F8X0QG7T2S4N8V1PZAKD",
"from": "+201005550123",
"to": "+15550100200",
"direction": "inbound",
"type": "text",
"text": { "body": "Is my order ready?" },
"contact": { "wa_id": "201005550123", "name": "Nadia Haddad" },
"session_expires_at": "2026-09-07T09:41:02.114Z",
"created_at": "2026-09-06T09:41:02.000Z"
}
}Notable fields
typeenumrequiredMessage kind. The matching key holds the payload.
textimagedocumentaudiovideostickerlocationcontactsinteractivebuttonreaction
text.bodystringPresent when type is text.
image.idstringMedia id — call retrieve media for a download URL. Inbound media is never sent inline.
interactive.button_replyobject{ id, title } when the contact tapped a reply button.
interactive.list_replyobject{ id, title, description } when they picked a list row.
reactionobject{ message_id, emoji }. An empty emoji means the reaction was removed.
contextobject{ wamid } when the message quote-replies another.
session_expires_atstringrequiredWhen free-form replies stop being allowed.
Media arrives as an id