Replaying Conversations
Replay re-runs something that already happened, so you can test a change without placing a call. There are two levels:
Turn replay is the fast loop: it takes seconds, doesn’t consume audio, and can generate up to 200 samples of the same turn in one request. This page covers it first.
Replay a single turn
A conversation item is one turn. Only assistant items from ended conversations can be replayed.
Getting a conversation item ID
The easy way — copy it from the dashboard. No code needed:
- Open the conversation in the Phonic dashboard.
- Find the assistant turn you want to re-run.
- Click the ⋯ menu at the right of that turn.
- Choose Copy item ID.
You now have a conv_item_... ID on your clipboard — paste it straight into the request below.
If you’d rather find turns in code — say you’re replaying every turn of every call in a project — walk the conversation’s items instead. Assistant items are the replayable ones, and each item’s id is its conversation item ID:
Replaying the turn
With the ID in hand, replay it. Omit system_prompt to re-run the turn exactly as it originally ran:
Both body fields are optional:
The response is a flat list, one entry per sample:
Tool calls in tool_calls are what the assistant would have invoked. Replay never actually calls your tools, so nothing in your systems is booked, charged, or transferred.
Sampling: run the same turn 100 times
A single replay tells you what the assistant can say; a hundred replays tell you what it usually says. Because generation is sampled, one lucky response is not evidence that a prompt change worked — for a flaky behavior, the number you care about is the fraction of samples that get it right.
num_responses: 100 takes roughly 15–20 seconds and typically comes back with close to 100 distinct texts. Score them yourself:
Run the same measurement with system_prompt omitted to get the baseline for the prompt that actually ran, then compare. A useful workflow:
- Find a turn that went wrong — often one flagged by a failing eval prompt.
- Replay it 100× as-is. This is your baseline rate.
- Replay it 100× with the candidate
system_prompt. Keep the change if the rate moves. - Update the agent and re-run your evals on new calls: a turn replay holds one turn’s context fixed, so it cannot tell you what the change does to the rest of the call.
To iterate by hand rather than by script, use the prompt playground in the dashboard: in the conversations view, open the menu next to a turn. It calls the same endpoint.
Replay a whole call
Turn replay holds the conversation history fixed. When a prompt change should alter the course of the call — the agent asks for the account number earlier, so every later turn differs — replay the conversation instead. This re-runs the caller’s recorded audio through an agent as a real conversation:
agent is optional and defaults to the agent the conversation originally ran with; point it at a different agent to test a full prompt or config change. The call returns as soon as the replay starts, and the replay shows up as a new conversation with origin: "replay" in the project it belongs to — list conversations to find it, then evaluate or extract against it like any other call.
Conversation replay does not need an agent-server or telephony leg — it works for conversations that ran over LiveKit or the WebSocket API as well as inbound and outbound phone calls.