Read one call, optionally waiting for a terminal status

The detail of a call. Optionally, waitSecs (see the callout below) makes the server wait for the result instead of you polling. For calls with an agent, it also includes transcript (a turn-by-turn transcript, each turn with an optional timeInCallSecs field - seconds since the call started, missing if the provider didn't time-stamp that turn; an agent turn the caller interrupted additionally carries interrupted: true and its message is still the full planned text, volai's own engine only) and summary (a short summary) - see Webhooks for the same shape delivered automatically once the call ends. Both the list and the detail also carry answeredBy (OUTBOUND calls only: human, voicemail, ivr (an automated voice menu answered; the engine hangs up right away), or unknown when the engine reached no decision or the transcript is missing; inbound calls omit the field, because a brief caller reply is not a voicemail). The engine decides with human, voicemail, and ivr; unknown means the engine reached no decision before its detection window closed, and since 1.33.0 it stays unknown (earlier the transcript-based estimate replaced it, and that estimate treated a short reply such as "Yes." after the intro as a voicemail). The transcript-based estimate (human or voicemail, unknown for an empty transcript; it never detects a voice menu) applies only to calls without an engine value. An outbound call handled by volai's own voice engine also carries voicemailReason (phrase, long_monologue, beep, human_reply, ivr_phrase, or digits - human_reply means a person picked up with a reply so short the detector noted it (not that it was a voicemail), ivr_phrase is a voice menu phrase, digits a carrier greeting reading the called number digit by digit), voicemailMessageLeft (the engine read the configured message into the voicemail), and voicemailDetectedAtSecs (seconds from pickup until the engine's detector reached a decision - even on a call a person answered) - all three fields come only from the engine; ElevenLabs's transcript-based classification (answeredBy without an explicit value) doesn't know the reason or the timing. An inbound or outbound call on the engine also carries optOutRequested: true when the remote participant explicitly asked not to be called again (for example "do not call me", even in the last seconds after the farewell) - the number is then on the account's do-not-call list automatically (GET /v1/dnc) and the task retry policy schedules no further attempt; a call without such a reply has no such key. It also carries endReason (completed, no_answer, busy, rejected, capacity, blocked, loop_guard, credit_blocked, suspended, engine_error, caller_loop, failed), and kind (agent, bridge, relay, inbound, transfer, sip, ring) - see the table below. A ring (kind: "ring") also carries a ring block (requestedSecs, outcome, rangSecs) - see POST /v1/rings. The tools-and-recordings wave added two more fields: data (what the agent captured from the call per its dataFields; a null value means it wasn't mentioned) and hasRecording (the call has a recording available for download, see the endpoint below). Older calls don't have these fields and they're missing from the response. durationSecs is in seconds; for calls handled by volai's own engine it can be a decimal number (rounded to two decimal places). The response carries the account owner's own annotations, always present, null when unset: note (string), flag ({reason, flaggedAt} | null), handledAt (Unix ms or null) and goal ({result: "success"|"failure"|"unknown", rationale, reason} | null, filled in only once the agent's goal was evaluated; reason is "no_caller_speech"|"evaluation_error"|null and says why the result came out "unknown" - null for a genuinely unclear result) - see PATCH /v1/calls/{id} below. The response also always carries hasConversation (boolean | null) - whether the call actually had a conversation with the caller; false for a call that didn't connect, voicemail, or a voice menu, null for an older record without enough signal to decide. A call for an agent with phases (workflow nodes plan) handled by volai's own voice engine (provider: "engine") also carries workflowPath - see the Call phases (workflow) section under agents above; a call on an agent hosted on ElevenLabs never carries the field, even when it went through phases, because only the engine's post-call writes it. A call handled by an engine build from 15 Oct 2026 on also carries, in the detail (not in the list), an engine block with protectedUtterances and protectedUtterancesCount: utterances of the person who answered that the engine dropped during the greeting window - what they said while the agent spoke its first line ("Hello?", their name, or anything inside firstMessageProtectSecs) and the engine deliberately did not take, so it is NOT in the transcript and the agent did not react to it; an agent-only transcript with a non-empty list therefore means the person did answer and speak. Each item has timeInCallSecs (start of the speech in the recording, absent when the engine does not know it), atSecs (when the engine finished hearing it, seconds from the start of the call, always), message (up to 200 characters), words and reason (first_message_protect, greeting_courtesy or greeting_identification; open list). At most 10 items, protectedUtterancesCount counts them all; a call with nothing dropped carries [] and 0, older calls and agents hosted on ElevenLabs have no engine key at all. The same block is in the call.* webhook.

get/v1/calls/{id}

Request

  • Base URL: https://volai.cz
  • URL: https://volai.cz/v1/calls/{id}
  • Auth: HTTP bearer

Path parameters

idstring required

Query parameters

waitSecsinteger

Seconds to wait for the call to reach a terminal status before responding (0-45, default 0 - do not wait).

Response

Call detail

stillRunningboolean

Changes

No recorded changes to this operation across all 1 revision of this API.