Returns one scan together with every finding on it, so the detail view is one…
Returns one scan together with every finding on it, so the detail view is one round-trip rather than a list call per scan.
GET /v1/security/scans/{id}
| Address | https://api.hanzo.ai/v1/security/scans/{id} |
| Method | GET |
| Operation | get_security_scans_by_id |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Returns one scan together with every finding on it, so the detail view is one round-trip rather than a list call per scan. The findings carry masked previews and fingerprints, never secrets.
Scoped to the caller's org: a scan id belonging to another org is the same 404 as an id that never existed, so a ruleset learns nothing about what exists elsewhere. No validated org is refused.
Request
1 field.
| Field | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | yes | ID is the scan the URL names. |
Response
| Status | Body | Meaning |
|---|---|---|
200 | scanDetail | ok |
200 body — 21 fields.
| Field | In | Type | Always | Description |
|---|---|---|---|---|
findings | body | findingView[] | — | Findings is every finding on that scan, so the detail view is one round-trip. |
findings[].createdAt | body | integer | — | CreatedAt is when the finding was recorded, in Unix milliseconds. |
findings[].fingerprint | body | string | — | Fingerprint is the SHA-256 of the raw secret. |
findings[].id | body | string | — | ID addresses this finding. |
findings[].line | body | integer | — | Line is where in that file. |
findings[].path | body | string | — | Path is the file the secret was found in. |
findings[].preview | body | string | — | Preview is the secret MASKED — first and last characters kept, the middle starred — so a reviewer can recognise it without it being disclosed. |
findings[].ruleId | body | string | — | RuleID is the detection rule that fired. |
findings[].ruleName | body | string | — | RuleName is that rule's human name. |
findings[].scanId | body | string | — | ScanID is the scan that produced it. |
findings[].severity | body | string | — | Severity ranks the finding: critical, high, medium or low. |
scan | body | scanView | — | |
scan.createdAt | body | integer | — | CreatedAt is when the scan ran, in Unix milliseconds. |
scan.critical | body | integer | — | Critical is how many findings carry the highest severity. |
scan.files | body | integer | — | Files is how many files the scan read. |
scan.findings | body | integer | — | Findings is how many secrets fired across them. |
scan.high | body | integer | — | High is how many findings rank high. |
scan.id | body | string | — | ID addresses this scan and every finding on it. |
scan.low | body | integer | — | Low is how many findings rank low. |
scan.medium | body | integer | — | Medium is how many findings rank medium. |
scan.project | body | string | — | Project is the sub-scope the scan was filed under. |
Failure carries the platform error shape — see Errors.
Examples
hanzo security scans get <id>import { Configuration, SecurityApi } from 'hanzoai';
const api = new SecurityApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getSecurityScansById({ id: 'id' });from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import SecurityApi
client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = SecurityApi(client).get_security_scans_by_id(id='id')cfg := cloud.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := cloud.NewAPIClient(cfg)
resp, _, err := client.SecurityAPI.GetSecurityScansById(context.Background()).Execute()
if err != nil {
return err
}use hanzo_cloud::apis::{configuration::Configuration, security_api};
let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();
let result = security_api::get_security_scans_by_id(&cfg, Default::default()).await?;import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.SecurityApi;
ApiClient client = new ApiClient();
client.setRequestInterceptor(b -> b.header("Authorization", "Bearer " + System.getenv("HANZO_API_KEY")));
var result = new SecurityApi(client).getSecurityScansById();curl https://api.hanzo.ai/v1/security/scans/<id> \
-H "Authorization: Bearer $HANZO_API_KEY"The door reaches security through the security tool, which names its 7 operations with its own verbs — this one among them, under a name only the door declares. describe explains any of them:
curl -X POST https://api.hanzo.ai/v1/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe",
"arguments": {
"op": "list_security_findings"
}
}
}'How is this guide?