API Reference
Базовый URL: http://localhost:4000/api
Все эндпоинты (кроме auth, health и pending invitations) требуют Authorization: Bearer <access_token>.
Swagger UI доступен по адресу http://localhost:4000/api/docs.
Аутентификация
| Метод | Путь | Auth | Описание |
|---|---|---|---|
POST | /api/auth/register | Нет | Создать аккаунт |
POST | /api/auth/login | Нет | Войти |
POST | /api/auth/refresh | Нет | Обновить access токен |
GET | /api/auth/profile | Да | Профиль текущего пользователя |
POST | /api/auth/forgot-password | Нет | Отправить email для сброса пароля |
POST | /api/auth/reset-password | Нет | Сбросить пароль по токену |
GET | /api/auth/permissions | Да | Разрешения текущего пользователя |
Social Auth
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/auth/social/yandex | Нет | Вход через Яндекс ID |
GET | /api/auth/social/yandex/callback | Нет | Callback Яндекса |
GET | /api/auth/social/vk | Нет | Вход через VK ID |
GET | /api/auth/social/vk/callback | Нет | Callback VK |
Пользователи
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/users/me | Да | Профиль текущего пользователя |
PATCH | /api/users/me | Да | Обновить профиль |
POST | /api/users/me/avatar | Да | Загрузить аватар |
GET | /api/users/me/quota | Да | Информация о квоте |
PATCH | /api/users/me/plan | Да | Сменить тариф |
POST | /api/users/me/change-password | Да | Сменить пароль |
GET | /api/users | Да | Список пользователей |
GET | /api/users/search | Да | Поиск пользователей (?q=) |
Организации
Все ресурсные эндпоинты используют slug вместо ID.
| Метод | Путь | Auth | Разрешения |
|---|---|---|---|
GET | /api/organizations | Да | — |
POST | /api/organizations | Да | — |
GET | /api/organizations/by-slug/:slug | Да | org:view |
PATCH | /api/organizations/by-slug/:slug | Да | org:edit |
DELETE | /api/organizations/by-slug/:slug | Да | org:delete |
GET | /api/organizations/by-slug/:slug/quota | Да | org:view |
PATCH | /api/organizations/by-slug/:slug/plan | Да | org:edit |
GET | /api/organizations/by-slug/:slug/members | Да | org:members.view |
POST | /api/organizations/by-slug/:slug/members | Да | org:members.invite |
PATCH | /api/organizations/by-slug/:slug/members/:userId | Да | org:members.roles |
DELETE | /api/organizations/by-slug/:slug/members/:userId | Да | org:members.remove |
Аватар организации
| Метод | Путь | Auth | Описание |
|---|---|---|---|
POST | /api/organizations/by-slug/:slug/avatar | Да | Загрузить аватар организации |
Команды
Большинство ресурсных эндпоинтов используют slug вместо ID.
| Метод | Путь | Auth | Разрешения |
|---|---|---|---|
GET | /api/teams | Да | — |
GET | /api/teams/by-org/:slug | Да | — |
POST | /api/teams | Да | — |
GET | /api/teams/by-slug/:teamSlug | Да | team:view |
PATCH | /api/teams/by-slug/:teamSlug | Да | team:settings:edit |
DELETE | /api/teams/by-slug/:teamSlug | Да | team:delete |
GET | /api/teams/by-slug/:teamSlug/members | Да | team:view |
POST | /api/teams/by-slug/:teamSlug/members | Да | team:member:add |
DELETE | /api/teams/by-slug/:teamSlug/members/:userId | Да | team:member:remove |
GET | /api/teams/by-slug/:teamSlug/tasks | Да | task:view |
Квота и тариф команды
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/teams/by-slug/:teamSlug/quota | Да | Квота команды |
PATCH | /api/teams/by-slug/:teamSlug/plan | Да | Сменить тариф команды |
Проекты
| Метод | Путь | Auth | Разрешения |
|---|---|---|---|
GET | /api/projects | Да | — |
POST | /api/projects | Да | — |
GET | /api/projects/:id | Да | project:view |
PATCH | /api/projects/:id | Да | project:edit |
DELETE | /api/projects/:id | Да | project:delete |
GET | /api/projects/:id/members | Да | project:members.view |
POST | /api/projects/:id/members | Да | project:members.add |
DELETE | /api/projects/:id/members/:userId | Да | project:members.remove |
Задачи
| Метод | Путь | Auth | Разрешения |
|---|---|---|---|
GET | /api/tasks/my | Да | — |
GET | /api/tasks/my/calendar | Да | — (?from=&to=) |
GET | /api/projects/:id/tasks | Да | task:view |
POST | /api/projects/:id/tasks | Да | task:create |
GET | /api/projects/:id/tasks/:taskId | Да | task:view |
PATCH | /api/projects/:id/tasks/:taskId | Да | task:edit |
PATCH | /api/projects/:id/tasks/:taskId/status | Да | task:edit |
DELETE | /api/projects/:id/tasks/:taskId | Да | task:delete |
Комментарии к задачам
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/projects/:id/tasks/:taskId/comments | Да | Список комментариев |
POST | /api/projects/:id/tasks/:taskId/comments | Да | Создать комментарий |
PATCH | /api/projects/:id/tasks/:taskId/comments/:commentId | Да | Редактировать комментарий |
DELETE | /api/projects/:id/tasks/:taskId/comments/:commentId | Да | Удалить комментарий |
POST | /api/projects/:id/tasks/:taskId/comments/attachments | Да | Загрузить вложения |
История задач
| Метод | Путь | Auth | Разрешения |
|---|---|---|---|
GET | /api/projects/:id/tasks/:taskId/history | Да | task:view |
Переупорядочивание и массовые операции
| Метод | Путь | Auth | Описание |
|---|---|---|---|
POST | /api/projects/:id/tasks/reorder | Да | Переупорядочить задачи ({ taskId, position }[]) |
POST | /api/projects/:id/tasks/bulk | Да | Массовые операции (status/assign/delete/priority) |
Вложения задач
| Метод | Путь | Auth | Описание |
|---|---|---|---|
POST | /api/projects/:id/tasks/:taskId/attachments | Да | Загрузить вложения к задаче |
POST | /api/projects/:id/tasks/:taskId/attachments/remove | Да | Удалить вложение |
Зависимости задач
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/tasks/:taskId/dependencies | Да | Список зависимостей |
POST | /api/tasks/:taskId/dependencies | Да | Создать (dependsOnId, type?) |
DELETE | /api/tasks/:taskId/dependencies/:id | Да | Удалить зависимость |
Теги
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/orgs/:orgId/tags | Да | Теги организации |
GET | /api/teams/:teamId/tags | Да | Теги команды |
GET | /api/tasks/:taskId/tags | Да | Теги задачи |
POST | /api/tags | Да | Создать тег |
PATCH | /api/tags/:id | Да | Обновить тег |
DELETE | /api/tags/:id | Да | Удалить тег |
POST | /api/tasks/:taskId/tags | Да | Назначить теги (tagIds: string[]) |
Чат
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/chats | Да | Список бесед |
POST | /api/chats | Да | Создать беседу |
POST | /api/chats/direct/:userId | Да | Личная беседа |
POST | /api/chats/task/:taskId | Да | Беседа задачи |
GET | /api/chats/:id/messages | Да | Список сообщений (?before=&limit=) |
POST | /api/chats/:id/messages | Да | Отправить сообщение |
POST | /api/chats/:id/messages/attachments | Да | Загрузить вложения (до 10 файлов) |
POST | /api/chats/:id/read | Да | Отметить как прочитанное |
Уведомления
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/notifications | Да | Список уведомлений |
GET | /api/notifications/unread-count | Да | Количество непрочитанных |
PATCH | /api/notifications/:id/read | Да | Отметить как прочитанное |
PATCH | /api/notifications/read-all | Да | Отметить все как прочитанные |
DELETE | /api/notifications/:id | Да | Удалить уведомление |
Приглашения
| Метод | Путь | Auth | Описание |
|---|---|---|---|
POST | /api/invitations | Да | Создать приглашение |
GET | /api/invitations/my | Да | Список моих приглашений |
GET | /api/invitations/pending | Нет | Найти ожидающие (?teamSlug=&orgSlug=) |
POST | /api/invitations/:id/accept | Да | Принять приглашение |
POST | /api/invitations/:id/decline | Да | Отклонить приглашение |
DELETE | /api/invitations/:id/cancel | Да | Отменить приглашение |
События (календарь)
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/events | Да | Список событий (?from=&to=) |
POST | /api/events | Да | Создать событие |
GET | /api/events/:id | Да | Детали события |
PATCH | /api/events/:id | Да | Обновить событие |
DELETE | /api/events/:id | Да | Удалить событие |
Тарифы
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/plans | Да | Список тарифов |
Спринты
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/projects/:projectId/sprints | Да | Список спринтов проекта |
GET | /api/projects/:projectId/sprints/velocity | Да | Данные velocity |
GET | /api/sprints/:id | Да | Детали спринта |
POST | /api/sprints | Да | Создать спринт |
PATCH | /api/sprints/:id | Да | Обновить спринт |
DELETE | /api/sprints/:id | Да | Удалить спринт |
POST | /api/sprints/:id/tasks | Да | Добавить задачи в спринт |
DELETE | /api/sprints/:sprintId/tasks/:taskId | Да | Убрать задачу из спринта |
Пользовательские поля
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/custom-fields/:entityType | Да | Список полей для типа сущности |
POST | /api/custom-fields | Да | Создать определение поля |
PATCH | /api/custom-fields/:id | Да | Обновить поле |
DELETE | /api/custom-fields/:id | Да | Удалить поле |
GET | /api/custom-field-values/:entityId | Да | Получить значения полей |
POST | /api/custom-field-values/:entityId | Да | Установить значения полей |
Трекинг времени
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/tasks/:taskId/time-entries | Да | Список записей времени |
GET | /api/tasks/:taskId/time-total | Да | Суммарное время |
POST | /api/tasks/:taskId/time-entries | Да | Добавить запись времени |
DELETE | /api/time-entries/:id | Да | Удалить запись времени |
Избранное
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/favorites | Да | Список избранных |
POST | /api/favorites | Да | Добавить в избранное |
DELETE | /api/favorites/:entityType/:entityId | Да | Удалить из избранного |
Шаблоны
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/orgs/:orgId/templates | Да | Список шаблонов организации |
POST | /api/templates | Да | Создать шаблон |
PATCH | /api/templates/:id | Да | Обновить шаблон |
DELETE | /api/templates/:id | Да | Удалить шаблон |
POST | /api/templates/:templateId/apply/:projectId | Да | Применить шаблон к проекту |
Вебхуки
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/orgs/:orgId/webhooks | Да | Список вебхуков организации |
POST | /api/webhooks | Да | Создать вебхук |
PATCH | /api/webhooks/:id | Да | Обновить вебхук |
DELETE | /api/webhooks/:id | Да | Удалить вебхук |
GET | /api/webhooks/:id/logs | Да | Логи доставки |
Корзина
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/trash | Да | Список удалённых элементов |
POST | /api/trash/:entityType/:entityId/restore | Да | Восстановить элемент |
DELETE | /api/trash/:entityType/:entityId | Да | Удалить навсегда |
Поиск
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/search | Да | Глобальный поиск (?q=) — возвращает задачи, проекты, команды, организации |
Отчёты
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/projects/:id/report | Да | Отчёт по проекту |
GET | /api/projects/:id/export/csv | Да | Экспорт задач в CSV |
Двухфакторная аутентификация
| Метод | Путь | Auth | Описание |
|---|---|---|---|
POST | /api/auth/2fa/generate | Да | Генерация секрета 2FA + URL QR-кода |
POST | /api/auth/2fa/enable | Да | Включить 2FA (проверка TOTP-кода) |
POST | /api/auth/2fa/disable | Да | Отключить 2FA (проверка TOTP-кода) |
Видеокомнаты
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/video-rooms | Да | Список комнат |
POST | /api/video-rooms | Да | Создать комнату |
GET | /api/video-rooms/:id | Да | Детали комнаты |
PATCH | /api/video-rooms/:id | Да | Обновить комнату |
DELETE | /api/video-rooms/:id | Да | Завершить/удалить комнату |
POST | /api/video-rooms/:id/join | Да | Присоединиться |
POST | /api/video-rooms/:id/leave | Да | Покинуть |
GET | /api/video-rooms/:id/participants | Да | Список участников |
POST | /api/video-rooms/:id/token | Да | Получить LiveKit токен |
POST | /api/video-rooms/:id/recording/start | Да | Начать запись |
POST | /api/video-rooms/:id/recording/stop | Да | Остановить запись |
GET | /api/video-rooms/:id/recording/status | Да | Статус записи |
Здоровье
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/health | Нет | Проверка здоровья сервиса |
GET | /api/docs | Нет | Swagger UI (интерактивная документация API) |
GET | /uploads/* | Нет | Статические файлы (локальные загрузки) |
Администрирование
Статистика
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/admin/stats | Да | Агрегированная статистика |
Пользователи
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/admin/users | Да | Список пользователей (?page=&limit=) |
GET | /api/admin/users/:id | Да | Детали пользователя с ролями |
POST | /api/admin/users | Да | Создать пользователя |
PATCH | /api/admin/users/:id | Да | Обновить пользователя |
DELETE | /api/admin/users/:id | Да | Удалить пользователя |
POST | /api/admin/users/:id/roles | Да | Назначить роль |
DELETE | /api/admin/users/:id/roles/:roleId | Да | Удалить роль |
POST | /api/admin/users/:id/resend-verification | Да | Повторно отправить подтверждение email |
POST | /api/admin/users/:id/send-password-reset | Да | Отправить email для сброса пароля |
Организации
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/admin/organizations | Да | Список организаций (?page=&limit=) |
DELETE | /api/admin/organizations/:id | Да | Удалить организацию |
Команды
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/admin/teams | Да | Список команд (?page=&limit=) |
DELETE | /api/admin/teams/:id | Да | Удалить команду |
Роли
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/admin/roles | Да | Список ролей (?scope=) |
GET | /api/admin/roles/:id | Да | Детали роли |
POST | /api/admin/roles | Да | Создать роль |
PATCH | /api/admin/roles/:id | Да | Обновить роль |
DELETE | /api/admin/roles/:id | Да | Удалить роль |
Группы
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/admin/groups | Да | Список групп (?scope=&organizationId=) |
POST | /api/admin/groups | Да | Создать группу |
PATCH | /api/admin/groups/:id | Да | Обновить группу |
DELETE | /api/admin/groups/:id | Да | Удалить группу |
GET | /api/admin/groups/:id/members | Да | Участники группы |
POST | /api/admin/groups/:id/members | Да | Добавить участника |
DELETE | /api/admin/groups/:id/members/:userId | Да | Удалить участника |
GET | /api/admin/groups/:id/roles | Да | Роли группы |
POST | /api/admin/groups/:id/roles | Да | Назначить роль группе |
DELETE | /api/admin/groups/:id/roles/:roleId | Да | Удалить роль у группы |
Тарифы
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/admin/plans | Да | Список всех тарифов |
PATCH | /api/admin/plans/:id | Да | Обновить тариф |
Файлы
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/admin/files | Да | Список файлов (?page=&limit=) |
DELETE | /api/admin/files/:id | Да | Удалить файл |
Разрешения
| Метод | Путь | Auth | Описание |
|---|---|---|---|
GET | /api/admin/permissions | Да | Список всех разрешений |
Ответы об ошибках
Все ошибки возвращают единую JSON-структуру:
json
{
"statusCode": 400,
"message": "Описание ошибки",
"error": "Bad Request"
}Распространённые коды статуса:
200— Успех201— Создано400— Неверный запрос (ошибка валидации)401— Не авторизован403— Доступ запрещён404— Не найдено409— Конфликт500— Внутренняя ошибка сервера
Пагинация
Эндпоинты со списками поддерживают пагинацию через параметры запроса:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
page | number | 1 | Номер страницы |
limit | number | 20 | Элементов на странице |
json
{
"data": [...],
"total": 50,
"page": 1,
"limit": 20
}