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}
Заголовки запроса
| Заголовок | Тип | Обязательный | Описание |
|---|---|---|---|
Accept | string | Рекомендуется | Тип представления. Значение: application/vnd.gitverse.object+json;version=1 |
Authorization | string | Для приватных репозиториев | Личный токен доступа (personal access token). Формат: Bearer <YOUR_TOKEN> или token <YOUR_TOKEN>. Для публичных репозиториев заголовок не обязателен, но повышает лимиты скорости |
Path-параметры URL
В URL запроса необходимо передать следующие идентификаторы ресурса:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
owner | string | Да | Владелец репозитория (пользователь или организация) |
repo | string | Да | Название репозитория (без расширения .git) |
issue_number | integer | Да | Порядковый номер задачи или запроса на слияние в репозитории |
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возвращается со всеми заполненными полями.
Структура объекта ответа
Основные поля
| Поле | Тип | Описание |
|---|---|---|
id | integer | Уникальный идентификатор задачи |
node_id | string / null | Глобальный ID узла GraphQL. Всегда null |
url | string | Полный URL к API для получения задачи. Пример: https://api.gitverse.ru/repos/user123/repo123/issues/18 |
repository_url | string | Полный URL к API репозитория, которому принадлежит задача. Пример: https://api.gitverse.ru/repos/user123/repo123 |
labels_url | string | Шаблон URI для получения меток задачи. Пример: https://api.gitverse.ru/repos/user123/repo123/issues/18/labels{/name} |
comments_url | string | Полный URL к API для получения списка комментариев. Пример: https://api.gitverse.ru/repos/user123/repo123/issues/18/comments |
events_url | string / null | URL для получения списка событий по задаче. Всегда null |
html_url | string | URL для просмотра задачи в веб-интерфейсе GitVerse. Пример: https://gitverse.ru/user123/repo123/issues/18 |
number | integer | Порядковый номер задачи в репозитории |
state | string | Текущее состояние: open или closed. Значение формируется на основе статуса проекта (см. примечание ниже) |
title | string | Заголовок задачи |
body | string / null | Содержимое (тело) задачи |
user | object / null | Объект с информацией об авторе задачи (см. раздел «Объект User») |
labels | array | Массив меток, присвоенных задаче (см. раздел «Объект Label») |
assignees | array of User | Массив пользователей, назначенных исполнителями |
milestone | object / null | Объект вехи. Всегда null |
locked | boolean | Заблокирована ли задача (true/false). Заблокированная задача не позволяет добавлять комментарии и реакции |
type | object / null | Объект типа задачи (см. раздел «Объект Type») |
comments | integer | Количество комментариев |
pull_request | object / null | Присутствует только для запросов на слияние. Содержит ссылки на детали запроса на слияние |
closed_at | string / null | Временная метка закрытия в формате ISO 8601 |
created_at | string | Временная метка создания в формате ISO 8601 |
updated_at | string | Временная метка последнего обновления в формате ISO 8601 |
draft | boolean | Является ли запрос на слияние черновиком. Для задач не приходит. Для запросов на слияние — true или false |
timeline_url | string | URL для получения таймлайна событий по задаче. Пример: https://api.gitverse.ru/repos/user123/repo123/issues/18/timeline |
repository | object | Объект репозитория с полным описанием (см. раздел «Объект Repository») |
Маппинг поля state
⚠️ Поле
stateне берется напрямую из состояния задачи, а формируется на основе статуса проекта:
Значение state | Статусы проекта |
|---|---|
open | Открыто / Open, Запланировано / Planned, В работе / In progress |
closed | Готово / Done |
Объект Label
| Поле | Тип | Описание |
|---|---|---|
id | integer | Идентификатор метки |
name | string | Название метки (например, Bug) |
description | string | Описание метки |
color | string | Цвет метки в HEX-формате (например, #5347d1) |
Объект Type
| Поле | Тип | Описание |
|---|---|---|
id | integer | Идентификатор типа |
name | string | Название типа (например, Bug, Task) |
description | string | Описание типа |
color | string | Цвет типа. Допустимые значения: gray, blue, green, yellow, orange, red, pink, purple |
Объект Pull Request
Возвращается только для запросов на слияние.
| Поле | Тип | Описание |
|---|---|---|
url | string | API-ссылка на запрос на слияние |
html_url | string | Веб-ссылка на запрос на слияние в интерфейсе GitVerse |
diff_url | string | Ссылка на diff запроса на слияние |
patch_url | string | Ссылка на patch запроса на слияние |
merged_at | string / null | Временная метка слияния (если запрос на слияние смержен) |
Объект User
Объект User содержит информацию о пользователе GitVerse. Основные поля:
| Поле | Тип | Описание |
|---|---|---|
id | integer | Уникальный идентификатор пользователя |
login | string | Логин пользователя |
avatar_url | string | URL аватара |
html_url | string | Ссылка на профиль в веб-интерфейсе |
Полное описание объекта User приведено в разделе Пользователи
Объект Repository
Объект Repository содержит информацию о репозитории. Основные поля:
| Поле | Тип | Описание |
|---|---|---|
id | integer | Уникальный идентификатор репозитория |
name | string | Название репозитория |
full_name | string | Полное имя в формате owner/repo |
html_url | string | Ссылка на репозиторий в веб-интерфейсе |
private | boolean | Приватный ли репозиторий |
Полное описание объекта Repository приведено в разделе Репозитории
Коды HTTP-ответов
Результат выполнения запроса определяется по HTTP-статусу:
| Код | Статус | Описание |
|---|---|---|
200 | OK | Информация о задаче успешно получена |
400 | Bad Request | Некорректные параметры запроса |
401 | Unauthorized | Не передан или невалиден токен авторизации |
403 | Forbidden | Нет прав на доступ к репозиторию |
404 | Not Found | Ресурс не найден либо нет доступа к нему |
422 | Unprocessable Entity | Ошибка валидации |
429 | Too Many Requests | Превышен лимит запросов |
500 | Internal 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.
Примечания
-
Различие задачи и запроса на слияние. В ответе всегда проверяйте наличие объекта
pull_request: если он есть — перед вами запрос на слияние, если отсутствует — задача. -
Поле
state. Формируется на стороне сервера на основе статуса проекта, а не хранится как отдельный атрибут задачи. -
Неподдерживаемые поля. Ряд полей не реализован и не возвращается:
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у меток и т. п. -
Поля
body_htmlиbody_text. Возвращаются только при наличии соответствующей поддержки на стороне сервера (рендеринг Markdown). В противном случае отсутствуют в ответе. -
Объекты
UserиRepository. Эти объекты используются в ответе и содержат стандартные поля, описанные в разделах выше. Полные описания доступны в соответствующих разделах документации API GitVerse.