Создать задачу

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 запроса необходимо передать следующие идентификаторы ресурса:

ПараметрТипОбязательныйОписание
ownerstringДаВладелец репозитория (пользователь или организация)
repostringДаНазвание репозитория (без расширения .git)

Параметры и тело запроса

Данный метод не использует параметры строки запроса.

Запрос должен содержать тело в формате JSON со следующими полями:

{
  "title": "Исправить ошибку в авторизации",
  "body": "При входе через социальные сети возникает ошибка 500. Необходимо исправить.",
  "type": "bug",
  "labels": ["critical", "auth"],
  "assignees": ["developer1", "developer2"]
}
ПолеТипОбязательныйОписание
titlestringДаЗаголовок задачи. Не может быть пустой строкой или null.
bodystringНетОписание задачи. Поддерживается разметка Markdown.
typestringДаТип задачи. Принимает значения: task (Задача), bug (Дефект), story (История), epic (Эпик). Необязательный параметр. если его не передать, то будет просто тип «Задача». Но передавать его пустым нельзя.
labelsarray of stringsНетМассив названий меток для назначения на задачу. Метки должны существовать в репозитории.
assigneesarray 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"
}

Структура объекта задачи

Объект задачи в ответе содержит следующие поля:

ПолеТипОписание
idintegerУникальный числовой идентификатор задачи.
node_idstringГлобальный ID узла GraphQL. Для GitVerse всегда null.
urlstringПолный URL к API для получения задачи.
repository_urlstringПолный URL к API для репозитория, которому принадлежит задача.
labels_urlstringURL для доступа к API для получения меток, назначенных этой задаче. Шаблон URI, требующий подстановки имени метки.
comments_urlstringПолный URL к API для получения списка комментариев к этой задаче.
events_urlstringПолный URL к API для получения списка событий. Всегда null.
html_urlstringURL для просмотра задачи в веб-интерфейсе GitVerse.
numberintegerПорядковый номер задачи в репозитории.
statestringТекущее состояние. Всегда "open" для новой задачи.
titlestringЗаголовок задачи.
bodystringСодержимое (тело) задачи в формате Markdown.
userobjectОбъект с информацией об авторе задачи. Содержит поля login, id, avatar_url, html_url и др.
labelsarray of objectsМассив меток, присвоенных задаче. Каждая метка содержит id, name, description, color, exclusive.
assigneesarray of objectsМассив пользователей, назначенных исполнителями. Каждый объект содержит login, id, avatar_url.
milestoneobject / nullОбъект вехи, к которой привязана задача. Всегда null.
lockedbooleanЗаблокирована ли задача. Всегда false.
typeobjectТип задачи. Содержит id, code (task/bug/story/epic), name, color.
commentsintegerКоличество комментариев. Для новой задачи всегда 0.
closed_atstring (date-time)Временная метка закрытия. Для новой задачи всегда null.
created_atstring (date-time)Временная метка создания в формате RFC 3339 (UTC).
updated_atstring (date-time)Временная метка последнего обновления в формате RFC 3339 (UTC).
draftbooleanВсегда false для задач.
repositoryobjectОбъект репозиторий с полным описанием, к которому относится задача.
timeline_urlstringURL для получения таймлайна событий по задаче.

Коды ответа

Результат выполнения запроса определяется по HTTP-статусу:

КодСтатусОписание
200OKСписок задач и запросов успешно получен.
400Bad RequestНекорректные параметры запроса (например, недопустимое значение state).
404Not FoundРепозиторий не найден или нет доступа к нему.
422Unprocessable EntityОшибка валидации параметров.
500Internal Server ErrorВнутренняя ошибка сервера GitVerse.

Особенности метода

Обязательное поле type: в GitVerse тип задачи является обязательным полем. Допустимые значения: task, bug, story, epic.

Назначение исполнителей: только соавторы репозитория и участники команды с доступом к репозиторию могут быть назначены исполнителями. Остальные переданные логины пользователей будут проигнорированы.

Метки: передаваемые метки должны существовать в репозитории. Если передана несуществующая метка, запрос завершится с ошибкой 422.

Состояние задачи: новая задача всегда создается со статусом «Открыто» (state: «open»).

Ролевая модель: учитываются права на создание задачи в статусе «Открыто» и создание задачи с разными типами. Если у пользователя нет прав на создание задачи с указанным типом, запрос завершится с ошибкой 404.