August 30, 2026
POST /v1/voices (instant clone) now mints a reusable voice: the 201 response includes a voice_id you can pass straight to POST /v1/text-to-speech, alongside the rendered audio. Previously only the review-hold path returned an id, so the clone → synthesize loop could not be completed programmatically. Idempotent replays of a clone request are now marked with an Idempotent-Replay: true header.
A voice's stored default_settings (set via PATCH /v1/voices/{id}) are now applied at synthesis: any of model, language, emotion, emotion_intensity, speed, pitch, volume and the stability/similarity/style sampling controls that a request leaves unset fall back to the voice's defaults. Values sent on the request always win. The voice payload's default_settings_applied_at_synthesis flag now reads true.
Batch calling campaigns: POST /v1/agents/{id}/calls/batch (scope calls:initiate) launches an outbound campaign to up to 1,000 E.164 phone numbers, with optional concurrency (1–50), per-campaign system_prompt, greeting, voice_id, dynamic_variables and schedule_at. The route was previously documented but unreachable — every call 404'd.
Conversation recordings: GET /v1/agents/{id}/conversations/{conversationId}/recording (scope conversations:read) now serves the recording the conversation payload's recording.url has always pointed at, as a 302 to a presigned download valid for one hour. Previously the URL the API handed out returned 404.