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

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"],
  "due_date": "2026-10-01T12:00:00Z"
}
ПолеТипОбязательныйОписание
titlestringДаЗаголовок задачи. Не может быть пустой строкой или null.
bodystringНетОписание задачи. Поддерживается разметка Markdown.
typestringНетТип задачи. Если поле не передано, используется тип задачи по умолчанию. Пустое значение не передавайте. Допустимые коды типов: task (Задача), bug (Дефект), story (История), epic (Эпик); доступные типы определяются настройками организации.
labelsarray of stringsНетМассив названий меток для назначения на задачу. Метки должны существовать в репозитории.
assigneesarray of stringsНетМассив логинов пользователей для назначения исполнителями на задачу. Только соавторы репозитория и участники команды с доступом могут быть назначены. Остальные логины игнорируются.
due_datestring (date-time)НетКонтрольный срок в формате RFC 3339, например 2026-10-01T12:00:00Z.

💡 Совет: передавайте type, только если заранее знаете код типа, доступный в организации. Иначе не указывайте поле — API применит тип по умолчанию. В отличие от GitHub API, где тип задачи не стандартизирован, в GitVerse используется фиксированный набор типов (task, bug, story, epic).

Примечание (совместимость): В ранних версиях документации поле type описывалось как обязательное с фиксированным набором значений task, bug, story, epic. В актуальной версии поле необязательное — при его отсутствии применяется тип задачи по умолчанию. Учитывайте поведение конкретной версии API вашей организации.

Пример запроса

Ниже приведен пример использования 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": 163200,
    "node_id": null,
    "url": "https://api.gitverse.ru/repos/user_42/neo2/issues/6",
    "repository_url": "https://api.gitverse.ru/repos/user_42/neo2",
    "labels_url": "https://api.gitverse.ru/repos/user_42/neo2/issues/6/labels{/name}",
    "comments_url": "https://api.gitverse.ru/repos/user_42/neo2/issues/6/comments",
    "events_url": null,
    "html_url": "https://gitverse.ru/user_42/neo2/issues/6",
    "number": 6,
    "user": {
        "id": 516,
        "name": "",
        "login": "user_42",
        "type": "User",
        "bio": "",
        "email": "user_42@mail.org",
        "avatar_url": "https://gitverse.ru/avatars/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
        "html_url": "https://gitverse.ru/user_42",
        "url": "https://api.gitverse.ru/users/user_42",
        "followers_url": "https://api.gitverse.ru/users/user_42/followers",
        "following_url": "https://api.gitverse.ru/users/user_42/following{/other_user}",
        "repos_url": "https://api.gitverse.ru/users/user_42/repos",
        "organizations_url": "https://api.gitverse.ru/users/user_42/orgs",
        "site_admin": false,
        "location": null,
        "is_verified": false,
        "followers": 3,
        "following": 0,
        "public_repos": 45,
        "stars_count": 0,
        "created_at": "2024-01-24T20:34:11Z",
        "updated_at": "2026-08-06T11:16:52Z"
    },
    "original_author": "",
    "original_author_id": 0,
    "title": "Исправить ошибку в авторизации",
    "body": "При входе через социальные сети возникает ошибка 500. Необходимо исправить.",
    "ref": "",
    "assets": [],
    "labels": [],
    "milestone": null,
    "assignee": null,
    "assignees": null,
    "type": {
        "id": 2,
        "code": "bug",
        "name": "Дефект",
        "color": "#FDE8D8"
    },
    "state": "open",
    "locked": false,
    "comments": 0,
    "created_at": "2026-09-10T11:05:14Z",
    "updated_at": "2026-09-10T11:05:14Z",
    "closed_at": null,
    "due_date": "2026-10-01T12:00:00Z",
    "timeline_url": "https://api.gitverse.ru/repos/user_42/neo2/issues/6/timeline",
    "pull_request": null,
    "repository": {
        "id": 309057,
        "name": "neo2",
        "owner": "user_42",
        "full_name": "user_42/neo2"
    },
    "development": {
        "pulls": [],
        "branches": []
    },
    "html_url": "https://gitverse.ru/user_42/neo2/issues/6",
    "number": 6,
    "user": {
        "id": 516,
        "name": "",
        "login": "user_42",
        "type": "User",
        "bio": "",
        "email": "user_42@mail.org",
        "avatar_url": "https://gitverse.ru/avatars/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
        "html_url": "https://gitverse.ru/user_42",
        "url": "https://api.gitverse.ru/users/user_42",
        "followers_url": "https://api.gitverse.ru/users/user_42/followers",
        "following_url": "https://api.gitverse.ru/users/user_42/following{/other_user}",
        "repos_url": "https://api.gitverse.ru/users/user_42/repos",
        "organizations_url": "https://api.gitverse.ru/users/user_42/orgs",
        "site_admin": false,
        "location": null,
        "is_verified": false,
        "followers": 3,
        "following": 0,
        "public_repos": 45,
        "stars_count": 0,
        "created_at": "2024-01-24T20:34:11Z",
        "updated_at": "2026-08-06T11:16:52Z"
    },
    "original_author": "",
    "original_author_id": 0,
    "title": "Исправить ошибку в авторизации",
    "body": "При входе через социальные сети возникает ошибка 500. Необходимо исправить.",
    "ref": "",
    "assets": [],
    "labels": [],
    "milestone": null,
    "assignee": null,
    "assignees": null,
    "type": {
        "id": 2,
        "code": "bug",
        "name": "Дефект",
        "color": "#FDE8D8"
    },
    "state": "open",
    "locked": false,
    "comments": 0,
    "created_at": "2026-09-10T11:05:14Z",
    "updated_at": "2026-09-10T11:05:14Z",
    "closed_at": null,
    "due_date": "2026-10-01T12:00:00Z",
    "timeline_url": "https://api.gitverse.ru/repos/user_42/neo2/issues/6/timeline",
    "pull_request": null,
    "repository": {
        "id": 309057,
        "name": "neo2",
        "owner": "user_42",
        "full_name": "user_42/neo2"
    },
    "development": {
        "pulls": [],
        "branches": []
    }
}

Структура ответа

Ответ — объект Issue (созданная задача). Полная структура описана в графе объектов, раздел «Объект Issue».

На корневом уровне объект содержит:

ПолеТипОписание
id, node_idinteger / stringУникальный ID и глобальный ID узла (всегда null)
numberintegerНомер задачи
title, body, refstringЗаголовок, описание, ссылка
statestringСостояние (всегда open для новой задачи)
userobjectАвтор (см. User)
labelsarrayМетки (см. Label)
typeobjectТип задачи (см. IssueType)
milestoneobject / nullВеха (см. Milestone)
assigneeobject / nullИсполнитель (см. User)
assigneesarrayИсполнители (см. User)
commentsintegerКоличество комментариев
lockedbooleanЗаблокирована ли задача
draftbooleanЯвляется ли черновиком
created_at, updated_at, closed_at, due_datestring / nullДаты создания, обновления, закрытия и контрольный срок
repositoryobjectРепозиторий (см. Repository)
developmentobjectСвязанная разработка (см. Development)
url, html_url, timeline_urlstringСсылки

Вложенные объекты описаны в графе объектов.

Коды ответа

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

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

Пример тела ошибки

При ответе 400 тело ответа имеет следующий вид:

{
  "error": {
    "code": "BAD_REQUEST",
    "documentation_url": "https://gitverse.ru/docs/developers/public-api/",
    "message": "The request format is invalid",
    "status": 400
  }
}

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

Тип задачи: в GitVerse используется фиксированный набор типов — task, bug, story, epic. Если поле type не передано, применяется тип задачи по умолчанию.

Контрольный срок: поле due_date позволяет задать контрольный срок задачи в формате RFC 3339 (например, 2026-10-01T12:00:00Z). Тип задачи: в GitVerse используется фиксированный набор типов — task, bug, story, epic. Если поле type не передано, применяется тип задачи по умолчанию.

Контрольный срок: поле due_date позволяет задать контрольный срок задачи в формате RFC 3339 (например, 2026-10-01T12:00:00Z).

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

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

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

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