Начать пользоваться на www.aijora.ru
AijoraДокументация

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

Справочник по HTTP кодам ошибок API

При работе с Aijora API важно правильно обрабатывать ошибки, чтобы ваше приложение работало стабильно.

Структура ответа с ошибкой

Все ошибки возвращаются в едином формате:

{
  "error": {
    "message": "Описание ошибки",
    "type": "тип_ошибки",
    "code": "HTTP_код"
  }
}

HTTP коды ошибок

400 Bad Request

Неправильный формат запроса или невалидные параметры.

{
  "error": {
    "message": "Missing required parameter: 'model'",
    "type": "invalid_request_error",
    "code": "400"
  }
}

Причины:

  • Отсутствует обязательный параметр
  • Неправильный формат JSON
  • Значение параметра вне допустимого диапазона

401 Unauthorized

Невалидный или отсутствующий API ключ.

{
  "error": {
    "message": "Invalid API key",
    "type": "invalid_request_error",
    "code": "401"
  }
}

Решение: Проверьте формат заголовка Authorization: Bearer ВАШ_API_КЛЮЧ

402 Payment Required

Недостаточно средств на балансе.

{
  "error": {
    "message": "Недостаточно средств на балансе",
    "type": "insufficient_balance",
    "code": "402"
  }
}

Решение: Пополните баланс в консоли

403 Forbidden

API ключ отключен или доступ запрещен.

{
  "error": {
    "message": "API key is disabled",
    "type": "permission_denied",
    "code": "403"
  }
}

Решение: Проверьте статус ключа в консоли

429 Too Many Requests

Превышен лимит запросов (rate limit).

{
  "error": {
    "message": "Rate limit exceeded",
    "type": "rate_limit_exceeded",
    "code": "429"
  }
}

Решение: Подождите и повторите запрос с задержкой

500 Internal Server Error

Внутренняя ошибка сервера.

{
  "error": {
    "message": "Internal server error",
    "type": "server_error",
    "code": "500"
  }
}

Решение: Повторите запрос через несколько секунд

503 Service Unavailable

Сервис временно недоступен.

{
  "error": {
    "message": "Service temporarily unavailable",
    "type": "service_unavailable",
    "code": "503"
  }
}

Решение: Подождите несколько минут и повторите запрос

Пример обработки

async function callAPI(message) {
  try {
    const response = await fetch('https://api.aijora.com/api/v1/chat/completions', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${process.env.AIJORA_API_KEY}`
      },
      body: JSON.stringify({
        model: 'gpt-4o-mini',
        messages: [{ role: 'user', content: message }]
      })
    });

    if (!response.ok) {
      const error = await response.json();
      throw new Error(`API Error ${response.status}: ${error.error.message}`);
    }

    const data = await response.json();
    return data.choices[0].message.content;
    
  } catch (error) {
    console.error('Ошибка:', error.message);
    throw error;
  }
}
import os
import requests

def call_api(message):
    try:
        response = requests.post(
            'https://api.aijora.com/api/v1/chat/completions',
            headers={
                'Authorization': f'Bearer {os.getenv("AIJORA_API_KEY")}'
            },
            json={
                'model': 'gpt-4o-mini',
                'messages': [{'role': 'user', 'content': message}]
            }
        )
        
        response.raise_for_status()
        
        data = response.json()
        return data['choices'][0]['message']['content']
        
    except requests.exceptions.HTTPError as e:
        error_data = response.json()
        print(f"API Error {response.status_code}: {error_data['error']['message']}")
        raise
    except Exception as e:
        print(f"Error: {str(e)}")
        raise

Retry при ошибках

Для ошибок 429 и 500+ рекомендуется повторять запрос:

async function callWithRetry(message, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    try {
      const response = await fetch('https://api.aijora.com/api/v1/chat/completions', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'Authorization': `Bearer ${process.env.AIJORA_API_KEY}`
        },
        body: JSON.stringify({
          model: 'gpt-4o-mini',
          messages: [{ role: 'user', content: message }]
        })
      });

      if (!response.ok) {
        const error = await response.json();
        
        // При 429 или 500+ повторяем
        if (response.status === 429 || response.status >= 500) {
          const delay = Math.pow(2, attempt) * 1000; // 1s, 2s, 4s...
          await new Promise(resolve => setTimeout(resolve, delay));
          continue;
        }
        
        throw new Error(error.error.message);
      }

      return await response.json();
      
    } catch (error) {
      if (attempt === maxRetries - 1) throw error;
    }
  }
}