Создать задачу
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"],
"due_date": "2026-10-01T12:00:00Z"
}| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
title | string | Да | Заголовок задачи. Не может быть пустой строкой или null. |
body | string | Нет | Описание задачи. Поддерживается разметка Markdown. |
type | string | Нет | Тип задачи. Если поле не передано, используется тип задачи по умолчанию. Пустое значение не передавайте. Допустимые коды типов: task (Задача), bug (Дефект), story (История), epic (Эпик); доступные типы определяются настройками организации. |
labels | array of strings | Нет | Массив названий меток для назначения на задачу. Метки должны существовать в репозитории. |
assignees | array of strings | Нет | Массив логинов пользователей для назначения исполнителями на задачу. Только соавторы репозитория и участники команды с доступом могут быть назначены. Остальные логины игнорируются. |
due_date | string (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_id | integer / string | Уникальный ID и глобальный ID узла (всегда null) |
number | integer | Номер задачи |
title, body, ref | string | Заголовок, описание, ссылка |
state | string | Состояние (всегда open для новой задачи) |
user | object | Автор (см. User) |
labels | array | Метки (см. Label) |
type | object | Тип задачи (см. IssueType) |
milestone | object / null | Веха (см. Milestone) |
assignee | object / null | Исполнитель (см. User) |
assignees | array | Исполнители (см. User) |
comments | integer | Количество комментариев |
locked | boolean | Заблокирована ли задача |
draft | boolean | Является ли черновиком |
created_at, updated_at, closed_at, due_date | string / null | Даты создания, обновления, закрытия и контрольный срок |
repository | object | Репозиторий (см. Repository) |
development | object | Связанная разработка (см. Development) |
url, html_url, timeline_url | string | Ссылки |
Вложенные объекты описаны в графе объектов.
Коды ответа
Результат выполнения запроса определяется по HTTP-статусу:
| Код | Статус | Описание |
|---|---|---|
200 | OK | Список задач и запросов успешно получен. |
400 | Bad Request | Некорректные параметры запроса (например, недопустимое значение state). |
404 | Not Found | Репозиторий не найден или нет доступа к нему. |
422 | Unprocessable Entity | Ошибка валидации параметров. |
500 | Internal 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.