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
| Параметр | Тип | Описание |
|---|---|---|
| score | number | Итоговая оценка 0–100 после ограничений |
| raw_score | number | Оценка до ограничений |
| confidence | number | Доля метрик с данными, 0–1 |
| cap | object | null | Сработавшее ограничение: потолок и причина |
| rank | object | null | Место в рейтинге; null — репозиторий вне рейтинга |
| categories[].score | number | null | null — нет данных. Это не ноль: категория просто не участвовала в расчёте |
Пример ответа
{
"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"
| Параметр | Тип | Описание |
|---|---|---|
| tab | main | low | main — в рейтинге, low — недостаточно данных; по умолчанию main |
| sort | score | likes | updated | Сортировка; по умолчанию score |
| q | string | Поиск по org/name |
| lang | string | Языки через запятую: Go,Rust |
| page | number | Номер страницы с 1 |
| per_page | number | Строк на странице, до 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. У закрытого или неизвестного репозитория — серый «нет данных».
[](https://158-160-16-150.sslip.io/repos/acme-labs/moth)