Обработка ошибок
Справочник по 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;
}
}
}