Webhooks & APIOutbound
conversation.created
Emitted when a new conversation - the inbox row for a contact - is created
type: conversation.created
Fired when Wexio creates a new conversation: the inbox row that groups a contact's channel threads.
Conversation vs chat. A conversation is the row an operator sees in the inbox. A chat is one channel thread inside it. A contact who writes on WhatsApp and Telegram has one conversation with two threads.
When it fires
- A contact reaches you for the first time and Wexio opens their inbox row.
- A new conversation is opened for an existing contact.
data shape
type Data = { conversation: ConversationPayload };See ConversationPayload.
Example envelope
{
"id": "evt_01JV4QGLZ76C2G5ML1Y0T3B6FR",
"type": "conversation.created",
"timestamp": "2026-04-24T12:14:20.000Z",
"data": {
"conversation": {
"id": "6804f4d5a6f9f35f6e66f1c4",
"contactId": "6804f4d5a6f9f35f6e66f1a2",
"createdAt": "2026-04-24T12:14:20.000Z",
"updatedAt": "2026-04-24T12:14:20.000Z"
}
},
"meta": {
"eventId": "evt_01JV4QGLZ76C2G5ML1Y0T3B6FR",
"event": "conversation.created",
"occurredAt": "2026-04-24T12:14:20.000Z",
"organisationId": "6640f3d5c8a0d7e8b7f20222",
"connectionId": "6640f45ac8a0d7e8b7f2014a",
"apiVersion": "2026-04-01",
"attempt": 1
}
}Notes
The payload is deliberately lean, and channels and primaryThreadChatId are only present when the emitting code already had them cheaply at hand. Their absence does not mean "no channels" - do not branch on it. When you need the current threads for certain, read the conversation back.
- One inbound message can produce several events -
conversation.created,chat.createdandmessage.inbound.createdcan all arrive for the same arrival. Deduplicate onmeta.eventIdand reconcile by timestamp, never by arrival order. contactIdis the merge-winner contact id, so it survives a merge.
Related
conversation.updated- changes to the rowchat.created- a channel thread inside it- Shared Types -
ConversationPayload