Cloned voices on agents; GET /v1/agents/voices paginates

Your workspace’s cloned voices can now be assigned to voice agents

A voice agent can now use any voice your workspace cloned. The voice picker lists them alongside the curated shared catalogue, marked type: "personal", and POST/PATCH /v1/agents accepts their slugs.

Only workspace-owned clones are selectable — a personal voice scoped to an individual stays invisible to agents, which are workspace-shared resources. The same ownership gate applies here as on GET /v1/voices: a clone is usable on an agent exactly when it appears in your TTS voice catalogue.

GET /v1/agents/voices now returns:

TypeWhat it is
sharedThe curated catalogue every workspace sees
personalVoices your workspace cloned

Both can be assigned to an agent. The AgentVoiceType enum is documented as an open set — new values may be added, so branch on the ones you know and fall through for the rest.

GET /v1/agents/voices is now cursor-paginated

The endpoint now supports cursor and limit parameters. Walk pages while has_more is true. The shared catalogue is served first, then your cloned voices.

Version gate: From API version 2026-08-07 an omitted limit returns the first page (default 50, max 200). Callers pinned before that date keep the historical whole-catalogue response until they pass an explicit limit or cursor.

Pass cursor or limit to paginate regardless of your pinned version. The version only controls what an omitted limit means.

Pagination parameters:

ParameterTypeDefaultMax
cursorstring(none)
limitinteger50 (at/after 2026-08-07), whole catalogue (before)200

Response carries next_cursor and has_more via the standard PaginationMeta shape.

Workspaces with a very large cloned library benefit most. The shared catalogue is bounded, but your cloned scope can grow arbitrarily — pagination ensures the full set is walkable.