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.
Unique numeric identifier of the record.
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.
- integer
- null
ID of the agent (a configured AI assistant / bot persona) this record belongs to.
ID of the contact this record relates to.
Creation time (UTC, ISO 8601).
ID of the messaging channel this record relates to.
The channel-specific chat identifier this dialogue maps to.
last_user_msg_id objectrequired
- integer
- null
last_user_msg_at objectrequired
- date-time
- null
last_bot_msg_id objectrequired
- integer
- null
Whether this is the active (primary) dialogue for the agent/contact pair; superseded dialogues are set to false.
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.
- date-time
- null
pending_type object
Why the dialogue is parked (e.g. follow_up, human_clarification, async_tool, custom_follow_up).
- PendingType
- null
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, …).
- string
- null
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.
- uuid
- null
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.
0started_at objectrequired
When the dialogue first left the initial node (UTC).
- date-time
- null
ext_id objectrequired
External identifier of the conversation in the channel/provider, if any.
- string
- null
waba_opener_sent_after_window_num objectrequired
- integer
- null
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.
- integer
- null
Whether the dialogue was started by an inbound message from the contact.
Whether the conversation is a group chat.
skip_response_for_user_msg_id objectrequired
- integer
- null
skip_response_until objectrequired
- date-time
- null
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.
- string
- null
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.
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.
- VoiceCallRead
- null
ID of the dialogue (conversation) this record relates to.
Stable call identifier assigned by the voice runtime.
Voice provider identifier. Public API value is voice.
voicesip_call_id objectrequired
Optional SIP-side call identifier, when the call used SIP.
- string
- null
sip_code objectrequired
Optional SIP status or termination code reported by the voice runtime.
- integer
- null
Voice call lifecycle status — active, completed, or failed.
Possible values: [active, completed, failed]
direction objectrequired
Whether the call is inbound or outbound.
- string
- null
Possible values: [inbound, outbound]
When the voice call started (UTC).
ended_at objectrequired
When the voice call ended (UTC), if it has ended.
- date-time
- null
duration_seconds objectrequired
Total call duration in seconds, if known.
- integer
- null
recording_s3_key objectrequired
S3 object key for the call recording, if one was produced.
- string
- null
usage_metadata objectrequired
Free-form usage metrics reported by the voice runtime, for example token, audio, or provider usage counters.
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.
Free-form latency metrics reported by the voice runtime, for example STT, LLM, TTS, or end-to-end timing.
Creation time (UTC, ISO 8601).
Last modification time (UTC, ISO 8601).
{
"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"
}
}