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.created and message.inbound.created can all arrive for the same arrival. Deduplicate on meta.eventId and reconcile by timestamp, never by arrival order.
  • contactId is the merge-winner contact id, so it survives a merge.

On this page