SonarQube Reports API#
У цій статті описано, як програмно отримати звіти безпеки SonarQube, що зберігаються на платформі Procurize. Розглядаються REST‑API для переліку звітів та їх завантаження у форматах HTML, PDF і ZIP.
Огляд#
Підмодуль SonarQube Reports дозволяє організаціям централізовано зберігати та керувати звітами з безпеки та якості коду, створеними SonarQube. Платформа Procurize надає ці дані через публічний REST API, який дозволяє:
- Перелічити метадані звітів для організації, групи проєктів або окремого проєкту
- Завантажити окремий звіт у форматі HTML, PDF або ZIP
- Завантажити вибрані звіти у вигляді ZIP‑архіву
- Завантажити всі звіти проєкту або групи проєктів у вигляді ZIP‑архіву
- Отримати останні звіти OWASP Top 10 та CWE Top 25 безпосередньо з сервісу SonarQube
Ці можливості дозволяють інтегрувати їх у CI/CD‑конвеєри, системи GRC, внутрішні панелі моніторингу та інструменти управління ризиками третіх сторін.
Точки доступу#
| Точка доступу | Метод | Призначення |
|---|---|---|
/security/report/list | GET | Перелічити метадані звітів для вибраного обсягу та версії. |
/security/report/files | GET | Завантажити вибрані звіти у вигляді ZIP‑архіву. |
/security/report/html | GET | Отримати окремий звіт у форматі HTML. |
/security/report/pdf | GET | Отримати окремий звіт у форматі PDF. |
/security/report/zip | GET | Отримати окремий звіт у вигляді ZIP‑архіву. |
/security/report/project-files | GET | Завантажити всі звіти проєкту у вигляді ZIP‑архіву. |
/security/report/directory-files | GET | Завантажити всі звіти групи проєктів (директорії) у вигляді ZIP‑архіву. |
/security/reports/fetch | POST | Отримати останні звіти з сервісу SonarQube. |
Автентифікація та авторизація#
Точки доступу для переліку та завантаження звітів, описані в цій статті, не вимагають автентифікації.
Точка доступу POST /security/reports/fetch вимагає автентифікації за допомогою API‑токену — див. API Tokens.
Ідентифікатор організації#
Для більшості запитів, описаних тут, потрібен ідентифікатор організації. Ви можете передати або UUID організації, або її псевдонім — див. Ідентифікатори та псевдоніми.
Знайти його можна у панелі налаштувань організації за адресою https://dashboard.procurize.ai.
Зверніть увагу, що доступ до панелі налаштувань вимагає авторизації, а доступ до панелі налаштувань організації можливий лише користувачам з роллю щонайменше «Адміністратор» у цій організації.

Ідентифікатори та псевдоніми#
Параметри області приймають або UUID сутності, або зрозумілий людям псевдонім. Псевдоніми спрощують читання запитів і залишаються стабільними між середовищами.
| Параметр | Приймає | Приклади псевдонімів |
|---|---|---|
org | Ідентифікатор або псевдонім організації | aspose, groupdocs |
directory | Ідентифікатор або псевдонім директорії (групи проєктів) | aspose-imaging, groupdocs-annotation |
project | Ідентифікатор або псевдонім проєкту | aspose-imaging-net, groupdocs-annotation-java |
Наприклад, наступні два запити еквівалентні:
curl "https://api.procurize.com/security/report/list?org=00000000-0000-0000-0000-000000000001&version=1.0"
curl "https://api.procurize.com/security/report/list?org=aspose&version=1.0"
Примітка: Псевдоніми не підтримуються для параметра
idу точках масового завантаження. Передавайте UUID директорії або проєкту у запитахGET /security/report/project-filesтаGET /security/report/directory-files.
Базовий URL#
Усі точки REST API розташовані за наступним базовим URL:
https://api.procurize.com
SonarQube Reports REST API#
Перелік звітів#
Повертає доступні звіти безпеки для вибраного обсягу та версії без вмісту файлів. Використовуйте цю точку, щоб дізнатися ID звітів, які можна передати у точки завантаження.
Точка доступу
GET /security/report/list
Параметри запиту
org(необов’язково): Ідентифікатор або псевдонім організації (наприклад,asposeабоgroupdocs). Найширший обсяг.directory(необов’язково): Ідентифікатор або псевдонім директорії (групи проєктів) (наприклад,aspose-imagingабоgroupdocs-annotation). Тужчий обсяг.project(необов’язково): Ідентифікатор або псевдонім проєкту (наприклад,aspose-imaging-netабоgroupdocs-annotation-java). Найвужчий обсяг.version(необов’язково): Точна версія проєкту.minver(необов’язково): Мінімальна версія проєкту.maxver(необов’язково): Максимальна версія проєкту.
Потрібен принаймні один із параметрів області org, directory або project. Пріоритетність обсягів: якщо вказано project, шукається лише цей проєкт; інакше, якщо вказано directory, шукається вся група проєктів; інакше — вся організація (org). Якщо org вказано разом із project або directory, ціль додатково перевіряється на приналежність до цієї організації.
Потрібен принаймні один із параметрів version, minver або maxver. Якщо вказано version, параметри minver і maxver ігноруються.
Приклад запиту
curl "https://api.procurize.com/security/report/list?org=aspose&version=1.0"
Перехід до групи проєктів або проєкту за псевдонімом:
curl "https://api.procurize.com/security/report/list?directory=aspose-imaging&minver=1.0&maxver=2.0"
curl "https://api.procurize.com/security/report/list?project=aspose-imaging-net&version=1.0"
Приклад відповіді
{
"organizationId": "00000000-0000-0000-0000-000000000001",
"reports": [
{
"projectName": "Test product",
"id": "00000000-0000-0000-0000-000000000002",
"reportType": "CWE Top 25",
"reportVersion": 2024,
"projectVersion": "1.0",
"date": "2025-12-17T09:05:48.5946432+00:00",
"uploadDate": "2025-12-17T09:05:48.5946432+00:00",
"vulnerabilitiesCount": 0,
"securityRating": "A"
}
]
}
Поля відповіді
organizationId: Організація, до якої належать звіти.reports[].id: Унікальний ідентифікатор звіту. Передайте це значення у точки завантаження.reports[].projectName: Відображувана назва продукту.reports[].projectVersion: Версія продукту.reports[].reportType: Тип звіту (OWASP Top 10абоCWE Top 25).reports[].reportVersion: Рік випуску стандарту звіту.reports[].date: Дата генерації звіту.reports[].uploadDate: Дата завантаження звіту в Procurize.reports[].vulnerabilitiesCount: Кількість виявлених вразливостей.reports[].securityRating: Загальний рейтинг безпеки (A–E, деA— найкращий).
Завантаження звітів за ID#
Завантажує ZIP‑архів, що містить вибрані звіти. Кожен звіт включає формати HTML та PDF.
Точка доступу
GET /security/report/files
Параметри запиту
org(обов’язково): Ідентифікатор або псевдонім організації (наприклад,asposeабоgroupdocs).reports(обов’язково): ID звітів, які потрібно включити. Параметр можна повторювати для декількох звітів.
Приклад запиту
curl "https://api.procurize.com/security/report/files?org=aspose&reports=00000000-0000-0000-0000-000000000002&reports=00000000-0000-0000-0000-000000000003" -o reports.zip
Відповідь
- Content-Type:
application/zip - Тіло відповіді містить бінарний ZIP‑файл.
Клієнти мають потоково читати відповідь і зберігати її на диск.
Робота з окремим звітом#
Точки /security/report/html, /security/report/pdf та /security/report/zip повертають один конкретний звіт і використовують однакові правила вибору.
Вибір звіту#
Тип і версія звіту завжди обов’язкові:
rt(обов’язково): Тип звіту. Підтримувані значення —OWASP Top 10таCWE Top 25.rv(обов’язково): Версія звіту — рік випуску стандарту, наприклад2025для OWASP Top 10 або2024для CWE Top 25.
Сам звіт можна вибрати одним із двох способів:
- За ID звіту — передайте
id(ID звіту) разом зproject(ID або псевдонім проєкту) абоorg(ID або псевдонім організації). Не передавайтеversionу цьому режимі. - За версією проєкту — передайте
project(ID або псевдонім проєкту, наприкладaspose-imaging-netабоgroupdocs-annotation-java) таversion(версія проєкту). Параметрorgу цьому режимі не використовується.
Якщо вказані одночасно project і org, параметр org ігнорується.
Отримати звіт у форматі HTML#
Рендерить один звіт у вигляді HTML‑сторінки або повертає його як завантажуваний HTML‑файл.
Точка доступу
GET /security/report/html
Параметри запиту
rt(обов’язково): Тип звіту.rv(обов’язково): Версія звіту.- Параметри вибору звіту: див. розділ Вибір звіту.
download(необов’язково): Встановітьtrue, щоб отримати HTML як файл (Content-Disposition: attachment). Якщо параметр відсутній абоfalse, звіт повертається вбудовано.
Приклад запиту
curl "https://api.procurize.com/security/report/html?rt=OWASP+Top+10&rv=2025&id=00000000-0000-0000-0000-000000000004&project=aspose-imaging-net"
Щоб завантажити HTML‑файл замість вбудованого рендерингу:
curl "https://api.procurize.com/security/report/html?rt=OWASP+Top+10&rv=2025&project=aspose-imaging-net&version=1.0&download=true" -o report.html
Відповідь
- Content-Type:
text/html
Отримати звіт у форматі PDF#
Повертає один звіт у вигляді PDF‑документа.
Точка доступу
GET /security/report/pdf
Параметри запиту
rt(обов’язково): Тип звіту.rv(обов’язково): Версія звіту.- Параметри вибору звіту: див. розділ Вибір звіту.
Приклад запиту
curl "https://api.procurize.com/security/report/pdf?rt=CWE+Top+25&rv=2024&project=aspose-imaging-net&version=1.0" -o report.pdf
Відповідь
- Content-Type:
application/pdf
Отримати звіт у форматі ZIP#
Повертає один звіт у вигляді ZIP‑архіву, що містить як HTML, так і PDF‑версії.
Точка доступу
GET /security/report/zip
Параметри запиту
rt(обов’язково): Тип звіту.rv(обов’язково): Версія звіту.- Параметри вибору звіту: див. розділ Вибір звіту.
Приклад запиту
curl "https://api.procurize.com/security/report/zip?rt=CWE+Top+25&rv=2024&id=00000000-0000-0000-0000-000000000004&org=groupdocs" -o report.zip
Відповідь
- Content-Type:
application/zip
Завантаження всіх звітів проєкту#
Завантажує ZIP‑архів, що містить усі звіти вказаного проєкту у форматах HTML та PDF.
Точка доступу
GET /security/report/project-files
Параметри запиту
id(обов’язково): ID проєкту. Псевдоніми не підтримуються; передайте UUID проєкту.rt(необов’язково): Фільтр за типом звіту. Підтримувані значення —OWASP Top 10таCWE Top 25.rv(необов’язково): Фільтр за версією звіту (рік).version(необов’язково): Фільтр за версією проєкту.
Якщо фільтри не вказані, включаються всі звіти проєкту. Параметри фільтрації можна комбінувати — вони застосовуються незалежно один від одного.
Приклад запиту
curl "https://api.procurize.com/security/report/project-files?id=00000000-0000-0000-0000-000000000005" -o project-reports.zip
Відповідь
- Content-Type:
application/zip
Завантаження всіх звітів групи проєктів#
Завантажує ZIP‑архів, що містить звіти всіх проєктів у вказаній директорії (групі проєктів) у форматах HTML та PDF.
Точка доступу
GET /security/report/directory-files
Параметри запиту
id(обов’язково): ID директорії (групи проєктів). Псевдоніми не підтримуються; передайте UUID директорії.rt(необов’язково): Фільтр за типом звіту. Підтримувані значення —OWASP Top 10таCWE Top 25.rv(необов’язково): Фільтр за версією звіту (рік).version(необов’язково): Фільтр за версією проєкту.
Якщо фільтри не вказані, включаються звіти всіх проєктів у директорії. Параметри фільтрації можна комбінувати — вони застосовуються незалежно один від одного.
Приклад запиту
curl "https://api.procurize.com/security/report/directory-files?id=00000000-0000-0000-0000-000000000006" -o directory-reports.zip
Відповідь
- Content-Type:
application/zip
Отримання звітів з SonarQube#
Завантажує останні дані звітів безпеки для продукту з сервісу SonarQube у Procurize. Сервіс отримує останні дані про вразливості з SonarQube, конвертує їх у JSON‑представлення останніх версій звітів OWASP Top 10 та CWE Top 25 і повертає їх у відповіді.
Точка доступу
POST /security/reports/fetch
Автентифікація
Точка вимагає API‑токен, переданий у заголовку X-API-Key. Деталі створення та використання токенів — див. API Tokens.
Параметри запиту
Джерело SonarQube вибирається одним із двох способів:
- За проєктом — передайте
project(ID або псевдонім проєкту — див. Ідентифікатори та псевдоніми). Не передавайтеurlабоkey. - За сервісом SonarQube — передайте
url(URL сервісу SonarQube) таkey(ключ проєкту SonarQube) разом. Не передавайтеproject.
Приклад запиту
Отримати звіт за псевдонімом проєкту:
curl -X POST "https://api.procurize.com/security/reports/fetch?project=aspose-imaging-net" \
-H "X-API-Key: YOUR_API_TOKEN"
Отримати звіт безпосередньо з сервісу SonarQube:
curl -X POST "https://api.procurize.com/security/reports/fetch?url=https://sonarqube.example.com&key=my-project-key" \
-H "X-API-Key: YOUR_API_TOKEN"
Приклад відповіді
{
"Owasp10_2025": {
"TOTAL_SECURITY_RATING": "A",
"TOTAL_COUNT": 0,
...
},
"Cwe25_2025": {
"TOTAL_SECURITY_RATING": "A",
"TOTAL_COUNT": 0,
...
}
}
Відповідь корисна у конвеєрах збірки, щоб вирішити, чи зупиняти збірку при виявленні вразливостей у публічних форматах звітів безпеки.
Примітки
- Завантаження звіту вимагає особистого дозволу на продукт, до якого належать звіти. Якщо у вас немає такого дозволу, все одно надсилайте запит: платформа поверне
403 Forbiddenі автоматично повідомить адміністраторів платформи, які розглянуть запит і повідомлять про рішення. - Не кожен сервіс SonarQube може бути зареєстрований у Procurize. Щоб зареєструвати новий сервіс, зверніться до адміністратора платформи; потрібен токен адміністратора для цього сервісу.
Обробка помилок#
API використовує стандартні коди статусу HTTP.
200 OK: Запит успішний204 No Content: Звіт не існує400 Bad Request: Неправильні параметри або некоректний запит401 Unauthorized: Відсутній або недійсний API‑токен403 Forbidden: Доступ заборонений (наприклад, відсутній дозвіл на продукт)500 Internal Server Error: Неочікувана помилка сервера
Відповіді з помилками містять машинно‑читабельний код помилки та зрозуміле повідомлення.
