List all voices
curl https://texttospeech.responsivevoice.org/v2/voices -H 'X-API-Key: YOUR_API_KEY' -H 'X-API-Secret: YOUR_API_SECRET'import { ResponsiveVoiceAPIClient } from '@responsivevoice/api-client';
const client = new ResponsiveVoiceAPIClient({ apiKey: 'YOUR_API_KEY', apiSecret: 'YOUR_API_SECRET' });const { voices } = await client.getVoices();Returns the full voice collection: user-facing responsive voices and internal system voices used for voice resolution. When platform parameters are provided, platform-specific availability rules are applied — voices unavailable on the given browser/OS combination are excluded. Also includes premium BYOK (Bring Your Own Key) provider voices when the user has configured API credentials for their website. Each voice in the response includes HATEOAS _links for self-discovery, synthesis, and streaming navigation.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”Browser name (e.g. “Chrome”, “Firefox”, “Safari”). Used to filter voices by platform-specific availability rules.
Browser version string (e.g. “120.0”). Refines platform filtering for version-specific voice support.
Operating system name (e.g. “Windows”, “macOS”, “Android”, “iOS”). Used to filter voices by OS-specific availability.
OS version string (e.g. “10”, “14.2”). Refines platform filtering for version-specific voice support.
Responses
Section titled “ Responses ”Voice collection containing user-facing voices with HATEOAS navigation links, system voices for internal resolution, and a total count. Supports ETag-based conditional requests.
Voice collection with HATEOAS navigation
object
User-facing voice with HATEOAS links
object
HATEOAS links on a voice resource
object
HATEOAS link with absolute URL
object
HATEOAS synthesize action link
object
object
HATEOAS streaming synthesize link (HTTP audio streaming)
object
object
HATEOAS WebSocket stream link
object
object
Low-level system voice mapping
object
Available TTS service backends
HATEOAS links on the voice collection
object
HATEOAS link with absolute URL
object
Example
{ "voices": [ { "gender": "f", "_links": { "synthesize": { "method": "POST" }, "synthesize:stream": { "method": "POST", "accept": "text/event-stream" }, "stream:websocket": { "protocol": "websocket" } } } ], "systemVoices": [ { "service": "g1" } ]}Headers
Section titled “Headers ”Maximum requests permitted for the authenticated key per minute.
Maximum requests permitted for the authenticated key per minute.
Requests remaining in the current per-minute window; 0 once the per-minute limit is reached. Reflects the per-minute limit, not the burst check — a burst 429 may report a value above 0.
Requests remaining in the current per-minute window; 0 once the per-minute limit is reached. Reflects the per-minute limit, not the burst check — a burst 429 may report a value above 0.
Not modified (ETag match)
API key required
API error response
object
object
Example generated
{ "error": { "message": "example", "code": "example", "statusCode": 1, "errors": "example" }}Rate limit exceeded. The body code is RATE_LIMIT_EXCEEDED (per-minute tier limit) or BURST_RATE_LIMIT_EXCEEDED (per API key + client IP burst).
API error response
object
object
Example generated
{ "error": { "message": "example", "code": "example", "statusCode": 1, "errors": "example" }}Headers
Section titled “Headers ”Maximum requests permitted for the authenticated key per minute.
Maximum requests permitted for the authenticated key per minute.
Requests remaining in the current per-minute window; 0 once the per-minute limit is reached. Reflects the per-minute limit, not the burst check — a burst 429 may report a value above 0.
Requests remaining in the current per-minute window; 0 once the per-minute limit is reached. Reflects the per-minute limit, not the burst check — a burst 429 may report a value above 0.
Seconds to wait before retrying. Dynamic — varies with how far over the limit the request went; honor this header rather than assuming a fixed delay.
Seconds to wait before retrying. Dynamic — varies with how far over the limit the request went; honor this header rather than assuming a fixed delay.