Skip to main content

Call outcomes: call_status and status_reason

call_status — final status bucket of a finished call (empty string until finalized). One axis, one source of truth; quality (call_successful) and technical reliability (health) are separate axes and never leak into the status: status_reason — fine-grained reason, always belonging to exactly one bucket:
busy and user_declined are distinct reasons. busy means busy and user_declined means the subscriber actually declined the call. If you build reports on dial-failure reasons, separate the two values rather than folding them into one.A second consequence for retry logic on your side: whether a reason is permanent depends on the market. user_declined closes a number for good only on the US profile; on other profiles it is transient, and the number returns to dialing having spent an attempt. The campaign launch check refuses an expert rule that retries a permanent outcome (rule_permanent_retry).
health_reasons — codes explaining a warning/error health verdict. A call’s verdict is the worst code that fired: any error-level code makes the call error, otherwise warning. The vocabulary is open — new codes are added over time, so treat an unfamiliar one as data, not as a parsing failure. Codes come from four sources. The split matters: health_reasons carries the output of a rule, never its inputstatus_reason values and the internal codes of call events never appear here. 1. Call events — something went wrong inside the conversation: 2. The call status axisstatus_reason values fold into these: Reasons that belong to the callee (no_answer, busy, user_declined, invalid_destination, spam_blocked) and dials you cancelled yourself before dialing (cancelled_by_function, cancelled_by_operator) contribute nothing: they are not platform defects. 3. Post-call analysisanalysis_skipped, analysis_failed, analysis_interrupted, all warning level, from the terminal state of the analysis. 4. Recording and timingrecording_head_lost (part of the recording does not exist) and slow_turns (the 90th percentile of turn duration is above the configured threshold), both warning.