Справочник

Коды ошибок

Все ошибки API возвращаются в формате {"error": "..."} с соответствующим HTTP-кодом. Ниже — полный список и как реагировать.

400
Bad Request
Неверный запрос
Пример ответа
json
{"error": "model should be in provider/model format"}
Причины
  • Модель указана без префикса провайдера (gpt-4o вместо openai/gpt-4o)
  • Пустой messages-массив
  • Некорректный JSON в теле запроса
  • Отсутствует обязательный параметр (model, messages)
Как исправить

Проверьте формат модели в /docs/models. Валидируйте JSON через jq или Postman.

401
Unauthorized
Нет авторизации
Пример ответа
json
{"error": "invalid API key"}
Причины
  • Отсутствует заголовок Authorization
  • Неверный формат — нужно: Bearer eak_...
  • Ключ удалён или никогда не существовал
  • Использован ключ от стороннего сервиса вместо eak_*
Как исправить

Проверьте ключ на /dashboard. При необходимости создайте новый. Убедитесь что нет пробелов в заголовке.

402
Payment Required
Нет средств
Пример ответа
json
{
  "error": "insufficient balance: have 0.50 ₽, need 6.00 ₽",
  "required_cost": 6
}
Причины
  • Баланс меньше стоимости операции
  • Дорогая модель (DALL-E 3, Midjourney) при низком балансе
  • Длинный контекст быстро съел баланс
Как исправить

Пополните баланс на /billing. Или выберите более дешёвую модель (gpt-4o-mini, flux-schnell).

404
Not Found
Не найдено
Пример ответа
json
{"error": "model not found: openai/gpt-6"}
Причины
  • Модель не существует или снята с обслуживания
  • Опечатка в названии модели
  • Модель ещё не подключена к EasyLLM
Как исправить

Проверьте список моделей: GET /v1/models или /docs/models. Для запроса новой модели — напишите в поддержку.

429
Too Many Requests
Rate limit
Пример ответа
json
{"error": "rate limit exceeded, retry after 2s"}
Причины
  • Превышен rate limit на уровне провайдера (OpenAI/Anthropic)
  • Много параллельных запросов с одного ключа
  • Провайдер временно троттлит всех
Как исправить

Добавьте exponential backoff (см. пример ниже). Для высоких нагрузок — свяжитесь с нами для увеличения лимитов.

500
Internal Server Error
Наша ошибка
Пример ответа
json
{"error": "internal server error"}
Причины
  • Провайдер (OpenAI/Anthropic) лежит
  • Баг в нашем прокси
  • Таймаут соединения с upstream
Как исправить

Сделайте retry через 5 секунд. Если ошибка стабильная — проверьте /status и напишите в поддержку.

502
Bad Gateway
Upstream проблема
Пример ответа
json
{"error": "upstream provider unavailable"}
Причины
  • OpenAI/Anthropic сейчас недоступны
  • Сетевой разрыв между нами и провайдером
Как исправить

Retry. Рассмотрите auto-fallback на другую модель: openai/gpt-4o → anthropic/claude-sonnet-4.

Exponential backoff

Для 429 и 5xx добавьте автоматические повторы с увеличивающейся задержкой:

retry.py
import time
from openai import OpenAI, RateLimitError, APIError

client = OpenAI(api_key="eak_YOUR_KEY", base_url="https://api.easyllm.kz/v1")

def chat_with_retry(messages, max_retries=3):
    for attempt in range(max_retries):
        try:
            return client.chat.completions.create(
                model="openai/gpt-4o-mini",
                messages=messages,
            )
        except RateLimitError:
            wait = 2 ** attempt  # 1, 2, 4 секунды
            time.sleep(wait)
        except APIError as e:
            if e.status_code >= 500 and attempt < max_retries - 1:
                time.sleep(2 ** attempt)
                continue
            raise
    raise Exception("Max retries exceeded")

Auto-fallback между моделями

Если OpenAI лежит — переключайтесь на Claude или DeepSeek. Для 400/401/402 fallback не делаем:

fallback.py
def chat_with_fallback(messages):
    models = [
        "openai/gpt-4o-mini",          # основной
        "anthropic/claude-haiku-4",    # резерв
        "deepseek/deepseek-v3",        # аварийный
    ]
    last_error = None
    for model in models:
        try:
            return client.chat.completions.create(model=model, messages=messages)
        except APIError as e:
            last_error = e
            if e.status_code < 500:  # 400/401/402 — не пробуем другие модели
                raise
            continue
    raise last_error

Не нашли свою ошибку?

Напишите в поддержку с полным ответом сервера (заголовки + тело). Добавим в эту страницу.