Skip to main content

DialogueDetailRead

Single-dialogue response wrapper with the dialogue record and optional voice-call metadata.

dialogue objectrequired

A dialogue is a single conversation between an agent and a contact over one messaging channel. Its lifecycle state is the state-tree node it sits on (last_tree_node_id): every agent's tree carries a fixed set of system nodes (initial, attempted, started, the failure and expiry outcomes) next to the nodes the tenant configures, so "where is this dialogue" has one answer. The record also tracks whether the bot is muted, the parking (pending) episode — a wait on top of the node, not a node of its own — and references to the last user/bot messages.

idIdrequired

Unique numeric identifier of the record.

product_idProduct Idrequired

ID of the product (workspace) that owns this record. Most endpoints scope access by product.

customer_id object

Canonical company-level customer ID used for shared communication context; null for legacy dialogues that have not been resolved.

anyOf
integer
agent_idAgent Idrequired

ID of the agent (a configured AI assistant / bot persona) this record belongs to.

contact_idContact Idrequired

ID of the contact this record relates to.

created_atdate-timerequired

Creation time (UTC, ISO 8601).

channel_idChannel Idrequired

ID of the messaging channel this record relates to.

chat_idChat Idrequired

The channel-specific chat identifier this dialogue maps to.

last_user_msg_id objectrequired
anyOf
integer
last_user_msg_at objectrequired
anyOf
date-time
last_bot_msg_id objectrequired
anyOf
integer
is_mainIs Mainrequired

Whether this is the active (primary) dialogue for the agent/contact pair; superseded dialogues are set to false.

bot_mutedBot Mutedrequired

When true, the bot will not auto-respond in this dialogue (e.g. after a human takeover).

pending_until objectrequired

When a parked dialogue is resumed (UTC). Null unless the dialogue is parked.

anyOf
date-time
pending_type object

Why the dialogue is parked (e.g. follow_up, human_clarification, async_tool, custom_follow_up).

anyOf
PendingType

Possible values: [follow_up, human_clarification, async_tool, custom_follow_up, future_meeting]

pending_ref object

Opaque reference associated with the parking episode (a clarification id, a tool call id, …).

anyOf
string
pending_id object

Identifier of the current parking episode. A deadline refresh keeps it; a new park replaces it, so a scheduler that acts on an episode can tell whether it is still the one it saw.

anyOf
uuid
state_revisionState Revision

Monotonic counter bumped by every lifecycle write to the dialogue (movements, parks, unparks, resets). Carry it into a decision made outside the write (an operator UI, a queued job) so the platform can reject the decision when the dialogue has moved on in the meantime.

Default value: 0
started_at objectrequired

When the dialogue first left the initial node (UTC).

anyOf
date-time
ext_id objectrequired

External identifier of the conversation in the channel/provider, if any.

anyOf
string
waba_opener_sent_after_window_num objectrequired
anyOf
integer
is_sub_outreachIs Sub Outreachrequired

Whether this outreach was sent into an existing chat with the contact rather than as a cold outreach. Set when an outreach campaign reuses a channel the contact was already messaged on (the agent's persist_channel_in_outreach option): to the contact it is the same conversation, but the platform counts it against a separate "sub-outreach" daily limit, since messaging platforms (WhatsApp, Telegram, …) are less restrictive inside existing dialogues than for cold outreach.

warmup_pair_id objectrequired

For phone-warmup conversations, the warmup pair this dialogue belongs to.

anyOf
integer
is_incomingIs Incomingrequired

Whether the dialogue was started by an inbound message from the contact.

is_group_chatIs Group Chatrequired

Whether the conversation is a group chat.

skip_response_for_user_msg_id objectrequired
anyOf
integer
skip_response_until objectrequired
anyOf
date-time
last_tree_node_idLast Tree Node Idrequired

ID of the state-tree node the dialogue currently sits on — its lifecycle state. Always set; the node belongs to the dialogue's agent, and GET /tree/ resolves it to a title, system_kind, is_final and group. A parked dialogue (is_pending) keeps its node and resumes there.

subject objectrequired

Email subject line, for email channels.

anyOf
string
enabled_playbook_version_idsinteger[]

Prompt-version IDs of the playbooks this dialogue has enabled, in enable order (by the model through its tool, or by the platform from crm_fields_conditions). Append-only: a playbook is never disabled, at most one version per playbook is held, and the dialogue keeps that version even if the playbook is edited later. Match them against enabled_version_id in the agent's playbook list (GET /prompts/?type=playbook) or against a playbook's version list.

is_pendingIs Pendingrequired

Whether the dialogue is waiting for something (a follow-up time, a manager's answer, a tool result, a meeting) before it acts again. Derived from pending_until. Parking does not move the dialogue: last_tree_node_id still names the node it will resume on.

voice_call object

Voice-call metadata for this dialogue, or null when the dialogue is not a voice call.

anyOf
dialogue_idDialogue Idrequired

ID of the dialogue (conversation) this record relates to.

external_call_idExternal Call Idrequired

Stable call identifier assigned by the voice runtime.

providerProviderrequired

Voice provider identifier. Public API value is voice.

Constant value: voice
sip_call_id objectrequired

Optional SIP-side call identifier, when the call used SIP.

anyOf
string
sip_code objectrequired

Optional SIP status or termination code reported by the voice runtime.

anyOf
integer
statusStatusrequired

Voice call lifecycle status — active, completed, or failed.

Possible values: [active, completed, failed]

direction objectrequired

Whether the call is inbound or outbound.

anyOf
string

Possible values: [inbound, outbound]

started_atdate-timerequired

When the voice call started (UTC).

ended_at objectrequired

When the voice call ended (UTC), if it has ended.

anyOf
date-time
duration_seconds objectrequired

Total call duration in seconds, if known.

anyOf
integer
recording_s3_key objectrequired

S3 object key for the call recording, if one was produced.

anyOf
string
usage_metadata objectrequired

Free-form usage metrics reported by the voice runtime, for example token, audio, or provider usage counters.

property name*any

Free-form usage metrics reported by the voice runtime, for example token, audio, or provider usage counters.

latency_metadata objectrequired

Free-form latency metrics reported by the voice runtime, for example STT, LLM, TTS, or end-to-end timing.

property name*any

Free-form latency metrics reported by the voice runtime, for example STT, LLM, TTS, or end-to-end timing.

created_atdate-timerequired

Creation time (UTC, ISO 8601).

updated_atdate-timerequired

Last modification time (UTC, ISO 8601).

DialogueDetailRead
{
"dialogue": {
"id": 0,
"product_id": 0,
"customer_id": 0,
"agent_id": 0,
"contact_id": 0,
"created_at": "2024-07-29T15:51:28.071Z",
"channel_id": 0,
"chat_id": "string",
"last_user_msg_id": 0,
"last_user_msg_at": "2024-07-29T15:51:28.071Z",
"last_bot_msg_id": 0,
"is_main": true,
"bot_muted": true,
"pending_until": "2024-07-29T15:51:28.071Z",
"pending_type": "follow_up",
"pending_ref": "string",
"pending_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"state_revision": 0,
"started_at": "2024-07-29T15:51:28.071Z",
"ext_id": "string",
"waba_opener_sent_after_window_num": 0,
"is_sub_outreach": true,
"warmup_pair_id": 0,
"is_incoming": true,
"is_group_chat": true,
"skip_response_for_user_msg_id": 0,
"skip_response_until": "2024-07-29T15:51:28.071Z",
"last_tree_node_id": 0,
"subject": "string",
"enabled_playbook_version_ids": [
0
],
"is_pending": true
},
"voice_call": {
"dialogue_id": 0,
"external_call_id": "string",
"provider": "voice",
"sip_call_id": "string",
"sip_code": 0,
"status": "active",
"direction": "inbound",
"started_at": "2024-07-29T15:51:28.071Z",
"ended_at": "2024-07-29T15:51:28.071Z",
"duration_seconds": 0,
"recording_s3_key": "string",
"usage_metadata": {},
"latency_metadata": {},
"created_at": "2024-07-29T15:51:28.071Z",
"updated_at": "2024-07-29T15:51:28.071Z"
}
}