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
}
]
}| Параметр | Тип | Описание |
|---|---|---|
| score | number | Итоговая оценка 0–100 после ограничений |
| raw_score | number | Оценка до ограничений |
| confidence | number | Охват: доля веса метрик с данными, 0–1 |
| cap | object | null | Сработавшее ограничение: потолок и причина |
| rank | object | null | Место в рейтинге; null — репозиторий вне рейтинга |
| recommendations | array | До трёх самых выгодных рекомендаций: приоритет, категория, что сделать, прирост оценки |
| report_md_url | string | Отчёт в Markdown |
| categories[].score | number | null | null — нет данных. Это не ноль: категория просто не участвовала в расчёте |
Ошибка — 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
}| Параметр | Тип | Описание |
|---|---|---|
| tab | main | low | main — в рейтинге, low — вне рейтинга (пустые, копии, мало данных); по умолчанию main |
| sort | score | likes | updated | Сортировка; по умолчанию score |
| order | desc | asc | Направление сортировки; по умолчанию desc |
| then | score | likes | updated | Второй ключ: порядок внутри равных по первому. Место от него не зависит |
| then_order | desc | asc | Направление второго ключа; по умолчанию desc |
| q | string | Поиск по org/name |
| lang | string | Языки через запятую: Go,Rust |
| size | small | medium | large | Размер по строкам кода, через запятую: до 10 тыс., 10–100 тыс., больше 100 тыс. |
| ci | yes | no | Есть ли CI SourceCraft (.sourcecraft/ci.yaml) |
| reason | empty | copy | pending | partial | Только для tab=low: почему репозиторий вне рейтинга |
| page | number | Номер страницы с 1 |
| per_page | number | Строк на странице, до 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. У закрытого или неизвестного репозитория — серый «нет данных».
[](https://guap.pro/repos/gravity-ui/uikit)