Message hook delivery
Landbot POSTs this payload to every registered message hook URL when a message moves through the channel (Web/WhatsApp; APIchat customer messages do NOT fire — see the APIchat webhook reference).
Authenticity: if you set a token on the hook, it is echoed as Authorization: Token <token> (a static shared secret — compare the full value; there is no HMAC). User-Agent: landbot/webhooks.
Ordering: bursts can arrive out of order (~10–50 ms); sort by timestamp. Dedupe: the sentry-trace header is unique per message and stable across retries.
Retries: non-2xx is retried on linear backoff (deltas ~5/10/15/20/25 s, ≥6 attempts). Return any 2xx (body ignored) to acknowledge.
Webhook delivery body. Always exactly one entry in messages — Landbot never batches.
- Type: array ·messagesrequired
- 200
Acknowledged. Return any 2xx within your timeout; the body is ignored.
{
"messages": [
{
"type": "text",
"timestamp": 1,
"data": {
"body": ""
},
"sender": {
"id": 1,
"name": "",
"type": "customer"
},
"customer": {
"id": 1,
"agent_id": null,
"archived": true,
"name": "",
"is_external": "",
"country": "",
"webchat_type": "",
"url": "",
"phone": "",
"additionalProperty": "anything"
},
"channel": {
"id": 1,
"name": "",
"type": "landbot"
},
"_raw": {
"samurai": 1,
"author_type": "user",
"author_uuid": null,
"uuid": "",
"seq": null,
"rich_text": null,
"read": true,
"additionalProperty": "anything"
}
}
]
}