List the voices you can synthesize with: the public voice library plus any voices you have cloned. Optionally filter by locale and/or provider. Pass limit (and the returned next_cursor) to page through the filtered public library; without limit the full list is returned in one response.
Headers
X-API-KeystringrequiredYour VisionStory API key (sk-vs-...), kept server-side. Create or manage keys in API keys (Pro plan and up).
Query parameters
cursorintegerPagination cursor over public_voices, from the previous page's next_cursor. Omit or pass 0 for the first page.
Default: 0
limitinteger | nullMaximum public_voices per page (1-500). Omit to return the full library unpaginated (my_voices is always returned in full on the first page).
localestring | nullFilter by BCP 47 locale (case-insensitive). A bare language such as en or zh matches every regional variant; en-GB / zh-TW / zh-HK match that region only. See the locale field of each voice.
providerstring | nullFilter to voices from this engine (case-insensitive): elevenlabs / seed / gemini / minimax.
Responses
200Successful Response
application/json
dataGetVoicesResponse | nullrequirednullableThe endpoint-specific payload. See this endpoint's response schema for its fields; null only when the operation returns no payload.
my_voicesVoiceDto[]requiredVoices this account has cloned. Included on the first page only when paginating.
accentstringAccent, e.g. american / british / mandarin; may be empty.
agestringPerceived age band, e.g. young / middle-aged / old; may be empty.
genderstringVoice gender, e.g. male / female; may be empty.
is_freebooleanrequiredWhether this voice is usable on the free plan; premium voices require a paid plan.
languagestringrequiredHuman-readable primary language, e.g. english. Use locale for the machine-readable tag.
localestringBCP 47 locale of this voice, e.g. en-US / en-GB / zh-TW / zh-HK; a bare language code when no region is known; empty for prompt-driven voices (gemini). Filter with locale, and pass the same value as locale to POST /api/v1/tts to pin pronunciation.
preview_audio_urlstringrequiredURL of a short sample clip demonstrating how this voice sounds.
providerstringSpeech engine this voice comes from (e.g. elevenlabs / gemini / minimax), so you can pick voices by engine. Filter with provider. Descriptive, not a guarantee: synthesis may fall back to another engine.
tagsstring | nullnullableFree-text descriptors to help pick a voice; superseded by the structured fields below but kept for compatibility. May be empty.
use_casesstring[]Suggested use cases, e.g. narration / conversational; may be empty.
voice_idstringrequiredVoice identifier. Pass it as voice_id in a text script, or as the target voice when converting uploaded audio.
next_cursorintegerCursor for the next page of public_voices; pass it back as cursor. 0 means no more pages (always 0 when the request did not paginate).
public_voicesVoiceDto[]requiredPlatform-provided voices available for text-to-speech.
accentstringAccent, e.g. american / british / mandarin; may be empty.
agestringPerceived age band, e.g. young / middle-aged / old; may be empty.
genderstringVoice gender, e.g. male / female; may be empty.
is_freebooleanrequiredWhether this voice is usable on the free plan; premium voices require a paid plan.
languagestringrequiredHuman-readable primary language, e.g. english. Use locale for the machine-readable tag.
localestringBCP 47 locale of this voice, e.g. en-US / en-GB / zh-TW / zh-HK; a bare language code when no region is known; empty for prompt-driven voices (gemini). Filter with locale, and pass the same value as locale to POST /api/v1/tts to pin pronunciation.
preview_audio_urlstringrequiredURL of a short sample clip demonstrating how this voice sounds.
providerstringSpeech engine this voice comes from (e.g. elevenlabs / gemini / minimax), so you can pick voices by engine. Filter with provider. Descriptive, not a guarantee: synthesis may fall back to another engine.
tagsstring | nullnullableFree-text descriptors to help pick a voice; superseded by the structured fields below but kept for compatibility. May be empty.
use_casesstring[]Suggested use cases, e.g. narration / conversational; may be empty.
voice_idstringrequiredVoice identifier. Pass it as voice_id in a text script, or as the target voice when converting uploaded audio.
messagestringHuman-readable status message; "success" on a successful call.
server_timestring · date-timerequiredServer-side timestamp when the response was produced, in ISO 8601 format (UTC).
defaultError response. All failures share one envelope: an error object with a numeric code, a human-readable message, an optional details string, and an optional hint giving an actionable next step (useful for AI agents).
application/json
errorErrorDetailrequiredcodeintegerrequiredMachine-readable error code. Mirrors the HTTP status for transport-level failures (e.g. 401, 404, 422, 500) and may carry a business-specific code otherwise.
detailsstring | nullnullableOptional structured detail about the failure, e.g. a JSON string of per-field validation errors on a 422. Absent when there is nothing extra to report.
hintstring | nullnullableActionable next step for resolving the error, written for both humans and AI agents (e.g. how to fix the request, or where to obtain an API key). May be absent.
messagestringrequiredHuman-readable explanation of what went wrong. Safe to log or surface to end users; not localized.