Создать задачу
POST /repos/{owner}/{repo}/issues
Описание
Метод POST создает новую задачу в указанном репозитории. Этот метод применяется для создания новых задач, инициации процессов отслеживания ошибок, предложения новых функций или начала обсуждений.
Важно: Учитывается ролевая модель:
- задачи: учитываются права на создание задачи в статусе «Открыто», создание задачи с разными типами и изменение исполнителя;
- запросы на слияние: для создания PR используется отдельный метод
POST /repos/{owner}/{repo}/pulls.
Заголовки
| Параметр | Обязательный | Описание |
|---|---|---|
Accept | Да | Тип содержимого ответа. Рекомендуется установить значение application/vnd.gitverse.object+json;version=1 |
Authorization | Да | Токен доступа. Формат: Bearer <YOUR-TOKEN> или token <YOUR-TOKEN> |
Content-Type | Да | Тип содержимого запроса. Должен быть установлен в application/json. |
Параметры пути
В URL запроса необходимо передать следующие идентификаторы ресурса:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
owner | string | Да | Владелец репозитория (пользователь или организация) |
repo | string | Да | Название репозитория (без расширения .git) |
Параметры и тело запроса
Данный метод не использует параметры строки запроса.
Запрос должен содержать тело в формате JSON со следующими полями:
{
"title": "Исправить ошибку в авторизации",
"body": "При входе через социальные сети возникает ошибка 500. Необходимо исправить.",
"type": "bug",
"labels": ["critical", "auth"],
"assignees": ["developer1", "developer2"]
}| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
title | string | Да | Заголовок задачи. Не может быть пустой строкой или null. |
body | string | Нет | Описание задачи. Поддерживается разметка Markdown. |
type | string | Да | Тип задачи. Принимает значения: task (Задача), bug (Дефект), story (История), epic (Эпик). Необязательный параметр. если его не передать, то будет просто тип «Задача». Но передавать его пустым нельзя. |
labels | array of strings | Нет | Массив названий меток для назначения на задачу. Метки должны существовать в репозитории. |
assignees | array of strings | Нет | Массив логинов пользователей для назначения исполнителями на задачу. Только соавторы репозитория и участники команды с доступом могут быть назначены. Остальные логины игнорируются. |
💡 Совет: поле type обязательно для заполнения. В отличие от GitHub API, где тип задачи не стандартизирован, в GitVerse используется фиксированный набор типов.
Пример запроса
Ниже приведен пример использования curl для создания задачи с типом bug, меткой critical и назначением исполнителя.
bash
curl -X POST "https://api.gitverse.ru/repos/user/example-repo/issues" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Accept: application/vnd.gitverse.object+json;version=1" \
-H "Content-Type: application/json" \
-d '{
"title": "Исправить ошибку в авторизации",
"body": "При входе через социальные сети возникает ошибка 500. Необходимо исправить.",
"type": "bug",
"labels": ["critical"],
"assignees": ["developer1"]
}'
Замените YOUR_TOKEN на ваш личный токен доступа. Заголовок Content-Type обязателен, так как передается JSON-тело.
Ответ при успешном создании (201 Created) Если задача была успешно создана, сервер вернет ответ с кодом 201 Created и телом в формате JSON, содержащим объект созданной задачи:
{
"id": 18,
"node_id": null,
"url": "https://api.gitverse.ru/repos/user123/repo123/issues/18",
"repository_url": "https://api.gitverse.ru/repos/user123/repo123",
"labels_url": "https://api.gitverse.ru/repos/user123/repo123/issues/18/labels/{name}",
"comments_url": "https://api.gitverse.ru/repos/user123/repo123/issues/18/comments",
"events_url": null,
"html_url": "https://gitverse.ru/user123/repo123/issues/18",
"number": 18,
"state": "open",
"title": "Исправить ошибку в авторизации",
"body": "При входе через социальные сети возникает ошибка 500. Необходимо исправить.",
"user": {
"login": "user123",
"id": 1,
"node_id": null,
"avatar_url": "https://gitverse.ru/sc/avatars/366881ac41dfd51a15e0f64d0572939ff242730f48c7969abc954d55192d5112",
"gravatar_id": null,
"url": "https://api.gitverse.ru/users/user123",
"html_url": "https://gitverse.ru/user123",
"followers_url": null,
"following_url": null,
"gists_url": null,
"starred_url": null,
"subscriptions_url": null,
"organizations_url": null,
"repos_url": null,
"events_url": null,
"received_events_url": null,
"type": "User",
"site_admin": false
},
"labels": [
{
"id": 123,
"name": "critical",
"description": "Критическая проблема",
"color": "d93f0b",
"exclusive": false
}
],
"assignees": [
{
"login": "developer1",
"id": 2,
"avatar_url": "https://gitverse.ru/avatars/2"
}
],
"milestone": null,
"locked": false,
"type": {
"id": 4,
"code": "bug",
"name": "Дефект",
"color": "#DBF0FF"
},
"comments": 0,
"closed_at": null,
"created_at": "2025-04-09T09:51:18.187693Z",
"updated_at": "2025-04-09T09:51:18.187693Z",
"draft": false,
"repository": {
"id": 789,
"name": "repo123",
"full_name": "user123/repo123"
},
"timeline_url": "https://api.gitverse.ru/repos/user123/repo123/issues/18/timeline"
}
Структура объекта задачи
Объект задачи в ответе содержит следующие поля:
| Поле | Тип | Описание |
|---|---|---|
id | integer | Уникальный числовой идентификатор задачи. |
node_id | string | Глобальный ID узла GraphQL. Для GitVerse всегда null. |
url | string | Полный URL к API для получения задачи. |
repository_url | string | Полный URL к API для репозитория, которому принадлежит задача. |
labels_url | string | URL для доступа к API для получения меток, назначенных этой задаче. Шаблон URI, требующий подстановки имени метки. |
comments_url | string | Полный URL к API для получения списка комментариев к этой задаче. |
events_url | string | Полный URL к API для получения списка событий. Всегда null. |
html_url | string | URL для просмотра задачи в веб-интерфейсе GitVerse. |
number | integer | Порядковый номер задачи в репозитории. |
state | string | Текущее состояние. Всегда "open" для новой задачи. |
title | string | Заголовок задачи. |
body | string | Содержимое (тело) задачи в формате Markdown. |
user | object | Объект с информацией об авторе задачи. Содержит поля login, id, avatar_url, html_url и др. |
labels | array of objects | Массив меток, присвоенных задаче. Каждая метка содержит id, name, description, color, exclusive. |
assignees | array of objects | Массив пользователей, назначенных исполнителями. Каждый объект содержит login, id, avatar_url. |
milestone | object / null | Объект вехи, к которой привязана задача. Всегда null. |
locked | boolean | Заблокирована ли задача. Всегда false. |
type | object | Тип задачи. Содержит id, code (task/bug/story/epic), name, color. |
comments | integer | Количество комментариев. Для новой задачи всегда 0. |
closed_at | string (date-time) | Временная метка закрытия. Для новой задачи всегда null. |
created_at | string (date-time) | Временная метка создания в формате RFC 3339 (UTC). |
updated_at | string (date-time) | Временная метка последнего обновления в формате RFC 3339 (UTC). |
draft | boolean | Всегда false для задач. |
repository | object | Объект репозиторий с полным описанием, к которому относится задача. |
timeline_url | string | URL для получения таймлайна событий по задаче. |
Коды ответа
Результат выполнения запроса определяется по HTTP-статусу:
| Код | Статус | Описание |
|---|---|---|
200 | OK | Список задач и запросов успешно получен. |
400 | Bad Request | Некорректные параметры запроса (например, недопустимое значение state). |
404 | Not Found | Репозиторий не найден или нет доступа к нему. |
422 | Unprocessable Entity | Ошибка валидации параметров. |
500 | Internal Server Error | Внутренняя ошибка сервера GitVerse. |
Особенности метода
Обязательное поле type: в GitVerse тип задачи является обязательным полем. Допустимые значения: task, bug, story, epic.
Назначение исполнителей: только соавторы репозитория и участники команды с доступом к репозиторию могут быть назначены исполнителями. Остальные переданные логины пользователей будут проигнорированы.
Метки: передаваемые метки должны существовать в репозитории. Если передана несуществующая метка, запрос завершится с ошибкой 422.
Состояние задачи: новая задача всегда создается со статусом «Открыто» (state: «open»).
Ролевая модель: учитываются права на создание задачи в статусе «Открыто» и создание задачи с разными типами. Если у пользователя нет прав на создание задачи с указанным типом, запрос завершится с ошибкой 404.