- Зачем: - нужно понять, подходит ли GitVerse для управления задачами проекта. - Что: - описаны Public API, совместимость с GitHub и GitLab и доступные операции. - сохранены результаты живых проверок и отличие внутреннего API. - добавлены безопасные команды повторной проверки и решение для dotfiles. - Проверка: - git diff --cached --check.
15 KiB
API GitVerse для задач
Проверено 21 июля 2026 года по официальной документации, спецификации OpenAPI, ответам действующего сервера и коду веб-интерфейса.
Зачем проверяли
Мы хотели понять, можно ли управлять задачами проекта dotfiles
программно и со временем перенести туда часть локального процесса из
.scratch. Для этого нужно было ответить на два вопроса:
- Совместим ли GitVerse с API GitHub или GitLab либо использует свой API?
- Можно ли через этот API создавать, менять и закрывать задачи?
Ответ
GitVerse предоставляет собственный REST API на https://api.gitverse.ru.
Он похож на GitHub REST API по маршрутам и структуре части ответов, но полной
совместимости GitVerse не заявляет. С GitLab API он несовместим уже на уровне
маршрутов: GitLab использует /api/v4/projects/:id/issues, а GitVerse
использует /repos/{owner}/{repo}/issues.
Поддержка задач сейчас неполная: публичный API поддерживает получение списка и отдельной задачи, чтение временной шкалы и меток, а также создание и изменение комментариев и реакций. В опубликованном контракте нет создания, изменения, закрытия или удаления самой задачи. Поэтому заменить им полноценное управление задачами пока нельзя.
Веб-интерфейс умеет создавать задачи, но использует для этого отдельный внутренний API и браузерную сессию. Токен Public API этот внутренний сервер не принимает.
Почему комментарии есть, а создания задачи нет
GitVerse использует общую модель обсуждений для задач и запросов на слияние.
Поэтому GET /repos/{owner}/{repo}/issues/{index} возвращает любой из этих
объектов, а комментарии к обоим создаются через
POST /repos/{owner}/{repo}/issues/{index}/comments.
Жизненный цикл запросов на слияние вынесен в /pulls: там есть создание и
изменение запроса. Для обычной задачи симметричных POST /issues и
PATCH /issues/{index} в Public API нет. Наличие POST для комментария не
означает, что через тот же API можно создать саму задачу.
Как проверяли
- В официальных спецификациях OpenAPI 1.0-1.7 у
/issuesи/issues/{index}найден толькоGET. Для комментариев опубликованы методы записи, а для запросов на слияние есть отдельные методы/pulls. OPTIONSдля коллекции задач и/issues/1вернул405сAllow: GET. Запрос списка без токена вернул401 Unauthorizedи заголовокGitVerse-Api-Version: 1.- Токен
work-usaс правом «Репозитории: Запись» успешно прочитал репозиторий через Bearer-аутентификацию:GET /repos/ddementiev/dotfilesвернул200.GET /userс тем же токеном вернул403, поэтому этот маршрут не подходит для проверки токена с ограниченными правами. Basic-аутентификация вернула401. Токен создан 20 июля 2026 года и действует до 31 декабря 2026 года. - Настоящий
POST /repos/ddementiev/dotfiles/issuesпроверен с двумя телами: GitHub-подобным и тем, которое отправляет веб-интерфейс. Оба запроса вернули400и пустую JSON-строку. Такой же ответ получен для заведомо несуществующего пути. Ни одна тестовая задача не создалась. - В рабочих JavaScript-модулях GitVerse найден отдельный внутренний API веб-интерфейса и точное тело запроса создания задачи. Это наблюдение за реализацией сайта, а не публичный контракт.
- Безопасный
GETк внутреннему API с тем же Public API-токеном вернул401и{"message":"Wrong auth info"}. Внутренний клиент использует cookie браузерной сессии.
Контракт Public API
- Базовый адрес:
https://api.gitverse.ru. Опубликован собственный контракт GitVerse Public API и официальный OpenAPI 2.0 версии 1.7.0. - Обязательны заголовки
Authorization: Bearer <TOKEN>иAccept: application/vnd.gitverse.object+json;version=1. Токен создается в профиле: «Настройки» → «Управление токенами»; инструкция по токенам предлагает включить доступ к репозиториям. - Лимит составляет 2000 запросов в час на идентификатор авторизованного
пользователя.
При превышении сервер отвечает
429и передает остаток, время сброса иRetry-After; см. официальное описание ограничений. - Для списков используются
page,per_pageи заголовок ответаLink. Верхняя границаper_pageв открытом контракте не указана.
Опубликованные операции с задачами
| Метод | Маршрут | Назначение |
|---|---|---|
GET |
/repos/{owner}/{repo}/issues |
Список задач и запросов на слияние; фильтры state, q, labels, milestones, created_by, assigned_by, mentioned_by, type, since, before, page, per_page |
GET |
/repos/{owner}/{repo}/issues/{index} |
Одна задача или запрос на слияние |
GET |
/repos/{owner}/{repo}/issues/{index}/timeline |
Комментарии и события задачи |
GET |
/repos/{owner}/{repo}/issues/{index}/labels |
Метки задачи |
GET, POST |
/repos/{owner}/{repo}/issues/{index}/comments |
Список и создание комментариев |
GET |
/repos/{owner}/{repo}/issues/comments/{id} |
Один комментарий |
PATCH, DELETE |
/repos/{owner}/{repo}/issues/{index}/comments/{comment_id} |
Изменение и удаление комментария |
POST |
/repos/{owner}/{repo}/issues/{index}/comments/{comment_id}/reactions |
Добавление реакции |
DELETE |
/repos/{owner}/{repo}/issues/{index}/comments/{comment_id}/reactions/{reaction_id} |
Удаление реакции |
Источник таблицы: раздел paths официальной
спецификации OpenAPI 1.7.
Подробности проверки создания
Токен взят из локального хранилища Git. Его значение не печаталось и не сохранялось в документе.
GET https://api.gitverse.ru/repos/ddementiev/dotfilesс Bearer-токеном вернул200. Это подтверждает, что Public API принимает токен и видит репозиторий.POST https://api.gitverse.ru/repos/ddementiev/dotfiles/issuesс GitHub-подобным теломtitleиbodyвернул400и пустую JSON-строку.- Повторный
POSTс точным форматом веб-интерфейса (title,content,issue_type,assignees,labelsиattachments) вернул тот же ответ. - Такой же
400сервер возвращает дляPOSTна заведомо несуществующий путь. Поэтому этот ответ выглядит как общая обработка незарегистрированного метода, а не как ошибка полей задачи. - Ни одна тестовая задача не была создана.
Код веб-интерфейса задач показывает другую точку входа:
https://gitverse.ru/sc/sbt/api/v1/repos/{owner}/{repo}/issues
Форма отправляет туда POST с телом следующего вида:
{
"title": "...",
"content": "...",
"issue_type": 1,
"assignees": [],
"labels": [],
"attachments": []
}
Внутренний клиент передает cookie браузерной сессии. Проверочный GET к этому
адресу с токеном work-usa вернул 401 и
{"message":"Wrong auth info"}. Эта проверка не запускала внутренний POST и
не могла создать задачу. Она показала, что токен Public API не подходит для
клиента веб-интерфейса.
Как повторить безопасные проверки
Токен должен находиться в переменной GITVERSE_TOKEN. Команды ниже только
читают данные и не создают задач.
curl -sS -o /dev/null -w '%{http_code}\n' \
-H "Authorization: Bearer $GITVERSE_TOKEN" \
-H 'Accept: application/vnd.gitverse.object+json;version=1' \
https://api.gitverse.ru/repos/ddementiev/dotfiles
curl -sS -X OPTIONS -D - -o /dev/null \
-H "Authorization: Bearer $GITVERSE_TOKEN" \
-H 'Accept: application/vnd.gitverse.object+json;version=1' \
https://api.gitverse.ru/repos/ddementiev/dotfiles/issues
Ожидаются 200 для первого запроса и 405 с Allow: GET для второго.
Повторять POST в основном репозитории не следует: если GitVerse добавит метод,
проверка создаст настоящую задачу. Для новой проверки нужен временный
репозиторий.
Совместимость
- Это не GitLab API. У GitLab базовый путь начинается с
/api/v4, а создание задачи выполняется черезPOST /projects/:id/issues; см. GitLab REST API и Issues API. - Это не совместимая замена GitHub API. Совпадают некоторые маршруты и поля,
но отличаются хост, MIME-тип, версия и полнота операций. Например, GitHub
документирует
POST /repos/{owner}/{repo}/issuesи изменение задачи, а GitVerse для этого маршрута публикует толькоGET; см. GitHub Issues API. - Сходство с GitHub намеренное и частичное: в документации GitVerse некоторые дубли полей ответа прямо объясняются совместимостью с GitHub API. Это не обещание полной совместимости клиента или контракта.
Решение для dotfiles
- Оставить
.scratchглавным хранилищем задач текущей ветки. - Public API можно использовать для чтения задач. Операции с комментариями опубликованы, но перед постоянным использованием их стоит отдельно проверить на тестовой задаче.
- Не строить интеграцию на внутреннем
/sc/sbt/api/v1. Он требует браузерную сессию, не документирован и может измениться без предупреждения. - Вернуться к переносу
.scratchв GitVerse после появления официальных методов создания и изменения задач.
Неизвестно и требует уточнения у GitVerse
- Есть ли закрытая бета или планируемый публичный
POST/PATCHдля задач. - Какие права будут нужны для создания задач, если метод появится. Токен с правом «Репозитории: Запись» успешно читает репозиторий, но проверить еще не опубликованную операцию невозможно.
- Поддержит ли GitVerse обычные GitHub-клиенты при замене базового адреса. Официального заявления об этом не найдено, а различия контракта уже исключают надежную совместимость.
- GitVerse MCP использует тот же токен и
собственный адрес
https://mcp.gitverse.ru, но официальный список его сущностей на 21 июля 2026 года не включает задачи. По документации это не обход отсутствующих операций REST API.
Следующий шаг: запросить у поддержки GitVerse сроки появления публичных операций создания и изменения задач, а также нужные права токена.