> 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.

# interrupt

> Make the agent speak immediately, barging in out of turn.

**Direction:** your server → Dial. Makes the agent speak **immediately**, out of turn — for example
when your own logic decides the agent should cut in rather than wait for the next
[`response_required`](/api-reference/self-hosted-protocol/response-required). Unlike `response`, it
carries no `response_id` because it isn't answering a request.

## Schema

| Field              | Type    | Description                                                       |
| ------------------ | ------- | ----------------------------------------------------------------- |
| `type`             | string  | Always `"interrupt"`.                                             |
| `content`          | string  | A chunk of what the agent should say (partial or full).           |
| `content_complete` | boolean | `true` only on the **final** chunk.                               |
| `end_call`         | boolean | Optional. `true` ends the call once this content has been spoken. |

## Example

```json
{ "type": "interrupt", "content": "Quick heads up — I just found a faster option.", "content_complete": true }
```

Like a [`response`](/api-reference/self-hosted-protocol/response), an interrupt can be streamed
across multiple frames (set `content_complete` on the last) and can end the call with `end_call: true`.