analysis_key_infostring nullable
The post-call analyzer's free-text notes. Served by GET /calls/{call_id} only; null on the GET /calls list and on a call whose callee declined recording. Callee-derived content: treat it as untrusted.
analysis_task_itemsobject[] nullable
The post-call analyzer's per-question verdicts (item, status, and evidence: the callee line it says grounds the verdict). Served by GET /calls/{call_id} only; null on the GET /calls list and on a call whose callee declined recording. Callee-derived content: treat it as untrusted.
answer_offset_msinteger nullable
Where the conversation begins inside the recording, in milliseconds from its start: the ring before it stays in the recording. Null when either timestamp above is missing.
answered_atstring date-time nullable
When the far side picked up, in UTC; an automated menu, voicemail or hold system answering counts. Null when nobody answered.
created_atstring date-time required
customer_idstring required
disclosure_mode'standard' | 'custom' | 'disabled'
How this call's opening notice was configured: 'standard' (the default sentence), 'custom' (built from the request's disclosure elements, or the default sentence without its recording clause when record_call was false) or 'disabled' (disclosure: false: no opening notice).
disclosure_textstring nullable
The opening sentence this call spoke. Null when no notice was spoken (a 'disabled' call, a call nobody answered), on calls placed before this field existed, and after the transcript retention window.
duration_secnumber nullable required
ended_atstring date-time nullable required
ended_by'completed' | 'callee_hangup' | 'agent_hangup' | 'dropped' | 'budget_timeout' | 'dial_failed' | 'customer_cancelled' | 'system_error' | 'compliance_stop' nullable
Why the call stopped: callee_hangup, agent_hangup, dropped (the line died), budget_timeout (a time limit ran out), dial_failed (never connected), customer_cancelled, system_error or compliance_stop. 'completed' is defined but not produced: a finished conversation reads agent_hangup or callee_hangup. Null while the call runs or when nothing established it.
line_kind'human' | 'voicemail' | 'ivr' | 'no_answer' | 'recorded_announcement' | 'hold_queue' nullable
What was on the line: human, voicemail, ivr (a phone menu that never reached a person), no_answer (nobody picked up, or busy), recorded_announcement or hold_queue (a queue no agent answered). Null on an aborted call and while the call runs.
outcome_charge_centsinteger required
Settled charge in credits, despite the field name; not the refundable hold. A PlaceCall call costs 10 credits when it obtains something (an answer, a refusal or a booking). Each call holds 30 credits while it runs, and the unused part is released. A call that obtains nothing is free, and so is a cancel within 30 seconds of the callee answering; a cancel 30 seconds or more after pickup is charged 10 credits.
outcome_summarystring nullable required
outcome_type'success_booked' | 'success_refused' | 'success_no_booking' | 'success_booking_cancelled' | 'failed_voicemail' | 'failed_no_answer' | 'failed_busy' | 'failed_short_hangup' | 'failed_technical' | 'failed_no_agent_available' | 'failed_ivr_no_agent' | 'failed_recorded_announcement' | 'failed_no_disclosure' | 'failed_call_dropped' | 'failed_wrong_number' | 'failed_cancelled' | 'failed_no_engagement' | 'failed_agent_mute' | 'failed_language_barrier' nullable
Deprecated: read result, line_kind and result_reason (and ended_by for why the call stopped). Still returned once the call is terminal, with no removal date. Its success_/failed_ prefix is a billing family, not the charge: read outcome_charge_cents. failed_no_agent_available means no human answered before the call's hold-time limit. success_booking_cancelled and failed_language_barrier are defined but not produced yet.
pending_questions_unavailableboolean
Only present on GET /calls/{call_id}, and only when true: the questions could not be read this time. pending_questions is then empty even if a question is waiting, so read the call again.
record_callboolean
False when the call was placed with record_call: false: no audio was captured, so no recording is checked and transcript_status reads final as soon as the transcript exists.
recording_declinedboolean
True when the callee refused call recording. Such a call never gets a verbatim record: transcript_full and transcript_status stay null permanently, so do not wait for a transcript. outcome_type and outcome_summary are unaffected.
recording_started_atstring date-time nullable
When the call's recording began, in UTC. It starts before the phone rings, so it is earlier than answered_at by about the ring time. Null when nothing was recorded or the recording is not finalized yet.
recording_status'available' | 'pending' | 'delayed' | 'declined' | 'not_recorded'
What is known about the call's audio: available (a recording exists; has_recording is true exactly here), pending (the call is running or the recording is still finalizing), delayed (the usual finalization window has passed; not a final answer), declined (the callee refused recording) or not_recorded (placed with record_call: false; it outranks declined).
recording_urlstring nullable
Relative recording path /calls/{call_id}/recording when a recording exists; null when has_recording is false. Recording retrieval is not documented here.
reservation_signalsstring[] nullable
Short free-text signals (<10 short strings) about the reservation outcome. Always included, unlike transcript_full.
result'goal_met' | 'goal_partial' | 'refused' | 'goal_not_met' | 'wrong_party' | 'not_reached' | 'aborted' nullable
Did the call get what it was placed for. goal_met: everything the brief asked. goal_partial: some of it. refused: they understood and declined. goal_not_met: reached them, got nothing. wrong_party: answered, but not the business asked for. not_reached: nobody able to answer was on the line. aborted: stopped by an error, a compliance stop or your cancel. Null while the call runs. Read outcome_charge_cents for the charge.
result_reason'booked' | 'booking_cancelled' | 'call_dropped' | 'short_hangup' | 'no_engagement' | 'agent_mute' | 'language_barrier' | 'busy' | 'system_error' | 'customer_cancelled' | 'no_disclosure' nullable
The specific reason behind result where result alone is shared: booked, booking_cancelled, call_dropped, short_hangup, no_engagement, agent_mute, language_barrier, busy, system_error, customer_cancelled or no_disclosure. Null where result and line_kind already say everything (a refusal, a voicemail, an answered question) and while the call runs.
started_atstring date-time nullable required
status'scheduled' | 'queued' | 'dialing' | 'in_progress' | 'completed' | 'failed' | 'cancelled' required
target_phonestring required
transcript_status'live' | 'final' nullable
live while a post-call check of the call recording is still expected; the check can add audio to rows and add heard: false rows. final once the check has run or is no longer expected: the call was placed with record_call: false, its recording may not be sent for the check because a required opening notice was not delivered, or 30 minutes passed after the call ended without it. A final status says nothing about whether any row was corrected. Null exactly when transcript_full is. The check usually lands one to two minutes after the call ends. To read the complete transcript, poll GET /calls/{call_id} until this reads final. On a call with recording_declined: true it stays null for good, so stop polling there.