Errors
HTTP статус-коды Zowy API совместимы с практикой OpenAI: 2xx успех, 4xx ошибка клиента, 5xx ошибка сервера или upstream.
Формат тела ошибки
{
"error": {
"code": "invalid_api_key",
"message": "API key is missing or invalid",
"type": "authentication_error"
}
}
HTTP коды
| Код | Имя | Когда | Что делать |
|---|---|---|---|
| 200 | OK | Успешный запрос | — |
| 400 | Bad Request | Невалидный JSON, отсутствует обязательное поле, неподдерживаемая модель | Проверьте тело запроса; error.message содержит детали |
| 401 | Unauthorized | Нет/невалидный/отозванный ключ | Проверьте формат Bearer zowy_..., перевыпустите ключ при необходимости |
| 402 | Payment Required | Ключ валиден, но активного пакета нет / пакет исчерпан / просрочен | Купите пакет на /pricing |
| 403 | Forbidden | Доступ к запрошенной модели или функции недоступен для этого ключа | Проверьте права ключа в Developer Portal |
| 404 | Not Found | Endpoint не существует | Проверьте путь, см. Docs |
| 429 | Too Many Requests | Превышен per-key rate limit (default 60/мин, 1000/час) | Снизьте частоту, exponential backoff. Запросите увеличение через info@zowy.ai |
| 500 | Internal Server Error | Внутренняя ошибка Zowy proxy | Повторите; если сохраняется — напишите на support |
| 502 | Bad Gateway | Upstream-модель вернула невалидный ответ | Retry с backoff. Попробуйте другую модель |
| 503 | Service Unavailable | Upstream временно недоступен | Retry с экспоненциальным backoff |
| 504 | Gateway Timeout | Upstream не ответил в timeout (300s) | Уменьшите max_tokens, попробуйте streaming |
WebSocket ошибки
Voice WebSocket посылает error событие и затем закрывает соединение:
{"type": "error", "code": "no_active_package", "message": "..."}
| code | Когда |
|---|---|
| invalid_token | Невалидный или отозванный API-ключ в query string |
| no_active_package | Нет активного Voice-пакета |
| voice_not_found | Указанный voice в config не существует |
| session_limit | Достигнут hard-cap 15 минут |
| upstream_error | Ошибка от upstream-модели |
Retry и backoff
Безопасно повторять с экспоненциальным backoff: 5xx, 429. Не повторяйте 4xx кроме 429 — это ваша ошибка.
Python
import time, requests
for attempt in range(5):
r = requests.post(URL, headers=H, json=BODY, timeout=60)
if r.status_code < 500 and r.status_code != 429:
break
time.sleep(2 ** attempt) # 1, 2, 4, 8, 16 sec