1. GET /repos/{owner}/{repo}/issues/{issue_number} — получить информацию о задаче

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

Метод GET возвращает подробную информацию о задаче или запросе на слияние по ее порядковому номеру в репозитории.

ℹ️ Важно: под «задачей» в API понимаются как обычные задачи, так и запросы на слияние. Различить их можно по наличию объекта pull_request в ответе: если он присутствует — это запрос на слияние, если отсутствует — это задача.

Метод применяется для:

  • получения полной информации о задаче или запросе на слияние;
  • интеграции с внешними системами (трекерами, CI/CD, аналитикой);
  • автоматизации рабочих процессов (проверка статуса, исполнителей, меток);
  • построения отчетов и дашбордов по репозиторию.

Базовый URL:

https://api.gitverse.ru/repos/{owner}/{repo}/issues/{issue_number}

Заголовки запроса

ЗаголовокТипОбязательныйОписание
AcceptstringРекомендуетсяТип представления. Значение: application/vnd.gitverse.object+json;version=1
AuthorizationstringДля приватных репозиториевЛичный токен доступа (personal access token). Формат: Bearer <YOUR_TOKEN> или token <YOUR_TOKEN>. Для публичных репозиториев заголовок не обязателен, но повышает лимиты скорости

Path-параметры URL

В URL запроса необходимо передать следующие идентификаторы ресурса:

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

Query-параметры

Метод не поддерживает query-параметры.

Тело запроса

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

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

Ниже приведен пример использования curl для получения информации о задаче с номером 18 в репозитории repo123, принадлежащем пользователю user123.

curl -X GET "https://api.gitverse.ru/repos/user123/repo123/issues/18" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/vnd.gitverse.object+json;version=1"

Замените YOUR_TOKEN на ваш личный токен доступа. Заголовок Accept фиксирует использование первой версии API.

Ответ при успешном получении (200 OK)

Если задача (или запрос на слияние) найдена и у токена есть права на чтение репозитория, сервер вернет ответ с кодом 200 OK и телом в формате JSON.

Пример ответа для задачи

{
  "id": 3,
  "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": "Необходимо добавить валидацию поля e-mail",
  "user": {
    "id": 101,
    "login": "user123",
    "avatar_url": "https://gitverse.ru/avatars/user123.png",
    "html_url": "https://gitverse.ru/user123"
  },
  "labels": [
    {
      "id": 123,
      "name": "Bug",
      "description": "Bug is a defect",
      "color": "#5347d1"
    }
  ],
  "assignees": [
    {
      "id": 202,
      "login": "developer42",
      "avatar_url": "https://gitverse.ru/avatars/developer42.png",
      "html_url": "https://gitverse.ru/developer42"
    }
  ],
  "milestone": null,
  "locked": false,
  "type": {
    "id": 4,
    "name": "Task",
    "description": "Task",
    "color": "blue"
  },
  "comments": 10,
  "closed_at": null,
  "created_at": "2025-04-09T09:51:18.187693Z",
  "updated_at": "2025-12-23T09:08:10.519168Z",
  "draft": false,
  "timeline_url": "https://api.gitverse.ru/repos/user123/repo123/issues/18/timeline",
  "repository": {
    "id": 1,
    "name": "repo123",
    "full_name": "user123/repo123",
    "html_url": "https://gitverse.ru/user123/repo123",
    "private": false
  }
}

Пример ответа для запроса на слияние

Отличие от задачи — наличие заполненного объекта pull_request:

{
  "id": 42,
  "number": 42,
  "state": "open",
  "title": "Feature: new payment flow",
  "pull_request": {
    "url": "https://api.gitverse.ru/repos/gitverse/example-repo/pulls/42",
    "html_url": "https://gitverse.ru/gitverse/example-repo/pull/42",
    "diff_url": "https://gitverse.ru/gitverse/example-repo/pull/42.diff",
    "patch_url": "https://gitverse.ru/gitverse/example-repo/pull/42.patch",
    "merged_at": "2026-03-05T12:16:26Z"
  },
  "draft": true,
  "created_at": "2025-04-09T09:51:18.187693Z",
  "updated_at": "2025-12-23T09:08:10.519168Z"
}

ℹ️ Если задача — обычная задача, поле pull_request не возвращается. Если задача — запрос на слияние, поле pull_request возвращается со всеми заполненными полями.

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

Основные поля

ПолеТипОписание
idintegerУникальный идентификатор задачи
node_idstring / nullГлобальный ID узла GraphQL. Всегда null
urlstringПолный URL к API для получения задачи. Пример: https://api.gitverse.ru/repos/user123/repo123/issues/18
repository_urlstringПолный URL к API репозитория, которому принадлежит задача. Пример: https://api.gitverse.ru/repos/user123/repo123
labels_urlstringШаблон URI для получения меток задачи. Пример: https://api.gitverse.ru/repos/user123/repo123/issues/18/labels{/name}
comments_urlstringПолный URL к API для получения списка комментариев. Пример: https://api.gitverse.ru/repos/user123/repo123/issues/18/comments
events_urlstring / nullURL для получения списка событий по задаче. Всегда null
html_urlstringURL для просмотра задачи в веб-интерфейсе GitVerse. Пример: https://gitverse.ru/user123/repo123/issues/18
numberintegerПорядковый номер задачи в репозитории
statestringТекущее состояние: open или closed. Значение формируется на основе статуса проекта (см. примечание ниже)
titlestringЗаголовок задачи
bodystring / nullСодержимое (тело) задачи
userobject / nullОбъект с информацией об авторе задачи (см. раздел «Объект User»)
labelsarrayМассив меток, присвоенных задаче (см. раздел «Объект Label»)
assigneesarray of UserМассив пользователей, назначенных исполнителями
milestoneobject / nullОбъект вехи. Всегда null
lockedbooleanЗаблокирована ли задача (true/false). Заблокированная задача не позволяет добавлять комментарии и реакции
typeobject / nullОбъект типа задачи (см. раздел «Объект Type»)
commentsintegerКоличество комментариев
pull_requestobject / nullПрисутствует только для запросов на слияние. Содержит ссылки на детали запроса на слияние
closed_atstring / nullВременная метка закрытия в формате ISO 8601
created_atstringВременная метка создания в формате ISO 8601
updated_atstringВременная метка последнего обновления в формате ISO 8601
draftbooleanЯвляется ли запрос на слияние черновиком. Для задач не приходит. Для запросов на слияние — true или false
timeline_urlstringURL для получения таймлайна событий по задаче. Пример: https://api.gitverse.ru/repos/user123/repo123/issues/18/timeline
repositoryobjectОбъект репозитория с полным описанием (см. раздел «Объект Repository»)

Маппинг поля state

⚠️ Поле state не берется напрямую из состояния задачи, а формируется на основе статуса проекта:

Значение stateСтатусы проекта
openОткрыто / Open, Запланировано / Planned, В работе / In progress
closedГотово / Done

Объект Label

ПолеТипОписание
idintegerИдентификатор метки
namestringНазвание метки (например, Bug)
descriptionstringОписание метки
colorstringЦвет метки в HEX-формате (например, #5347d1)

Объект Type

ПолеТипОписание
idintegerИдентификатор типа
namestringНазвание типа (например, Bug, Task)
descriptionstringОписание типа
colorstringЦвет типа. Допустимые значения: gray, blue, green, yellow, orange, red, pink, purple

Объект Pull Request

Возвращается только для запросов на слияние.

ПолеТипОписание
urlstringAPI-ссылка на запрос на слияние
html_urlstringВеб-ссылка на запрос на слияние в интерфейсе GitVerse
diff_urlstringСсылка на diff запроса на слияние
patch_urlstringСсылка на patch запроса на слияние
merged_atstring / nullВременная метка слияния (если запрос на слияние смержен)

Объект User

Объект User содержит информацию о пользователе GitVerse. Основные поля:

ПолеТипОписание
idintegerУникальный идентификатор пользователя
loginstringЛогин пользователя
avatar_urlstringURL аватара
html_urlstringСсылка на профиль в веб-интерфейсе

Полное описание объекта User приведено в разделе Пользователи

Объект Repository

Объект Repository содержит информацию о репозитории. Основные поля:

ПолеТипОписание
idintegerУникальный идентификатор репозитория
namestringНазвание репозитория
full_namestringПолное имя в формате owner/repo
html_urlstringСсылка на репозиторий в веб-интерфейсе
privatebooleanПриватный ли репозиторий

Полное описание объекта Repository приведено в разделе Репозитории

Коды HTTP-ответов

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

КодСтатусОписание
200OKИнформация о задаче успешно получена
400Bad RequestНекорректные параметры запроса
401UnauthorizedНе передан или невалиден токен авторизации
403ForbiddenНет прав на доступ к репозиторию
404Not FoundРесурс не найден либо нет доступа к нему
422Unprocessable EntityОшибка валидации
429Too Many RequestsПревышен лимит запросов
500Internal Server ErrorВнутренняя ошибка сервера

Примеры ответов с разными кодами

200 OK — задача найдена

{
  "id": 18,
  "number": 18,
  "state": "open",
  "title": "Доработать форму заявки",
  "created_at": "2025-04-09T09:51:18.187693Z",
  "updated_at": "2025-12-23T09:08:10.519168Z"
}

401 Unauthorized — токен не передан или невалиден

{
  "message": "Requires authentication",
  "documentation_url": "https://gitverse.ru/docs/public-api/errors"
}

403 Forbidden — нет прав на доступ к репозиторию

{
  "message": "Forbidden: you do not have access to this repository",
  "documentation_url": "https://gitverse.ru/docs/public-api/errors"
}

404 Not Found — задача не существует

{
  "message": "Issue not found",
  "documentation_url": "https://gitverse.ru/docs/public-api/errors"
}

422 Unprocessable Entity — ошибка валидации

{
  "message": "Validation failed",
  "errors": [
    {
      "resource": "Issue",
      "field": "issue_number",
      "code": "invalid"
    }
  ],
  "documentation_url": "https://gitverse.ru/docs/public-api/errors"
}

429 Too Many Requests — превышен лимит запросов

{
  "message": "API rate limit exceeded",
  "documentation_url": "https://gitverse.ru/docs/public-api/rate-limit"
}

Формат ответа и заголовки

Метод возвращает ответ в формате JSON. Заголовок Content-Type в ответе устанавливается в application/vnd.gitverse.object+json;version=1.

Примечания

  1. Различие задачи и запроса на слияние. В ответе всегда проверяйте наличие объекта pull_request: если он есть — перед вами запрос на слияние, если отсутствует — задача.

  2. Поле state. Формируется на стороне сервера на основе статуса проекта, а не хранится как отдельный атрибут задачи.

  3. Неподдерживаемые поля. Ряд полей не реализован и не возвращается: state_reason, pinned_comment, active_lock_reason, closed_by, author_association, reactions, sub_issues_summary, parent_issue_url, issue_dependencies_summary, issue_field_values, а также вложенные node_id у меток, default, url у меток и т. п.

  4. Поля body_html и body_text. Возвращаются только при наличии соответствующей поддержки на стороне сервера (рендеринг Markdown). В противном случае отсутствуют в ответе.

  5. Объекты User и Repository. Эти объекты используются в ответе и содержат стандартные поля, описанные в разделах выше. Полные описания доступны в соответствующих разделах документации API GitVerse.