---
# System prepended metadata

title: Lacrimas Личный Кабинет backend

---

# Lacrimas Личный Кабинет backend

&nbsp;

# Аутентификация и старт

## Начальная загрузка

> **GET&nbsp;&nbsp;&nbsp;&nbsp;/get_app_state**

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

&nbsp;

**Ответы сервера**

Может вернуть один из следующих вариантов:

1. Если пользователь авторизирован

```JSON
{
  "status": "success",
  "message": "returning app data for %username%",
  "payload": {
    "authenticated": true,
    "user": "%username%",
    "session_id": "%session_id%",
    "active_pane": "[projects|statistics|payments|profile]",
    "projects_subpane": "[running|suspended|finished|errors|queued|all]",
    "statistics_subpane": "[running|finished|all]",
    "search_str": "[%search_string%|]",
    "balance": "%user_balance%"
  }
}
```

2. Если пользователь **не** авторизирован:

```JSON
{
  "status": "success",
  "message": "user is not authenticated",
  "payload": {
    "authenticated": false
  }
}
```

Значения полей:

* _authenticated_ - булевое поле обозначающее авторизован пользователь или нет.
* _user_ - имя пользователя.
* _session_id_ - ID сессии пользователя (Шестнадцатеричное число из 5 знаков).
* _active_pane_ - обозначает какая из 4 главных панелей активна. Значения - projects, statistics, payments или profile.
* _projects_subpane_ - обозначает какая из подпанелей в панели "Проекты" активна. Значения - running, suspended,
  finished, errors, queued или all.
* _statistics_subpane_ - обозначает какая из подпанелей в панели "Статистика" активна. Значения - running, finished или
  all.
* _search_str_ - строка в поле поиска проекта в панелях "Проекты" и "Статистика".
* _balance_ - значение баланса аккаунта пользователя.

&nbsp;

**Ответы с сообщениями об ошибках**

Возвращается в случае ошибки при обращении к базе данных. Поле _error_message_ содержит текст ошибки от сервера.

```JSON
{
  "status": "error",
  "message": "Database error",
  "payload": {
    "error_message": "%message%"
  }
}
```

&nbsp;

## Логин

> **POST&nbsp;&nbsp;&nbsp;&nbsp;/login**  
> **Запрос устанавливает cookie**

Запрос для осуществления авторизации. Запрос отправляется методом POST в теле запроса должны быть email и пароль.
Если запрос прошел успешно устанавливается http only cookie. "Кука" недоступна для javascript из браузера,
но автоматически отправляется со всеми дальнейшими запросами. То есть после этого запроса можно выполнять все запросы
требующие аутентификацию.

&nbsp;

**Тело запроса**

```JSON
{
  "email": "%email%",
  "password": "%password%"
}
```

Значения полей:

* _email_ - email введенный пользователем.
* _password_ - пароль введенный пользователем.

&nbsp;

**Ответ сервера**

При успешном логине запрос возвращает следующий ответ:

```JSON
{
  "status": "success",
  "message": "User successfully logged in",
  "payload": {
    "authenticated": true,
    "user": "%username%",
    "session_id": "%session_id%",
    "active_pane": "[projects|statistics|payments|profile]",
    "search_str": "[%search_string%|]",
    "balance": "%user_balance%"
  }
}
```

Значения полей:

* _authenticated_ - булевое поле обозначающее авторизован пользователь или нет.
* _user_ - имя пользователя.
* _session_id_ - ID сессии пользователя (Шестнадцатеричное число из 5 знаков).
* _active_pane_ - обозначает какая из 4 главных панелей активна. Значения - projects, statistics, payments или profile.
* _search_str_ - строка в поле поиска проекта в панелях "Проекты" и "Статистика".
* _balance_ - значение баланса аккаунта пользователя.

&nbsp;

**Ответы с сообщениями об ошибках**

Если данные запроса не могут быть корректно интерпретированы как JSON

```JSON
{
  "status": "error",
  "message": "Failed to parse request data",
  "payload": {}
}
```

Если формат данных запроса неверный.

```JSON
{
  "status": "error",
  "message": "Request data should have email and password fields",
  "payload": {}
}
```

Если email или пароль пустой. А также если email не является валидным адресом электронной почты.

```JSON
{
  "status": "error",
  "message": "Wrong arguments",
  "payload": {}
}
```

Если данные переданы в запросе не верны. Пользователь с таким адресом электронной почты не найден или найден,
но пароль не совпал.

```JSON
{
  "status": "error",
  "message": "User is not registered or password doesn't match",
  "payload": {}
}
```

Возвращается в случае ошибки при обращении к базе данных. Поле _error_message_ содержит текст ошибки от сервера.

```JSON
{
  "status": "error",
  "message": "Database error",
  "payload": {
    "error_message": "%message%"
  }
}
```

&nbsp;

## Логаут

> **GET&nbsp;&nbsp;&nbsp;&nbsp;/logout**  
> **Запрос устанавливает cookie**

Запрос для осуществления выхода из личного кабинета.

&nbsp;

**Ответ сервера**

Если выход успешно осуществлен запрос вернет ответ.

```JSON
{
  "status": "success",
  "message": "%username% logged out",
  "payload": {}
}
```

&nbsp;

**Ответы с сообщениями об ошибках**

Если запрос вызван для не авторизованно пользователя вернется ошибка.

```JSON
{
  "status": "error",
  "message": "User is not authenticated",
  "payload": {}
}
```

&nbsp;

# Управление профилем

## Регистрация

> **POST&nbsp;&nbsp;&nbsp;&nbsp;/register**
> **Запрос устанавливает cookie**

Запрос регистрирует нового пользователя. Запрос отправляется методом POST в теле запроса могут быть email, пароль,
повторно введенный пароль, имя клиента, телефон и аккаунт в телеграм. Только email, пароль и повторно введенный пароль
обязательные поля. Если запрос прошел успешно устанавливается http only cookie. "Кука" недоступна для javascript
из браузера, но автоматически отправляется со всеми дальнейшими запросами. То есть после этого запроса можно выполнять
все запросы требующие аутентификацию.

&nbsp;

**Тело запроса**

```JSON
{
  "email": "%email%",
  "telegram": "%telegram%",
  "client_name": "%client_name",
  "phone": "%phone%",
  "password": "%password%",
  "password2": "%password%"
}
```

Значения полей:

* _email_ - email введенный пользователем. **обязательное поле**
* _telegram_ - аккаунт в telegram.
* _client_name_ - имя клиента. Если не задан, то часть email до символа @ будет использована как имя клиента.
* _phone_ - номер телефона клиента.
* _password_ - пароль введенный пользователем. **обязательное поле**
* _password2_ - пароль введенный пользователем повторно. **обязательное поле**

&nbsp;

**Ответ сервера**

При успешной регистрации запрос возвращает следующий ответ:

```JSON
{
  "status": "success",
  "message": "User %username% successfully registered",
  "payload": {
    "authenticated": true,
    "user": "%username%",
    "session_id": "%session_id%",
    "active_pane": "[projects|statistics|payments|profile]",
    "search_str": "[%search_string%|]",
    "balance": "%user_balance%"
  }
}
```

Значения полей:

* _authenticated_ - булевое поле обозначающее авторизован пользователь или нет.
* _user_ - имя пользователя.
* _session_id_ - ID сессии пользователя (Шестнадцатеричное число из 5 знаков).
* _active_pane_ - обозначает какая из 4 главных панелей активна. Значения - projects, statistics, payments или profile.
* _search_str_ - строка в поле поиска проекта в панелях "Проекты" и "Статистика".
* _balance_ - значение баланса аккаунта пользователя.

&nbsp;

**Ответы с сообщениями об ошибках**

Если данные запроса не могут быть корректно интерпретированы как JSON

```JSON
 {
  "status": "error",
  "message": "Failed to parse request data",
  "payload": {}
}
```

Если формат данных запроса неверный.

```JSON
{
  "status": "error",
  "message": "Request data should have email and password fields",
  "payload": {}
}
```

Если введены не валидные данные возвращается документ в котором в payload возвещается словарь problems, где ключ это -
имя поля, а значение - описание проблемы. Все поля проверяется сразу и дла каждого не валидного возвращается
комментарии.
То есть в словаре problems может быть от одного до шести ключей, соответсвующий полям пользователя.

```JSON
{
  "status": "error",
  "message": "Wrong arguments",
  "payload": {
    "problems": {
      "email": "email is not valid | email %email% is already registered for other user",
      "password": "passwords should match",
      "password2": "passwords should match",
      "telegram": "wrong telegram user name format",
      "client_name": "User name has wrong symbols | User name %user_name% is already registered for other user",
      "phone": "Phone number has wrong symbols"
    }
  }
}
```

Возвращается в случае ошибки при обращении к базе данных. Поле _error_message_ содержит текст ошибки от сервера.

```JSON
{
  "status": "error",
  "message": "Database error",
  "payload": {
    "error_message": "%message%"
  }
}
```

&nbsp;

## Обновление профиля

> **POST&nbsp;&nbsp;&nbsp;&nbsp;/update-profile**  
> **Запрос требует аутентификации**

Запрос обновляет профиль пользователь изменяя некоторые его поля. Запрос отправляется методом POST в теле должны быть
email, имя клиента, имя в telegram и номер телефона. Клинт должен оправить все поля. Те поля которые не были обновлены
должны содержать текущие значения. Запрос требует чтобы пользователь был аутентифицирован. Иначе возвращается статус
403 Forbidden

&nbsp;

**Тело запроса**

```JSON
{
  "email": "%email%",
  "telegram": "%telegram%",
  "client_name": "%client_name",
  "phone": "%phone%"
}
```

Значения полей: **все поля обязательны к отправлению**

* _email_ - email введенный пользователем.
* _telegram_ - аккаунт в telegram. Можно отправить пустую строку, чтобы убрать информацию об аккаунте в telegram.
* _client_name_ - имя клиента. Если не задан, то часть email до символа @ будет использована как имя клиента.
* _phone_ - номер телефона клиента. Можно отправить пустую строку, чтобы убрать информацию о телефоне.

&nbsp;

**Ответ сервера**

При успешной регистрации запрос возвращает следующий ответ:

```JSON
{
  "status": "success",
  "message": "User profile updated",
  "payload": {}
}
```

&nbsp;

**Ответы с сообщениями об ошибках**

Если данные запроса не могут быть корректно интерпретированы как JSON

```JSON
 {
  "status": "error",
  "message": "Failed to parse request data",
  "payload": {}
}
```

Если формат данных запроса неверный. То есть не все необходимы поля отправлены.

```JSON
{
  "status": "error",
  "message": "wrong request format",
  "payload": {}
}
```

Если введены не валидные данные возвращается документ в котором в payload возвещается словарь problems, где ключ это -
имя поля, а значение - описание проблемы. Все поля проверяется сразу и дла каждого не валидного возвращается
комментарии.
То есть в словаре problems может быть от одного до шести ключей, соответсвующий полям пользователя.

```JSON
{
  "status": "error",
  "message": "Wrong arguments",
  "payload": {
    "problems": {
      "email": "email is not valid | email %email% is already registered for other user",
      "telegram": "wrong telegram user name format",
      "client_name": "User name has wrong symbols | User name %user_name% is already registered for other user",
      "phone": "Phone number has wrong symbols"
    }
  }
}
```

Если ни одно из отправленных полей не отличается от текущих, возвращается ошибка.

```JSON
{
  "status": "error",
  "message": "Nothing to update",
  "payload": {}
}
```

Возвращается в случае ошибки при обращении к базе данных. Поле _error_message_ содержит текст ошибки от сервера.

```JSON
{
  "status": "error",
  "message": "Database error",
  "payload": {
    "error_message": "%message%"
  }
}
```

&nbsp;

## Смена пароля

> **POST&nbsp;&nbsp;&nbsp;&nbsp;/change-password**  
> **Запрос требует аутентификации**

Запрос меняет пароль пользователя. Запрос отправляется методом POST в теле запроса должны быть текущий пароль,
новый пароль и повторно введенный новый пароль. Запрос требует чтобы пользователь был аутентифицирован.
Иначе возвращается статус 403 Forbidden

&nbsp;

**Тело запроса**

```JSON
{
  "current_password": "%current_password%",
  "password": "%password%",
  "password2": "%password%"
}
```

Значения полей **все поля обязательные**:

* _current_password_ - текущий пароль пользователя.
* _password_ - пароль введенный пользователем.
* _password2_ - пароль введенный пользователем повторно.

&nbsp;

**Ответ сервера**

При успешной регистрации запрос возвращает следующий ответ:

```JSON
{
  "status": "success",
  "message": "password for user %username% have changed",
  "payload": {}
}
```

&nbsp;

**Ответы с сообщениями об ошибках**

Если данные запроса не могут быть корректно интерпретированы как JSON

```JSON
 {
  "status": "error",
  "message": "Failed to parse request data",
  "payload": {}
}
```

Если формат данных запроса неверный.

```JSON
{
  "status": "error",
  "message": "Request data should have current password, new password and new password typed again",
  "payload": {}
}
```

Если текущий пароль не правильный.

```JSON
{
  "status": "error",
  "message": "user current password does not match",
  "payload": {}
}

```

Если новый пароль и новый пароль введенный повторно не совпадают

```JSON
 {
  "status": "error",
  "message": "new password and new password typed again are not equal",
  "payload": {}
}
```

Если требования для пароля (по крайней мере 6 символов и отсутствие пробельных символов) не удовлетворены.

```JSON
{
  "status": "error",
  "message": "new password should be at least 6 symbol long and have no white spaces",
  "payload": {}
}
```

Возвращается в случае ошибки при обращении к базе данных. Поле _error_message_ содержит текст ошибки от сервера.

```JSON
{
  "status": "error",
  "message": "Database error",
  "payload": {
    "error_message": "%message%"
  }
}
```

&nbsp;

# Навигация

## Панель "Проекты"

> **GET&nbsp;&nbsp;&nbsp;&nbsp;/projects / [subpane] [/ filter / %search_str%] [/ page / %page%]**  
> **Запрос требует аутентификации**  
> **Запрос устанавливает cookie**

Запрос осуществляет переход на панель "Проекты". Запрос не осуществляет никаких запросов в базу данных. Его назначение -
обновить информацию о текущей панели и подпанели в сессии пользователя. Запрос требует чтобы пользователь был
аутентифицирован. Иначе возвращается статус 403 Forbidden  
После успешного ответа на этот запрос клиент должен запросить необходимую информацию о платежах через /get-jobs
что позволит отобразить панель "Проекты".
Запрос принимает необязательный параметр page с номером запрашиваемой страницы. Запрашиваемая страница не сохраняется
в сессию. Она просто возвращается пользователю с ответом. Это сделано для целостности и единообразности API

&nbsp;

**Параметра запроса**

* **subpane** необязательный параметр обозначающий подпанель. Может быть **running** - задачи в процессе,
  **suspended** - остановленные задачи, **finished** - завершенные задачи, **errors** - провальные задачи,
  **queued** - задачи в очереди, или **all** - все задачи.
* **filter/%search_str%** необязательный параметр со значением в поле поиска проектов.
* **page/%page%** необязательный параметр со значением номера страницы.

&nbsp;

**Ответ сервера**

```JSON
{
  "status": "success",
  "message": "open project->%status%",
  "payload": {
    "pane": "projects",
    "status": "[running|suspended|finished|errors|queued|all]",
    "page": "4",    
    "search_str": "%search_str%"
  }
}
```

Значения полей:

* _pane_ - всегда возвращаться projects для этого запроса.
* _status_ - подпанель в панели "Проекты". Может быть running, suspended, finished, errors, queued, или all
* _page_ - возвращает тот же номер страницы который запрашивался либо страницу 1 если поле page в запросе не присутствовало.
* _search_str_ - строка в поле поиска проекта.

&nbsp;

**Ответы с сообщениями об ошибках**

Этот запрос не возвращает никаких ошибок

&nbsp;

## Панель "Статистика"

> **GET&nbsp;&nbsp;&nbsp;&nbsp;/statistics / [subpane] [/ filter / %search_str%] [/ page / %page%]**  
> **Запрос требует аутентификации**  
> **Запрос устанавливает cookie**

Запрос осуществляет переход на панель "Статистика". Запрос не осуществляет никаких запросов в базу данных.
Его назначение - обновить информацию о текущей панели и подпанели в сессии пользователя. Запрос требует чтобы
пользователь был аутентифицирован. Иначе возвращается статус 403 Forbidden  
После успешного ответа на этот запрос клиент должен запросить необходимую информацию о платежах через
/get-job-statistics что позволит отобразить панель "Статистика".
Запрос принимает необязательный параметр page с номером запрашиваемой страницы. Запрашиваемая страница не сохраняется
в сессию. Она просто возвращается пользователю с ответом. Это сделано для целостности и единообразности API

&nbsp;

**Параметра запроса**

* **subpane** необязательный параметр обозначающий подпанель. Может быть **running** - задачи в процессе,
  **finished** - завершенные задачи или **all** - все задачи.
* **filter/%search_str%** необязательный параметр со значением в поле поиска проектов.
* **page/%page%** необязательный параметр со значением номера страницы.

&nbsp;

**Ответ сервера**

```JSON
{
  "status": "success",
  "message": "open project->%status%",
  "payload": {
    "pane": "statistics",
    "status": "[running|finished|all]",
    "page": "4",    
    "search_str": "%search_str%"
  }
}
```

Значения полей:

* _pane_ - всегда возвращаться statistics для этого запроса.
* _status_ - подпанель в панели "Статистика". Может быть running, finished, all
* _page_ - возвращает тот же номер страницы который запрашивался либо страницу 1 если поле page в запросе не присутствовало.
* _search_str_ - строка в поле поиска проекта.

&nbsp;

**Ответы с сообщениями об ошибках**

Этот запрос не возвращает никаких ошибок

&nbsp;

## Панель "Оплата"

> **GET&nbsp;&nbsp;&nbsp;&nbsp;/payments**  
> **Запрос требует аутентификации**  
> **Запрос устанавливает cookie**

Запрос осуществляет переход на панель "Оплата". Запрос не осуществляет
никаких запросов в базу данных. Его назначение -
обновить информацию о текущей панели в сессии пользователя. Запрос требует чтобы пользователь был аутентифицирован.
Иначе возвращается статус 403 Forbidden  
После успешного ответа на этот запрос клиент должен запросить необходимую информацию о платежах через /get-payments
что позволит отобразить панель "Оплата".

&nbsp;

**Ответ сервера**

```JSON
{
  "status": "success",
  "message": "open payments",
  "payload": {
    "pane": "payments",
    "search_str": "%search_str%"
  }
}
```

Значения полей:

* _pane_ - всегда возвращаться payments для этого запроса.
* _search_str_ - строка в поле поиска проекта в панелях "Проекты" и "Статистика".

_В панели "Оплата" поля поиска строки. Поле **search_str** возможно будет удалено в будущем_

&nbsp;

**Ответы с сообщениями об ошибках**

Этот запрос не возвращает никаких ошибок

&nbsp;

## Панель "Профиль"

> **GET&nbsp;&nbsp;&nbsp;&nbsp;/profile**  
> **Запрос требует аутентификации**  
> **Запрос устанавливает cookie**

Запрос осуществляет переход на панель "Профиль". Запрос не осуществляет никаких запросов в базу данных. Его назначение -
обновить информацию о текущей панели в сессии пользователя. Запрос требует чтобы пользователь был аутентифицирован.
Иначе возвращается статус 403 Forbidden  
После успешного ответа на этот запрос клиент должен запросить необходимую информацию о платежах через /get-profile
что позволит отобразить панель "Профиль".

&nbsp;

**Ответ сервера**

```JSON
{
  "status": "success",
  "message": "open profile",
  "payload": {
    "pane": "profile",
    "search_str": "%search_str%"
  }
}
```

Значения полей:

* _pane_ - всегда возвращаться profile для этого запроса.
* _search_str_ - строка в поле поиска проекта в панелях "Проекты" и "Статистика".

_В панели "Профиль" поля поиска строки. Поле **search_str** возможно будет удалено в будущем_

**Ответы с сообщениями об ошибках**

Этот запрос не возвращает никаких ошибок

&nbsp;

# Запросы данных

## Запрос данных о задачах

> **GET&nbsp;&nbsp;&nbsp;&nbsp;/get-jobs [/ category ] [/ filter / %search_str%] [/ page / %page%]**  
> **Запрос требует аутентификации**

Запрос возвращает полную информацию по проектам пользователя. Запрос требует чтобы пользователь был аутентифицирован.
Иначе возвращается статус 403 Forbidden

&nbsp;

**Параметра запроса**

* **category** необязательный параметр обозначающий категорию проектов которые будут возвращены.
  Может быть **running** - задачи в процессе, **suspended** - остановленные задачи, **finished** - завершенные задачи,
  **errors** - провальные задачи, **queued** - задачи в очереди, **all** - все задачи.
* **filter/%search_str%** необязательный параметр со значением в поле поиска проектов. Для отображения только задач
  удовлетворяющих условию поиска.
* **page/%page%** необязательный параметр со значением номера страницы. Если номер запрашиваемой страницы больше чем
  количество страниц существует для заданного запроса, будет возвращена последняя страница. 
  При этом поля _page_ и _pages_count_ будут отражать страницу, которая была возвращена и общее количество страниц,
  то есть одно и то же число в этом случае.     

&nbsp;

**Ответ сервера**

```JSON
{
  "status": "success",
  "message": "fetched %number_of_jobs% jobs",
  "payload": {
    "page": "%page%",
    "pages_count": "%page_count%",
    "jobs": [
      {
        "id": "%job_id%",
        "job_name": "%job_name%",
        "used_workers": "%used_workers%",
        "available_workers": "%available_workers%",
        "running_time": "%running_time%",
        "estimated_time": "%estimated_time%",
        "accumulated_cost": "%accumulated_cost%",
        "estimated_cost": "%estimated_cost%",
        "boosted": "%boosted%",
        "errors_count": "%errors_count%",
        "deadline_jobs_count": "%deadline_jobs_count%",
        "completed_frames": "%completed_frames%",
        "job_frames": "%job_frames%",
        "progress": "%progress%"
      },
      {},
      {}
    ]
  }
}
```

Значения полей:

* _number_of_jobs_  - количество задач в возвращаемом наборе.
* _page_ номер страницы из набора страниц существующих для заданного запроса.
* _pages_count_ общее количество страниц существует для заданного запроса.
* _job_id_ - id задачи.
* _used_workers_ - количество используемых воркеров.
* _available_workers_ - количество доступных воркеров.
* _running_time_ - время в минутах которая задача уже исполняется.
* _estimated_time_ - ориентировочное время в минутах которое еще потребуется до завершения задачи.
* _accumulated_cost_ - текущая стоимость задачи.
* _estimated_cost_ - прогнозируемая полная стоимость задачи.
* _boosted_ - задача ускорена.
* _errors_count_ - количество ошибок.
* _deadline_jobs_count_ - количество задач в deadline которые относятся к этой задаче.
* _completed_frames_ - количество готовых кадров.
* _job_frames_ - количество кадров в задаче.
* _progress_ - процент готовности задачи.

&nbsp;

**Ответы с сообщениями об ошибках**

Возвращается в случае ошибки при обращении к базе данных. Поле _error_message_ содержит текст ошибки от сервера.

```JSON
{
  "status": "error",
  "message": "Database error",
  "payload": {
    "error_message": "%message%"
  }
}
```

&nbsp;

## Запрос данных о статистике по задачам

> **GET&nbsp;&nbsp;&nbsp;&nbsp;/get-job-statistics [/ category ] [/ filter / %search_str%] [/ page / %page%]**  
> **Запрос требует аутентификации**

Запрос возвращает некоторую информацию по задачам пользователя для статистики. Запрос требует чтобы пользователь был
аутентифицирован. Иначе возвращается статус 403 Forbidden

&nbsp;

**Параметра запроса**

* **category** необязательный параметр обозначающий категорию проектов которые будут возвращены.
  Может быть **running** - задачи в процессе, **finished** - завершенные задачи, **all** - все задачи.
* **filter/%search_str%** необязательный параметр со значением в поле поиска задач. Для отображения только задач
  удовлетворяющих условию поиска.
* **page/%page%** необязательный параметр со значением номера страницы. Если номер запрашиваемой страницы больше чем
  количество страниц существует для заданного запроса, будет возвращена последняя страница. 
  При этом поля _page_ и _pages_count_ будут отражать страницу, которая была возвращена и общее количество страниц,
  то есть одно и то же число в этом случае.    

&nbsp;

**Ответ сервера**

```JSON
{
  "status": "success",
  "message": "fetched %number_of_jobs% jobs",
  "payload": {
    "page": "%page%",
    "pages_count": "%page_count%",    
    "jobs": [
      {
        "id": "%job_id%",
        "job_name": "%job_name%",
        "running_time": "%running_time%",
        "estimated_time": "%estimated_time%",
        "accumulated_cost": "%accumulated_cost%",
        "estimated_cost": "%estimated_cost%"
      },
      {},
      {}
    ]
  }
}
```

Значения полей:

* _number_of_jobs_  - количество задач в возвращаемом наборе.
* _page_ номер страницы из набора страниц существующих для заданного запроса.
* _pages_count_ общее количество страниц существует для заданного запроса. 
* _job_id_ - id задачи.
* _running_time_ - время в минутах которая задача уже исполняется.
* _estimated_time_ - ориентировочное время в минутах которое еще потребуется до завершения задачи.
* _accumulated_cost_ - текущая стоимость задачи.
* _estimated_cost_ - прогнозируемая полная стоимость задачи.

&nbsp;

**Ответы с сообщениями об ошибках**

Возвращается в случае ошибки при обращении к базе данных. Поле _error_message_ содержит текст ошибки от сервера.

```JSON
{
  "status": "error",
  "message": "Database error",
  "payload": {
    "error_message": "%message%"
  }
}
```

&nbsp;

## Запрос данных об оплате

> **GET&nbsp;&nbsp;&nbsp;&nbsp;/get-payments**  
> **Запрос требует аутентификации**

Запрос возвращает всю финансовую информацию пользователя. Запрос требует чтобы пользователь был аутентифицирован.
Иначе возвращается статус 403 Forbidden

&nbsp;

**Ответ сервера**

```JSON
{
  "status": "success",
  "message": "User profile updated",
  "payload": {}
}
```

_На данный момент запрос возвращает пустой датасет потому что хранение платежной информации пока никак не реализовано
в базе данных_

&nbsp;

**Ответы с сообщениями об ошибках**

Этот запрос не возвращает никаких ошибок

&nbsp;

## Запрос данных о профиле

> **GET&nbsp;&nbsp;&nbsp;&nbsp;/get-profile**  
> **Запрос требует аутентификации**

Запрос возвращает всю информацию о профиле пользователя. Запрос требует чтобы пользователь был аутентифицирован.
Иначе возвращается статус 403 Forbidden

&nbsp;

**Ответ сервера**

```JSON
{
  "status": "success",
  "message": "fetched profile data",
  "payload": {
    "id": "%user_id%",
    "email": "%email%",
    "telegram": "%telegram%",
    "phone": "%phone%",
    "client_name": "%user_name%"
  }
}
```

Значения полей:

* _user_id_ - id пользователя.
* _email_ - email пользователя.
* _telegram_ - аккаунт в telegram пользователя.
* _phone_ - номер телефона пользователя.
* _client_name_ - имя пользователя.

&nbsp;

**Ответы с сообщениями об ошибках**

Возвращается в случае ошибки при обращении к базе данных. Поле _error_message_ содержит текст ошибки от сервера.

```JSON
{
  "status": "error",
  "message": "Database error",
  "payload": {
    "error_message": "%message%"
  }
}
```