Обновить задачу или запрос

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

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

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

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

Запрос должен содержать тело в формате JSON. Все поля являются опциональными — можно передавать только те, которые нужно изменить:

{
  "title": "Новый заголовок",
  "body": "Обновленное описание задачи",
  "state": "closed",
  "type": "bug",
  "labels": ["critical", "in-progress"],
  "assignees": ["developer1"]
}
ПолеТипОбязательныйВозможные значения / Описание
titlestringНетНовый заголовок задачи или запроса. Не может быть пустой строкой или null.
bodystringНетНовое описание (тело) задачи или запроса. Может быть null или пустой строкой для очистки содержимого.
statestringНетСостояние задачи/запроса. Для задачи будет проигнорировано (состояние определяется статусом проекта). Для запроса на слияние: open — открыть, closed — закрыть.
typestringНетКод типа задачи. Принимает значения: task, bug, story, epic. Для запроса на слияние будет проигнорировано. Не может быть пустой строкой или null.
labelsarray of stringsНетМассив названий меток для назначения на задачу. Заменяет текущие метки. Пустой массив очищает все метки. Для запроса на слияние будет проигнорировано.
assigneesarray 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_idinteger / stringУникальный ID и глобальный ID узла (всегда null)
numberintegerНомер задачи/запроса
title, body, refstringЗаголовок, описание, ссылка
statestringСостояние
userobjectАвтор (см. User)
labelsarrayМетки (см. Label)
typeobjectТип задачи (см. IssueType)
milestoneobject / nullВеха (см. Milestone)
assigneeobject / nullИсполнитель (см. User)
assigneesarrayИсполнители (см. User)
commentsintegerКоличество комментариев
lockedbooleanЗаблокирована ли задача/запрос
created_at, updated_at, closed_at, due_datestring / nullДаты создания, обновления, закрытия и контрольный срок
repositoryobjectРепозиторий (см. Repository)
developmentobjectСвязанная разработка (см. Development)
url, html_url, timeline_urlstringСсылки

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

Коды ответа

КодСтатусОписание
200OKЗадача или запрос на слияние успешно обновлены. Тело ответа содержит обновленный объект.
400Bad RequestНекорректный формат данных в теле запроса (например, labels передан не как массив).
401UnauthorizedНе передан или невалиден токен авторизации.
403ForbiddenУ пользователя недостаточно прав для редактирования этой задачи или запроса на слияние.
404Not FoundРепозиторий или задача/запрос с указанным номером не найдены.
422Unprocessable EntityОшибка валидации: передана несуществующая метка, несуществующий пользователь в assignees или недопустимое значение type.
500Internal Server ErrorВнутренняя ошибка сервера.

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

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

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