# Обработка ошибок
## Единый формат ответа об ошибке
Все ошибки API возвращают единый формат JSON:
```json
{
"code": 2010,
"status": "error",
"message": "You don't have enough credit to create this task",
"suggestion": "Please purchase more credit",
"request_id": "req_abc123"
}
```
| Поле | Тип | Описание |
| :-: | :-: | :-: |
| code | целое число | Код ошибки |
| status | строка | Результат запроса; `error`, если запрос завершился ошибкой |
| message | строка | Описание ошибки |
| suggestion | строка | Предлагаемое исправление |
| request_id | строка | Уникальный идентификатор запроса для устранения неполадок |
## HTTP Коды состояния
| Код состояния | Значение | Описание |
| :-: | :-: | :-: |
| 200 | Успех | Запрос успешно обработан |
| 400 | Неверные параметры | Обязательные параметры отсутствуют или имеют неправильный формат. |
| 401 | Неаутентифицированный | API Key отсутствует или недействителен. |
| 403 | Недостаточно разрешений | У вас нет разрешения на доступ к ресурсу или ваших кредитов недостаточно. |
| 404 | Ресурс не найден | Запрошенная задача или ресурс не существует. |
| 429 | Слишком много запросов | Превышен лимит частоты запросов или лимит параллельных задач. Уменьшите частоту запросов или повторите попытку позже |
| 500 | Ошибка сервиса | Внутренняя ошибка сервера. Повторите попытку позже |
## Ссылка на код ошибки
| Код ошибки | Значение | Рекомендуемое обращение |
| :-: | :-: | :-: |
| 1000 | Неверный API Key | Проверьте, правильный ли API Key или он был удален. |
| 1001 | Несанкционированный | Проверьте, содержит ли заголовок запроса `Authorization`. |
| 1007 | Превышен лимит частоты запросов | Уменьшите частоту запросов и реализуйте повторные попытки с экспоненциальной задержкой. |
| 2000 | Превышен лимит параллельных задач | Дождитесь завершения задачи той же категории, прежде чем создавать новые, или подождите столько, сколько указано в заголовке ответа `Retry-After`. См. [Ограничения частоты запросов](/ru/docs/rate-limits) |
| 2002 | Неподдерживаемый параметр запроса | Проверьте, соответствуют ли имена и значения полей тела запроса документации. |
| 2003 | Пустой входной файл | Убедитесь, что загруженный файл не пуст и имеет допустимый формат. |
| 2004 | Неподдерживаемый тип файла | Проверьте, находится ли формат файла в списке поддерживаемых |
| 2008 | Нарушение политики в отношении контента | Измените входной контент, чтобы избежать запрещенных слов или изображений. |
| 2010 | Недостаточно кредитов | Пополнение кредитов в консоли |
| 2015 | Версия устарела | Обновите до последней версии API. |
| 2018 | Модель слишком сложная | Уменьшите сложность или количество полигонов входной модели. |
## Примеры обработки ошибок
### Python
```python
import time
import requests
def call_api_with_retry(url, headers, payload=None, max_retries=3):
for attempt in range(max_retries):
if payload:
response = requests.post(url, headers=headers, json=payload)
else:
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.json()
if response.status_code == 429:
wait = 2 ** attempt
print(f"Rate limit triggered. Retrying in {wait} seconds...")
time.sleep(wait)
continue
error = response.json()
raise Exception(
f"API error [{error['code']}]: {error['message']} "
f"(suggestion: {error.get('suggestion', 'none')})"
)
raise Exception("Maximum retry attempts exhausted")
```
### JavaScript
```javascript
async function callApiWithRetry(url, options, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const response = await fetch(url, options);
if (response.ok) {
return await response.json();
}
if (response.status === 429) {
const wait = 2 ** attempt * 1000;
console.log(`Rate limit triggered. Retrying in ${wait / 1000} seconds...`);
await new Promise(resolve => setTimeout(resolve, wait));
continue;
}
const error = await response.json();
throw new Error(
`API error [${error.code}]: ${error.message} (suggestion: ${error.suggestion || "none"})`
);
}
throw new Error("Maximum retry attempts exhausted");
}
```
## Рекомендации по стратегии повторной попытки
Для повторяющихся ошибок, таких как 429 ограничений скорости и 500 ошибок обслуживания, используйте экспоненциальную стратегию отсрочки:
1. Первая повторная попытка: подождите 1 секунду.
2. Вторая повторная попытка: подождите 2 секунды.
3. Третья повторная попытка: подождите 4 секунды.
4. Сохраняйте максимальное количество повторов на уровне 5 или меньше.
Для неповторяемых ошибок, таких как 400, 401 и 403, создайте исключение напрямую и устраните основную проблему.
Обработка ошибок
Единый формат ответа об ошибке
Все ошибки API возвращают единый формат JSON:
{
"code": 2010,
"status": "error",
"message": "You don't have enough credit to create this task",
"suggestion": "Please purchase more credit",
"request_id": "req_abc123"
}
| Поле |
Тип |
Описание |
| code |
целое число |
Код ошибки |
| status |
строка |
Результат запроса; error, если запрос завершился ошибкой |
| message |
строка |
Описание ошибки |
| suggestion |
строка |
Предлагаемое исправление |
| request_id |
строка |
Уникальный идентификатор запроса для устранения неполадок |
HTTP Коды состояния
| Код состояния |
Значение |
Описание |
| 200 |
Успех |
Запрос успешно обработан |
| 400 |
Неверные параметры |
Обязательные параметры отсутствуют или имеют неправильный формат. |
| 401 |
Неаутентифицированный |
API Key отсутствует или недействителен. |
| 403 |
Недостаточно разрешений |
У вас нет разрешения на доступ к ресурсу или ваших кредитов недостаточно. |
| 404 |
Ресурс не найден |
Запрошенная задача или ресурс не существует. |
| 429 |
Слишком много запросов |
Превышен лимит частоты запросов или лимит параллельных задач. Уменьшите частоту запросов или повторите попытку позже |
| 500 |
Ошибка сервиса |
Внутренняя ошибка сервера. Повторите попытку позже |
Ссылка на код ошибки
| Код ошибки |
Значение |
Рекомендуемое обращение |
| 1000 |
Неверный API Key |
Проверьте, правильный ли API Key или он был удален. |
| 1001 |
Несанкционированный |
Проверьте, содержит ли заголовок запроса Authorization. |
| 1007 |
Превышен лимит частоты запросов |
Уменьшите частоту запросов и реализуйте повторные попытки с экспоненциальной задержкой. |
| 2000 |
Превышен лимит параллельных задач |
Дождитесь завершения задачи той же категории, прежде чем создавать новые, или подождите столько, сколько указано в заголовке ответа Retry-After. См. Ограничения частоты запросов |
| 2002 |
Неподдерживаемый параметр запроса |
Проверьте, соответствуют ли имена и значения полей тела запроса документации. |
| 2003 |
Пустой входной файл |
Убедитесь, что загруженный файл не пуст и имеет допустимый формат. |
| 2004 |
Неподдерживаемый тип файла |
Проверьте, находится ли формат файла в списке поддерживаемых |
| 2008 |
Нарушение политики в отношении контента |
Измените входной контент, чтобы избежать запрещенных слов или изображений. |
| 2010 |
Недостаточно кредитов |
Пополнение кредитов в консоли |
| 2015 |
Версия устарела |
Обновите до последней версии API. |
| 2018 |
Модель слишком сложная |
Уменьшите сложность или количество полигонов входной модели. |
Примеры обработки ошибок
import time
import requests
def call_api_with_retry(url, headers, payload=None, max_retries=3):
for attempt in range(max_retries):
if payload:
response = requests.post(url, headers=headers, json=payload)
else:
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.json()
if response.status_code == 429:
wait = 2 ** attempt
print(f"Rate limit triggered. Retrying in {wait} seconds...")
time.sleep(wait)
continue
error = response.json()
raise Exception(
f"API error [{error['code']}]: {error['message']} "
f"(suggestion: {error.get('suggestion', 'none')})"
)
raise Exception("Maximum retry attempts exhausted")
async function callApiWithRetry(url, options, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const response = await fetch(url, options);
if (response.ok) {
return await response.json();
}
if (response.status === 429) {
const wait = 2 ** attempt * 1000;
console.log(`Rate limit triggered. Retrying in ${wait / 1000} seconds...`);
await new Promise(resolve => setTimeout(resolve, wait));
continue;
}
const error = await response.json();
throw new Error(
`API error [${error.code}]: ${error.message} (suggestion: ${error.suggestion || "none"})`
);
}
throw new Error("Maximum retry attempts exhausted");
}
Рекомендации по стратегии повторной попытки
Для повторяющихся ошибок, таких как 429 ограничений скорости и 500 ошибок обслуживания, используйте экспоненциальную стратегию отсрочки:
- Первая повторная попытка: подождите 1 секунду.
- Вторая повторная попытка: подождите 2 секунды.
- Третья повторная попытка: подождите 4 секунды.
- Сохраняйте максимальное количество повторов на уровне 5 или меньше.
Для неповторяемых ошибок, таких как 400, 401 и 403, создайте исключение напрямую и устраните основную проблему.