Skip to main content
GET
GetVoiceCallAPI mirrors erdo_voice_call_get, returning the displayable

Authorizations

Authorization
string
header
required

An Erdo API key (erdo_api_...) or scoped token (erdo_token_...).

Path Parameters

callID
string
required

Response

Success response

call_id
string
call_successful
string
canonical_lead_id
string

to, in both forms — the same two fields, with the same empty cases, as the list.

contact
Contact is what a person told us about themselves. The four fields are the · object | null

ones the leads dataset has columns for; there is deliberately no company, because nothing downstream would use it.

created_at
string<date-time>
dial_outcome
string

no_answer | busy | failed | canceled, where canceled means the lead was never dialled because the person did not answer their own phone or did not press 1. An AI call whose conversation the provider reported carries answered when the other side spoke, voicemail when a voicemail box picked up (the agent's voicemail detection fired, or everything the other side said was a recording phrase), or no_answer when the line connected and nobody said anything, or said one short fragment and then nothing until the agent hung up — all three have status `completed`, so this is the field that tells them apart. An AI call that never connected carries no_answer | busy | failed | canceled, matching its status; one closed because no ending ever arrived carries Erdo's best guess. Empty on inbound calls, on any call that has not ended yet, and on AI calls that connected before 2026-10-09. It is separate from `status`, which is about the record: a call can be `completed` with a `no_answer` outcome, which is a call that happened and reached nobody.

direction
string
duration_seconds
integer<int32>
Required range: -2147483648 <= x <= 2147483647
ended_at
string<date-time>
from_number
string
has_transcript
boolean
instructions
string
lead_reference
string
lead_saved_at
string<date-time> | null
lead_status
string
placed_by_name
string

from the Call button on a lead carries the name of whoever pressed it, and every AI-placed and inbound call leaves it empty. It is what turns a row in the list into "Called by Ana".

provider_agent_id
string
recipient_name
string
status
string
to_number
string
transcript_json
TranscriptJSON is the raw stored ElevenLabs transcript, passed through · object

verbatim. Null when no transcript was captured.

transcript_summary
string
transcript_text
string

("user: ...\nagent: ..."), shared with the widget read surface.

transcript_turns
WidgetTranscriptTurn is one turn of a conversation as a consumer displays it: · object[]

([{role, text, at}]), so a consumer displaying a call renders one shape instead of re-parsing the provider payload. Built by the renderer TranscriptText is built on, so the two can never disagree. On an INBOUND call `at` is the call's start plus the turn's offset into it; an outbound call's turns carry no `at`, because its record starts when the provider accepted the request, before the call rang or was answered. Always present (empty when nothing rendered) — the same field the widget conversation read returns.

turns
WidgetConversationTurn is one agent turn's LLM performance metrics, extracted · object[]

same projection the widget conversation read returns.