Коды ошибок
При возникновении ошибки API SNABZHENETS+ возвращает стандартный ответ:
json
{
"error": "VALIDATION_ERROR",
"message": "Подробное описание ошибки",
"statusCode": 400
}HTTP-статусы
| Статус | Значение |
|---|---|
200 | Успешный запрос |
201 | Ресурс создан |
400 | Ошибка валидации данных |
401 | Не аутентифицирован |
403 | Нет прав на это действие |
404 | Ресурс не найден |
409 | Конфликт (например, дублирование) |
429 | Превышен лимит запросов |
422 | Бизнес-логика не позволяет выполнить операцию |
500 | Внутренняя ошибка сервера |
Коды ошибок приложения
| Код | Описание |
|---|---|
VALIDATION_ERROR | Переданные данные не прошли валидацию |
UNAUTHORIZED | Токен отсутствует или истёк |
FORBIDDEN | Действие запрещено для вашей роли |
NOT_FOUND | Запрошенный ресурс не найден |
DUPLICATE_ENTRY | Запись с такими данными уже существует |
rate_limited | Превышен лимит публичного Integration API |
TENANT_MISMATCH | Ресурс принадлежит другому порталу |
INVALID_STATUS_TRANSITION | Переход в указанный статус невозможен |
INSUFFICIENT_PAYMENT | Сумма оплаты превышает остаток по счёту |
Rate limit
Публичный Integration API возвращает 429, когда tenant/API-key bucket исчерпан:
json
{
"statusCode": 429,
"error": "rate_limited",
"message": "Public API rate limit exceeded",
"limit": 300,
"remaining": 0,
"resetInSeconds": 17
}Ответ также содержит Retry-After, RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset, RateLimit-Policy и совместимые X-RateLimit-* headers. Клиенту нужно дождаться Retry-After или использовать backoff.
Обработка ошибок
Рекомендуется обрабатывать ошибки по коду:
javascript
const response = await fetch('/api/v1/purchase-requisitions', {
headers: { Authorization: `Bearer ${token}` }
});
if (!response.ok) {
const error = await response.json();
if (error.statusCode === 401) {
// Обновить токен или перенаправить на логин
}
}