Skip to content

Error Handling

All errors return JSON with an error object. Validation errors add an errors array detailing each problem:

{
"error": {
"message": "Language code is required",
"code": "VALIDATION_ERROR",
"statusCode": 400,
"errors": ["Provide \"lang\" or \"voice\" parameter"]
}
}
HTTP CodeCodeDescription
400VALIDATION_ERRORInvalid request parameters
401UNAUTHORIZEDInvalid or missing API key or secret
404NOT_FOUNDVoice or resource not found
429RATE_LIMIT_EXCEEDEDTier request-rate limit exceeded
429BURST_RATE_LIMIT_EXCEEDEDToo many requests from one client in a short window
500INTERNAL_ERRORServer error
502(none)Upstream TTS provider error; message carries the provider's failure, no code field

Rate limits apply per API key, which is required — requests without a valid key are rejected. The same limits apply to both the v1 and v2 APIs.

PlanRequests per minute
Free100
Commercial1,000
EnterpriseCustom

The per-minute limits above are counted per API key. A separate burst check applies per API key and client IP over a short window, so unusually rapid bursts from one client can be limited briefly even while you're under the per-minute limit.

PlanCharacters per month
Free1,000,000
CommercialFair use — contact us for high volume
EnterpriseCustom

Keys that exceed the monthly quota are suspended until upgraded.