Skip to main content
Live monitoring lets you listen to a conversation while it is still happening. Open the detail page of an active conversation and a live snoop panel attaches automatically, streaming the call’s audio and live transcription to your browser. It is strictly listen-only: you are hidden from the room, so the agent and the caller cannot see or hear you.
Live monitoring is for observation only. There is no whisper, no barge-in, and no way to take over the call from this panel. To bring a human into a live call, use the agent’s warm-transfer action — see Call transfers and conference and Agent assist.

In-app snoop panel

When you open a conversation that is still active, the page requests a listener token in the background. If one is granted, the snoop panel appears with a red LIVE badge and the message “Listening in. The agent and caller can’t see you or hear you.” The panel starts muted. Use the controls to listen and to leave:
ControlAction
ListenUnmutes the call audio so you can hear it. Browsers require this click as the user gesture before audio can play.
MuteRe-mutes the audio. Transcription keeps streaming either way.
Stop (the X)Disconnects you from the room and closes the panel.
The badge reflects connection state: Connecting… while joining, LIVE once connected, and Ended once the call finishes. The panel detects the call ending when the agent leaves the room, and it tears down automatically when the conversation reaches a terminal status.

Listener-token endpoint

The panel is backed by a single endpoint that mints a subscribe-only LiveKit token for an active conversation. SDK consumers building their own monitoring tools can call it directly.
POST https://api.anyreach.ai/core/conversations/{conversation_id}/listener-token
Authorization: Bearer <token>
X-Anyreach-Org: <organization_id>   # required for user PATs (pat_)
The token grants room_join and can_subscribe only — can_publish and can_publish_data are both false and the participant is hidden, so an observer can hear audio and receive data frames such as live transcription, but cannot publish anything or be seen by other participants.

Response

{
  "url": "wss://...",
  "token": "<listener JWT>",
  "room_name": "<livekit room>",
  "expires_at": "2026-06-18T12:15:00Z"
}
FieldTypeDescription
urlstringLiveKit server URL to connect to.
tokenstringListener JWT: subscribe-only, hidden, audio + data.
room_namestringThe LiveKit room the conversation is in.
expires_atstring (UTC)When the listener token expires.
The token has a 15-minute TTL. For calls that run longer, re-mint it before it expires by calling the endpoint again and reconnecting with the new token — the in-app panel does this automatically.

Errors

StatusWhen
404The conversation does not exist, or it is active but has no LiveKit room associated with it.
409The conversation is not active. Listener tokens are only available for in-progress conversations (status triggered, ringing, or in_progress).

Permissions

The listener-token endpoint requires conversations:read_sensitive or conversations:manage. This is stricter than reading the conversation list or transcript: a token that can only read conversations cannot mint a listener token.
Live audio is sensitive, so the gate is intentionally tighter than read access. If your monitoring tool gets a permission error, check that its scopes include conversations:read_sensitive or conversations:manage.

Agent assist

Live human-in-the-loop monitoring and handoff.

Call transfers and conference

Warm transfer is the path to actually take over a live call.