Обновить задачу или запрос
PATCH /repos/{owner}/{repo}/issues/{issue_number}
Описание
Метод PATCH обновляет метаданные существующей задачи или запроса на слияние. Применяется для корректировки заголовка или описания задачи, изменения типа задачи, управления метками и исполнителями, закрытия или переоткрытия задачи/запроса.
⚠️ Важно: метод влияет только на атрибуты самой задачи/запроса и не влияет на содержимое коммитов или файлов в репозитории. Учитывается ролевая модель. Учитываются права на редактирование задач и запросов, закрытие запроса без слияния и переоткрытие запроса.
Заголовки
| Параметр | Обязательный | Описание |
|---|---|---|
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) |
issue_number | integer | Да | Номер задачи или запроса в репозитории |
Параметры и тело запроса
Данный метод не использует параметры строки запроса.
Запрос должен содержать тело в формате JSON. Все поля являются опциональными — можно передавать только те, которые нужно изменить:
{
"title": "Новый заголовок",
"body": "Обновленное описание задачи",
"state": "closed",
"type": "bug",
"labels": ["critical", "in-progress"],
"assignees": ["developer1"]
}
| Поле | Тип | Обязательный | Возможные значения / Описание |
|---|---|---|---|
title | string | Нет | Новый заголовок задачи или запроса. Не может быть пустой строкой или null. |
body | string | Нет | Новое описание (тело) задачи или запроса. Может быть null или пустой строкой для очистки содержимого. |
state | string | Нет | Состояние задачи/запроса. Для задачи будет проигнорировано (состояние определяется статусом проекта). Для запроса на слияние: open — открыть, closed — закрыть. |
type | string | Нет | Код типа задачи. Принимает значения: task, bug, story, epic. Для запроса на слияние будет проигнорировано. Не может быть пустой строкой или null. |
labels | array of strings | Нет | Массив названий меток для назначения на задачу. Заменяет текущие метки. Пустой массив очищает все метки. Для запроса на слияние будет проигнорировано. |
assignees | array of strings | Нет | Массив логинов пользователей для назначения исполнителями на задачу. Заменяет текущих исполнителей. Пустой массив очищает всех исполнителей. Для запроса на слияние будет проигнорировано. |
💡 Совет: для изменения только одного поля, например заголовка, передавайте только title. Остальные поля не изменятся.
Пример запроса
Ниже приведен пример использования curl для обновления заголовка, описания, типа и меток задачи с номером 42.
curl -X PATCH "https://api.gitverse.ru/repos/user/example-repo/issues/42" \
-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", "auth"],
"assignees": ["developer1"]
}'
Замените YOUR_TOKEN на ваш личный токен доступа. Заголовок Content-Type обязателен, так как передается JSON-тело.
Ответ при успешном обновлении (200 OK) Если задача или запрос были успешно обновлены, сервер вернет ответ с кодом 200 OK и телом в формате JSON, содержащим полный обновленный объект задачи или запроса:
{
"id": 6361,
"node_id": null,
"url": "https://api.gitverse.ru/repos/user_42/neo2/issues/1",
"repository_url": "https://api.gitverse.ru/repos/user_42/neo2",
"labels_url": "https://api.gitverse.ru/repos/user_42/neo2/issues/1/labels{/name}",
"comments_url": "https://api.gitverse.ru/repos/user_42/neo2/issues/1/comments",
"url": "https://api.gitverse.ru/repos/user_42/neo2/issues/1",
"repository_url": "https://api.gitverse.ru/repos/user_42/neo2",
"labels_url": "https://api.gitverse.ru/repos/user_42/neo2/issues/1/labels{/name}",
"comments_url": "https://api.gitverse.ru/repos/user_42/neo2/issues/1/comments",
"events_url": null,
"html_url": "https://gitverse.ru/user_42/neo2/issues/1",
"number": 1,
"user": {
"id": 242,
"name": "",
"login": "user_42",
"type": "User",
"bio": "",
"email": "user_42@mail.org",
"avatar_url": "https://gitverse.ru/avatars/8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92",
"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": 0,
"following": 0,
"public_repos": 7,
"stars_count": 0,
"created_at": "2025-05-21T08:07:22Z",
"updated_at": "2026-09-02T06:24:23Z"
},
"original_author": "",
"original_author_id": 0,
"title": "Обновленный заголовок первой задачи",
"body": "Обновленная первая задача",
"ref": "",
"assets": [],
"labels": [],
"milestone": null,
"assignee": {
"id": 8960,
"name": "Maria Kuznetsova",
"login": "user_99",
"type": "User",
"bio": "",
"email": null,
"avatar_url": "https://gitverse.ru/avatars/5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8e5c7f5e3d5b0c4a9e6f1d2c3",
"html_url": "https://gitverse.ru/user_99",
"url": "https://api.gitverse.ru/users/user_99",
"followers_url": "https://api.gitverse.ru/users/user_99/followers",
"following_url": "https://api.gitverse.ru/users/user_99/following{/other_user}",
"repos_url": "https://api.gitverse.ru/users/user_99/repos",
"organizations_url": "https://api.gitverse.ru/users/user_99/orgs",
"site_admin": false,
"location": null,
"is_verified": false,
"followers": 0,
"following": 0,
"public_repos": 1,
"stars_count": 0,
"created_at": "2026-07-06T12:30:58Z",
"updated_at": "2026-09-08T14:22:30Z"
},
"assignees": [
{
"id": 8960,
"name": "Maria Kuznetsova",
"login": "user_99",
"type": "User",
"bio": "",
"email": null,
"avatar_url": "https://gitverse.ru/avatars/5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8e5c7f5e3d5b0c4a9e6f1d2c3",
"html_url": "https://gitverse.ru/user_99",
"url": "https://api.gitverse.ru/users/user_99",
"followers_url": "https://api.gitverse.ru/users/user_99/followers",
"following_url": "https://api.gitverse.ru/users/user_99/following{/other_user}",
"repos_url": "https://api.gitverse.ru/users/user_99/repos",
"organizations_url": "https://api.gitverse.ru/users/user_99/orgs",
"site_admin": false,
"location": null,
"is_verified": false,
"followers": 0,
"following": 0,
"public_repos": 1,
"stars_count": 0,
"created_at": "2026-07-06T12:30:58Z",
"updated_at": "2026-09-08T14:22:30Z"
}
],
"type": {
"id": 4,
"code": "epic",
"name": "Эпик",
"color": "#F7DFEF"
},
"state": "open",
"locked": false,
"comments": 1,
"created_at": "2026-08-04T10:18:24Z",
"updated_at": "2026-09-10T06:48:20Z",
"closed_at": null,
"due_date": null,
"timeline_url": "https://api.gitverse.ru/repos/user_42/neo2/issues/1/timeline",
"pull_request": null,
"repository": {
"id": 41662,
"name": "neo2",
"owner": "user_42",
"full_name": "user_42/neo2"
},
"development": {
"pulls": [],
"branches": []
},
"html_url": "https://gitverse.ru/user_42/neo2/issues/1",
"number": 1,
"user": {
"id": 242,
"name": "",
"login": "user_42",
"type": "User",
"bio": "",
"email": "user_42@mail.org",
"avatar_url": "https://gitverse.ru/avatars/8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92",
"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": 0,
"following": 0,
"public_repos": 7,
"stars_count": 0,
"created_at": "2025-05-21T08:07:22Z",
"updated_at": "2026-09-02T06:24:23Z"
},
"original_author": "",
"original_author_id": 0,
"title": "Обновленный заголовок первой задачи",
"body": "Обновленная первая задача",
"ref": "",
"assets": [],
"labels": [],
"milestone": null,
"assignee": {
"id": 8960,
"name": "Maria Kuznetsova",
"login": "user_99",
"type": "User",
"bio": "",
"email": null,
"avatar_url": "https://gitverse.ru/avatars/5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8e5c7f5e3d5b0c4a9e6f1d2c3",
"html_url": "https://gitverse.ru/user_99",
"url": "https://api.gitverse.ru/users/user_99",
"followers_url": "https://api.gitverse.ru/users/user_99/followers",
"following_url": "https://api.gitverse.ru/users/user_99/following{/other_user}",
"repos_url": "https://api.gitverse.ru/users/user_99/repos",
"organizations_url": "https://api.gitverse.ru/users/user_99/orgs",
"site_admin": false,
"location": null,
"is_verified": false,
"followers": 0,
"following": 0,
"public_repos": 1,
"stars_count": 0,
"created_at": "2026-07-06T12:30:58Z",
"updated_at": "2026-09-08T14:22:30Z"
},
"assignees": [
{
"id": 8960,
"name": "Maria Kuznetsova",
"login": "user_99",
"type": "User",
"bio": "",
"email": null,
"avatar_url": "https://gitverse.ru/avatars/5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8e5c7f5e3d5b0c4a9e6f1d2c3",
"html_url": "https://gitverse.ru/user_99",
"url": "https://api.gitverse.ru/users/user_99",
"followers_url": "https://api.gitverse.ru/users/user_99/followers",
"following_url": "https://api.gitverse.ru/users/user_99/following{/other_user}",
"repos_url": "https://api.gitverse.ru/users/user_99/repos",
"organizations_url": "https://api.gitverse.ru/users/user_99/orgs",
"site_admin": false,
"location": null,
"is_verified": false,
"followers": 0,
"following": 0,
"public_repos": 1,
"stars_count": 0,
"created_at": "2026-07-06T12:30:58Z",
"updated_at": "2026-09-08T14:22:30Z"
}
],
"type": {
"id": 4,
"code": "epic",
"name": "Эпик",
"color": "#F7DFEF"
},
"state": "open",
"locked": false,
"comments": 1,
"created_at": "2026-08-04T10:18:24Z",
"updated_at": "2026-09-10T06:48:20Z",
"closed_at": null,
"due_date": null,
"timeline_url": "https://api.gitverse.ru/repos/user_42/neo2/issues/1/timeline",
"pull_request": null,
"repository": {
"id": 41662,
"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 | Состояние |
user | object | Автор (см. User) |
labels | array | Метки (см. Label) |
type | object | Тип задачи (см. IssueType) |
milestone | object / null | Веха (см. Milestone) |
assignee | object / null | Исполнитель (см. User) |
assignees | array | Исполнители (см. User) |
comments | integer | Количество комментариев |
locked | boolean | Заблокирована ли задача/запрос |
created_at, updated_at, closed_at, due_date | string / null | Даты создания, обновления, закрытия и контрольный срок |
repository | object | Репозиторий (см. Repository) |
development | object | Связанная разработка (см. Development) |
url, html_url, timeline_url | string | Ссылки |
Вложенные объекты описаны в графе объектов.
Коды ответа
| Код | Статус | Описание |
|---|---|---|
200 | OK | Задача или запрос на слияние успешно обновлены. Тело ответа содержит обновленный объект. |
400 | Bad Request | Некорректный формат данных в теле запроса (например, labels передан не как массив). |
401 | Unauthorized | Не передан или невалиден токен авторизации. |
403 | Forbidden | У пользователя недостаточно прав для редактирования этой задачи или запроса на слияние. |
404 | Not Found | Репозиторий или задача/запрос с указанным номером не найдены. |
422 | Unprocessable Entity | Ошибка валидации: передана несуществующая метка, несуществующий пользователь в assignees или недопустимое значение type. |
500 | Internal Server Error | Внутренняя ошибка сервера. |
Пример тела ошибки
При ответе 400 тело ответа имеет следующий вид:
{
"error": {
"code": "BAD_REQUEST",
"documentation_url": "https://gitverse.ru/docs/developers/public-api/",
"message": "The request format is invalid",
"status": 400
}
}