Vulnerabilities & findings
Vulnerable packages across the fleet (one row per package) and the individual findings (package × device × CVE). Mark findings accepted or false positive.
| Method | Path | Summary |
|---|---|---|
| GET | /api/vulnerabilities | List vulnerable packages |
| GET | /api/vulnerabilities/:package | One package's findings across devices |
| GET | /api/findings | List findings |
| POST | /api/findings/status | Accept or dismiss findings |
#List vulnerable packages
GET
/api/vulnerabilities- Address
https://<your-org>.brambleit.cloud/warden/api/vulnerabilities- Requires
- Signed-in browser session (the
sso_session/session_idcookies from Bramble sign-in).
Licence: Warden.
Query parameters
| Name | Type | Description |
|---|---|---|
status | string: "open" | "accepted" | "false_positive" | "resolved" | open, accepted or false_positive. |
severity | any | critical, high, medium or low. |
fix_state | string: "installable" | "reboot" | "awaiting" | "released" | "manual" | "none" | installable, reboot, awaiting, released, manual or none. |
kev | string | 1 for only CVEs known to be exploited (CISA KEV). |
device_id | string | Only this device. |
package | string | Only this package. |
search | string | Text to search for. |
Response 200
| Field | Type | Description |
|---|---|---|
packages | array of object | |
packages[].package | string | |
packages[].devices | integer | |
packages[].cves | integer | |
packages[].findings | integer | |
packages[].worst | any | |
packages[].kev | boolean | |
packages[].epss | number, or null | |
packages[].cvss | number, or null | |
packages[].installable | number | |
packages[].reboot | number | |
packages[].awaiting | number | |
packages[].released | number | |
packages[].manual | number | |
packages[].fixed_version | string, or null | |
packages[].first_seen | string (date-time) | |
packages[].critical | number | |
packages[].high | number | |
packages[].medium | number | |
packages[].low | number | |
packages[].ticketed | number | |
packages[].oldest_published | any |
Example response
JSON
{
"packages": [
{
"package": "string",
"devices": 1,
"cves": 1,
"findings": 1,
"worst": null,
"kev": false,
"epss": 12.5,
"cvss": 12.5,
"installable": 12.5,
"reboot": 12.5,
"awaiting": 12.5,
"released": 12.5,
"manual": 12.5,
"fixed_version": "string",
"first_seen": "2026-11-12T09:30:00.000Z",
"critical": 12.5,
"high": 12.5,
"medium": 12.5,
"low": 12.5,
"ticketed": 12.5,
"oldest_published": null
}
]
}Example request
JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/warden/api/vulnerabilities', {
method: 'GET',
credentials: 'include',
});
const data = await res.json();#One package's findings across devices
GET
/api/vulnerabilities/:package- Address
https://<your-org>.brambleit.cloud/warden/api/vulnerabilities/:package- Requires
- Signed-in browser session (the
sso_session/session_idcookies from Bramble sign-in).
Licence: Warden.
Path parameters
| Name | Type | Description |
|---|---|---|
packagerequired | string |
Response 200
| Field | Type | Description |
|---|---|---|
package | any | |
cves | array of any | |
devices | array of any |
Example response
JSON
{
"package": null,
"cves": [],
"devices": []
}Example request
JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/warden/api/vulnerabilities/string', {
method: 'GET',
credentials: 'include',
});
const data = await res.json();#List findings
GET
/api/findingsIndividual findings (package, device, CVE). Takes the same filters as the vulnerabilities list.
- Address
https://<your-org>.brambleit.cloud/warden/api/findings- Requires
- Signed-in browser session (the
sso_session/session_idcookies from Bramble sign-in).
Licence: Warden.
Query parameters
| Name | Type | Description |
|---|---|---|
status | string: "open" | "accepted" | "false_positive" | "resolved" | |
severity | any | |
fix_state | string: "installable" | "reboot" | "awaiting" | "released" | "manual" | "none" | |
kev | string | |
device_id | string | |
package | string | |
search | string |
Response 200
| Field | Type | Description |
|---|---|---|
findings | array of object | |
findings[].id | integer | |
findings[].tenant_id | integer | |
findings[].device_id | string | |
findings[].package | string | |
findings[].binaries | string, or null | |
findings[].installed_version | string, or null | |
findings[].fixed_version | string, or null | |
findings[].fix_state | string: "installable" | "reboot" | "awaiting" | "released" | "manual" | "none" | |
findings[].vuln_id | string | |
findings[].cve_id | string | |
findings[].severity | string: "critical" | "high" | "medium" | "low" | "none" | |
findings[].distro_priority | string, or null | |
findings[].cvss_score | number, or null | |
findings[].kev | boolean | |
findings[].epss | number, or null | |
findings[].status | string: "open" | "resolved" | "accepted" | "false_positive" | |
findings[].status_note | string, or null | |
findings[].status_by | string, or null | |
findings[].status_at | string (date-time), or null | |
findings[].first_seen | string (date-time) | |
findings[].last_seen | string (date-time) | |
findings[].resolved_at | string (date-time), or null | |
findings[].ticket_link_id | integer, or null | |
findings[].summary | any |
Example response
JSON
{
"findings": [
{
"id": 42,
"tenant_id": 1,
"device_id": "string",
"package": "string",
"binaries": "string",
"installed_version": "string",
"fixed_version": "string",
"fix_state": "installable",
"vuln_id": "string",
"cve_id": "string",
"severity": "critical",
"distro_priority": "string",
"cvss_score": 12.5,
"kev": false,
"epss": 12.5,
"status": "open",
"status_note": "active",
"status_by": "active",
"status_at": "2026-11-12T09:30:00.000Z",
"first_seen": "2026-11-12T09:30:00.000Z",
"last_seen": "2026-11-12T09:30:00.000Z",
"resolved_at": "2026-11-12T09:30:00.000Z",
"ticket_link_id": 7,
"summary": null
}
]
}Example request
JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/warden/api/findings', {
method: 'GET',
credentials: 'include',
});
const data = await res.json();#Accept or dismiss findings
POST
/api/findings/status- Address
https://<your-org>.brambleit.cloud/warden/api/findings/status- Requires
- Signed-in browser session (the
sso_session/session_idcookies from Bramble sign-in).
Licence: Warden.
Request body JSON
| Name | Type | Description |
|---|---|---|
ids | array of any | Finding ids. |
status | string: "open" | "accepted" | "false_positive" | open, accepted (a known, accepted risk) or false_positive. |
note | string | Why. |
Response 200
| Field | Type | Description |
|---|---|---|
updated | integer |
Example response
JSON
{
"updated": 1
}Example request
JavaScript
// From a page served by Bramble (uses the signed-in session)
const res = await fetch('/warden/api/findings/status', {
method: 'POST',
credentials: 'include',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({"ids":[],"status":"open","note":"string"}),
});
const data = await res.json();Was this page helpful?
Thanks for your feedback.