Repo Health
API

API

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

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

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

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

curl https://158-160-16-150.sslip.io/api/v1/repos/acme-labs/moth
ПараметрТипОписание
scorenumberИтоговая оценка 0–100 после ограничений
raw_scorenumberОценка до ограничений
confidencenumberДоля метрик с данными, 0–1
capobject | nullСработавшее ограничение: потолок и причина
rankobject | nullМесто в рейтинге; null — репозиторий вне рейтинга
categories[].scorenumber | nullnull — нет данных. Это не ноль: категория просто не участвовала в расчёте
Пример ответа
{
  "org": "acme-labs",
  "name": "moth",
  "url": "https://sourcecraft.dev/acme-labs/moth",
  "report_url": "https://158-160-16-150.sslip.io/repos/acme-labs/moth",
  "score": 65,
  "raw_score": 75.7,
  "confidence": 0.94,
  "cap": {
    "limit": 65,
    "reason": "Открыта critical-уязвимость в зависимостях. Правило методики: Score ≤ 65."
  },
  "rank": {
    "position": 13,
    "total": 24
  },
  "methodology": "v1.0",
  "categories": [
    {
      "key": "security",
      "name": "Security",
      "weight": 25,
      "score": 66
    },
    {
      "key": "ci",
      "name": "CI/CD",
      "weight": 20,
      "score": 82
    },
    {
      "key": "activity",
      "name": "Активность",
      "weight": 15,
      "score": 98
    },
    {
      "key": "docs",
      "name": "Документация",
      "weight": 15,
      "score": 55
    },
    {
      "key": "issues",
      "name": "Issues",
      "weight": 15,
      "score": 75
    },
    {
      "key": "code",
      "name": "Code health",
      "weight": 10,
      "score": 87
    }
  ]
}

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

GET/api/v1/rating

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

curl "https://158-160-16-150.sslip.io/api/v1/rating?lang=Rust&sort=score&per_page=2"
ПараметрТипОписание
tabmain | lowmain — в рейтинге, low — недостаточно данных; по умолчанию main
sortscore | likes | updatedСортировка; по умолчанию score
qstringПоиск по org/name
langstringЯзыки через запятую: Go,Rust
pagenumberНомер страницы с 1
per_pagenumberСтрок на странице, до 100; по умолчанию 10
Пример ответа
{
  "items": [
    {
      "rank": 1,
      "org": "northwind",
      "name": "pgsync",
      "score": 88,
      "likes": 204,
      "language": "Rust",
      "topics": [
        "databases",
        "data"
      ],
      "size": "medium",
      "report_url": "https://158-160-16-150.sslip.io/repos/northwind/pgsync"
    },
    {
      "rank": 2,
      "org": "northwind",
      "name": "cli-nw",
      "score": 54,
      "likes": 19,
      "language": "Rust",
      "topics": [
        "devtools"
      ],
      "size": "small",
      "report_url": "https://158-160-16-150.sslip.io/repos/northwind/cli-nw"
    }
  ],
  "page": 1,
  "per_page": 2,
  "page_count": 1,
  "total": 2
}

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

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

[![Repo Health](https://158-160-16-150.sslip.io/badge/acme-labs/moth.svg)](https://158-160-16-150.sslip.io/repos/acme-labs/moth)