Skip to content
ES EN

Uploading Findings

The findings endpoint is the entry point for all scanner-generated findings. The CLI uses it automatically when running gerion scan ... --push.

Obtain a JWT first using the M2M authentication endpoint.

POST https://api.gerion.dev/api/v1/findings
Authorization: Bearer <jwt>
Content-Type: application/json

The JWT must have been generated with an API Key that has the write:findings permission.

{
"metadata": {
"repository_name": "my-org/my-repo",
"branch_name": "main",
"scan_type": "SECRETS",
"build_id": "build-2026-001",
"code_path": "/src",
"commit_hash": "abc123def456",
"commit_author": "dev@example.com"
},
"findings": [
{
"finding_id": "secret-001",
"title": "Exposed AWS Access Key",
"severity": "CRITICAL",
"scan_type": "SECRETS",
"repository_name": "my-org/my-repo",
"branch_name": "main",
"build_id": "build-2026-001",
"code_path": "/src",
"active": true,
"mitigated": false,
"false_positive": false,
"creation_date": "2026-03-19T10:00:00Z",
"last_update_date": "2026-03-19T10:00:00Z",
"file_path": "config/deploy.sh",
"line_number": 42
}
]
}

| Field | Type | Required | Description | |-------|------|----------|-------------| | repository_name | string | ✓ | Repository name (org/repo). | | branch_name | string | ✓ | Scanned branch. | | build_id | string | ✓ | Build/pipeline identifier. | | code_path | string | ✓ | Root path of the scanned code. | | scan_type | string | — | SAST, SCA, SECRETS, IAC. Inferred from findings if omitted. | | commit_hash | string | — | Hash of the scanned commit. | | commit_author | string | — | Commit author. |

| Field | Type | Required | Description | |-------|------|----------|-------------| | finding_id | string | ✓ | Unique finding ID (generated by the scanner). Used for deduplication. | | title | string | ✓ | Descriptive title. | | severity | string | — | CRITICAL, HIGH, MEDIUM, LOW. Normalized to uppercase. | | scan_type | string | — | SAST, SCA, SECRETS, IAC. | | repository_name | string | ✓ | Must match metadata.repository_name. | | branch_name | string | ✓ | Finding branch. | | build_id | string | ✓ | Build in which it was detected. | | code_path | string | ✓ | Project root path. | | active | bool | ✓ | true if the finding is still present. | | mitigated | bool | ✓ | true if mitigated in this scan. | | false_positive | bool | ✓ | true if marked as false positive. | | creation_date | string | ✓ | ISO 8601. | | last_update_date | string | ✓ | ISO 8601. | | file_path | string | — | Path of the affected file. | | line_number | int | — | Finding line number. | | cve | string | — | Related CVE (e.g. CVE-2021-44228). | | cwe | string[] | — | List of related CWEs. | | description | string | — | Detailed description. | | component_name | string | — | Affected component (SCA/IAC). | | component_version | string | — | Component version. | | component_fix | string | — | Version that fixes the issue. |

{
"success": true,
"message": "Findings processed successfully",
"result": {
"created": 3,
"updated": 1,
"mitigated": 0,
"duplicates": 2
}
}

The server deduplicates by (finding_id, organization_id, repository_name, branch_name, scan_type). If a finding already exists, it is updated rather than created. Findings present in previous runs but absent from the current payload are automatically marked as mitigated.

| Code | Cause | |------|-------| | 401 | Missing, expired, or invalid JWT. | | 403 | JWT does not have the write:findings permission. | | 422 | Invalid or missing body fields. | | 429 | Rate limit exceeded (30 req/s, burst 10). |