Transfer outcome states

Every status and failure reason a call transfer can report.

Every call transfer reports how it ended. Use these values to track how often transfers connect, drive fallback logic, and debug individual calls.

  • Outcome states say whether the transfer connected, and if not, what got in the way.
  • Transfer modes decide what happens next: warm transfers can recover, while a cold transfer ends the call.
  • Failure reasons name the specific cause, such as a busy line, an IVR menu, or a wrong number.

Where the values appear

The outcome is saved on the transfer action of each call:

  • Get a call and List calls return it in executed_actions, keyed by action name, as return_value.status and return_value.failed_reason.
  • The post-call webhook sends the same executed_actions object.
  • The action execution timeline records a failed_reason for every failed attempt, so a transfer that retried shows the cause of each try. Its status field is started, success, or failed rather than an outcome state.
{
"executed_actions": {
"action_transfer_call": {
"name": "action_transfer_call",
"action_type": "transfer_call_action_type",
"return_value": {
"status": "transfer-failed-connection-error",
"failed_reason": "number_not_found"
}
}
}
}

Outcome states

Outcome statefailed_reasonWhat happened
transfer-successnoneA live human answered and the caller was bridged to them.
transfer-failed-connection-errortransfer_outside_availability, a carrier or SIP reason, or transfer_failedNo transfer leg was established. Either the caller asked for a transfer outside the Human Availability window, or the carrier rejected the transfer.
transfer-failed-timeouttransfer_failed, human_detection_timeoutThe destination rang until the Timeout expired, or it answered but Human Detection did not confirm a live human in time.
transfer-failed-ivrivr_detectedHuman Detection identified an auto-attendant or IVR menu rather than a person.
transfer-failed-voicemailvoicemail_detectedHuman Detection identified a voicemail greeting.
transfer-failed-destination-busydestination_busyThe destination line was busy.
transfer-failed-transfer-target-hanguptransfer_target_hangupThe destination answered, then hung up before the caller was bridged.
transfer-cancelledcaller_hung_upThe caller hung up before the transfer completed, for example while waiting on background music.
transfer-screening-rejectedscreening_rejectedThe destination declined the call during call screening.

How each transfer mode reacts

Some outcome states depend on features that only warm transfers support, so a cold transfer never produces them.

Outcome stateCold transferWarm transfer
transfer-failed-connection-errorCall endsAgent is informed and can try an alternate destination
transfer-failed-timeoutCall endsAgent can retry or continue the conversation
transfer-failed-ivrNot produced, requires human detectionAgent resumes the conversation and can try an alternate destination
transfer-failed-voicemailNot produced, requires human detectionAgent resumes the conversation and can try an alternate destination
transfer-failed-destination-busyCall endsAgent resumes the conversation and can retry
transfer-failed-transfer-target-hangupNot produced, the destination is never briefed on a cold transferAgent resumes the conversation and can retry
transfer-cancelledCall endsAgent resumes the conversation with the caller
transfer-screening-rejectedNot produced, call screening requires a warm transferAgent resumes the conversation and can attempt a fallback

Cold transfers cannot recover from failures. If reliability is critical, use warm transfers so the agent can fall back on a failed outcome, for example apologize, take a message, try an alternate destination, or schedule a callback.

Failure reasons

Reach for the failure reason when the outcome state on its own is not specific enough, for example to tell an unanswered ring apart from a wrong number. The reasons below are grouped by what caused the failure.

Human detection

These reasons are only set when Human Detection is enabled on a warm transfer.

failed_reasonOutcome stateMeaning
human_detection_timeouttransfer-failed-timeoutThe recipient answered, but no live human was confirmed before the Human Detection Timeout expired, and the answering party was not classified as an IVR or voicemail.
ivr_detectedtransfer-failed-ivrThe answering party was classified as an IVR or auto-attendant.
voicemail_detectedtransfer-failed-voicemailThe answering party was classified as a voicemail greeting.

Busy lines, hang-ups, and declines

failed_reasonOutcome stateMeaning
destination_busytransfer-failed-destination-busyThe destination was busy: SIP 486 Busy Here, SIP 600 Busy Everywhere, or a USER_BUSY cause before the call was answered.
transfer_target_hanguptransfer-failed-transfer-target-hangupThe recipient answered, then hung up before the caller was bridged: during human detection, during the whisper message or summary, or during a pause.
caller_hung_uptransfer-cancelledThe caller hung up while the transfer was still in progress.
screening_rejectedtransfer-screening-rejectedThe recipient declined the call during call screening.

Carrier and SIP rejections

The carrier returned a SIP error before the transfer leg connected. All of these report the outcome state transfer-failed-connection-error.

failed_reasonSIP responseMeaning
number_not_found404 Not Found, 604 Does Not Exist AnywhereThe destination number could not be routed.
number_incomplete484 Address IncompleteThe destination number was incomplete.
destination_unavailable480 Temporarily UnavailableThe destination was temporarily unavailable. Distinct from a Timeout that expires while the phone is still ringing.
rejected_by_destination603 DeclineThe destination declined the transfer.
transfer_blocked_by_carrier403 ForbiddenThe carrier refused the transfer.
carrier_unavailable503 Service UnavailableThe carrier or downstream network was unavailable.
routing_loop483 Too Many HopsThe transfer was rejected because it would loop.
media_negotiation_failed415 Unsupported Media Type, 488 Not Acceptable HereThe two sides could not agree on media, such as audio codecs.
transfer_method_unsupported405 Method Not Allowed, 501 Not ImplementedThe destination does not allow or implement the transfer method.

Availability and fallback

failed_reasonOutcome stateMeaning
transfer_outside_availabilitytransfer-failed-connection-error, or a legacy error on older transfer pathsThe transfer was blocked by the Human Availability schedule, so no attempt was placed.
transfer_failedAny failure stateFallback for every failure without a more specific cause, including a destination that rang until the Timeout expired.

Timestamps

A transfer records up to two timestamps, both in ISO 8601 UTC. The gap between them is how long the caller waited between asking for a person and reaching one.

FieldWhat it marks
transfer_timestampThe moment the transfer action started.
human_connected_atWarm transfers only. The point where the person who answered is in the conversation: with human detection on, their first words after the whisper message ends and the two legs are joined; with it off, the moment the whisper message finishes. It stays null on a transfer that never completed, and is never filled in afterwards.

Both appear on the transfer action in the same places as the outcome state.

Legacy values

Some values changed as transfer reporting became more specific. If your reporting or automation groups transfers by outcome state or failure reason, add the current values so these calls are not counted as generic failures.

ValueWhat changed
transfer-failed-ivr, transfer-failed-voicemail, transfer-failed-destination-busyPreviously reported as transfer-failed-connection-error or transfer-failed-timeout.
transfer-failed-transferee-hangupRenamed to transfer-failed-transfer-target-hangup.
Carrier and SIP reasonsPreviously reported with the failed_reason transfer_failed.
errorGeneric status that older transfer paths may still report instead of an outcome state.

FAQ

A 202 Accepted on the REFER only means the other side accepted the request to transfer. The transfer leg can still fail afterwards, and the carrier reports that in a follow-up NOTIFY, for example a 503 that is reported as carrier_unavailable. The outcome state and failed_reason reflect that final result, so trust them over the REFER in the SIP call ladder.

transfer_failed is the fallback when no more specific cause is known. On transfer-failed-timeout it means the destination rang until the Timeout expired. On transfer-failed-connection-error it means the carrier did not return one of the SIP errors Synthflow recognizes.

No. transfer-success carries no failed_reason. The field is only set on failure states.

The action execution timeline reports one entry per attempt with a simple started, success, or failed status. The failed_reason on each failed attempt uses the same values as this page, and the final outcome state is on the transfer action in executed_actions.

Yes. Synthflow adds reasons as it detects more specific causes. Treat an unrecognized failed_reason as a generic failure for its outcome state so your integration keeps working when a new value ships.