> ## Documentation Index
> Fetch the complete documentation index at: https://www.bolna.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Termination reasons

> What each termination_reason value means and what to do about it.

`termination_reason` says what happened to a call attempt, whether or not it was ever placed: answered and how it
ended, not answered and why, or never dialed and why. It covers telephony calls, web calls and web chat, and uses
the same values for every telephony provider. Read it on its own to know whether a person was reached.

## Where it appears

| Field | Where | Notes |
| - | - | - |
| `termination_reason` | Top level of the execution | The call attempt's outcome |
| `transfer_call_data.termination_reason` | The transfer leg of a [transferred call](https://www.bolna.ai/docs/tool-calling/transfer-calls.md) | The transfer leg's own outcome, same values |

Both are returned by [Get execution](https://www.bolna.ai/docs/api-reference/executions/get_execution.md) and the execution list endpoints,
included in the [execution webhook](https://www.bolna.ai/docs/post-call/polling-call-status-webhooks) payload, and exported in CSV reports as
the `termination_reason` and `transfer_termination_reason` columns.

`termination_reason` is `null` while the call is still in progress, and for executions created before it was introduced on 26 October 2026.

```json theme={"system"}
{
  "id": "b7140255-af33-4608-8e97-04dd944b8e48",
  "status": "completed",
  "termination_reason": "call_transferred",
  "transfer_call_data": {
    "status": "completed",
    "termination_reason": "destination_hung_up"
  }
}
```

## How it relates to other fields

| Field | What it tells you |
| - | - |
| `termination_reason` | What happened to the call attempt. Use it to decide what to do next. |
| `status` | The call's lifecycle state. Where the two disagree about how a call ended, `termination_reason` is authoritative. See [Call statuses](https://www.bolna.ai/docs/post-call/list-phone-call-status.md). |
| `error_message` | For a dial the telephony provider refused, the provider's own message |
| `telephony_data.hangup_reason`, `hangup_by`, `hangup_provider_code` | Who ended the telephony call and why, with the provider's hangup code. See [Hangup codes](https://www.bolna.ai/docs/post-call/list-phone-call-hangup-status.md). |

> [!NOTE]
>
> [Workflow executions](https://www.bolna.ai/docs/api-reference/workflow-executions/overview) carry their own `termination_reason`: the
> label of the end node a contact reached. That is a different field from the call execution's
> `termination_reason` on this page.

## Values

### Reached a person

The call was answered. A machine answering counts here, as does a call the agent could not finish because one of its
providers failed.

| Value | Meaning | What to do |
| - | - | - |
| `user_hung_up` | The person on the call hung up. | Nothing to fix. Check the transcript if they left earlier than expected. |
| `agent_ended_call` | The agent decided the conversation was finished. | Nothing to fix. This is the healthy outcome for a completed script. |
| `call_transferred` | The agent handed the call off. | Nothing to fix. `transfer_call_data.termination_reason` says how the transfer leg ended. |
| `inactivity_timeout` | Nobody spoke past the silence threshold, so Bolna ended the call. | Raise the inactivity timeout, or check whether the caller's audio was reaching Bolna. |
| `max_duration_reached` | The call hit its configured duration cap. | Raise the max-duration setting if conversations legitimately run this long. |
| `voicemail_reached` | A machine answered, and Bolna's detector or the carrier's ended the call. | Retry at a different hour, or configure the agent to leave a message. |
| `agent_llm_error` | The language model failed mid-call, so Bolna ended the call. | Check your LLM provider key, quota and model availability. |
| `agent_transcription_error` | Speech-to-text failed mid-call, so Bolna ended the call. | Check your transcriber provider key and quota. |
| `agent_voice_error` | Text-to-speech failed mid-call, so Bolna ended the call. | Check your voice provider key, quota and the selected voice. |
| `agent_realtime_error` | The speech-to-speech realtime session failed, so Bolna ended the call. | Check the realtime provider key and quota. |
| `agent_network_error` | The audio path between the telephony provider and the agent collapsed. | Retry. Report sustained rates with a few execution IDs; it usually points at one media route. |
| `destination_hung_up` | Transfer leg only: the person the call was transferred to hung up. | Nothing to fix. |

### Not answered

The call was placed and nobody picked up.

| Value | Meaning | What to do |
| - | - | - |
| `no_answer` | It rang until the network gave up. | Retry at a different time of day. |
| `dial_timeout` | Still ringing when your dial timeout cut it. | Raise the dial timeout if you want to let it ring longer. |
| `abandoned` | The caller hung up before the agent answered (inbound and web calls). | Check how long callers wait before the agent picks up. |
| `ivr_not_completed` | The caller did not get through your IVR: no input, or too many invalid entries. | Review the IVR's prompts and digit timeout. |
| `busy` | The call reached the phone and was refused: declined by the person, or they were on another call. | Retry later. A high rate on one number range points at the caller ID or the calling window. |
| `declined` | The recipient's side refused or blocked the call, for example SIP 603 or provider code 3040 or 3110. | Retry sparingly, and check caller-ID reputation for that destination network. |

### Could not connect

The call was placed and the network could not complete it.

| Value | Meaning | What to do |
| - | - | - |
| `invalid_number` | The number does not exist or is malformed. | Clean the list. Store numbers in E.164 with the country code. |
| `number_unreachable` | A valid number that is switched off or out of service. | Retry later. Drop numbers that stay unreachable. |
| `network_error` | The network or carrier could not complete the call; nothing was wrong with the number. | Retry. Report sustained rates with a few execution IDs; `telephony_data.hangup_provider_code` has the carrier's code. |
| `number_blocked` | The DND list, a barred destination, or a geo permission blocked it. | Scrub against DND. For a barred destination, confirm it is enabled on your account. |

### Never dialed

The call was refused before it was placed, by Bolna or by the telephony provider.

| Value | Meaning | What to do |
| - | - | - |
| `insufficient_balance` | Your Bolna wallet was empty when the call was due. | Top up, and enable low-balance alerts. |
| `provider_account_balance` | The telephony provider's account had no balance. | Recharge the provider account. On Bolna-hosted numbers, contact support. |
| `account_suspended` | Your Bolna account is suspended. | Contact support. |
| `rate_limited` | The provider refused because too many calls were requested at once. | Slow the batch down, or ask the provider for a higher limit. |
| `concurrency_limit_reached` | A concurrent-call cap was already full. | Slow the batch down or request a higher concurrency limit. |
| `caller_id_rejected` | The from-number cannot be used on this account, trunk or route. | Verify the caller ID with the provider and confirm it is allowed for that destination. |
| `inbound_not_allowed` | Your inbound settings refused this caller or number. | Map an agent to the number, or review your inbound allow and block rules. |
| `provider_error` | The provider failed to place the call or did not respond. | Retry. Report sustained rates with a few execution IDs; `error_message` has the provider's words. |
| `platform_error` | Bolna failed to start or run the call. | Retry, and report it to support with the execution ID. |
| `canceled_via_api` | The call was canceled or its batch stopped. | Nothing to fix if this was deliberate. |

### Undetermined

| Value | Meaning | What to do |
| - | - | - |
| `unknown` | Nobody recorded what happened. | Check `telephony_data.hangup_provider_code` on the execution, or share the execution ID with support. |

***

## Related pages

> [card] [Call statuses](https://www.bolna.ai/docs/post-call/list-phone-call-status.md)
>
> The lifecycle a call moves through

> [card] [Hangup codes](https://www.bolna.ai/docs/post-call/list-phone-call-hangup-status.md)
>
> Who ended the call and why

> [card] [Execution payload](https://www.bolna.ai/docs/post-call/execution-payload.md)
>
> Every field in an execution


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.