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.created
  • message.created
  • conversation.assigned
  • conversation.requeued
  • conversation.reopened
  • conversation.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.

Related guides