API
UTasks Developer API
Публичный API для интеграции сторонних сервисов с UTasks.
Начало работы
Базовый URL
https://app.utasks.io/utb
Все эндпоинты начинаются с префикса/pub/v1/.
Аутентификация
API использует Bearer-токен. Чтобы получить ключ, отправьте команду/apikey new в @UTasksBot.
Передавайте ключ в заголовке каждого запроса:
Authorization: Bearer utb_xxxxxxxxxxxxxxxx
Проверка подключения
Убедитесь, что ключ работает — запросите профиль:
GET /utb/pub/v1/profile Authorization: Bearer utb_...
Эндпоинты
Профиль
GET /pub/v1/profile
Возвращает профиль владельца API-ключа. Удобно использовать как проверку соединения.
Ответ200— объект PubProfileModel
{ "userId": "abc123", "userName": "ivan", "title": "Иван Петров", "role": "PRO", "roleExpireDate": "2025-12-31T00:00:00Z", "locale": "ru", "timeZone": "Europe/Moscow", "timeZoneId": 3 }
Проекты
GET /pub/v1/projects
Список проектов, в которых состоит текущий пользователь.
Ответ200— массив PubProjectModel
GET /pub/v1/projects/{id}
Получить проект по идентификатору. Доступно только для проектов, в которых пользователь является участником.
Параметры пути
Параметр | Тип | Обязательный | Описание |
| string | ✓ | Идентификатор проекта |
Ответ200— объект PubProjectModel
GET /pub/v1/projects/{id}/users
Список участников проекта с их статусами. Доступно только для проектов, в которых пользователь состоит.
Параметры пути
Параметр | Тип | Обязательный | Описание |
| string | ✓ | Идентификатор проекта |
Ответ200— массив PubProjectUserModel
Задачи
GET /pub/v1/tasks
Список задач текущего пользователя — по области или по проекту.
Параметры запроса
Параметр | Тип | Описание |
|
| Область задач (по умолчанию |
| string | Идентификатор проекта; требует активного членства |
| boolean |
|
| string | Поисковый запрос (поиск по заголовку) |
Ответ200— массив PubTaskModel
Пример
GET /utb/pub/v1/tasks?scope=Today Authorization: Bearer utb_...
GET /utb/pub/v1/tasks?projectId=abc123&completed=false Authorization: Bearer utb_...
POST /pub/v1/tasks
Создать задачу в проекте или в личном инбоксе. Отправляет те же уведомления в мессенджер, что и задачи из приложения.
Тело запроса—PubCreateTaskRequest
Ответ200— объект PubTaskModel
Пример
{ "title": "Подготовить отчёт", "description": "Квартальный отчёт по метрикам", "projectId": "abc123", "planDate": "2025-08-01T09:00:00Z", "dueDate": "2025-08-05T18:00:00Z", "priority": "High", "assigneeIds": ["user1", "user2"] }
GET /pub/v1/tasks/{id}
Получить задачу по идентификатору.
Параметры пути
Параметр | Тип | Обязательный | Описание |
| string | ✓ | Идентификатор задачи |
Ответ200— объект PubTaskModel
PATCH /pub/v1/tasks/{id}
Частичное обновление задачи. Обновляются только переданные (неnull) поля. Пустой список assigneeIds удаляет всех исполнителей.
Параметры пути
Параметр | Тип | Обязательный | Описание |
| string | ✓ | Идентификатор задачи |
Тело запроса — PubUpdateTaskRequest
Ответ200— объект PubTaskModel
Пример — изменить статус и приоритет
{ "status": "InProgress", "priority": "Highest" }
Пример — очистить плановую дату
{ "clearPlanDate": true }
DELETE /pub/v1/tasks/{id}
Удалить задачу. Разрешено автору задачи и администраторам проекта.
Параметры пути
Параметр | Тип | Обязательный | Описание |
| string | ✓ | Идентификатор задачи |
POST /pub/v1/tasks/{id}/complete
Отметить задачу как выполненную. Автор закрывает задачу целиком; исполнитель отмечает только свою часть — задача закрывается глобально, когда все исполнители выполнили свою часть. Доступно автору и исполнителям.
Параметры пути
Параметр | Тип | Обязательный | Описание |
| string | ✓ | Идентификатор задачи |
POST /pub/v1/tasks/{id}/uncomplete
Переоткрыть выполненную задачу для всех участников; статус сбрасывается вNew. Доступно автору и исполнителям.
Параметры пути
Параметр | Тип | Обязательный | Описание |
| string | ✓ | Идентификатор задачи |
GET /pub/v1/tasks/{id}/history
История изменений задачи и комментарии, по умолчанию от старых к новым.
Параметры пути
Параметр | Тип | Обязательный | Описание |
| string | ✓ | Идентификатор задачи |
Параметры запроса
Параметр | Тип | Описание |
| string | Фильтр записей истории |
| string | Сортировка записей |
Ответ200— массив PubTaskHistoryItemModel
POST /pub/v1/tasks/{id}/attachassignee
Добавить текущего пользователя (владельца API-ключа) как исполнителя задачи.
Параметры пути
Параметр | Тип | Обязательный | Описание |
| string | ✓ | Идентификатор задачи |
POST /pub/v1/tasks/{id}/publish
Опубликовать карточку задачи как сообщение в чат проекта (для публичных проектов) или в личный чат автора.
Параметры пути
Параметр | Тип | Обязательный | Описание |
| string | ✓ | Идентификатор задачи |
POST /pub/v1/tasks/{id}/comments
Добавить текстовый комментарий к задаче.
Параметры пути
Параметр | Тип | Обязательный | Описание |
| string | ✓ | Идентификатор задачи |
Тело запроса—PubCommentRequest
{ "text": "Готово, проверьте пожалуйста" }
Объекты данных
PubProfileModel
Профиль пользователя — владельца API-ключа.
Поле | Тип | Описание |
| string | Идентификатор пользователя |
| string | Логин (username) |
| string | Отображаемое имя |
| string | Тариф / роль |
| string (ISO 8601) | Дата истечения тарифа |
| string | Язык интерфейса |
| string | Часовой пояс (IANA) |
| number | Идентификатор часового пояса |
PubProjectModel
Поле | Тип | Описание |
| string | Идентификатор проекта |
| string | Название проекта |
| string | Описание |
|
| Тип проекта |
PubProjectUserModel
Поле | Тип | Описание |
| string | Идентификатор пользователя |
| string | Логин |
| string | Отображаемое имя |
|
| Статус участника в проекте |
PubUserModel
Краткая информация о пользователе (используется внутри задач).
Поле | Тип | Описание |
| string | Идентификатор пользователя |
| string | Логин |
| string | Отображаемое имя |
PubTaskModel
Поле | Тип | Описание |
| string | Идентификатор задачи |
| string | Человекочитаемый номер задачи, например |
| string | Заголовок задачи |
| string | Описание |
|
| Статус |
|
| Приоритет |
| string | null | Идентификатор проекта; |
| string | null | Название проекта; |
| string | null | Плановая дата (ISO 8601) |
| string | null | Правило повторения плановой даты |
| string | null | Дедлайн (ISO 8601) |
| boolean | Задача выполнена глобально. Для задач с несколькими исполнителями становится |
| string | null | Дата завершения |
| string[] | Идентификаторы исполнителей, отметивших свою часть как выполненную |
| boolean | Задача выполнена для текущего пользователя: либо глобально завершена, либо пользователь отметил свою часть |
|
| Автор задачи |
|
| Исполнители |
PubCreateTaskRequest
Поле | Тип | Обязательный | Описание |
| string | ✓ | Заголовок задачи, до 5000 символов |
| string | null | Описание, до 5000 символов | |
| string | null | Идентификатор проекта; не указывайте для личного инбокса | |
| string | null | Плановая дата (ISO 8601) | |
| string | null | Дедлайн; не может быть раньше плановой даты | |
| string | null | Правило повторения плановой даты | |
|
| Приоритет | |
| string[] | null | Идентификаторы исполнителей. Должны быть участниками проекта |
PubUpdateTaskRequest
Все поля опциональны. Передавайте только те, которые нужно изменить.
Поле | Тип | Описание |
| string | null | Новый заголовок, до 5000 символов |
| string | null | Новое описание, до 5000 символов |
| string | null | Новая плановая дата |
| string | null | Новый дедлайн; не может быть раньше плановой даты |
| boolean | Очистить плановую дату (имеет приоритет над |
| boolean | Очистить дедлайн (имеет приоритет над |
| string | null | Новое правило повторения |
|
| Новый приоритет |
|
| Новый статус |
| string[] | null | Новый полный список исполнителей (пустой массив удаляет всех) |
PubCommentRequest
Поле | Тип | Обязательный | Описание |
| string | ✓ | Текст комментария |
PubCommentModel
Поле | Тип | Описание |
| string | Текст комментария |
| string (ISO 8601) | Дата создания |
PubTaskHistoryItemModel
Запись истории изменений задачи.
Поле | Тип | Описание |
| string (ISO 8601) | Дата события |
|
| Автор изменения |
| string | Текст комментария (если это комментарий) |
|
| Данные об изменении поля |
PubTaskHistoryChangeModel
Поле | Тип | Описание |
| string | Название изменённого поля |
| string | Старое значение |
| string | Новое значение |
Перечисления
UTTaskStatus
Статус задачи.
Значение | Описание |
| Новая |
| К выполнению |
| В работе |
| Решена |
| На проверке |
| Согласована |
| Закрыта |
UTTaskPriority
Приоритет задачи.
Значение | Описание |
| Не задан |
| Наинизший |
| Низкий |
| Средний |
| Высокий |
| Наивысший |
UTProjectType
Тип проекта.
Значение | Описание |
| Приватный |
| Публичный |
| Динамический |
UTUserStatus
Роль участника в проекте.
Значение | Описание |
| Без роли |
| Создатель |
| Администратор |
| Участник |
PubTaskScope
Область фильтрации задач.
Значение | Описание |
| Все задачи |
| Входящие |
| На сегодня |
| На завтра |
| На неделю |
| Выполненные |
Примеры сценариев
Получить задачи на сегодня
GET /utb/pub/v1/tasks?scope=Today Authorization: Bearer utb_...
Создать задачу в личном инбоксе
POST /utb/pub/v1/tasks Authorization: Bearer utb_... Content-Type: application/json { "title": "Позвонить клиенту", "planDate": "2025-08-01T10:00:00Z", "priority": "High" }
Создать задачу в проекте с исполнителями
POST /utb/pub/v1/tasks Authorization: Bearer utb_... Content-Type: application/json { "title": "Ревью PR #42", "projectId": "proj_abc", "assigneeIds": ["user_1", "user_2"], "dueDate": "2025-08-03T18:00:00Z", "priority": "Medium" }
Перевести задачу в статус «В работе»
PATCH /utb/pub/v1/tasks/task_xyz Authorization: Bearer utb_... Content-Type: application/json { "status": "InProgress" }
Завершить задачу
POST /utb/pub/v1/tasks/task_xyz/complete Authorization: Bearer utb_...
Добавить комментарий
POST /utb/pub/v1/tasks/task_xyz/comments Authorization: Bearer utb_... Content-Type: application/json { "text": "Готово, жду вашего ревью" }
Коды ошибок
Код | Описание |
| Некорректный запрос — проверьте тело запроса |
| Не авторизован — проверьте API-ключ |
| Нет доступа — недостаточно прав для действия |
| Объект не найден |
| Внутренняя ошибка сервера |
Тело ошибки возвращается в формате ProblemDetails:
{ "type": "https://tools.ietf.org/html/rfc9110#section-15.5.1", "title": "Bad Request", "status": 400, "detail": "Title is required" }