# Call status and disconnection reasons

Every row in **Calls** has two fields that explain what happened:

- **Status**: where the call ended up (answered, missed, failed, and so on).
- **Disconnection reason** (`endCallReason` in the API, webhooks and the MCP tools): why it ended.

Read them together. A **Failed** status says the call never worked. The reason says what is missing: credits, a trunk, channels, a valid number. The tables below give each value, what it means, and what to fix.

The **Calls** list shows the reason next to the status only for calls that did not connect. Open the call to see it on every row. The app shows each reason as a label in your language (`no_channels` shows as **Trunk channel limit reached**). The tables below use the code, which is what the API, webhooks and exports send.

## Status

| Label in Calls | API value | Meaning |
|---|---|---|
| Scheduled | `scheduled` | Outbound call waiting for its time (campaign, callback, API with a time). Not dialed yet. |
| Pending | `to_be_processed` | Inbound call just arrived and is being routed to an agent. Should last a second or two. |
| Trying | `trying` | Outbound call sent to the carrier, waiting for the far end. |
| In progress | `session_progress` | Carrier is playing early media (a ringback tone or an announcement) before an answer. |
| Ringing | `ringing` | The far end is ringing. |
| Live | `in_call` | Connected and talking now. |
| Transferring | `transferring` | A transfer to a person, number or agent is in progress. |
| Answered | `answered` | Connected and ended normally. The reason says who hung up. |
| Transferred | `transferred` | Handed to another destination. The AI part of the call is over. |
| Voicemail | `voice_mail` | Outbound call reached a voicemail greeting. |
| No answer | `missed` | Nobody picked up, or the call could not reach an agent. Check the reason. |
| Busy | `busy` | The far end was busy or declined (SIP 486 / 603). |
| Canceled | `cancelled` | Scheduled call canceled, or the caller hung up before pickup. |
| Answered elsewhere | `answered_elsewhere` | Ring group: another phone answered first. Not a failure. |
| Failed | `failed` | The call never connected. The reason tells you what is missing. |
| Failed | `failed_during_call` | The call connected, then broke. Send the Call ID to [Support](https://docs.voicelogica.ai/support/contact-support/). |

## Disconnection reasons

### Normal endings

These are not failures.

| Reason | Meaning |
|---|---|
| `caller_hungup` | The other party hung up. Shown as **Caller hung up**, tagged **Normal**. The most common reason. |
| `callee_hungup` | On a bridged or conference call, the person you connected to hung up. |
| `call_transferred` | The call was transferred. |
| `transfered_to_<destination>`, `transfered_to_agent_<name>`, `transferred to voip connection` | The call was transferred, with the destination in the code. |
| `agent_handoff` | The call moved to another AI agent mid-call. The call continues as a new row. |
| `answered_elsewhere` | Another phone in the ring group answered first. |
| `caller_called_back` | The same caller called back while this call was open. The new call replaces this one. |
| Free text such as "goodbye" or "caller confirmed the booking" | The agent ended the call itself with one of its [Hang up](https://docs.voicelogica.ai/agent-configuration/end-call/) reasons. The text is the agent's own reason. |

### Ended by the agent or a limit

| Reason | Meaning | What to do |
|---|---|---|
| `call_maximum_time_reached` | The call reached its maximum duration. | Expected for long calls. Ask Support if the limit is too short. |
| `maximum_time` | The media session sat idle and was closed. | Nothing, unless you see it often. |
| `caller_does_not_speak` | The call connected but the caller never spoke. | Usually a pocket dial or a silent line. |
| `caller_unresponsive_after_nudges` | The caller went silent, and the agent hung up after its reminders. | Normal on outbound. Many on inbound can mean an audio problem. Report one Call ID. |
| `call_stuck` | The agent stopped making progress (a loop or no reply) and the call was closed. | Report the Call ID. |
| `incorect_code` | The caller used up their tries on a code or PIN check. (The code is spelled this way.) | Expected. |
| `pending_transfer_confirmation_timeout` | A transfer waited for confirmation and nobody confirmed. | Check who confirms transfers under [Transfer](https://docs.voicelogica.ai/telephony/transfer/). |
| `transfer_request_false` | The transfer was refused at confirmation. | Expected when the person refuses the transfer. |

### Voicemail and carrier messages (outbound)

The agent recognizes these from what it hears on the line.

| Reason | Meaning |
|---|---|
| `caller_voice_mail` | Voicemail greeting. The status is **Voicemail**. |
| `caller_does_not_exist` | "This number is not in use" type message. Remove the number from your list. |
| `inbound_calls_blocked` | The line blocks incoming calls (the Greek "φραγή εισερχομένων" message). |

### The call could not be placed or reached

| Reason | Meaning | What to do |
|---|---|---|
| `caller_busy` | Busy (SIP 486). | Retry later. Campaigns retry based on the campaign settings. |
| `caller_declined` | Rejected (SIP 603). Shown as **Declined**. | Expected. |
| `no_answer`, `ring_timeout`, `no_pickup_after_ringing_max_seconds` | Rang out with no answer. | Raise the ring time under [Outgoing](https://docs.voicelogica.ai/outbound-calls/outgoing/) if calls ring out too soon. |
| `request_timeout` | The far end did not respond in time (SIP 408). | Retry. If every call gets this, check the trunk. |
| `unavailable`, `temporarily_unavailable` | Phone off or unreachable (SIP 480). | Retry later. |
| `phone_number_not_found` | Number does not exist or is badly formatted (SIP 404). | Fix the number. Use international format (+30…). |
| `forbidden` | The carrier refused the call (SIP 403). | The trunk is not allowed to call that destination, or the caller ID is not yours. Ask your carrier. |
| `not_acceptable_here` | Audio format mismatch (SIP 488). | Check the trunk codec. Greek and EU carriers usually want PCMA. See [Your own carrier](https://docs.voicelogica.ai/telephony/your-own-carrier/). |
| `extension_rejected` | The user's extension or app rejected the call. | Expected. |
| `failed_to_connect` | Other connection failure. | Retry. If it repeats, send Support the Call ID. |

### Something is missing on your side

These reasons mean something has to be fixed in your account or at your carrier.

| Reason | What is missing | Where to fix it |
|---|---|---|
| `no_seconds_available_in_plan` | Minutes. The plan is out of voice minutes. | [Subscription & Billing](https://docs.voicelogica.ai/getting-started/activate-subscription/): top up or upgrade. |
| `no_channels_available_in_plan` | Concurrent-call slots. The plan was already on its maximum number of simultaneous calls. | Subscription & Billing. See [concurrent calls](https://docs.voicelogica.ai/common-issues/common-questions/#concurrent-calls). |
| `no_channels` | Trunk channels. The carrier or trunk was already on its maximum number of simultaneous calls. | Raise the channel count at your carrier and on the trunk. |
| `insufficient_balance_in_voip_provider` | Carrier credit. Your carrier account is out of balance. | Top up at your carrier, not in Voice Logica. |
| `voip_provider_issue`, `voip_temporary_issue` | The carrier had a problem. | Retry. If it repeats, contact your carrier. |
| `voip_phone_service_failed` | The phone line failed to authenticate or register (SIP 403/404). | Check the trunk or line username and password in [Telephony](https://docs.voicelogica.ai/telephony/your-own-carrier/). |
| `voip_phone_not_exist` | The line used for the call was deleted. | Pick an existing trunk or line on the campaign or API call. |
| `no_agent`, `no_agent_id_connected_to_phone` | No agent on the number. | Put an agent on the number: agent → **Channels** → **Telephony**. |
| `no_voip_connection_connected_to_phone` | The number is not linked to a trunk or line. | [Telephony](https://docs.voicelogica.ai/telephony/). |
| `forward_call_to_agent_<id>_not_found` | A routing rule or workflow sends calls to an agent that no longer exists. | Fix the rule under Telephony → **Routing**, or the workflow. |
| `outside_campaign_schedule` | The campaign tried to dial outside its calling hours. | Expected. The lead gets dialed in the next window. |
| `do_not_respond_to_call` | A **Call Start Trigger** workflow told the agent not to answer (for example, a blocked caller). Status is **No answer**. | Expected, if you built that workflow. |
| `fax` | A fax machine called. | Nothing. |
| `call_cancelled_during_pickup_delay` | The caller hung up during the pickup delay, before the agent answered. | Shorten the pickup delay if this happens often. |
| `mobile_busy_forward_user_unavailable`, `mobile_busy_forward_ai_fallback:<reason>` | The call was forwarded to a user's mobile, the user was busy or unavailable, and the AI took the call (or could not). | Check the user's forwarding setup. |

### Platform side

You cannot fix these yourself. Send [Support](https://docs.voicelogica.ai/support/contact-support/) the Call ID.

| Reason | Meaning |
|---|---|
| `no_rtp_stream` | No audio arrived for 30 seconds, so the call was closed. |
| `no_rtp_service`, `rtp_alloc_failed` | No media server was available for the call. |
| `transfer_failed`, `transfer_rejected` | The transfer could not be completed. The caller stays with the agent or is disconnected. Check the destination first. |
| `shutdown` | The call was closed during a server restart. |

### Outbound calls that never dialed

When a scheduled or campaign call is skipped before dialing, the reason is a sentence instead of a code. Examples: "Max retries reached", "Daily attempt limit reached", "Insufficient credits", "Duplicate call", "Campaign lead already closed". The sentence says what stopped the call.

## What is not covered here

- Your agent's own **Hang up** reasons (for example `call_completed`) are set on [Hang up](https://docs.voicelogica.ai/agent-configuration/end-call/). They are stored as the disconnection reason when the agent ends the call.
- The agent's own free-text reasons are shown as written, not translated.

**The call is Failed and has no reason**

Send [Support](https://docs.voicelogica.ai/support/contact-support/) the Call ID. Every failed call should have a reason.

**Which values do webhooks and the API send?**

The same `status` and `endCallReason` codes as the tables above. Match on the code, not the translated label.

## Next Steps

[When something breaks](https://docs.voicelogica.ai/common-issues/): the symptom map.  
[Common questions](https://docs.voicelogica.ai/common-issues/common-questions/): language, digits, email, concurrent slots.  
[Contact support](https://docs.voicelogica.ai/support/contact-support/): send the Call ID.
