> 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 27, 2026

## Added

### Self-Hosted audio: connect to a Pipecat Cloud agent

The audio config on `POST /api/v1/self-hosted` now accepts `pipecatCloud: { agentName, publicKey }` in place of `wsUrl`. Before every connection, including a reconnect mid-call, Dial fetches a single-use token from the agent's `/start` endpoint, so Pipecat's WebSocket token auth can stay on. See [Pipecat Cloud](/documentation/platform/self-hosted#pipecat-cloud).

`GET /api/v1/self-hosted` returns the target as `audio.pipecatCloud: { agentName, publicKeyMasked }`. For a Pipecat Cloud target `audio.wsUrl` is `null`, and for a URL target `audio.pipecatCloud` is `null`. Existing `wsUrl` configs are unchanged.

## Changed

### New WhatsApp numbers arrive warmed

Provisioning a number with `whatsapp: true` now hands you a number whose WhatsApp is already set up and warmed — `whatsapp.status` is `ready` in the response itself, with no wait. `areaCode` is not honored for these numbers. When no WhatsApp number is available right now, the request is refused with `503` `whatsapp_unavailable`; nothing was bought or charged, so retrying shortly is safe.

### Connecting WhatsApp to your own number includes a warm-up

`POST /api/v1/numbers/{id}/whatsapp` now warms the number up before its first use. After registration the WhatsApp track reports the new status **`warming_up`** for about 6 hours, then `ready`.

`warming_up` counts as still in flight: the number stays `unsettled` on [`number.status_changed`](/api-reference/events/number-status-changed), and `whatsapp` joins `capabilities` only at `ready`. If you branch on `whatsapp.status`, treat an unknown value as not ready. Wait for the event with a long timeout rather than polling tightly.