Developer docs
Process API channel events
Understand the callback envelope, fixed event types, and public reply payload.
Updated 2026-07-24For: Backend developers
Every callback uses the same envelope:
{
"schemaVersion": 2,
"id": "event-id",
"sourceEventId": "source-event-id",
"sequence": 12,
"type": "message.created",
"occurredAt": "2026-07-24T08:00:00Z",
"tenantId": "tenant-id",
"channelId": "channel-id",
"conversationId": "conversation-id",
"external": {
"threadId": "thread-001",
"customerId": "customer-001"
},
"source": { "type": "agent", "id": "agent-id", "name": "Agent" },
"data": {}
}
Fixed event types
conversation.createdmessage.createdconversation.assignedconversation.requeuedconversation.reopenedconversation.closed
message.created includes public replies from agents, supervisors, AI, or bots. It does not echo customer messages submitted through the API and never includes internal notes.
Deduplicate with event id and use sequence for relative order within one conversation. Do not assume strict ordering across conversations.