> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.getdial.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.getdial.ai/_mcp/server.

# September 28, 2026

## Added

### Calls say why they failed

A call now carries `failureReason` when it ends as `failed` and Dial knows the cause. The same value is on the [`call.ended`](/api-reference/events/call-ended) and [`call.status_changed`](/api-reference/events/call-status-changed) events. Today the reasons come from a Self-Hosted audio target: `self_hosted_key_rejected` (Pipecat Cloud rejected your public key), `self_hosted_agent_not_found`, `self_hosted_at_capacity`, and `self_hosted_unreachable`. It is `null` on every other call. More values may be added, so treat an unknown value like `null`. See [When a call fails](/documentation/platform/self-hosted#when-a-call-fails).