Ошибки используют формат RFC 7807 application/problem+json — единый и машиночитаемый:
HTTP/1.1 400 Bad Request
Content-Type: application/problem+json
{
"type": "https://docs.grem.capital/api/errors/validation",
"title": "validation",
"status": 400,
"detail": "totalArea (m2) is required",
"requestId": "req_…"
}
Всегда логируйте requestId — указывайте его в обращениях в поддержку для трассировки вызова.
Коды статусов
| Статус | Значение | Что делать |
|---|---|---|
400 | Ошибка валидации | Исправьте тело/параметры запроса по detail. |
401 | Неверный или отсутствующий ключ | Проверьте заголовок Authorization. |
402 | Недостаточно средств или квоты | Пополните баланс или повысьте тариф. |
403 | Нет scope | У ключа нет области доступа для этого инструмента. |
404 | Не найдено | Неверный путь или ресурс не существует. |
409 | Конфликт идемпотентности | Запрос с этим Idempotency-Key ещё выполняется. |
422 | Бизнес-правило | Запрос корректен, но не может быть обработан как есть. |
429 | Превышен лимит | Сделайте паузу и повторите — см. Лимиты. |
5xx | Ошибка сервиса | Временная; повторите с backoff. |
Отклонённый запрос (4xx) не тарифицируется — плата за вызов списывается только при успехе.
Обработка ошибок
- Ветвитесь по числовому HTTP-
status, а не по человекочитаемому текстуdetail. - Повторяйте
429и5xxс экспоненциальным backoff; не повторяйте4xx(кроме409— после завершения выполняющегося запроса). - Детали провайдеров в ошибках никогда не раскрываются — сбой отдаётся как обобщённый
provider_error.