Skip to content

Ошибки и лимиты

Формат ошибок

Все ошибки возвращают JSON с полем detail:

json
{
  "detail": "Описание ошибки"
}

HTTP-коды ответов

КодЗначениеКогда возникает
400Bad RequestНекорректный запрос: текст слишком длинный, не указан голос, неверный формат
401UnauthorizedОтсутствует, невалидный, истёкший или отозванный API-ключ
402Payment RequiredНедостаточный баланс для синтеза
403ForbiddenМодель недоступна на вашем тарифе
408Request TimeoutСинтез занял более 5 минут
429Too Many RequestsПревышен лимит запросов или параллельных подключений
500Internal Server ErrorВнутренняя ошибка сервера
502Bad GatewayTTS-воркер не смог обработать запрос

Лимиты запросов

Лимиты применяются на пользователя (не на API-ключ). Контролируются два типа ограничений:

Запросы в минуту (RPM)

Максимальное количество TTS-запросов в скользящем окне длительностью 1 минута.

Параллельные запросы

Максимальное количество TTS-запросов, обрабатываемых одновременно.

ТарифRPMПараллельных
Free51
Basic102
Pro305

Обработка ошибки 429

При превышении лимита ответ выглядит так:

json
{
  "detail": "Rate limit exceeded (5/5 requests per minute)"
}

Рекомендуемая стратегия — экспоненциальная задержка с базовым интервалом 1 секунда.

python
import time
import requests

def synthesize_with_retry(url, headers, payload, max_retries=3):
    for attempt in range(max_retries):
        response = requests.post(url, headers=headers, json=payload)
        if response.status_code == 429:
            delay = 2 ** attempt
            time.sleep(delay)
            continue
        return response
    raise Exception("Превышено количество попыток")