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