Skip to main content
Get a call
cost and custom_analysis populate after the call ends and post-processing finishes. Subscribe to call.processing.completed to be notified when the complete record is ready. transcript is always included here (unlike the list).
Voice conversations only, matching the list. A text conversation is fetched from /v1/chats/{chat_id}; passing a chat id here returns 404 call_not_found. A malformed id returns the same 404.
transcript is the stored conversation as { "turns": [...] }, oldest turn first, each turn a role and a text. A call that produced no turns at all - a no-answer, a voicemail, or a caller who hung up on the greeting - stores {}, with no turns key, so check for the key before walking it.

Authorizations

Authorization
string
header
required

Your API key as a Bearer token, e.g. Authorization: Bearer vk_….

Path Parameters

call_id
string
required

The call whose contribution to memory you want.

Response

Successful Response

One call: what it was, how it went, and what it cost.

id
string
required

The call's id. Use it on GET /v1/calls/{id} and to join webhook events to this call.

agent_id
string | null
required

Which agent handled it.

status
string
required

Where the call got to. Mid-call: started (placed, ringing), in_progress, transferring, transfer_answered. Finished: completed, voicemail, no_answer, busy, declined, failed, transfer_completed, transfer_failed. Open set — treat it as a string rather than switching exhaustively.

direction
string
required

Which way the call went: inbound, outbound, or web for a call that happened in a browser rather than on a phone. For WHO started it, read origin.

batch_id
string | null
required

Which campaign placed it, when origin is batch; null otherwise. The join key for a campaign's calls.

origin
string | null
required

WHO started it: widget, dashboard, api, batch, inbound, demo. Answers "is this real traffic or one of my own test clicks?". Nullable, and null means unknown — never treat it as a channel: the column postdates some rows, and a call whose origin was never captured is unattributable forever.

from_number
string | null
required

The number dialled from, E.164. null for a web call.

to_number
string | null
required

The number dialled, E.164. null for a web call.

duration_seconds
integer | null
required

How long the call lasted. null until it ends.

created_at
string<date-time>
required

When the call was placed or received (UTC, ISO 8601).

connected_at
string<date-time> | null
required

When it was answered. null if it never was.

ended_at
string<date-time> | null
required

When it ended. null while it is still running.

metadata
Metadata · object | null
required

Exactly what you sent as metadata on POST /v1/calls, unchanged. Your id-to-our-id join key.

variables
Variables · object | null
required

The call's own variables — what you sent as variables, or what was resolved for an inbound call. Only the values you can set — the custom namespace.

cost
PublicCost · object | null
required

What the call cost. null until it is finalised after the call.

custom_analysis
Custom Analysis · object | null
required

Everything your analysis groups extracted, keyed by group then item: custom_analysis["Lead QA"]["Lead Temperature"]. Vocily's own summary, sentiment and outcome arrive here too, under "Default Analysis" — there is no separate analysis object.

transcript
Transcript · object | null
required

The conversation. Omitted (null) on the LIST unless you pass ?include=transcript, because it is heavy; always present on get-by-id.

transfer
Transfer · object | null
required

Human-transfer detail — state (transferring, answered, failed), target, reason. null unless a transfer happened.

recording_url
string | null
required

A stable Vocily URL, never a raw storage link. null until the recording is ready. Fetching it (authenticated) redirects to a short-lived download.

dashboard_url
string
required

Deep link to this call in the Vocily dashboard — paste it into a bug report.

agent_version
integer | null

Which version of the agent answered. The difference between "the agent said something wrong" and "V4 said something wrong" after a deploy. null when that version has since been deleted.