# Возможные ошибки API

## Общий принцип

Необходимо быть готовым обрабатывать различные ошибки. В этом документе мы опишем http ошибки, которые могут возвращаться со стороны сервиса DealApp, однако так же следует предусмотреть работу с ошибками, которые возникают вне этого сервиса - ошибки доступа по сети.

## Как проверить работоспособность сервиса

Сервис DealApp имеет 2 домена: один домен для frontend'a (для облачной версии это [app.dealapp.io](http://app.dealapp.io/)), другой - для backend API (пример для облачной версии это [api.prod1.dealapp.io](http://api.prod1.dealapp.io/)).

При обращении на домен Backend сервера, возвращается JSON документ с данными о версии приложения. Этот endpoint используется для проверки работоспособности и доступности приложения.

<figure><img src="/files/7NL3oKkLkc2IzL4UtP3H" alt=""><figcaption></figcaption></figure>

## Стандартные Ошибки (http)

В случаях, если API доступно и работоспособно, сервер будет отвечать на запросы с ошибка используя http коды ответов. Это значит, что все запросы с кодом 400+ могут быть интерпретированы, как ошибка. Каждый тип ошибок с кодами 400-500 возвращает дополнительную информацию в JSON формате с сообщением о причинах, по которым происходит ошибка.

### 400 Invalid Document

Неверно отформатированный запрос. Такая ошибка возвращается, если сервер не может распознать и разобрать документ, который высылается с запросом.

Пример:

```
{
  "status": 400,
  "code": "invalid_json",
  "title": "Error parsing JSON request"
}
```

### 401 Unauthorized

Ошибка авторизации. Такая ошибка происходит в 2ух случаях: либо вы используете неверные данные для логина, либо вы пытаетесь сделать действие, на которое у вас нету прав. Для решения вопроса с авторизацией, обратитесь к соответствующему разделу в документации API.

Пример:

```
{
  "errors": [
    {
      "status": 401,
      "code": "unauthorized",
      "title": "Unauthorized",
      "detail": "Недостаточно прав"
    }
  ]
}
```

#### 408 Request Timeout

Превышение времени ожидания. Такая ошибка может возникнуть при невозможности получить информацию от внутренних сервисов: недоступность базы данных, ошибка подключения к redis.

#### 422 Unprocessable entity

Ошибка валидации данных. Такая ошибка происходит при POST / PUT / DELETE запросах и означает, что выполняемое действие не соответствует внутренней логике приложения. Также такой ответ может приходить в результате GET запроса с неверными фильтрами.Пример:

```
{
  "errors": [
    {
      "status": 401,
      "code": "unauthorized",
      "title": "Unauthorized",
      "detail": "Недостаточно прав"
    }
  ]
}
```

### 500 Internal Server Error

Ошибка в работе сервиса. Такая ошибка может значить нарушение внутренней логики приложения, либо ошибку с инфраструктурой приложения: недоступность или неверная работа контейнерной среды, ошибка подключения к базе данных и прочее.

## Ошибки инфраструктуры

При возникновении таких ошибок, обращайтесь в техническую поддержку DealApp.

### 502 Bad Gateway

Ошибка с доступом (nginx ошибка). Приложение запущено, но не отвечает на запросы. Обычно это происходит при инициализации контейнера, когда приложение еще не запустилось.

### 503 Service Unavailable

Сервис недоступен (nginx ошибка). Процесс с контейнером сервиса выходит с ошибкой. Обычно это значит, что приложение не может запуститься - в этом случае необходимо ознакомиться с логами приложения и исправить возникающую ошибку.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.qolio.ru/qolio-or-baza-znanii/integracii/podklyuchenie-po-api/vozmozhnye-oshibki-api.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
