Browse documentation
API reference.
JSON over HTTPS under /api/v2. Request bodies are strictly validated — unknown fields are rejected and lengths are capped — and every organisation-scoped call carries the organisation header.
Authentication
Send a bearer token and your organisation id on every organisation-scoped request. The server takes the acting organisation from the verified session and this header — never from a query parameter.
Authorization: Bearer <token> X-Organization-ID: <your-organisation-id> Content-Type: application/json
Ways to obtain a bearer token:
- Device flow — the OAuth 2.0 device authorisation grant used by the CLI:
POST /api/v2/auth/device/code, approve in the browser, then pollPOST /api/v2/auth/device/token. - Pipeline OIDC — exchange your CI provider's OIDC token at
POST /api/v2/ci/pipeline/token-oidc. - Console sessions — short-lived signed access tokens, with the refresh token held in an HttpOnly cookie out of reach of page scripts.
Signed API-key requests
Endpoints that accept machine credentials, such as the findings list, also take an API key. An API-key request is signed rather than sent as a bearer secret: compute an HMAC-SHA256 with the key secret over the method, the path (without the query string), the Date header, a fresh nonce and the SHA-256 of the body, joined by newlines, and send the hex digest.
Authorization: SV-KEY <key-id>:<hex HMAC-SHA256 signature> Date: Mon, 05 Oct 2026 09:12:41 GMT # within five minutes of server time X-SV-Nonce: <unique value per request> # never reused # string to sign GET\n/api/v2/findings\n<Date>\n<X-SV-Nonce>\n<sha256 hex of the request body>
Core endpoints
| Method | Path | Description |
|---|---|---|
| POST | /api/v2/scans | Create a scan for a repository, image or other target. Omit tools to use the automatic tool plan. |
| GET | /api/v2/scans/{scan_id} | Scan status and per-tool outcomes. |
| GET | /api/v2/scans/{scan_id}/sbom/cyclonedx | CycloneDX SBOM produced by the scan. |
| GET | /api/v2/scan-requests/{id}/timeline | Progress and state changes for a multi-target scan request. |
| GET | /api/v2/findings | List findings with severity, status and scope filters; cursor pagination. |
| GET | /api/v2/findings/{id}/detail | Finding with typed evidence (code span, dataflow path, dependency path, config path, request trace, exploit proof, artifact hash). |
| GET | /api/v2/findings/{id}/lineage | Lineage view: satisfied hops with provenance, missing hops with a reason, and conflicts. |
| POST | /api/v2/findings/{id}/disposition | Record a human verdict, with a mandatory reason code from GET /api/v2/disposition/reason-codes. |
| POST | /api/v2/findings/{id}/verify-fixed | Request re-verification of a fix. |
| POST | /api/v2/findings/{id}/fix-pr | Open an advisory fix pull request from a remediation template. |
| GET | /api/v2/sca/dependencies | Dependencies with reachability hints and licences. |
| POST | /api/v2/sca/sboms/generate | Generate an SBOM for a target in CycloneDX or SPDX. |
| GET | /api/v2/sca/sboms | List SBOMs held for your organisation. |
| GET | /api/v2/images | Images by registry, with per-digest results and the workloads running them. |
| POST | /api/v2/images/{id}/scan | Scan an image by digest. |
| GET | /api/v2/repositories/repos/{id}/overview | Repository coverage, recent scans and settings. |
| POST | /api/v2/ci/gate/evaluate | Evaluate the security gate for a pipeline run; returns allow or deny with reasons. |
| POST | /api/v2/ci/{scan_id}/break-glass | Audited override of a gate by an authorised principal. |
Further endpoints cover cloud accounts and posture, DAST, IAST, integrations, ticketing, governance policies and the policy builder, frameworks and GRC, the auditor portal, evidence trail, risk graph, VEX and reports. An OpenAPI document for your deployment is available on request.
Errors
401— missing or invalid credentials.403— authenticated, but not permitted for this organisation or action.422— validation failed; the body names the offending field. Unknown fields are rejected.429— rate-limited; back off and retry.500— unexpected server error, returned with a correlation id only.
Business errors return a structured body with a stable error_code, a category, a readable message, an actionable user_hint, a correlation_id and a retryable flag.
correlation_id from the response; it lets us trace the request end to end.Rate limits and quotas
Per-organisation quotas apply to write operations, and pull-request comment posting is rate-limited per organisation. A rate-limited request returns 429 — back off and retry. Contact us if your workload needs higher limits.
Pagination
The findings list takes limit (1–200, default 50) and a cursor. Each response carries next_cursor while more rows exist; pass it back unchanged to fetch the next page. Cursors are bound to your organisation. Offset paging is not supported.
curl -s "https://app.securityvault.io/api/v2/findings?limit=200&severity=critical" \ -H "Authorization: Bearer $TOKEN" -H "X-Organization-ID: $ORG_ID"
Hostnames
Every endpoint is served from one hostname — app.securityvault.io, or your own host when self-hosted. Clients do not need to route different calls to different hosts.
Next steps
- CLI reference — the same API from the command line.
- Webhooks — receive signed events instead of polling.
- Security overview — how the platform protects the data behind the API.