Коды ошибок
Справочник по кодам ошибок API и рекомендации по их обработке.
Формат ошибок
Все ошибки API возвращаются в едином формате:
{
"error": {
"message": "Invalid API key provided",
"type": "authentication_error",
"code": "invalid_api_key",
"param": null
}
}Поля ошибки
messageЧеловекочитаемое описание ошибкиtypeКатегория ошибки (authentication_error, rate_limit_error, etc.)codeМашиночитаемый код ошибкиparamПараметр, вызвавший ошибку (если применимо)Таблица кодов
Неверный формат запроса или отсутствуют обязательные параметры.
Решение: Проверьте JSON синтаксис и наличие всех required полей.
Неверный или отсутствующий API ключ.
Решение: Проверьте заголовок Authorization и правильность ключа.
Недостаточно средств на балансе.
Решение: Пополните баланс в личном кабинете.
Доступ запрещён. API ключ заблокирован или отозван.
Решение: Создайте новый ключ или обратитесь в поддержку.
Запрошенная модель или ресурс не найден.
Решение: Проверьте ID модели. Используйте /v1/models для списка доступных.
Превышен лимит запросов (rate limit).
Решение: Снизьте частоту запросов или обновите тарифный план.
Внутренняя ошибка сервера.
Решение: Повторите запрос позже. Если ошибка повторяется - обратитесь в поддержку.
Сервис временно недоступен (перегрузка или обслуживание).
Решение: Повторите запрос через несколько минут.
Примеры частых ошибок
Rate Limit (429)
{
"error": {
"message": "Rate limit exceeded. Please slow down your requests.",
"type": "rate_limit_error",
"code": "rate_limit_exceeded",
"param": null
}
}Insufficient Funds (402)
{
"error": {
"message": "Insufficient funds. Please top up your balance.",
"type": "payment_error",
"code": "insufficient_funds",
"param": null
}
}Обработка ошибок
Python
1from openai import OpenAI, APIError, RateLimitError, AuthenticationError23client = OpenAI(4 base_url="https://api.42gpu.ru/v1",5 api_key="sk-air-your-api-key"6)78try:9 response = client.chat.completions.create(10 model="gpt-4-turbo",11 messages=[{"role": "user", "content": "Hello"}]12 )13except AuthenticationError as e:14 print(f"Ошибка авторизации: {e}")15 # Проверьте API ключ16except RateLimitError as e:17 print(f"Rate limit: {e}")18 # Подождите и повторите19 import time20 time.sleep(60)21except APIError as e:22 print(f"API ошибка: {e}")23 # Обработка других ошибокJavaScript
1import OpenAI from 'openai';23const client = new OpenAI({4 baseURL: 'https://api.42gpu.ru/v1',5 apiKey: 'sk-air-your-api-key',6});78async function makeRequest() {9 try {10 const response = await client.chat.completions.create({11 model: 'gpt-4-turbo',12 messages: [{ role: 'user', content: 'Hello' }],13 });14 return response;15 } catch (error) {16 if (error instanceof OpenAI.AuthenticationError) {17 console.error('Invalid API key');18 } else if (error instanceof OpenAI.RateLimitError) {19 console.error('Rate limit exceeded, retrying...');20 await new Promise(resolve => setTimeout(resolve, 60000));21 return makeRequest();22 } else if (error instanceof OpenAI.APIError) {23 console.error(`API Error: ${error.status} - ${error.message}`);24 }25 throw error;26 }27}Стратегия повторных запросов
Для ошибок 429 (rate limit) и 503 (service unavailable) рекомендуется использовать exponential backoff:
1import time2from openai import OpenAI, RateLimitError34client = OpenAI(5 base_url="https://api.42gpu.ru/v1",6 api_key="sk-air-your-api-key"7)89def make_request_with_retry(max_retries=3):10 for attempt in range(max_retries):11 try:12 return client.chat.completions.create(13 model="gpt-4-turbo",14 messages=[{"role": "user", "content": "Hello"}]15 )16 except RateLimitError:17 if attempt < max_retries - 1:18 wait_time = 2 ** attempt # Exponential backoff19 print(f"Rate limited. Waiting {wait_time}s...")20 time.sleep(wait_time)21 else:22 raise2324response = make_request_with_retry()Совет: OpenAI SDK автоматически делает retry для временных ошибок. Для кастомной логики используйте библиотеки вроде tenacity (Python) или p-retry (JavaScript).
Best Practices
Всегда обрабатывайте ошибки
Никогда не игнорируйте ошибки API. Логируйте их для отладки и показывайте пользователям понятные сообщения.
Используйте timeout
Устанавливайте разумные таймауты (30-60 секунд) для запросов к API, чтобы избежать зависания приложения.
Мониторьте ошибки
Отслеживайте процент ошибок в вашем приложении. Резкий рост может указывать на проблемы с API ключом или превышение лимитов.
Graceful degradation
При недоступности API предусмотрите fallback-сценарий: кэшированные ответы, альтернативная модель или понятное сообщение пользователю.