> ## Documentation Index
> Fetch the complete documentation index at: https://docs.anyreach.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Conversation detail

> Read the transcript, play the recording, and inspect metadata.

The conversation detail page is the full record of a single interaction. It splits into two panes: **Interaction** (the transcript, with tool calls, latency, and recording playback) on the left, and **Details** (channel metadata, summary, variables, and workflow-run links) on the right. On mobile, the two panes become **Interaction** and **Details** tabs.

Open it by clicking any row in the [inbox](/conversations/inbox-overview). Each conversation opens in its own browser tab.

## Interaction transcript

The transcript renders every turn as a chat bubble — user turns on the right, agent turns on the left. Messages and tool calls are interleaved in order. While the conversation is still running, live transcription segments are overlaid on top of the saved history so you see speech as it lands; once a turn is persisted, the saved version replaces the live overlay.

### Tool calls

A tool call is rendered as a centered, dashed pill labeled with the tool name. Each call is paired with its result by matching `call_id`, so one pill carries both the request and the response. Click the pill to expand:

| Part         | Shows                                                                                                         |
| ------------ | ------------------------------------------------------------------------------------------------------------- |
| **Request**  | The arguments the agent passed, pretty-printed as JSON.                                                       |
| **Response** | The tool's output, pretty-printed as JSON. Labeled **Response (error)** and styled red when the call errored. |

The pill also shows the call's latency inline next to the name — in milliseconds when under one second, otherwise in seconds.

### Per-turn latency

Each agent turn carries a latency badge: a small stacked bar plus a label. The label reads `<time> response` when end-to-end latency is recorded, or `<time> TTFT` (time to first token) when only the inference segment is available. The bar's width is scaled relative to the slowest turn in the conversation, so you can spot outliers at a glance.

Hover the badge for the breakdown:

| Segment | Color      | Channels                                                |
| ------- | ---------- | ------------------------------------------------------- |
| LLM     | Dark blue  | All — shown as `LLM TTFT` on voice, `LLM` on text/email |
| TTS     | Light blue | Voice (text-to-speech time to first byte)               |
| Tools   | Amber      | Text/email (tool execution time)                        |
| Other   | Pale blue  | Remaining end-to-end time                               |

<Note>
  Voice channels report `LLM TTFT` and `TTS TTFB`. Asynchronous text and email channels have no audio timeline, so they report inference (`LLM`) and tool execution (`Tools`) instead.
</Note>

### Recording sync

When the conversation has a recording, an audio player appears at the bottom of the page and the transcript syncs to it. Click any bubble to seek the recording to that turn. As the recording plays, the turn currently being spoken is highlighted and scrolls into view, and each turn shows its start offset relative to the recording. Turns are timed using their `started_speaking_at` and `stopped_speaking_at` metrics, so sync only applies to channels that record those timings.

### Email header

On the `email` channel, a header sits above the thread showing the **subject**, **From**, **To**, and **Cc** of the thread, plus any attachment filenames and a roster of participants (humans and agents). The subject falls back to `(no subject)` when none is set.

## Details pane

The **Details** pane lists the conversation's metadata. Rows render only when the underlying value is present, and the set of rows varies by channel.

| Field                           | Description                                                                                            |
| ------------------------------- | ------------------------------------------------------------------------------------------------------ |
| **Channel**                     | The interaction channel (phone, web chat, email, text).                                                |
| **Direction**                   | `Inbound` or `Outbound`. Hidden for web (`webrtc`) conversations.                                      |
| **Caller Number** / **User ID** | The caller's identifier (`user_id`). Labeled **Caller Number** for telephony, **User ID** otherwise.   |
| **Duration**                    | Total length, formatted as hours/minutes/seconds.                                                      |
| **Name**                        | The caller's name, when known.                                                                         |
| **Agent Number**                | The number the agent answered on. Hidden for web conversations.                                        |
| **Agent**                       | The agent that handled the conversation, or **Custom Agent** when no saved agent is linked.            |
| **Version**                     | The agent version, with an external-link icon that opens that exact version of the agent in a new tab. |
| **Created At**                  | When the conversation started, in your local time.                                                     |
| **Status**                      | The conversation's current status (for example **Completed**, **Failed**, **Transferred**).            |
| **Summary**                     | An auto-generated summary of the conversation, shown when one exists.                                  |

## Variables vs. System Metadata

Below the detail rows are two metadata blocks. The distinction matters: one is yours to use, the other is internal.

| Block               | Field             | Who sees it         | Contents                                                                                                                   |
| ------------------- | ----------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| **Variables**       | `custom_metadata` | Everyone            | Your own key-value data: the `initial_context` and `custom_metadata` you attach when starting a conversation surface here. |
| **System Metadata** | `system_metadata` | Advanced users only | Internal platform state, including the email header and the workflow-run IDs that drive the links below.                   |

**Variables** is where the data you pass into a conversation shows up — anything you set in `custom_metadata`, plus the context you inject via `initial_context`. Use the copy button to grab the whole object as JSON. When there's nothing to show, the block reads **No variables**.

**System Metadata** is gated behind the `advanced_user` scope. It holds platform internals rather than customer data, so most viewers never see it.

<Note>
  Advanced users also get a **Copy record JSON** button at the top of the **Details** pane, which copies the entire conversation record.
</Note>

## Workflow-run links

When a conversation triggers a [workflow](/workflows/execution/observability), its run is surfaced in the **Details** pane with the run ID and a **View** button that opens the run's state inline. Three kinds of run are linked, drawn from `system_metadata`:

| Section                         | When it appears                                                                                                 |
| ------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| **Pre-Conversation Workflow**   | A workflow ran before the conversation. Shows the run, and an error message if the pre-conversation run failed. |
| **Inbound Routing Workflow**    | A routing workflow decided where an inbound interaction went.                                                   |
| **Post-Conversation Workflows** | One or more workflows ran after the conversation ended. Each run gets its own **View** button.                  |

## Live updates

While the conversation is still active, the page refetches the record every few seconds so the status, duration, and transcript stay current. Polling stops once the conversation reaches a terminal status — `completed`, `failed`, `cancelled`, `transferred`, or `unanswered` — at which point the view settles into the final recorded record.

<Tip>
  To watch a call as it happens with controls to listen in, use [live monitoring](/conversations/live-monitoring). The detail page shows live transcription, but the dedicated monitor is built for in-progress calls.
</Tip>

<CardGroup cols={2}>
  <Card title="Live monitoring" icon="headphones" href="/conversations/live-monitoring">
    Listen to in-progress calls in real time.
  </Card>

  <Card title="Workflow observability" icon="diagram-project" href="/workflows/execution/observability">
    Inspect the runs linked from a conversation.
  </Card>
</CardGroup>
