Interpreting calls that did not complete
When a call does not concretely complete, the outcome is on the scheduled request and the failure cause is on its call attempts. Three cases cover the situations where the call never produced a confirmed result: voicemail (read the voicemail_left field in generated_outcomes), no answer or busy (read positive_or_negative_contact and appointment_attendance_status), and failed dialing (read error_classification on the call attempt records).
Where to read these fields from the call job API
Poll GET /scheduler/call-jobs/{call_job_id} or bulk-read with POST /scheduler/call-jobs/query, and pass include_call_attempts=true when you need failure causes. The submission response does not carry any of these fields.
Call
GET /scheduler/call-jobs/{call_job_id}?include_call_attempts=true(orPOST /scheduler/call-jobs/querywithinclude_call_attempts: true).Read
workflow_statusandstop_reasonon each entry inscheduled_requeststo see whether the request is finished and why it stopped.Read
generated_outcomesfor what the call actually reached, without inspecting raw attempts.Read
error_classificationon each entry incall_attemptsfor why a failed attempt failed.
Field references for every endpoint: see the Call Jobs API. The snapshot-based tracking workflow is in Track specific calls after a batch API call.
Voicemail
voicemail_left is a boolean in generated_outcomes that records whether a voicemail message was actually left. The voicemail outcome is not a terminal result: the request is re-enqueued for another call.
Field | Value when a voicemail was left |
|---|---|
|
|
|
|
|
|
|
|
No answer and busy
A call where no live human answers is recorded as negative contact, not as a confirmed attendance result, and the request is retried automatically before it becomes final.
Field | Value for no answer | Value for busy |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Both outcomes re-enqueue the request for another call. The default retry allowance is 3 semantic call attempts per request. When the allowance is exhausted, the request's snapshot freezes with workflow_status COMPLETE and stop_reason SEMANTIC_RETRIES_EXHAUSTED.
SEMANTIC_RETRIES_EXHAUSTED appears under a COMPLETE workflow status. It means every attempt finished without reaching a live human who could confirm, so the appointment status was never established. Treat it as unresolved outreach, not as a confirmed result.
Unable to confirm
appointment_attendance_status: "unable_to_confirm" means the call connected but a clinic representative could not or would not establish the appointment's status. It also covers appointments that did not happen for an administrative reason: authorization pending, an insurance or payer discrepancy, a billing dispute, a scheduling error, or the clinic waiting on an external resolution such as the adjuster.
Two distinctions matter when you read this value:
It is not the value for no answer. A call that reached no one records negative contact with
appointment_attendance_statusunknown.unable_to_confirmappears only when an attempt actually connected and the status could not be established.It is not terminal. Neither
unable_to_confirmnorunknownestablishes what happened to the appointment, so the request is re-enqueued for another call.
Failed dial attempts: error_classification
error_classification is a string on each call attempt that classifies why the call failed. It is independent of the retry disposition: the classification describes the failure and does not by itself decide whether the request is retried. A null value means no classification has been saved; attempts recorded before this field existed are not backfilled, so older attempts also return null.
Value | Meaning |
|---|---|
| The destination declined the call (SIP 603). |
| The destination could not be found (SIP 404). |
| The destination was unavailable (SIP 480). |
| The destination was busy (SIP 486). |
| The calling service was unavailable. |
| Provider or service capacity was exceeded. |
| The provider timed out. |
| The call was classified as an error, but no specific provider mapping was available. |
How to interpret the values:
Classification is code-based only: it is derived from the provider's SIP status code or service-level code. A mapped SIP code takes precedence over a service-level mapping, and a failure that matches neither returns
UNKNOWN.There is no dedicated value for a "number no longer in service" carrier announcement. When the provider reports SIP 404 for that situation, the attempt is classified
DESTINATION_NOT_FOUND. Announcement text is not inspected, so the same situation can also land in another mapped value orUNKNOWN, depending on what the provider reports.Service-side values (
SERVICE_UNAVAILABLE,SERVICE_CAPACITY_EXCEEDED,PROVIDER_TIMEOUT) describe our calling infrastructure or provider capacity, not the destination number.
Which attempt's outcome the API returns
generated_outcomes on a scheduled request is the most representative attempt outcome, not simply the newest one. Outcomes are ranked in this order: positive live-human contact first, then outcomes where a voicemail was left, then other negative-contact outcomes, then unknown outcomes. Ties are broken by preferring the later attempt.
This ranking has one practical consequence: an answered attempt that produced unable_to_confirm outranks an earlier voicemail or no-answer attempt. A history that contains only voicemail and no-answer attempts never becomes unable_to_confirm; its representative outcome stays negative contact with appointment_attendance_status unknown.