Repo Health

API

Оценки открытых репозиториев можно получать программно: встроить в дашборд, проверять в CI или строить свой рейтинг. API публичное, без ключей, отвечает JSON.

  • Базовый адрес: https://guap.pro/api/v1
  • Закрытые репозитории через API не видны: они отвечают так же, как несуществующие — 404.
  • Ответы кэшируются на 5 минут; оценки пересчитываются раз в сутки, чаще спрашивать незачем.
  • Запросы с чужих сайтов разрешены (CORS: *).

GET/api/v1/repos/{org}/{repo}

Оценка одного репозитория: итог, оценки категорий, ограничение и место в рейтинге.

curl https://guap.pro/api/v1/repos/gravity-ui/uikit
Пример ответа200 · application/json
{
  "org": "gravity-ui",
  "name": "uikit",
  "url": "https://sourcecraft.dev/gravity-ui/uikit",
  "report_url": "https://guap.pro/repos/gravity-ui/uikit",
  "report_md_url": "https://guap.pro/api/v1/repos/gravity-ui/uikit/report.md",
  "score": 75,
  "raw_score": 74.6,
  "confidence": 1,
  "cap": null,
  "rank": {
    "position": 8,
    "total": 21915,
    "tieTo": 9
  },
  "methodology": "v1.4",
  "categories": [
    {
      "key": "security",
      "name": "Security",
      "weight": 25,
      "score": null
    },
    {
      "key": "ci",
      "name": "CI/CD",
      "weight": 20,
      "score": null
    },
    {
      "key": "activity",
      "name": "Активность",
      "weight": 15,
      "score": 74
    },
    {
      "key": "docs",
      "name": "Документация",
      "weight": 15,
      "score": 87
    },
    {
      "key": "issues",
      "name": "Issues",
      "weight": 15,
      "score": 47
    },
    {
      "key": "code",
      "name": "Code health",
      "weight": 10,
      "score": 98
    }
  ],
  "recommendations": [
    {
      "priority": "high",
      "category": "issues",
      "title": "Разобрать зависшие issues",
      "expected_gain": 9.6
    },
    {
      "priority": "mid",
      "category": "docs",
      "title": "Описать запуск сборки",
      "expected_gain": 1.9
    },
    {
      "priority": "low",
      "category": "docs",
      "title": "Добавить SECURITY.md",
      "expected_gain": 0.8
    }
  ]
}
ПараметрТипОписание
scorenumberИтоговая оценка 0–100 после ограничений
raw_scorenumberОценка до ограничений
confidencenumberОхват: доля веса метрик с данными, 0–1
capobject | nullСработавшее ограничение: потолок и причина
rankobject | nullМесто в рейтинге; null — репозиторий вне рейтинга
recommendationsarrayДо трёх самых выгодных рекомендаций: приоритет, категория, что сделать, прирост оценки
report_md_urlstringОтчёт в Markdown
categories[].scorenumber | nullnull — нет данных. Это не ноль: категория просто не участвовала в расчёте

Ошибка — 404 с телом {"error": "not_found", "message": "…"}.

GET/api/v1/rating

Рейтинг открытых репозиториев. Параметры те же, что в адресе главной страницы: ссылка на сайт и запрос к API с одинаковыми параметрами дают одни и те же строки.

curl "https://guap.pro/api/v1/rating?lang=Rust&sort=score&per_page=2"
Пример ответа200 · application/json
{
  "items": [
    {
      "rank": 14,
      "org": "ak4798rus",
      "name": "taskagent",
      "score": 73,
      "likes": 0,
      "language": "Rust",
      "topics": [],
      "size": "large",
      "confidence": 1,
      "has_ci": false,
      "provenance": null,
      "report_url": "https://guap.pro/repos/ak4798rus/taskagent"
    },
    {
      "rank": 30,
      "org": "dexoron-dev",
      "name": "dcr",
      "score": 69,
      "likes": 0,
      "language": "Rust",
      "topics": [],
      "size": "medium",
      "confidence": 1,
      "has_ci": false,
      "provenance": null,
      "report_url": "https://guap.pro/repos/dexoron-dev/dcr"
    }
  ],
  "page": 1,
  "per_page": 2,
  "page_count": 60,
  "total": 120
}
ПараметрТипОписание
tabmain | lowmain — в рейтинге, low — вне рейтинга (пустые, копии, мало данных); по умолчанию main
sortscore | likes | updatedСортировка; по умолчанию score
orderdesc | ascНаправление сортировки; по умолчанию desc
thenscore | likes | updatedВторой ключ: порядок внутри равных по первому. Место от него не зависит
then_orderdesc | ascНаправление второго ключа; по умолчанию desc
qstringПоиск по org/name
langstringЯзыки через запятую: Go,Rust
sizesmall | medium | largeРазмер по строкам кода, через запятую: до 10 тыс., 10–100 тыс., больше 100 тыс.
ciyes | noЕсть ли CI SourceCraft (.sourcecraft/ci.yaml)
reasonempty | copy | pending | partialТолько для tab=low: почему репозиторий вне рейтинга
pagenumberНомер страницы с 1
per_pagenumberСтрок на странице, до 100; по умолчанию 25

GET/api/v1/repos/{org}/{repo}/report.md

Полный отчёт в Markdown: оценка, расчёт, сильные стороны, проблемы и рекомендации с фактами. Тот же файл, что кнопка «Скачать Markdown» на странице отчёта.

curl -O https://guap.pro/api/v1/repos/gravity-ui/uikit/report.md

GET/badge/{org}/{repo}.svg

Значок с оценкой для README. У закрытого или неизвестного репозитория — серый «нет данных».

[![Repo Health](https://guap.pro/badge/gravity-ui/uikit.svg)](https://guap.pro/repos/gravity-ui/uikit)