Webhooks and APIOutbound
message.outbound.updated
Emitted when an outbound message is edited
type: message.outbound.updated
Fired when an outbound message is edited.
When it fires
- An operator edits an already-sent message.
data shape
type Data = {
chat: ChatPayload;
message: MessagePayload; // direction: "OUTBOUND"
previous?: Partial<MessagePayload>;
contact?: ContactPayload;
};chat- the owning chat.message- the post-update message state. SeeMessagePayload.previous- optional, only the fields that changed (pre-update values).contact- the recipient, when resolvable.
Example envelope
{
"id": "evt_d1e2f3a4-b5c6-7890-def1-234567890abc",
"type": "message.outbound.updated",
"timestamp": "2026-04-24T12:14:55.000Z",
"data": {
"chat": {
"id": "6804f4c2a6f9f35f6e66f1a1",
"integrationId": "67f95b0126a4d1c9e3f0aa12",
"channel": "WHATSAPP"
},
"message": {
"id": "msg_02",
"chatId": "6804f4c2a6f9f35f6e66f1a1",
"direction": "OUTBOUND",
"type": "TEXT",
"text": "Hi Alex - how can we help you today?",
"sentAt": "2026-04-24T12:14:30.000Z"
},
"previous": {
"text": "Hi Alex - how can we help?"
}
},
"meta": {
"eventId": "evt_d1e2f3a4-b5c6-7890-def1-234567890abc",
"event": "message.outbound.updated",
"occurredAt": "2026-04-24T12:14:55.000Z",
"organisationId": "6640f3d5c8a0d7e8b7f20222",
"connectionId": "6640f45ac8a0d7e8b7f2014a",
"apiVersion": "2026-04-01",
"attempt": 1
}
}Notes
- Delivery-status changes (sent, delivered, read, failed) do not arrive here. Subscribe to
message.outbound.status, which is opt-in. If you readdeliveredAt,readAtorfailedAtfrom this event before, you stop seeing them.
Related
message.outbound.createdmessage.outbound.deletedmessage.outbound.status- delivery-status transitions (opt-in)- Shared Types -
MessagePayload - Envelope & Delivery