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

# response

> The agent's spoken reply to a request — streamable, and able to end the call.

**Direction:** your server → Dial. The agent's spoken reply to a
[`response_required`](/api-reference/self-hosted-protocol/response-required) or
[`reminder_required`](/api-reference/self-hosted-protocol/reminder-required). Stream it as you
generate it.

## Schema

| Field              | Type    | Description                                                       |
| ------------------ | ------- | ----------------------------------------------------------------- |
| `type`             | string  | Always `"response"`.                                              |
| `response_id`      | integer | The `response_id` from the request you're answering.              |
| `content`          | string  | A chunk of the agent's reply (partial or full).                   |
| `content_complete` | boolean | `true` only on the **final** chunk of this turn.                  |
| `end_call`         | boolean | Optional. `true` ends the call once this content has been spoken. |

## Streaming a turn

Send one or more `response` frames sharing the same `response_id`, streaming the agent's words as
they're produced. Set `content_complete: true` on the **last** frame only. If a newer
`response_required` arrives first, stop — it [supersedes](/api-reference/self-hosted-protocol/response-required#superseding)
the in‑flight turn.

## Example

Two streamed chunks completing one turn:

```json
{ "type": "response", "response_id": 7, "content": "Sure — let me pull that up. ", "content_complete": false }
```

```json
{ "type": "response", "response_id": 7, "content": "Your order shipped yesterday.", "content_complete": true }
```

## Ending the call

Set `end_call: true` on the final frame; the agent finishes speaking the content and the call then
ends:

```json
{ "type": "response", "response_id": 9, "content": "Thanks for calling — goodbye!", "content_complete": true, "end_call": true }
```