Коды ошибок
Все ошибки API возвращаются в формате {"error": "..."} с соответствующим HTTP-кодом. Ниже — полный список и как реагировать.
{"error": "model should be in provider/model format"}- • Модель указана без префикса провайдера (gpt-4o вместо openai/gpt-4o)
- • Пустой messages-массив
- • Некорректный JSON в теле запроса
- • Отсутствует обязательный параметр (model, messages)
Проверьте формат модели в /docs/models. Валидируйте JSON через jq или Postman.
{"error": "invalid API key"}- • Отсутствует заголовок Authorization
- • Неверный формат — нужно: Bearer eak_...
- • Ключ удалён или никогда не существовал
- • Использован ключ от стороннего сервиса вместо eak_*
Проверьте ключ на /dashboard. При необходимости создайте новый. Убедитесь что нет пробелов в заголовке.
{
"error": "insufficient balance: have 0.50 ₽, need 6.00 ₽",
"required_cost": 6
}- • Баланс меньше стоимости операции
- • Дорогая модель (DALL-E 3, Midjourney) при низком балансе
- • Длинный контекст быстро съел баланс
Пополните баланс на /billing. Или выберите более дешёвую модель (gpt-4o-mini, flux-schnell).
{"error": "model not found: openai/gpt-6"}- • Модель не существует или снята с обслуживания
- • Опечатка в названии модели
- • Модель ещё не подключена к EasyLLM
Проверьте список моделей: GET /v1/models или /docs/models. Для запроса новой модели — напишите в поддержку.
{"error": "rate limit exceeded, retry after 2s"}- • Превышен rate limit на уровне провайдера (OpenAI/Anthropic)
- • Много параллельных запросов с одного ключа
- • Провайдер временно троттлит всех
Добавьте exponential backoff (см. пример ниже). Для высоких нагрузок — свяжитесь с нами для увеличения лимитов.
{"error": "internal server error"}- • Провайдер (OpenAI/Anthropic) лежит
- • Баг в нашем прокси
- • Таймаут соединения с upstream
Сделайте retry через 5 секунд. Если ошибка стабильная — проверьте /status и напишите в поддержку.
{"error": "upstream provider unavailable"}- • OpenAI/Anthropic сейчас недоступны
- • Сетевой разрыв между нами и провайдером
Retry. Рассмотрите auto-fallback на другую модель: openai/gpt-4o → anthropic/claude-sonnet-4.
Exponential backoff
Для 429 и 5xx добавьте автоматические повторы с увеличивающейся задержкой:
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 не делаем:
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Не нашли свою ошибку?
Напишите в поддержку с полным ответом сервера (заголовки + тело). Добавим в эту страницу.