API🔗
Основные возможности:
- Управление пользователями: Эндпоинты для авторизации, выхода из системы.
- Чаты: Получение чатов и сообщений внутри чатов.
- Виджеты: Создание виджетов в базе данных, внесение и отображение настроек.
Базовый URL: https://api.yamarkiza.ru
Аутентификация:
- Используется сессионная авторизация с cookies.
-
Cookies:
-
sessionid— идентификатор текущей сессии. csrftoken— токен защиты от CSRF.- Для POST, PUT, DELETE запросов требуется заголовок
X-CSRFToken, значение которого берётся из cookies.
Аутентификация🔗
Логин пользователя🔗
Описание: Этот эндпоинт используется для аутентификации пользователя с использованием имени пользователя и пароля. При успешном входе возвращается сообщение об успешной авторизации и устанавливаются куки с сессией.
Метод: POST
Путь: /auth/login/
Заголовки:
Тело запроса:
Ответ при успешном запросе (200 OK):
{
"message": "Удачная авторизация.",
"user_data": {
"id": 1,
"username": "dev",
"email": "1@mail.ru",
"first_name": "",
"last_name": "",
"date_joined": "2025-02-05 10:10:54",
"last_login": "2025-02-27 09:43:38",
"is_staff": true,
"is_superuser": true
}
}
Возможные ошибки:
- 400 Bad Request:
Взять CSRF🔗
Описание: Этот эндпоинт используется для получения CSRF-токена, который необходим для защиты от межсайтовых подделок запросов (CSRF).
Метод: GET
Путь: /api/v1/csrf/
Заголовки: Не требуется
Тело запроса: (Не требуется)
Ответ при успешном запросе (200 OK):
Логаут пользователя🔗
Описание: Этот эндпоинт используется для выхода пользователя из системы. При успешном выходе сессионные куки удаляются.
Метод: POST
Путь: /auth/logout/
Заголовки:
{
"Content-Type": "application/json",
"X-CSRFToken": "<csrf_token>",
"Cookie": "sessionid=<session_id>"
}
Тело запроса: (Не требуется)
Ответ при успешном запросе (200 OK):
Возможные ошибки:
- 403 Forbidden:
Виджет🔗
Чаты🔗
Вот исправленный и адаптированный вариант описания эндпоинта GET /api/v1/chats/ — с учётом того, что используется пагинация LimitOffset, аналогичная WhatsApp-чату:
Получение чатов🔗
Описание: Возвращает список всех чатов виджета, привязанных к текущему пользователю. Используется пагинация с параметрами limit и offset (по умолчанию — 50 чатов на страницу, максимум — 50).
Чаты выдаются в порядке от нового к старым
Метод: GET Путь: /api/v1/chats/
Заголовки:
Параметры запроса:
limit(int) — Количество объектов на странице (по умолчанию 50)offset(int) — Смещение (например,offset=50для получения второй страницы)
Пример запроса:
Ответ при успешном запросе (200 OK):
{
"count": 101,
"next": "https://domain.ru/api/v1/chats/?limit=50&offset=100",
"previous": "https://domain.ru/api/v1/chats/?limit=50",
"results": [
{
"id": 56,
"chat_type": "widget",
"user_id": "test_user_56",
"last_message_date": "2025-07-18T12:21:52.956679+0300",
"is_favorite": false,
"note": null,
"widget_owner_id": 1,
"creator_id": 1
}
]
}
Описание полей:
| Поле | Тип | Описание |
|---|---|---|
id | int | Уникальный идентификатор чата |
chat_type | string | Тип чата (например, "widget") |
user_id | string | Идентификатор клиента, написавшего в чат |
last_message_date | datetime | Дата и время последнего сообщения в чате |
is_favorite | boolean | Признак избранного чата |
note | string/null | Заметка, добавленная пользователем |
widget_owner_id | int | ID пользователя, которому принадлежит виджет |
creator_id | int | ID пользователя, который создал этот чат |
Возможные ошибки:
- 403 Forbidden:
- 500 Internal Server Error:
Получить сообщения из чата🔗
Описание: Этот эндпоинт используется для получения списка сообщений определённого чата. Только авторизованные пользователи могут получить доступ к этому ресурсу.
Метод: GET
Путь: /api/v1/messages/{chat_id}/
Параметры пути:
chat_id(integer) — ID чата.
Заголовки:
{
"Content-Type": "application/json",
"X-CSRFToken": "<csrf_token>",
"Cookie": "sessionid=<session_id>"
}
Тело запроса: (Не требуется)
Ответ при успешном запросе (200 OK):
[
{
"id": 1,
"message": "Hello",
"sender": "user",
"date": "2025-02-18T18:04:36.531000+03:00",
"chat": 1
},
{
"id": 2,
"message": "Hi",
"sender": "chatgpt",
"date": "2025-02-18T18:04:50.609000+03:00",
"chat": 1
}
]
Возможные ошибки:
- 403 Forbidden (Пользователь не аутентифицирован):
- 404 Not Found (Чат не найден или не принадлежит пользователю):
- 500 Internal Server Error (Ошибка сервера):
Профили🔗
Создание🔗
Описание: Этот эндпоинт используется для создания объекта WidgetSettings. Только авторизованные пользователи могут отправлять запросы.
Метод: POST
Путь: /api/v1/widget-settings/create/
Заголовки:
{
"Content-Type": "application/json",
"X-CSRFToken": "<csrf_token>",
"Cookie": "sessionid=<session_id>"
}
Тело запроса: (Не требуется)
Ответ при успешном запросе (201 Created):
Возможные ошибки:
- 400 Bad Request (Ошибка валидации):
- 403 Forbidden (Пользователь не аутентифицирован):
- 500 Internal Server Error (Ошибка сервера):
Добавление настроек🔗
Описание: Этот эндпоинт используется для обновления данных существующего объекта WidgetSettings. Доступен только для авторизованных пользователей, которые создали данный виджет.
Метод: PATCH
Путь: /api/v1/widget-settings/{widget_id}/update/
Заголовки:
{
"Content-Type": "application/json",
"X-CSRFToken": "<csrf_token>",
"Cookie": "sessionid=<session_id>"
}
Тело запроса:
{
"name": "test",
"is_active": false,
"manager_tg_id": [
"123",
"222"
],
"welcome_text": "text",
"start_hints": ["Как купить?", "Какая цена?", "Как связаться?"],
"widget_left": false,
"icon": 2,
"base_icon": 1
}
Ответ при успешном запросе (200 OK):
{
"name": "test",
"is_active": false,
"manager_tg_id": [
"123",
"222"
],
"welcome_text": "text",
"start_hints": ["Как купить?", "Какая цена?", "Как связаться?"],
"widget_left": true,
"icon": 2,
"base_icon": null
}
Возможные ошибки:
- 400 Bad Request (Ошибка валидации):
- 403 Forbidden (Пользователь не аутентифицирован):
- 500 Internal Server Error (Ошибка сервера, так же если виджет не найден или не пренадлежит пользователю):
Превью🔗
Описание: Этот эндпоинт используется для получения списка всех виджетов, созданных текущим пользователем. Возвращает только основные данные (превью).
Метод: GET
Путь: /api/v1/widget-info/
Заголовки:
{
"Content-Type": "application/json",
"X-CSRFToken": "<csrf_token>",
"Cookie": "sessionid=<session_id>"
}
Тело запроса: (Не требуется)
Ответ при успешном запросе (200 OK):
[
{
"id": 1,
"name": "Widget 1",
"domain": "example.com",
"is_active": true
},
{
"id": 2,
"name": "Widget 2",
"domain": "example.org",
"is_active": false
}
]
Возможные ошибки:
- 403 Forbidden (Пользователь не аутентифицирован):
- 500 Internal Server Error (Ошибка сервера):
Информация о конкретном виджете🔗
Описание: Этот эндпоинт используется для получения полной информации о конкретном виджете, созданном текущим пользователем.
Метод: GET
Путь: /api/v1/widget-info/{widget_id}/
Параметры пути:
widget_id(integer) — ID виджета. Заголовки:
{
"Content-Type": "application/json",
"X-CSRFToken": "<csrf_token>",
"Cookie": "sessionid=<session_id>"
}
Тело запроса: (Не требуется)
Ответ при успешном запросе (200 OK):
{
"id": 1,
"name": "Тест",
"is_active": true,
"created_by": 1,
"manager_tg_id": [
"123",
"456"
],
"domains": [
{
"id": 5,
"name": "domain1"
},
{
"id": 7,
"name": "domain3"
}
],
"icon": {
"type": "icon",
"id": 3,
"name": "name",
"url": "icons/link.png"
},
"widget_left": true,
"welcome_text": "test",
"start_hints": [
"Как купить?",
"Какая цена?",
"Как связаться?"
]
}
Возможные ошибки:
- 403 Forbidden (Пользователь не аутентифицирован):
- 404 Not Found (Виджет не найден или не принадлежит пользователю):
- 500 Internal Server Error (Ошибка сервера):
Удаление виджета🔗
Описание: Этот эндпоинт используется для удаления виджета. Удалить можно только виджет, принадлежащий текущему пользователю. В противном случае будет возвращена ошибка 404 Not Found.
Метод: DELETE
Путь: /api/v1/widget-settings/{widget_id}/delete/
Параметры пути:
widget_id(integer) — ID виджета.
Заголовки:
Тело запроса: (Не требуется)
Ответ при успешном запросе (200 OK):
Возможные ошибки:
- 404 Not Found (Виджет не найден или у вас нет прав на его удаление):
- 500 Internal Server Error (Ошибка сервера):
Домены🔗
Добавить домен🔗
Описание: Этот эндпоинт используется для добавления нового домена к указанному виджету. Пользователь может добавить домен только в свой виджет, иначе будет возвращена ошибка 403 Forbidden.
Метод: POST
Путь: /api/v1/widget-settings/{widget_id}/domains/create/
Параметры пути:
widget_id(integer) — ID виджета.
Заголовки:
{
"Content-Type": "application/json",
"X-CSRFToken": "<csrf_token>",
"Cookie": "sessionid=<session_id>"
}
Тело запроса:
Ответ при успешном запросе (201 Created):
Возможные ошибки:
- 400 Bad Request (Ошибка валидации):
- 403 Forbidden (Попытка добавить домен в чужой виджет):
- 404 Not Found (Виджет не найден):
- 500 Internal Server Error (Ошибка сервера):
Удалить домен🔗
Описание: Этот эндпоинт используется для удаления домена. Удалить можно только домен, принадлежащий виджету пользователя, иначе будет возвращена ошибка 403 Forbidden.
Метод: DELETE
Путь: /api/v1/domains/{domain_id}/delete/
Параметры пути:
domain_id(integer) — ID домена. Заголовки:
{
"Content-Type": "application/json",
"X-CSRFToken": "<csrf_token>",
"Cookie": "sessionid=<session_id>"
}
Тело запроса: (Не требуется)
Ответ при успешном запросе (200 OK):
Возможные ошибки:
- 403 Forbidden (Попытка удалить чужой домен):
- 404 Not Found (Домен не найден):
- 500 Internal Server Error (Ошибка сервера):
Иконки🔗
Загрузить иконку🔗
Описание: Этот эндпоинт позволяет загружать иконку для виджета которая будет привязана к юзеру.
Метод: POST
Путь: /api/v1/widget-settings/user-icon/upload/
Заголовки:
{
"Content-Type": "multipart/form-data",
"X-CSRFToken": "<csrf_token>",
"Cookie": "sessionid=<session_id>"
}
Тело запроса:
Ответ при успешном запросе (201 Created):
Возможные ошибки:
- 400 Bad Request (Ошибка отправки):
- 400 Bad Request (Не корректный файл):
- 500 Internal Server Error (Ошибка сервера):
Обновление имени🔗
Описание: Этот эндпоинт позволяет обновить имя иконки для виджета которая будет привязана к юзеру.
Метод: PATCH
Путь: /api/v1/widget-settings/user-icons/{icon_id}/update-name/
Параметры пути:
icon_id(integer) — ID иконки. Заголовки:
{
"Content-Type": "application/json",
"X-CSRFToken": "<csrf_token>",
"Cookie": "sessionid=<session_id>"
}
Тело запроса:
Ответ при успешном запросе (200 OK):
Возможные ошибки:
- 404 Not Found:
- 400 Bad Request (Не корректные данные):
- 500 Internal Server Error (Ошибка сервера):
Общие иконки🔗
Описание: Этот эндпоинт возвращает список базовых иконок, доступных всем пользователям.
Метод: GET
Путь: /api/v1/widget-settings/base-icons/
Заголовки:
Тело запроса: (Не требуется)
Ответ при успешном запросе (200 OK):
[
{
"id": 1,
"name": "name",
"url": "icons/base_icon.png"
},
{
"id": 2,
"name": "name2",
"url": "icons/base_icon1.png"
}
]
Возможные ошибки:
- 500 Internal Server Error (Ошибка сервера):
Иконки юзера🔗
Описание: Этот эндпоинт возвращает список иконок, загруженных текущим пользователем.
Метод: GET
Путь: /api/v1/widget-settings/user-icons/
Заголовки:
Тело запроса: (Не требуется)
Ответ при успешном запросе (200 OK):
Внимание
Тут возможно косяк в документации, проверить что отправляет имя
Возможные ошибки:
- 500 Internal Server Error (Ошибка сервера):
Удалить иконку🔗
Описание: Этот эндпоинт позволяет удалить иконку для виджета которая привязана к юзеру.
Метод: DELETE
Путь: /api/v1/widget-settings/user-icons/{icon_id}/
Параметры пути:
icon_id(integer) — ID иконки. Заголовки:
{
"Content-Type": "application/json",
"X-CSRFToken": "<csrf_token>",
"Cookie": "sessionid=<session_id>"
}
Тело запроса: (Не требуется)
Ответ при успешном запросе (200 OK):
Внимание
Тут возможно косяк в документации, проверить!!
Возможные ошибки:
- 404 Not Found (Иконка не найдена):
- 500 Internal Server Error (Ошибка сервера):
Профиль Юзера🔗
Информация о профиле🔗
Описание: Этот эндпоинт используется для получения информации о текущем авторизованном пользователе. Требует наличия активной сессии (sessionid).
Метод: GET
Путь: /api/v1/profile/
Заголовки:
Тело запроса: (Не требуется)
Ответ при успешном запросе (200 OK):
{
"id": 1,
"username": "dev",
"email": "dev@mail.ru",
"first_name": "Senior",
"last_name": "Developer",
"date_joined": "2025-02-05 10:10:54",
"last_login": "2025-02-27 09:43:38",
"is_staff": true,
"is_superuser": true
}
Возможные ошибки:
- 403 Forbidden (Unauthorized):
Whatsapp🔗
Префикс🔗
Все запросы к API начинаются с префикса:
Профили🔗
Получить все профили🔗
Описание: Получить список всех профилей текущего пользователя (в сокращённой форме). Только авторизованные пользователи могут получить доступ к этому ресурсу.
Метод: GET
Путь: /api/v1/whatsapp-panel/settings/info/
Заголовки:
Тело запроса: (Не требуется)
Ответ при успешном запросе (200 OK):
Описание полей:
| Поле | Тип | Описание |
|---|---|---|
id | int | Уникальный идентификатор профиля |
name | string | Название профиля |
is_active | boolean | Флаг активности. Если false — профиль не работает |
Возможные ошибки:
- 403 Forbidden:
- 500 Internal Server Error:
Получить профиль🔗
Описание: Получить подробную информацию по конкретному профилю. Получить можно данные только профилей которые создал данный юзер.
Метод: GET
Путь: /api/v1/whatsapp-panel/settings/info/{profile_id}/
Параметры пути:
profile_id(int) — ID профиля, который необходимо получить
Заголовки:
Тело запроса: (Не требуется)
Ответ при успешном запросе (200 OK):
{
"name": "Whatsapp",
"token": "token_123456",
"profile_id": "profile12_345",
"phone_number": "79001234567",
"is_active": false,
"wait_time": 11,
"assistant_live_time": "11:11:11",
"unignore_triggers": [
"триггер",
"еще триггер"
]
}
Описание полей:
| Поле | Тип | Описание |
|---|---|---|
name | string | Название профиля |
token | string | API-токен, используемый для интеграции с WAPPI |
profile_id | string | Идентификатор профиля в системе WAPPI |
phone_number | string | Номер WhatsApp, на который привязан профиль |
is_active | boolean | Флаг активности. Если false — сообщения не обрабатываются |
wait_time | integer | Время в течении которого скрипт собирает входящие сообщения (в секундах) перед отправкой в ChatGPT |
assistant_live_time | string | Время, через которое сбросится ассистент и память (формат HH:MM:SS) (Если с последнего сообщения прошло указанное кол-во времени) |
unignore_triggers | array | Ключевые фразы которые уберут юзера из списка игнорирования |
Возможные ошибки:
- 403 Forbidden:
- 404 Not Found:
- 500 Internal Server Error:
Создание профиля🔗
Описание: Создание нового профиля WhatsApp.
Метод: POST
Путь: /api/v1/whatsapp-panel/settings/create/
Заголовки:
{
"Content-Type": "application/json",
"X-CSRFToken": "<csrf_token>",
"Cookie": "sessionid=<session_id>"
}
Тело запроса:
{
"token": "abc123",
"profile_id": "xyz789",
"phone_number": "79001234567",
"wait_time": 10,
"name": "Профиль клиента",
"assistant_live_time": "00:30:00",
"unignore_triggers": ["привет", "бот"]
}
Описание полей:
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
token | string | да | API-токен WAPPI |
profile_id | string | да | Идентификатор профиля в WAPPI |
phone_number | string | да | Номер WhatsApp |
wait_time | integer | да | Время в течении которого скрипт собирает входящие сообщения (в секундах) перед отправкой в ChatGPT |
name | string | нет | Название профиля (если не указано — генерируется автоматически) |
assistant_live_time | string | нет | Время, через которое сбросится ассистент и память (формат HH:MM:SS) (Если с последнего сообщения прошло указанное кол-во времени) |
unignore_triggers | array | нет | Ключевые фразы которые уберут юзера из списка игнорирования |
Ответ при успешном запросе (201 Created):
{
"name": "Профиль клиента",
"token": "abc123",
"profile_id": "xyz789",
"phone_number": "79001234567",
"is_active": true,
"wait_time": 10,
"assistant_live_time": "00:30:00",
"unignore_triggers": ["привет", "бот"]
}
Возможные ошибки:
- 400 Bad Request:
- 403 Forbidden:
- 500 Internal Server Error:
Удаление профиля🔗
Описание: Удаляет указанный профиль WhatsApp. Пользователь может удалить только свой профиль.
Метод: DELETE
Путь: /api/v1/whatsapp-panel/settings/delete/{profile_id}/
Параметры пути:
profile_id(int) — ID профиля, который необходимо удалить
Заголовки:
{
"Content-Type": "application/json",
"X-CSRFToken": "<csrf_token>",
"Cookie": "sessionid=<session_id>"
}
Тело запроса: (Не требуется)
Ответ при успешном запросе (200 OK):
Возможные ошибки:
- 403 Forbidden:
- 404 Not Found:
- 500 Internal Server Error:
Обновление профиля🔗
Описание: Обновляет существующий профиль WhatsApp (частичное обновление). Можно отправлять только изменяемые поля. Юзер может изменить только свой профиль
Метод: PATCH
Путь: /api/v1/whatsapp-panel/settings/{profile_id}/update/
Параметры пути:
profile_id(int) — ID профиля, который требуется обновить
Заголовки:
{
"Content-Type": "application/json",
"X-CSRFToken": "<csrf_token>",
"Cookie": "sessionid=<session_id>"
}
Тело запроса (пример):
Поддерживаемые поля:
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
name | string | нет | Название профиля |
token | string | нет | API-токен WAPPI |
profile_id | string | нет | Идентификатор в системе WAPPI |
phone_number | string | нет | Номер WhatsApp |
is_active | boolean | нет | Флаг активности профиля |
wait_time | integer | нет | Таймаут между сообщениями пользователя и ChatGPT (в секундах) |
assistant_live_time | string | нет | Время, через которое сбросится ассистент и память (формат HH:MM:SS) (Если с последнего сообщения прошло указанное кол-во времени) |
unignore_triggers | array | нет | Ключевые фразы которые уберут юзера из списка игнорирования |
Ответ при успешном запросе (200 OK):
{
"name": "Новое имя",
"token": "abc123",
"profile_id": "profile42",
"phone_number": "79001234567",
"is_active": true,
"wait_time": 15,
"assistant_live_time": "00:30:00",
"unignore_triggers": ["привет", "бот"]
}
Возможные ошибки:
- 400 Bad Request:
- 403 Forbidden:
- 404 Not Found:
- 500 Internal Server Error:
Чаты🔗
Получение чатов🔗
Описание: Возвращает список всех чатов текущего пользователя с пагинацией (по умолчанию — 50 чатов на странице, максимум — 50).
Чаты выдаются в порядке от нового к старым
Метод: GET
Путь: /api/v1/whatsapp-panel/chats/
Заголовки:
Параметры запроса:
limit(int) — Количество объектов на странице (по умолчанию 50)offset(int) — Смещение (например,offset=50для получения второй страницы)
Пример запроса:
Ответ при успешном запросе (200 OK):
{
"count": 101,
"next": "https://domain.ru/api/v1/whatsapp-panel/chats/?limit=50&offset=100",
"previous": "https://domain.ru/api/v1/whatsapp-panel/chats/?limit=50",
"results": [
{
"id": 56,
"user_number": "790200000050",
"date_last_message": "2025-07-18T12:21:52.956679+0300",
"is_favorite": false,
"note": null,
"user_owner": 1
}
]
}
Описание полей:
| Поле | Тип | Описание |
|---|---|---|
id | int | Уникальный идентификатор чата |
user_number | string | Номер пользователя WhatsApp, который написал сообщение |
date_last_message | datetime | Дата и время последнего сообщения в чате |
is_favorite | boolean | Отмечен ли чат как избранный |
note | string/null | Примечание пользователя по чату (если есть) |
user_owner | int | ID пользователя системы, которому принадлежит чат |
Возможные ошибки:
- 403 Forbidden:
- 500 Internal Server Error:
Получение сообщений чата🔗
Описание: Получить все сообщения, связанные с указанным чатом. Возвращаются в порядке возрастания времени (date). Получить сообщения можно только из чата который принадлежит юзеру.
Метод: GET
Путь: /api/v1/whatsapp-panel/messages/{chat_id}/
Параметры пути:
chat_id(int) — ID чата, сообщения которого нужно получить
Заголовки:
Тело запроса: (Не требуется)
Ответ при успешном запросе (200 OK):
[
{
"id": 17,
"message": "Привет, вызови тестовую функцию",
"sender": "user",
"date": "2025-07-16T14:25:21.164154+0300",
"chat": 5
},
{
"id": 23,
"message": "ChatGPT использовал функцию generate_test_function_1 с аргументами {\"param_1_1\":\"Тестовое сообщение от юзера\",\"param_1_2\":25,\"param_1_3\":false}",
"sender": "system",
"date": "2025-07-16T14:32:43.947546+0300",
"chat": 5
},
{
"id": 55,
"message": "Тестовую функцию получил",
"sender": "chatgpt",
"date": "2025-07-16T14:25:26.666842+0300",
"chat": 5
}
]
Описание полей:
| Поле | Тип | Описание |
|---|---|---|
id | int | Уникальный идентификатор сообщения |
message | string | Текст сообщения |
sender | string | Отправитель (user, chatgpt или system) |
date | datetime | Дата и время отправки сообщения (по серверу) |
chat | int | ID чата, к которому относится сообщение |
Возможные ошибки:
- 403 Forbidden:
- 404 Not Found:
- 500 Internal Server Error:
Финансы🔗
Префикс🔗
Все запросы начинаются с:
Баланс пользователя🔗
Описание: Получение текущего баланса пользователя. Используется кэшированное значение.
Метод: GET
Путь: balance/
Заголовки:
Ответ при успешном запросе (200 OK):
Возможные ошибки:
- 403 Forbidden: Пользователь не аутентифицирован.
Расходы по периодам (график)🔗
Описание: Возвращает агрегированные расходы пользователя за выбранный период (день, неделя, месяц).
Метод: GET
Путь: /api/v1/user/expenses/chart/
Параметры запроса:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
period | string | да | Один из day, week, month |
start_date | date | да | Начальная дата в формате YYYY-MM-DD |
end_date | date | да | Конечная дата в формате YYYY-MM-DD |
Пример запроса:
Ответ при успешном запросе (200 OK):
{
"aggregation": "week",
"data": [
{
"label": "W05 2025",
"total_spent": "54.90"
},
{
"label": "W06 2025",
"total_spent": "32.10"
}
]
}
Возможные ошибки:
- 400 Bad Request: Неверный
period, отсутствиеstart_dateилиend_date, превышение допустимого диапазона. - 403 Forbidden: Пользователь не аутентифицирован.
Статистика расходов по максимуму🔗
Описание: Возвращает максимальные расходы пользователя по выбранному периоду (год, месяц, неделя) и общие суммы.
Метод: GET
Путь: /api/v1/user/expenses/summary/
Параметры запроса:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
year | int | да | Целевой год |
month | int | нет | Месяц (если задан — нельзя указывать week) |
week | int | нет | ISO-неделя (если задано — нельзя указывать month) |
Пример запроса:
Ответы при успешном запросе:
- По году:
{
"period": "year",
"year": 2025,
"total_spent": "1567.32",
"max_month": {
"month": 3,
"total_spent": "320.40"
},
"max_week": {
"week": 12,
"total_spent": "134.80"
}
}
- По месяцу:
{
"period": "month",
"year": 2025,
"month": 6,
"total_spent": "198.00",
"max_week": {
"week": 24,
"total_spent": "84.30"
}
}
- По неделе:
{
"period": "week",
"year": 2025,
"week": 10,
"date_from": "2025-03-03",
"date_to": "2025-03-09",
"total_spent": "92.50",
"max_day": {
"date": "2025-03-04",
"total_spent": "58.00"
}
}
Возможные ошибки:
- 400 Bad Request: Не указаны
year, указаны одновременноmonthиweek, либо некорректные значения. - 403 Forbidden: Пользователь не аутентифицирован.
Ассистент🔗
Получить список ассистентов🔗
Описание: Возвращает краткий список ассистентов, принадлежащих текущему пользователю.
Метод: GET
Путь: /api/v1/assistant/list/
Пример запроса:
Ответ (200 OK):
Получить детали ассистента🔗
Описание: Возвращает полную информацию об ассистенте по его id.
Метод: GET
Путь: /api/v1/assistant/detail/{id}/
Параметры пути:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
id | string | да | ID ассистента |
Пример запроса:
Ответ (200 OK):
{
"id": 5,
"assistant_id": "asst_abc123",
"name": "Мой ассистент",
"description": "Ассистент для помощи",
"instructions": "...",
"temperature": 1.0,
"top_p": 1.0
}
Возможные ошибки:
- 404 Not Found:
Создать ассистента🔗
Описание: Создаёт нового ассистента в OpenAI и сохраняет его в базу данных.
Метод: POST
Путь: /api/v1/assistant/create/
Тело запроса:
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
name | string | да | Название ассистента (до 256 символов) |
model | string | нет | Название модели (по умолчанию: "gpt-4o") |
description | string | нет | Описание ассистента (до 512 символов) |
instructions | string | да | Инструкции для поведения модели |
temperature | float | нет | От 0.0 до 2.0, по умолчанию 1.0 |
top_p | float | нет | От 0.0 до 1.0, по умолчанию 1.0 |
Изменять можно только температуру или top_p, оба рекомендуется (запрещено за 1 запрос изменять оба)
Пример запроса:
{
"name": "Помощник",
"model": "gpt-4o",
"description": "Мой ассистент",
"instructions": "Отвечай строго.",
"temperature": 1.0,
"top_p": 1.0
}
Ответ (201 Created):
Возможные ошибки:
-
400 Bad Request: Ошибки валидации данных
-
502 Bad Gateway: Ошибка при взаимодействии с OpenAI
Обновить ассистента🔗
Описание: Частично обновляет параметры ассистента как в OpenAI, так и в локальной базе.
Метод: PATCH
Путь: /api/v1/assistant/update/{id}/
Параметры пути:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
id | string | да | ID ассистента |
Тело запроса (частичное обновление):
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
name | string | нет | Новое имя ассистента |
description | string | нет | Новое описание |
instructions | string | нет | Обновлённые инструкции |
temperature | float | нет | Новое значение temperature |
top_p | float | нет | Новое значение top_p |
Изменять можно только температуру или top_p, оба рекомендуется (запрещено за 1 запрос изменять оба)
Пример запроса:
Ответ (200 OK):
Возможные ошибки:
-
404 Not Found: Ассистент не найден
-
502 Bad Gateway: Ошибка при обновлении в OpenAI
Удалить ассистента🔗
Описание: Удаляет ассистента в OpenAI и локальной базе.
Метод: DELETE
Путь: /api/v1/assistant/delete/{id}/
Параметры пути:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
id | string | да | ID ассистента |
Пример запроса:
Ответ (204 No Content):
Возможные ошибки:
- 404 Not Found: Ассистент не найден
- 502 Bad Gateway: Ошибка при удалении в OpenAI